diff options
| author | 2021-02-04 14:41:17 +0000 | |
|---|---|---|
| committer | 2021-02-04 14:41:17 +0000 | |
| commit | 4abb5596a274ce6061f6cb3713f60c07380fb68d (patch) | |
| tree | 77626d9efdc8524a5aac8761ece628311f146db2 | |
| parent | e16836a6e8eafaaea9714cbd05e8d04d20d51fc7 (diff) | |
| parent | aeb92182c17dcc0b9584d9edd4a655784dc067ba (diff) | |
Merge "Fix and refine works in UiTranslationController" into sc-dev
| -rw-r--r-- | core/java/android/view/translation/UiTranslationController.java | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java index fa4614628102..b49d3c004f44 100644 --- a/core/java/android/view/translation/UiTranslationController.java +++ b/core/java/android/view/translation/UiTranslationController.java @@ -101,15 +101,17 @@ public class UiTranslationController { } break; case STATE_UI_TRANSLATION_PAUSED: - runForEachView((view) -> view.onPauseUiTranslation(), STATE_UI_TRANSLATION_PAUSED); + runForEachView(View::onPauseUiTranslation); break; case STATE_UI_TRANSLATION_RESUMED: - runForEachView((view) -> view.onRestoreUiTranslation(), - STATE_UI_TRANSLATION_PAUSED); + runForEachView(View::onRestoreUiTranslation); break; case STATE_UI_TRANSLATION_FINISHED: destroyTranslators(); - runForEachView((view) -> view.onFinishUiTranslation(), STATE_UI_TRANSLATION_PAUSED); + runForEachView(View::onFinishUiTranslation); + synchronized (mLock) { + mViews.clear(); + } break; default: Log.w(TAG, "onAutoTranslationStateChange(): unknown state: " + state); @@ -191,9 +193,6 @@ public class UiTranslationController { */ private void onUiTranslationStarted(Translator translator, List<AutofillId> views) { synchronized (mLock) { - if (views == null || views.size() == 0) { - throw new IllegalArgumentException("Invalid empty views: " + views); - } // Find Views collect the translation data // TODO(b/178084101): try to optimize, e.g. to this in a single traversal final int viewCounts = views.size(); @@ -223,22 +222,18 @@ public class UiTranslationController { } } - private void runForEachView(Consumer<View> action, @UiTranslationState int state) { + private void runForEachView(Consumer<View> action) { synchronized (mLock) { + final ArrayMap<AutofillId, WeakReference<View>> views = new ArrayMap<>(mViews); mActivity.runOnUiThread(() -> { - final int viewCounts = mViews.size(); + final int viewCounts = views.size(); for (int i = 0; i < viewCounts; i++) { - final View view = mViews.valueAt(i).get(); + final View view = views.valueAt(i).get(); if (view == null) { - Log.w(TAG, "The View for autofill id " + mViews.keyAt(i) - + " may be gone for state " + stateToString(state)); continue; } action.accept(view); } - if (state == STATE_UI_TRANSLATION_FINISHED) { - mViews.clear(); - } }); } } |