Merge "Reset translation state when views disappear." into tm-dev

This commit is contained in:
Mark Punzalan
2022-05-06 19:26:09 +00:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 7 deletions

View File

@@ -9922,7 +9922,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* <ol>
* <li>It should only be called when content capture is enabled for the view.
* <li>It must call viewAppeared() before viewDisappeared()
* <li>viewAppearead() can only be called when the view is visible and laidout
* <li>viewAppeared() can only be called when the view is visible and laid out
* <li>It should not call the same event twice.
* </ol>
*/
@@ -9999,6 +9999,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
Log.v(CONTENT_CAPTURE_LOG_TAG, "no AttachInfo on disappeared for " + this);
}
}
// We reset any translation state as views may be re-used (e.g., as in ListView and
// RecyclerView). We only need to do this for views important for content capture since
// views unimportant for content capture won't be translated anyway.
clearTranslationState();
}
}
@@ -12718,6 +12723,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
== PFLAG4_HAS_TRANSLATION_TRANSIENT_STATE;
}
/**
* @hide
*/
public void clearTranslationState() {
if (mViewTranslationCallback != null) {
mViewTranslationCallback.onClearTranslation(this);
}
clearViewTranslationCallback();
clearViewTranslationResponse();
if (hasTranslationTransientState()) {
setHasTransientState(false);
setHasTranslationTransientState(false);
}
}
/**
* Returns true if this view is currently attached to a window.
*/

View File

@@ -158,12 +158,7 @@ public class UiTranslationController implements Dumpable {
case STATE_UI_TRANSLATION_FINISHED:
destroyTranslators();
runForEachView((view, callback) -> {
callback.onClearTranslation(view);
view.clearViewTranslationResponse();
if (view.hasTranslationTransientState()) {
view.setHasTransientState(false);
view.setHasTranslationTransientState(false);
}
view.clearTranslationState();
});
notifyTranslationFinished(/* activityDestroyed= */ false);
synchronized (mLock) {