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

Commit 5667540a authored by Joanne Chung's avatar Joanne Chung
Browse files

Fix not show translation if call startTranslation after pauseTranslation

It is possible the developer calls pauseTranslation() to show the
original text but it calls startTranslation() to show translated
text. Ideally the developer should call resumeTranslation but it
also make sense to call startTranslation() to show translated text.

When receiving translation response, we avoid showing transaltion
if the view already has the response and it's the same. But it is
good to also check if the view is showing translated text or not.
If the view is not translated text, it is possible developer calls
startTranslation() instead if calling pauseTranslation() to show
translated again, the fixing can resolve this case.

The issue case can be fixed by this change. But there is a deeper
problem about it's useless the caller call finishTranslation(). This
is planned to be fixed in next release.

Bug: 201238016
Test: manual. The issue case is fixed.
Test: manual. Test some chat apps, it still works fine.
Test: atest CtsTranslationTestCases
Change-Id: I699d0fa1d60ac96db094adcc6e17f4203df03214
parent 395f43dd
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -431,15 +431,19 @@ public class UiTranslationController {
                    continue;
                }
                mActivity.runOnUiThread(() -> {
                    ViewTranslationCallback callback = view.getViewTranslationCallback();
                    if (view.getViewTranslationResponse() != null
                            && view.getViewTranslationResponse().equals(response)) {
                        if (callback instanceof TextViewTranslationCallback) {
                            if (((TextViewTranslationCallback) callback).isShowingTranslation()) {
                                if (DEBUG) {
                                    Log.d(TAG, "Duplicate ViewTranslationResponse for " + autofillId
                                            + ". Ignoring.");
                                }
                                return;
                            }
                    ViewTranslationCallback callback = view.getViewTranslationCallback();
                        }
                    }
                    if (callback == null) {
                        if (view instanceof TextView) {
                            // developer doesn't provide their override, we set the default TextView
+7 −1
Original line number Diff line number Diff line
@@ -64,6 +64,12 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
     */
    @Override
    public boolean onShowTranslation(@NonNull View view) {
        if (mIsShowingTranslation) {
            if (DEBUG) {
                Log.d(TAG, view + " is already showing translated text.");
            }
            return false;
        }
        ViewTranslationResponse response = view.getViewTranslationResponse();
        if (response == null) {
            Log.e(TAG, "onShowTranslation() shouldn't be called before "
@@ -152,7 +158,7 @@ public class TextViewTranslationCallback implements ViewTranslationCallback {
        return true;
    }

    boolean isShowingTranslation() {
    public boolean isShowingTranslation() {
        return mIsShowingTranslation;
    }