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 (callback == null) {
|
||||||
if (view instanceof TextView) {
|
if (view instanceof TextView) {
|
||||||
// developer doesn't provide their override, we set the default TextView
|
// developer doesn't provide their override, we set the default TextView
|
||||||
// implememtation.
|
// implementation.
|
||||||
callback = new TextViewTranslationCallback();
|
callback = new TextViewTranslationCallback();
|
||||||
view.setViewTranslationCallback(callback);
|
view.setViewTranslationCallback(callback);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -129,7 +129,6 @@ import android.text.method.TextKeyListener;
|
|||||||
import android.text.method.TimeKeyListener;
|
import android.text.method.TimeKeyListener;
|
||||||
import android.text.method.TransformationMethod;
|
import android.text.method.TransformationMethod;
|
||||||
import android.text.method.TransformationMethod2;
|
import android.text.method.TransformationMethod2;
|
||||||
import android.text.method.TranslationTransformationMethod;
|
|
||||||
import android.text.method.WordIterator;
|
import android.text.method.WordIterator;
|
||||||
import android.text.style.CharacterStyle;
|
import android.text.style.CharacterStyle;
|
||||||
import android.text.style.ClickableSpan;
|
import android.text.style.ClickableSpan;
|
||||||
@@ -199,7 +198,6 @@ import android.view.translation.TranslationSpec;
|
|||||||
import android.view.translation.UiTranslationController;
|
import android.view.translation.UiTranslationController;
|
||||||
import android.view.translation.ViewTranslationCallback;
|
import android.view.translation.ViewTranslationCallback;
|
||||||
import android.view.translation.ViewTranslationRequest;
|
import android.view.translation.ViewTranslationRequest;
|
||||||
import android.view.translation.ViewTranslationResponse;
|
|
||||||
import android.widget.RemoteViews.RemoteView;
|
import android.widget.RemoteViews.RemoteView;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -13946,33 +13944,4 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
}
|
}
|
||||||
requestsCollector.accept(requestBuilder.build());
|
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;
|
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() {
|
private void clearTranslationTransformation() {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.v(TAG, "clearTranslationTransformation: " + mTranslationTransformation);
|
Log.v(TAG, "clearTranslationTransformation: " + mTranslationTransformation);
|
||||||
@@ -88,20 +68,26 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean onShowTranslation(@NonNull View view) {
|
public boolean onShowTranslation(@NonNull View view) {
|
||||||
if (view.getViewTranslationResponse() == null) {
|
ViewTranslationResponse response = view.getViewTranslationResponse();
|
||||||
Log.wtf(TAG, "onShowTranslation() shouldn't be called before "
|
if (response == null) {
|
||||||
|
Log.e(TAG, "onShowTranslation() shouldn't be called before "
|
||||||
+ "onViewTranslationResponse().");
|
+ "onViewTranslationResponse().");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (mTranslationTransformation != null) {
|
if (mTranslationTransformation == null) {
|
||||||
|
TransformationMethod originalTranslationMethod =
|
||||||
|
((TextView) view).getTransformationMethod();
|
||||||
|
mTranslationTransformation = new TranslationTransformationMethod(response,
|
||||||
|
originalTranslationMethod);
|
||||||
|
}
|
||||||
final TransformationMethod transformation = mTranslationTransformation;
|
final TransformationMethod transformation = mTranslationTransformation;
|
||||||
runWithAnimation(
|
runWithAnimation(
|
||||||
(TextView) view,
|
(TextView) view,
|
||||||
() -> {
|
() -> {
|
||||||
mIsShowingTranslation = true;
|
mIsShowingTranslation = true;
|
||||||
|
// TODO(b/178353965): well-handle setTransformationMethod.
|
||||||
((TextView) view).setTransformationMethod(transformation);
|
((TextView) view).setTransformationMethod(transformation);
|
||||||
});
|
});
|
||||||
ViewTranslationResponse response = view.getViewTranslationResponse();
|
|
||||||
if (response.getKeys().contains(ViewTranslationRequest.ID_CONTENT_DESCRIPTION)) {
|
if (response.getKeys().contains(ViewTranslationRequest.ID_CONTENT_DESCRIPTION)) {
|
||||||
CharSequence translatedContentDescription =
|
CharSequence translatedContentDescription =
|
||||||
response.getValue(ViewTranslationRequest.ID_CONTENT_DESCRIPTION).getText();
|
response.getValue(ViewTranslationRequest.ID_CONTENT_DESCRIPTION).getText();
|
||||||
@@ -110,13 +96,6 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
view.setContentDescription(translatedContentDescription);
|
view.setContentDescription(translatedContentDescription);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (DEBUG) {
|
|
||||||
// TODO(b/182433547): remove before S release
|
|
||||||
Log.w(TAG, "onShowTranslation(): no translated text.");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +105,7 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onHideTranslation(@NonNull View view) {
|
public boolean onHideTranslation(@NonNull View view) {
|
||||||
if (view.getViewTranslationResponse() == null) {
|
if (view.getViewTranslationResponse() == null) {
|
||||||
Log.wtf(TAG, "onHideTranslation() shouldn't be called before "
|
Log.e(TAG, "onHideTranslation() shouldn't be called before "
|
||||||
+ "onViewTranslationResponse().");
|
+ "onViewTranslationResponse().");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user