Merge "Fix the existing translation doesn't update for new translated result." into sc-qpr1-dev

This commit is contained in:
Joanne Chung
2021-09-23 01:14:44 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 1 deletions

View File

@@ -62,6 +62,13 @@ public class TranslationTransformationMethod implements TransformationMethod2 {
return mOriginalTranslationMethod; return mOriginalTranslationMethod;
} }
/**
* Returns the {@link TextView}'s {@link ViewTranslationResponse}.
*/
public ViewTranslationResponse getViewTranslationResponse() {
return mTranslationResponse;
}
@Override @Override
public CharSequence getTransformation(CharSequence source, View view) { public CharSequence getTransformation(CharSequence source, View view) {
if (!mAllowLengthChanges) { if (!mAllowLengthChanges) {

View File

@@ -41,6 +41,11 @@ public interface ViewTranslationCallback {
* method will not be called before {@link View#onViewTranslationResponse} or * method will not be called before {@link View#onViewTranslationResponse} or
* {@link View#onVirtualViewTranslationResponses}. * {@link View#onVirtualViewTranslationResponses}.
* *
* <p> NOTE: It is possible the user changes text that causes a new
* {@link ViewTranslationResponse} returns to show the new translation. If you cache the
* {@link ViewTranslationResponse} here, you should remember to keep the cached value up
* to date.
*
* <p> NOTE: For TextView implementation, {@link ContentCaptureSession#notifyViewTextChanged} * <p> NOTE: For TextView implementation, {@link ContentCaptureSession#notifyViewTextChanged}
* shouldn't be called with the translated text, simply calling setText() here will trigger the * shouldn't be called with the translated text, simply calling setText() here will trigger the
* method. You should either override {@code View#onProvideContentCaptureStructure()} to report * method. You should either override {@code View#onProvideContentCaptureStructure()} to report

View File

@@ -70,7 +70,12 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
+ "onViewTranslationResponse()."); + "onViewTranslationResponse().");
return false; return false;
} }
if (mTranslationTransformation == null) { // It is possible user changes text and new translation response returns, system should
// update the translation response to keep the result up to date.
// Because TextView.setTransformationMethod() will skip the same TransformationMethod
// instance, we should create a new one to let new translation can work.
if (mTranslationTransformation == null
|| !response.equals(mTranslationTransformation.getViewTranslationResponse())) {
TransformationMethod originalTranslationMethod = TransformationMethod originalTranslationMethod =
((TextView) view).getTransformationMethod(); ((TextView) view).getTransformationMethod();
mTranslationTransformation = new TranslationTransformationMethod(response, mTranslationTransformation = new TranslationTransformationMethod(response,