Merge "Fix and refine works in UiTranslationController" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-02-04 14:41:17 +00:00
committed by Android (Google) Code Review

View File

@@ -101,15 +101,17 @@ public class UiTranslationController {
} }
break; break;
case STATE_UI_TRANSLATION_PAUSED: case STATE_UI_TRANSLATION_PAUSED:
runForEachView((view) -> view.onPauseUiTranslation(), STATE_UI_TRANSLATION_PAUSED); runForEachView(View::onPauseUiTranslation);
break; break;
case STATE_UI_TRANSLATION_RESUMED: case STATE_UI_TRANSLATION_RESUMED:
runForEachView((view) -> view.onRestoreUiTranslation(), runForEachView(View::onRestoreUiTranslation);
STATE_UI_TRANSLATION_PAUSED);
break; break;
case STATE_UI_TRANSLATION_FINISHED: case STATE_UI_TRANSLATION_FINISHED:
destroyTranslators(); destroyTranslators();
runForEachView((view) -> view.onFinishUiTranslation(), STATE_UI_TRANSLATION_PAUSED); runForEachView(View::onFinishUiTranslation);
synchronized (mLock) {
mViews.clear();
}
break; break;
default: default:
Log.w(TAG, "onAutoTranslationStateChange(): unknown state: " + state); Log.w(TAG, "onAutoTranslationStateChange(): unknown state: " + state);
@@ -191,9 +193,6 @@ public class UiTranslationController {
*/ */
private void onUiTranslationStarted(Translator translator, List<AutofillId> views) { private void onUiTranslationStarted(Translator translator, List<AutofillId> views) {
synchronized (mLock) { synchronized (mLock) {
if (views == null || views.size() == 0) {
throw new IllegalArgumentException("Invalid empty views: " + views);
}
// Find Views collect the translation data // Find Views collect the translation data
// TODO(b/178084101): try to optimize, e.g. to this in a single traversal // TODO(b/178084101): try to optimize, e.g. to this in a single traversal
final int viewCounts = views.size(); 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) { synchronized (mLock) {
final ArrayMap<AutofillId, WeakReference<View>> views = new ArrayMap<>(mViews);
mActivity.runOnUiThread(() -> { mActivity.runOnUiThread(() -> {
final int viewCounts = mViews.size(); final int viewCounts = views.size();
for (int i = 0; i < viewCounts; i++) { for (int i = 0; i < viewCounts; i++) {
final View view = mViews.valueAt(i).get(); final View view = views.valueAt(i).get();
if (view == null) { if (view == null) {
Log.w(TAG, "The View for autofill id " + mViews.keyAt(i)
+ " may be gone for state " + stateToString(state));
continue; continue;
} }
action.accept(view); action.accept(view);
} }
if (state == STATE_UI_TRANSLATION_FINISHED) {
mViews.clear();
}
}); });
} }
} }