Merge "Translate TextView content description if exist" into sc-dev
This commit is contained in:
@@ -36,7 +36,7 @@ import java.util.Set;
|
|||||||
* be used by {@link android.service.translation.TranslationService}.
|
* be used by {@link android.service.translation.TranslationService}.
|
||||||
*/
|
*/
|
||||||
@DataClass(genBuilder = false, genToString = true, genEqualsHashCode = true, genGetters = false,
|
@DataClass(genBuilder = false, genToString = true, genEqualsHashCode = true, genGetters = false,
|
||||||
genHiddenConstructor = true)
|
genHiddenConstructor = true, genHiddenConstDefs = true)
|
||||||
public final class ViewTranslationRequest implements Parcelable {
|
public final class ViewTranslationRequest implements Parcelable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,6 +45,14 @@ public final class ViewTranslationRequest implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public static final String ID_TEXT = "android:text";
|
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.
|
* The {@link AutofillId} of the view associated with this request.
|
||||||
*/
|
*/
|
||||||
@@ -191,6 +199,15 @@ public final class ViewTranslationRequest implements Parcelable {
|
|||||||
//@formatter:off
|
//@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.
|
* Creates a new ViewTranslationRequest.
|
||||||
*
|
*
|
||||||
@@ -303,10 +320,10 @@ public final class ViewTranslationRequest implements Parcelable {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@DataClass.Generated(
|
@DataClass.Generated(
|
||||||
time = 1620259482911L,
|
time = 1621230365943L,
|
||||||
codegenVersion = "1.0.23",
|
codegenVersion = "1.0.23",
|
||||||
sourceFile = "frameworks/base/core/java/android/view/translation/ViewTranslationRequest.java",
|
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
|
@Deprecated
|
||||||
private void __metadata() {}
|
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
|
// TODO(b/176488462): apply the view's important for translation
|
||||||
requestBuilder.setValue(ViewTranslationRequest.ID_TEXT,
|
requestBuilder.setValue(ViewTranslationRequest.ID_TEXT,
|
||||||
TranslationRequestValue.forText(mText));
|
TranslationRequestValue.forText(mText));
|
||||||
|
if (!TextUtils.isEmpty(getContentDescription())) {
|
||||||
|
requestBuilder.setValue(ViewTranslationRequest.ID_CONTENT_DESCRIPTION,
|
||||||
|
TranslationRequestValue.forText(getContentDescription()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
requestsCollector.accept(requestBuilder.build());
|
requestsCollector.accept(requestBuilder.build());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,11 +19,13 @@ package android.widget;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.text.method.TranslationTransformationMethod;
|
import android.text.method.TranslationTransformationMethod;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.translation.UiTranslationManager;
|
import android.view.translation.UiTranslationManager;
|
||||||
import android.view.translation.ViewTranslationCallback;
|
import android.view.translation.ViewTranslationCallback;
|
||||||
|
import android.view.translation.ViewTranslationRequest;
|
||||||
import android.view.translation.ViewTranslationResponse;
|
import android.view.translation.ViewTranslationResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,6 +48,8 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
private boolean mIsTextPaddingEnabled = false;
|
private boolean mIsTextPaddingEnabled = false;
|
||||||
private CharSequence mPaddedText;
|
private CharSequence mPaddedText;
|
||||||
|
|
||||||
|
private CharSequence mContentDescription;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invoked by the platform when receiving the successful {@link ViewTranslationResponse} for the
|
* Invoked by the platform when receiving the successful {@link ViewTranslationResponse} for the
|
||||||
* view that provides the translatable information by {@link View#createTranslationRequest} and
|
* view that provides the translatable information by {@link View#createTranslationRequest} and
|
||||||
@@ -86,6 +90,15 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
}
|
}
|
||||||
if (mTranslationTransformation != null) {
|
if (mTranslationTransformation != null) {
|
||||||
((TextView) view).setTransformationMethod(mTranslationTransformation);
|
((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 {
|
} else {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
// TODO(b/182433547): remove before S release
|
// TODO(b/182433547): remove before S release
|
||||||
@@ -111,6 +124,9 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
if (mTranslationTransformation != null) {
|
if (mTranslationTransformation != null) {
|
||||||
((TextView) view).setTransformationMethod(
|
((TextView) view).setTransformationMethod(
|
||||||
mTranslationTransformation.getOriginalTransformationMethod());
|
mTranslationTransformation.getOriginalTransformationMethod());
|
||||||
|
if (!TextUtils.isEmpty(mContentDescription)) {
|
||||||
|
view.setContentDescription(mContentDescription);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
// TODO(b/182433547): remove before S release
|
// TODO(b/182433547): remove before S release
|
||||||
@@ -131,6 +147,7 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
onHideTranslation(view);
|
onHideTranslation(view);
|
||||||
clearTranslationTransformation();
|
clearTranslationTransformation();
|
||||||
mPaddedText = null;
|
mPaddedText = null;
|
||||||
|
mContentDescription = null;
|
||||||
} else {
|
} else {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
// TODO(b/182433547): remove before S release
|
// TODO(b/182433547): remove before S release
|
||||||
|
|||||||
Reference in New Issue
Block a user