Merge "Fix and refine works in UiTranslationController" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4abb5596a2
@@ -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();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user