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: I89669c1cbdffdc76ed6d0ded76167607c5590ef5
This commit is contained in:
@@ -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() {}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user