Merge "Bug fix: Move the implementation out from View.onTranslationResponse." into sc-dev
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user