1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.view.translation; 18 19 import android.annotation.IntDef; 20 import android.annotation.NonNull; 21 import android.os.Parcel; 22 import android.os.Parcelable; 23 import android.service.translation.TranslationService; 24 import android.util.SparseArray; 25 26 import com.android.internal.util.DataClass; 27 28 import java.lang.annotation.Retention; 29 import java.lang.annotation.RetentionPolicy; 30 import java.util.Objects; 31 32 /** 33 * Response from the {@link TranslationService}, which contains the translated result. 34 */ 35 @DataClass(genBuilder = true, genToString = true, genHiddenConstDefs = true) 36 public final class TranslationResponse implements Parcelable { 37 38 /** 39 * The {@link TranslationService} was successful in translating. 40 */ 41 public static final int TRANSLATION_STATUS_SUCCESS = 0; 42 /** 43 * The {@link TranslationService} returned unknown translation result. 44 */ 45 public static final int TRANSLATION_STATUS_UNKNOWN_ERROR = 1; 46 /** 47 * The languages of the request is not available to be translated. 48 */ 49 public static final int TRANSLATION_STATUS_CONTEXT_UNSUPPORTED = 2; 50 51 /** 52 * The translation result status code. 53 */ 54 private final @TranslationStatus int mTranslationStatus; 55 56 /** 57 * List of translated {@link TranslationResponseValue}s. The key of entries in this list 58 * will be their respective index in {@link TranslationRequest#getTranslationRequestValues()}. 59 */ 60 @NonNull 61 private final SparseArray<TranslationResponseValue> mTranslationResponseValues; 62 63 /** 64 * List of translated {@link ViewTranslationResponse}s. The key of entries in this list 65 * will be their respective index in {@link TranslationRequest#getViewTranslationRequests()}. 66 */ 67 @NonNull 68 private final SparseArray<ViewTranslationResponse> mViewTranslationResponses; 69 70 /** 71 * Whether this response contains complete translated values, or is the final response in a 72 * series of partial responses. 73 * 74 * <p>This is {@code true} by default.</p> 75 */ 76 private final boolean mFinalResponse; 77 78 abstract static class BaseBuilder { 79 80 /** 81 * @removed Use {@link Builder#Builder(int)}. 82 * @hide 83 */ 84 @Deprecated setTranslationStatus(@ranslationStatus int value)85 public abstract Builder setTranslationStatus(@TranslationStatus int value); 86 87 /** 88 * Adds {@link TranslationResponseValue} to be translated. The input 89 * TranslationResponseValue format should match those provided by the 90 * {@link android.view.translation.Translator}'s targetSpec. 91 * 92 * @param value the translated value. 93 * @return this Builder. 94 */ 95 @NonNull 96 @SuppressWarnings("MissingGetterMatchingBuilder") setTranslationResponseValue(int index, @NonNull TranslationResponseValue value)97 public Builder setTranslationResponseValue(int index, 98 @NonNull TranslationResponseValue value) { 99 Objects.requireNonNull(value, "value should not be null"); 100 final Builder builder = (Builder) this; 101 102 if (builder.mTranslationResponseValues == null) { 103 builder.setTranslationResponseValues(new SparseArray<>()); 104 } 105 builder.mTranslationResponseValues.put(index, value); 106 return builder; 107 } 108 109 /** 110 * Sets the list of {@link ViewTranslationResponse} to be translated. The input 111 * ViewTranslationResponse contains {@link TranslationResponseValue}s whose format should 112 * match those provided by the {@link android.view.translation.Translator}'s targetSpec. 113 * 114 * @param response the translated response. 115 * @return this Builder. 116 */ 117 @NonNull 118 @SuppressWarnings("MissingGetterMatchingBuilder") setViewTranslationResponse(int index, @NonNull ViewTranslationResponse response)119 public Builder setViewTranslationResponse(int index, 120 @NonNull ViewTranslationResponse response) { 121 Objects.requireNonNull(response, "value should not be null"); 122 final Builder builder = (Builder) this; 123 124 if (builder.mViewTranslationResponses == null) { 125 builder.setViewTranslationResponses(new SparseArray<>()); 126 } 127 builder.mViewTranslationResponses.put(index, response); 128 return builder; 129 } 130 } 131 defaultTranslationResponseValues()132 private static SparseArray<TranslationResponseValue> defaultTranslationResponseValues() { 133 return new SparseArray<>(); 134 } 135 defaultViewTranslationResponses()136 private static SparseArray<ViewTranslationResponse> defaultViewTranslationResponses() { 137 return new SparseArray<>(); 138 } 139 defaultFinalResponse()140 private static boolean defaultFinalResponse() { 141 return true; 142 } 143 144 145 146 147 // Code below generated by codegen v1.0.23. 148 // 149 // DO NOT MODIFY! 150 // CHECKSTYLE:OFF Generated code 151 // 152 // To regenerate run: 153 // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/view/translation/TranslationResponse.java 154 // 155 // To exclude the generated code from IntelliJ auto-formatting enable (one-time): 156 // Settings > Editor > Code Style > Formatter Control 157 //@formatter:off 158 159 160 /** @hide */ 161 @IntDef(prefix = "TRANSLATION_STATUS_", value = { 162 TRANSLATION_STATUS_SUCCESS, 163 TRANSLATION_STATUS_UNKNOWN_ERROR, 164 TRANSLATION_STATUS_CONTEXT_UNSUPPORTED 165 }) 166 @Retention(RetentionPolicy.SOURCE) 167 @DataClass.Generated.Member 168 public @interface TranslationStatus {} 169 170 /** @hide */ 171 @DataClass.Generated.Member translationStatusToString(@ranslationStatus int value)172 public static String translationStatusToString(@TranslationStatus int value) { 173 switch (value) { 174 case TRANSLATION_STATUS_SUCCESS: 175 return "TRANSLATION_STATUS_SUCCESS"; 176 case TRANSLATION_STATUS_UNKNOWN_ERROR: 177 return "TRANSLATION_STATUS_UNKNOWN_ERROR"; 178 case TRANSLATION_STATUS_CONTEXT_UNSUPPORTED: 179 return "TRANSLATION_STATUS_CONTEXT_UNSUPPORTED"; 180 default: return Integer.toHexString(value); 181 } 182 } 183 184 @DataClass.Generated.Member TranslationResponse( @ranslationStatus int translationStatus, @NonNull SparseArray<TranslationResponseValue> translationResponseValues, @NonNull SparseArray<ViewTranslationResponse> viewTranslationResponses, boolean finalResponse)185 /* package-private */ TranslationResponse( 186 @TranslationStatus int translationStatus, 187 @NonNull SparseArray<TranslationResponseValue> translationResponseValues, 188 @NonNull SparseArray<ViewTranslationResponse> viewTranslationResponses, 189 boolean finalResponse) { 190 this.mTranslationStatus = translationStatus; 191 192 if (!(mTranslationStatus == TRANSLATION_STATUS_SUCCESS) 193 && !(mTranslationStatus == TRANSLATION_STATUS_UNKNOWN_ERROR) 194 && !(mTranslationStatus == TRANSLATION_STATUS_CONTEXT_UNSUPPORTED)) { 195 throw new java.lang.IllegalArgumentException( 196 "translationStatus was " + mTranslationStatus + " but must be one of: " 197 + "TRANSLATION_STATUS_SUCCESS(" + TRANSLATION_STATUS_SUCCESS + "), " 198 + "TRANSLATION_STATUS_UNKNOWN_ERROR(" + TRANSLATION_STATUS_UNKNOWN_ERROR + "), " 199 + "TRANSLATION_STATUS_CONTEXT_UNSUPPORTED(" + TRANSLATION_STATUS_CONTEXT_UNSUPPORTED + ")"); 200 } 201 202 this.mTranslationResponseValues = translationResponseValues; 203 com.android.internal.util.AnnotationValidations.validate( 204 NonNull.class, null, mTranslationResponseValues); 205 this.mViewTranslationResponses = viewTranslationResponses; 206 com.android.internal.util.AnnotationValidations.validate( 207 NonNull.class, null, mViewTranslationResponses); 208 this.mFinalResponse = finalResponse; 209 210 // onConstructed(); // You can define this method to get a callback 211 } 212 213 /** 214 * The translation result status code. 215 */ 216 @DataClass.Generated.Member getTranslationStatus()217 public @TranslationStatus int getTranslationStatus() { 218 return mTranslationStatus; 219 } 220 221 /** 222 * List of translated {@link TranslationResponseValue}s. The key of entries in this list 223 * will be their respective index in {@link TranslationRequest#getTranslationRequestValues()}. 224 */ 225 @DataClass.Generated.Member getTranslationResponseValues()226 public @NonNull SparseArray<TranslationResponseValue> getTranslationResponseValues() { 227 return mTranslationResponseValues; 228 } 229 230 /** 231 * List of translated {@link ViewTranslationResponse}s. The key of entries in this list 232 * will be their respective index in {@link TranslationRequest#getViewTranslationRequests()}. 233 */ 234 @DataClass.Generated.Member getViewTranslationResponses()235 public @NonNull SparseArray<ViewTranslationResponse> getViewTranslationResponses() { 236 return mViewTranslationResponses; 237 } 238 239 /** 240 * Whether this response contains complete translated values, or is the final response in a 241 * series of partial responses. 242 * 243 * <p>This is {@code true} by default.</p> 244 */ 245 @DataClass.Generated.Member isFinalResponse()246 public boolean isFinalResponse() { 247 return mFinalResponse; 248 } 249 250 @Override 251 @DataClass.Generated.Member toString()252 public String toString() { 253 // You can override field toString logic by defining methods like: 254 // String fieldNameToString() { ... } 255 256 return "TranslationResponse { " + 257 "translationStatus = " + translationStatusToString(mTranslationStatus) + ", " + 258 "translationResponseValues = " + mTranslationResponseValues + ", " + 259 "viewTranslationResponses = " + mViewTranslationResponses + ", " + 260 "finalResponse = " + mFinalResponse + 261 " }"; 262 } 263 264 @Override 265 @DataClass.Generated.Member writeToParcel(@onNull Parcel dest, int flags)266 public void writeToParcel(@NonNull Parcel dest, int flags) { 267 // You can override field parcelling by defining methods like: 268 // void parcelFieldName(Parcel dest, int flags) { ... } 269 270 byte flg = 0; 271 if (mFinalResponse) flg |= 0x8; 272 dest.writeByte(flg); 273 dest.writeInt(mTranslationStatus); 274 dest.writeSparseArray(mTranslationResponseValues); 275 dest.writeSparseArray(mViewTranslationResponses); 276 } 277 278 @Override 279 @DataClass.Generated.Member describeContents()280 public int describeContents() { return 0; } 281 282 /** @hide */ 283 @SuppressWarnings({"unchecked", "RedundantCast"}) 284 @DataClass.Generated.Member TranslationResponse(@onNull Parcel in)285 /* package-private */ TranslationResponse(@NonNull Parcel in) { 286 // You can override field unparcelling by defining methods like: 287 // static FieldType unparcelFieldName(Parcel in) { ... } 288 289 byte flg = in.readByte(); 290 boolean finalResponse = (flg & 0x8) != 0; 291 int translationStatus = in.readInt(); 292 SparseArray<TranslationResponseValue> translationResponseValues = (SparseArray) in.readSparseArray(TranslationResponseValue.class.getClassLoader()); 293 SparseArray<ViewTranslationResponse> viewTranslationResponses = (SparseArray) in.readSparseArray(ViewTranslationResponse.class.getClassLoader()); 294 295 this.mTranslationStatus = translationStatus; 296 297 if (!(mTranslationStatus == TRANSLATION_STATUS_SUCCESS) 298 && !(mTranslationStatus == TRANSLATION_STATUS_UNKNOWN_ERROR) 299 && !(mTranslationStatus == TRANSLATION_STATUS_CONTEXT_UNSUPPORTED)) { 300 throw new java.lang.IllegalArgumentException( 301 "translationStatus was " + mTranslationStatus + " but must be one of: " 302 + "TRANSLATION_STATUS_SUCCESS(" + TRANSLATION_STATUS_SUCCESS + "), " 303 + "TRANSLATION_STATUS_UNKNOWN_ERROR(" + TRANSLATION_STATUS_UNKNOWN_ERROR + "), " 304 + "TRANSLATION_STATUS_CONTEXT_UNSUPPORTED(" + TRANSLATION_STATUS_CONTEXT_UNSUPPORTED + ")"); 305 } 306 307 this.mTranslationResponseValues = translationResponseValues; 308 com.android.internal.util.AnnotationValidations.validate( 309 NonNull.class, null, mTranslationResponseValues); 310 this.mViewTranslationResponses = viewTranslationResponses; 311 com.android.internal.util.AnnotationValidations.validate( 312 NonNull.class, null, mViewTranslationResponses); 313 this.mFinalResponse = finalResponse; 314 315 // onConstructed(); // You can define this method to get a callback 316 } 317 318 @DataClass.Generated.Member 319 public static final @NonNull Parcelable.Creator<TranslationResponse> CREATOR 320 = new Parcelable.Creator<TranslationResponse>() { 321 @Override 322 public TranslationResponse[] newArray(int size) { 323 return new TranslationResponse[size]; 324 } 325 326 @Override 327 public TranslationResponse createFromParcel(@NonNull Parcel in) { 328 return new TranslationResponse(in); 329 } 330 }; 331 332 /** 333 * A builder for {@link TranslationResponse} 334 */ 335 @SuppressWarnings("WeakerAccess") 336 @DataClass.Generated.Member 337 public static final class Builder extends BaseBuilder { 338 339 private @TranslationStatus int mTranslationStatus; 340 private @NonNull SparseArray<TranslationResponseValue> mTranslationResponseValues; 341 private @NonNull SparseArray<ViewTranslationResponse> mViewTranslationResponses; 342 private boolean mFinalResponse; 343 344 private long mBuilderFieldsSet = 0L; 345 346 /** 347 * Creates a new Builder. 348 * 349 * @param translationStatus 350 * The translation result status code. 351 */ Builder( @ranslationStatus int translationStatus)352 public Builder( 353 @TranslationStatus int translationStatus) { 354 mTranslationStatus = translationStatus; 355 356 if (!(mTranslationStatus == TRANSLATION_STATUS_SUCCESS) 357 && !(mTranslationStatus == TRANSLATION_STATUS_UNKNOWN_ERROR) 358 && !(mTranslationStatus == TRANSLATION_STATUS_CONTEXT_UNSUPPORTED)) { 359 throw new java.lang.IllegalArgumentException( 360 "translationStatus was " + mTranslationStatus + " but must be one of: " 361 + "TRANSLATION_STATUS_SUCCESS(" + TRANSLATION_STATUS_SUCCESS + "), " 362 + "TRANSLATION_STATUS_UNKNOWN_ERROR(" + TRANSLATION_STATUS_UNKNOWN_ERROR + "), " 363 + "TRANSLATION_STATUS_CONTEXT_UNSUPPORTED(" + TRANSLATION_STATUS_CONTEXT_UNSUPPORTED + ")"); 364 } 365 366 } 367 368 /** 369 * The translation result status code. 370 * @removed 371 */ 372 @DataClass.Generated.Member 373 @Override 374 @Deprecated setTranslationStatus(@ranslationStatus int value)375 public @NonNull Builder setTranslationStatus(@TranslationStatus int value) { 376 checkNotUsed(); 377 mBuilderFieldsSet |= 0x1; 378 mTranslationStatus = value; 379 return this; 380 } 381 382 /** 383 * List of translated {@link TranslationResponseValue}s. The key of entries in this list 384 * will be their respective index in {@link TranslationRequest#getTranslationRequestValues()}. 385 */ 386 @DataClass.Generated.Member setTranslationResponseValues(@onNull SparseArray<TranslationResponseValue> value)387 public @NonNull Builder setTranslationResponseValues(@NonNull SparseArray<TranslationResponseValue> value) { 388 checkNotUsed(); 389 mBuilderFieldsSet |= 0x2; 390 mTranslationResponseValues = value; 391 return this; 392 } 393 394 /** 395 * List of translated {@link ViewTranslationResponse}s. The key of entries in this list 396 * will be their respective index in {@link TranslationRequest#getViewTranslationRequests()}. 397 */ 398 @DataClass.Generated.Member setViewTranslationResponses(@onNull SparseArray<ViewTranslationResponse> value)399 public @NonNull Builder setViewTranslationResponses(@NonNull SparseArray<ViewTranslationResponse> value) { 400 checkNotUsed(); 401 mBuilderFieldsSet |= 0x4; 402 mViewTranslationResponses = value; 403 return this; 404 } 405 406 /** 407 * Whether this response contains complete translated values, or is the final response in a 408 * series of partial responses. 409 * 410 * <p>This is {@code true} by default.</p> 411 */ 412 @DataClass.Generated.Member setFinalResponse(boolean value)413 public @NonNull Builder setFinalResponse(boolean value) { 414 checkNotUsed(); 415 mBuilderFieldsSet |= 0x8; 416 mFinalResponse = value; 417 return this; 418 } 419 420 /** Builds the instance. This builder should not be touched after calling this! */ build()421 public @NonNull TranslationResponse build() { 422 checkNotUsed(); 423 mBuilderFieldsSet |= 0x10; // Mark builder used 424 425 if ((mBuilderFieldsSet & 0x2) == 0) { 426 mTranslationResponseValues = defaultTranslationResponseValues(); 427 } 428 if ((mBuilderFieldsSet & 0x4) == 0) { 429 mViewTranslationResponses = defaultViewTranslationResponses(); 430 } 431 if ((mBuilderFieldsSet & 0x8) == 0) { 432 mFinalResponse = defaultFinalResponse(); 433 } 434 TranslationResponse o = new TranslationResponse( 435 mTranslationStatus, 436 mTranslationResponseValues, 437 mViewTranslationResponses, 438 mFinalResponse); 439 return o; 440 } 441 checkNotUsed()442 private void checkNotUsed() { 443 if ((mBuilderFieldsSet & 0x10) != 0) { 444 throw new IllegalStateException( 445 "This Builder should not be reused. Use a new Builder instance instead"); 446 } 447 } 448 } 449 450 @DataClass.Generated( 451 time = 1621972659130L, 452 codegenVersion = "1.0.23", 453 sourceFile = "frameworks/base/core/java/android/view/translation/TranslationResponse.java", 454 inputSignatures = "public static final int TRANSLATION_STATUS_SUCCESS\npublic static final int TRANSLATION_STATUS_UNKNOWN_ERROR\npublic static final int TRANSLATION_STATUS_CONTEXT_UNSUPPORTED\nprivate final @android.view.translation.TranslationResponse.TranslationStatus int mTranslationStatus\nprivate final @android.annotation.NonNull android.util.SparseArray<android.view.translation.TranslationResponseValue> mTranslationResponseValues\nprivate final @android.annotation.NonNull android.util.SparseArray<android.view.translation.ViewTranslationResponse> mViewTranslationResponses\nprivate final boolean mFinalResponse\nprivate static android.util.SparseArray<android.view.translation.TranslationResponseValue> defaultTranslationResponseValues()\nprivate static android.util.SparseArray<android.view.translation.ViewTranslationResponse> defaultViewTranslationResponses()\nprivate static boolean defaultFinalResponse()\nclass TranslationResponse extends java.lang.Object implements [android.os.Parcelable]\npublic abstract @java.lang.Deprecated android.view.translation.TranslationResponse.Builder setTranslationStatus(int)\npublic @android.annotation.NonNull @java.lang.SuppressWarnings android.view.translation.TranslationResponse.Builder setTranslationResponseValue(int,android.view.translation.TranslationResponseValue)\npublic @android.annotation.NonNull @java.lang.SuppressWarnings android.view.translation.TranslationResponse.Builder setViewTranslationResponse(int,android.view.translation.ViewTranslationResponse)\nclass BaseBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true, genToString=true, genHiddenConstDefs=true)\npublic abstract @java.lang.Deprecated android.view.translation.TranslationResponse.Builder setTranslationStatus(int)\npublic @android.annotation.NonNull @java.lang.SuppressWarnings android.view.translation.TranslationResponse.Builder setTranslationResponseValue(int,android.view.translation.TranslationResponseValue)\npublic @android.annotation.NonNull @java.lang.SuppressWarnings android.view.translation.TranslationResponse.Builder setViewTranslationResponse(int,android.view.translation.ViewTranslationResponse)\nclass BaseBuilder extends java.lang.Object implements []") 455 @Deprecated __metadata()456 private void __metadata() {} 457 458 459 //@formatter:on 460 // End of generated code 461 462 } 463