Merge "Bug fix: Move the implementation out from View.onTranslationResponse." into sc-dev

This commit is contained in:
Joanne Chung
2021-06-24 02:08:40 +00:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 77 deletions

View File

@@ -424,7 +424,7 @@ public class UiTranslationController {
if (callback == null) {
if (view instanceof TextView) {
// developer doesn't provide their override, we set the default TextView
// implememtation.
// implementation.
callback = new TextViewTranslationCallback();
view.setViewTranslationCallback(callback);
} else {

View File

@@ -129,7 +129,6 @@ import android.text.method.TextKeyListener;
import android.text.method.TimeKeyListener;
import android.text.method.TransformationMethod;
import android.text.method.TransformationMethod2;
import android.text.method.TranslationTransformationMethod;
import android.text.method.WordIterator;
import android.text.style.CharacterStyle;
import android.text.style.ClickableSpan;
@@ -199,7 +198,6 @@ import android.view.translation.TranslationSpec;
import android.view.translation.UiTranslationController;
import android.view.translation.ViewTranslationCallback;
import android.view.translation.ViewTranslationRequest;
import android.view.translation.ViewTranslationResponse;
import android.widget.RemoteViews.RemoteView;
import com.android.internal.annotations.VisibleForTesting;
@@ -13946,33 +13944,4 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
requestsCollector.accept(requestBuilder.build());
}
/**
*
* Called when the content from {@link #onCreateViewTranslationRequest} had been translated by
* the TranslationService. The default implementation will replace the current
* {@link TransformationMethod} to transform the original text to the translated text display.
*
* @param response a {@link ViewTranslationResponse} that contains the translated information
* which can be shown in the view.
*/
@Override
public void onViewTranslationResponse(@NonNull ViewTranslationResponse response) {
// set ViewTranslationResponse
super.onViewTranslationResponse(response);
// TODO(b/178353965): move to ViewTranslationCallback.onShow()
ViewTranslationCallback callback = getViewTranslationCallback();
if (callback instanceof TextViewTranslationCallback) {
TextViewTranslationCallback textViewDefaultCallback =
(TextViewTranslationCallback) callback;
TranslationTransformationMethod oldTranslationMethod =
textViewDefaultCallback.getTranslationTransformation();
TransformationMethod originalTranslationMethod = oldTranslationMethod != null
? oldTranslationMethod.getOriginalTransformationMethod() : mTransformation;
TranslationTransformationMethod newTranslationMethod =
new TranslationTransformationMethod(response, originalTranslationMethod);
// TODO(b/178353965): well-handle setTransformationMethod.
textViewDefaultCallback.setTranslationTransformation(newTranslationMethod);
}
}
}

View File

@@ -56,26 +56,6 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
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
* sent by the platform.
*/
void setTranslationTransformation(TranslationTransformationMethod method) {
if (method == null) {
if (DEBUG) {
Log.w(TAG, "setTranslationTransformation: should not set null "
+ "TranslationTransformationMethod");
}
return;
}
mTranslationTransformation = method;
}
TranslationTransformationMethod getTranslationTransformation() {
return mTranslationTransformation;
}
private void clearTranslationTransformation() {
if (DEBUG) {
Log.v(TAG, "clearTranslationTransformation: " + mTranslationTransformation);
@@ -88,34 +68,33 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
*/
@Override
public boolean onShowTranslation(@NonNull View view) {
if (view.getViewTranslationResponse() == null) {
Log.wtf(TAG, "onShowTranslation() shouldn't be called before "
ViewTranslationResponse response = view.getViewTranslationResponse();
if (response == null) {
Log.e(TAG, "onShowTranslation() shouldn't be called before "
+ "onViewTranslationResponse().");
return false;
}
if (mTranslationTransformation != null) {
final TransformationMethod transformation = mTranslationTransformation;
runWithAnimation(
(TextView) view,
() -> {
mIsShowingTranslation = true;
((TextView) view).setTransformationMethod(transformation);
});
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);
}
if (mTranslationTransformation == null) {
TransformationMethod originalTranslationMethod =
((TextView) view).getTransformationMethod();
mTranslationTransformation = new TranslationTransformationMethod(response,
originalTranslationMethod);
}
final TransformationMethod transformation = mTranslationTransformation;
runWithAnimation(
(TextView) view,
() -> {
mIsShowingTranslation = true;
// TODO(b/178353965): well-handle setTransformationMethod.
((TextView) view).setTransformationMethod(transformation);
});
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
Log.w(TAG, "onShowTranslation(): no translated text.");
}
return false;
}
return true;
}
@@ -126,7 +105,7 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
@Override
public boolean onHideTranslation(@NonNull View view) {
if (view.getViewTranslationResponse() == null) {
Log.wtf(TAG, "onHideTranslation() shouldn't be called before "
Log.e(TAG, "onHideTranslation() shouldn't be called before "
+ "onViewTranslationResponse().");
return false;
}