From f922300a2d5523b12417b3b48ee790c7d13dd2f1 Mon Sep 17 00:00:00 2001 From: Ahaan Ugale Date: Wed, 9 Jun 2021 13:53:38 -0700 Subject: [PATCH] Clear the ViewTranslationResponse on finishing UiTranslation. Stored state should be cleared here. This fixes a bug where the views cannot be re-translated after UiTranslationManager#finishTranslation was called. Some of the state was cleared, so the translations cannot be re-shown. And that state cannot be recreated because we find the same ViewTranslationResponse stored and do not recreate the other state. Fix: 189892928 Test: manual - translate an app, go to the home screen (triggers finish), go back to the app and re-translate Test: atest CtsTranslationTestCases Change-Id: Ic81fbce7ee09eb72352071c8bdd94a2731826009 --- core/java/android/view/View.java | 10 ++++++++++ .../view/translation/UiTranslationController.java | 1 + 2 files changed, 11 insertions(+) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 8138b3d30ddfc..73ddf597bd8bb 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -30942,6 +30942,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mViewTranslationResponse = response; } + /** + * Clears the ViewTranslationResponse stored by the default implementation of {@link + * #onViewTranslationResponse}. + * + * @hide + */ + public void clearViewTranslationResponse() { + mViewTranslationResponse = null; + } + /** * Called when the content from {@link View#onCreateVirtualViewTranslationRequests} had been * translated by the TranslationService. diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java index 790b93a1f4951..5ac878d88100b 100644 --- a/core/java/android/view/translation/UiTranslationController.java +++ b/core/java/android/view/translation/UiTranslationController.java @@ -155,6 +155,7 @@ public class UiTranslationController { destroyTranslators(); runForEachView((view, callback) -> { callback.onClearTranslation(view); + view.clearViewTranslationResponse(); if (view.hasTranslationTransientState()) { view.setHasTransientState(false); view.setHasTranslationTransientState(false);