Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7672bbc9 authored by Joanne Chung's avatar Joanne Chung
Browse files

Fix the existing translation doesn't update for new translated result.

It is possible the existing text is changed that triggers a new
translation. We cache the translation response when onShowTransltion
is called. We should keep the translation response is updated if this
is a new translation result.

Bug: 200232741
Test: atest CtsTranslationTestCases
Test: manual. The issue app works fine.
Change-Id: Iaf7423cd35d4484e33de84e478256b77a000f390
parent 98fa7d14
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -62,6 +62,13 @@ public class TranslationTransformationMethod implements TransformationMethod2 {
        return mOriginalTranslationMethod;
    }

    /**
     * Returns the {@link TextView}'s {@link ViewTranslationResponse}.
     */
    public ViewTranslationResponse getViewTranslationResponse() {
        return mTranslationResponse;
    }

    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        if (!mAllowLengthChanges) {
+5 −0
Original line number Diff line number Diff line
@@ -41,6 +41,11 @@ public interface ViewTranslationCallback {
     * method will not be called before {@link View#onViewTranslationResponse} or
     * {@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}
     * 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
+6 −1
Original line number Diff line number Diff line
@@ -70,7 +70,12 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
                    + "onViewTranslationResponse().");
            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 =
                    ((TextView) view).getTransformationMethod();
            mTranslationTransformation = new TranslationTransformationMethod(response,