Merge "Translate TextView content description if exist" into sc-dev am: 86d3f3deae

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14543285

Change-Id: I36b4459cb4cfd25a8cdd36e8bb7ca905e2035941
This commit is contained in:
Joanne Chung
2021-05-20 06:02:51 +00:00
committed by Automerger Merge Worker
3 changed files with 41 additions and 3 deletions

View File

@@ -36,7 +36,7 @@ import java.util.Set;
* be used by {@link android.service.translation.TranslationService}.
*/
@DataClass(genBuilder = false, genToString = true, genEqualsHashCode = true, genGetters = false,
genHiddenConstructor = true)
genHiddenConstructor = true, genHiddenConstDefs = true)
public final class ViewTranslationRequest implements Parcelable {
/**
@@ -45,6 +45,14 @@ public final class ViewTranslationRequest implements Parcelable {
*/
public static final String ID_TEXT = "android:text";
/**
* Constant id for the default view content description to be translated. This is used by
* {@link Builder#setValue(String, TranslationRequestValue)}.
*
* @hide
*/
public static final String ID_CONTENT_DESCRIPTION = "android:content_description";
/**
* The {@link AutofillId} of the view associated with this request.
*/
@@ -191,6 +199,15 @@ public final class ViewTranslationRequest implements Parcelable {
//@formatter:off
/** @hide */
@android.annotation.StringDef(prefix = "ID_", value = {
ID_TEXT,
ID_CONTENT_DESCRIPTION
})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE)
@DataClass.Generated.Member
public @interface Id {}
/**
* Creates a new ViewTranslationRequest.
*
@@ -303,10 +320,10 @@ public final class ViewTranslationRequest implements Parcelable {
};
@DataClass.Generated(
time = 1620259482911L,
time = 1621230365943L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/view/translation/ViewTranslationRequest.java",
inputSignatures = "public static final java.lang.String ID_TEXT\nprivate final @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate final @android.annotation.NonNull @com.android.internal.util.DataClass.PluralOf(\"translationRequestValue\") java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\npublic @android.annotation.NonNull android.view.translation.TranslationRequestValue getValue(java.lang.String)\npublic @android.annotation.NonNull java.util.Set<java.lang.String> getKeys()\npublic @android.annotation.NonNull android.view.autofill.AutofillId getAutofillId()\nprivate static java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> defaultTranslationRequestValues()\nclass ViewTranslationRequest extends java.lang.Object implements [android.os.Parcelable]\nprivate @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate @android.annotation.NonNull java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\nprivate long mBuilderFieldsSet\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.view.translation.ViewTranslationRequest.Builder setValue(java.lang.String,android.view.translation.TranslationRequestValue)\npublic @android.annotation.NonNull android.view.translation.ViewTranslationRequest build()\n android.view.translation.ViewTranslationRequest.Builder setTranslationRequestValues(java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue>)\nprivate void checkNotUsed()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=false, genToString=true, genEqualsHashCode=true, genGetters=false, genHiddenConstructor=true)")
inputSignatures = "public static final java.lang.String ID_TEXT\npublic static final java.lang.String ID_CONTENT_DESCRIPTION\nprivate final @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate final @android.annotation.NonNull @com.android.internal.util.DataClass.PluralOf(\"translationRequestValue\") java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\npublic @android.annotation.NonNull android.view.translation.TranslationRequestValue getValue(java.lang.String)\npublic @android.annotation.NonNull java.util.Set<java.lang.String> getKeys()\npublic @android.annotation.NonNull android.view.autofill.AutofillId getAutofillId()\nprivate static java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> defaultTranslationRequestValues()\nclass ViewTranslationRequest extends java.lang.Object implements [android.os.Parcelable]\nprivate @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate @android.annotation.NonNull java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\nprivate long mBuilderFieldsSet\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.view.translation.ViewTranslationRequest.Builder setValue(java.lang.String,android.view.translation.TranslationRequestValue)\npublic @android.annotation.NonNull android.view.translation.ViewTranslationRequest build()\n android.view.translation.ViewTranslationRequest.Builder setTranslationRequestValues(java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue>)\nprivate void checkNotUsed()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=false, genToString=true, genEqualsHashCode=true, genGetters=false, genHiddenConstructor=true, genHiddenConstDefs=true)")
@Deprecated
private void __metadata() {}

View File

@@ -13924,6 +13924,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// TODO(b/176488462): apply the view's important for translation
requestBuilder.setValue(ViewTranslationRequest.ID_TEXT,
TranslationRequestValue.forText(mText));
if (!TextUtils.isEmpty(getContentDescription())) {
requestBuilder.setValue(ViewTranslationRequest.ID_CONTENT_DESCRIPTION,
TranslationRequestValue.forText(getContentDescription()));
}
}
requestsCollector.accept(requestBuilder.build());
}

View File

@@ -19,11 +19,13 @@ package android.widget;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Build;
import android.text.TextUtils;
import android.text.method.TranslationTransformationMethod;
import android.util.Log;
import android.view.View;
import android.view.translation.UiTranslationManager;
import android.view.translation.ViewTranslationCallback;
import android.view.translation.ViewTranslationRequest;
import android.view.translation.ViewTranslationResponse;
/**
@@ -46,6 +48,8 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
private boolean mIsTextPaddingEnabled = false;
private CharSequence mPaddedText;
private CharSequence mContentDescription;
/**
* Invoked by the platform when receiving the successful {@link ViewTranslationResponse} for the
* view that provides the translatable information by {@link View#createTranslationRequest} and
@@ -86,6 +90,15 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
}
if (mTranslationTransformation != null) {
((TextView) view).setTransformationMethod(mTranslationTransformation);
ViewTranslationResponse response = view.getViewTranslationResponse();
if (response.getKeys().contains(ViewTranslationRequest.ID_CONTENT_DESCRIPTION)) {
CharSequence translatedContentDescription =
response.getValue(ViewTranslationRequest.ID_CONTENT_DESCRIPTION).getText();
if (!TextUtils.isEmpty(translatedContentDescription)) {
mContentDescription = view.getContentDescription();
view.setContentDescription(translatedContentDescription);
}
}
} else {
if (DEBUG) {
// TODO(b/182433547): remove before S release
@@ -111,6 +124,9 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
if (mTranslationTransformation != null) {
((TextView) view).setTransformationMethod(
mTranslationTransformation.getOriginalTransformationMethod());
if (!TextUtils.isEmpty(mContentDescription)) {
view.setContentDescription(mContentDescription);
}
} else {
if (DEBUG) {
// TODO(b/182433547): remove before S release
@@ -131,6 +147,7 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
onHideTranslation(view);
clearTranslationTransformation();
mPaddedText = null;
mContentDescription = null;
} else {
if (DEBUG) {
// TODO(b/182433547): remove before S release