From 4d81bbdef51bc3286e6f1cae1d0a7485ccf396c8 Mon Sep 17 00:00:00 2001 From: Beverly Date: Thu, 21 Oct 2021 10:31:09 -0400 Subject: [PATCH] Only update lock icon views on the main thread The onAllAuthenticatorsRegistered callback may be called on a background thread. Test: manual Test: LockIconViewControllerTest Fixes: 203769116 Change-Id: I468fd6b5e06e0038766017a90a59c70b37c5c8c5 --- .../src/com/android/keyguard/LockIconViewController.java | 7 +++++-- .../systemui/keyguard/LockIconViewControllerTest.java | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 94b1728b34ae5..3c80a186a4a77 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -695,8 +695,11 @@ public class LockIconViewController extends ViewController impleme private final AuthController.Callback mAuthControllerCallback = new AuthController.Callback() { @Override public void onAllAuthenticatorsRegistered() { - updateIsUdfpsEnrolled(); - updateConfiguration(); + // must be called from the main thread since it may update the views + mExecutor.execute(() -> { + updateIsUdfpsEnrolled(); + updateConfiguration(); + }); } }; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java index c5436ef6f04b5..5e73dbcbc95d4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java @@ -62,7 +62,8 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; -import com.android.systemui.util.concurrency.DelayableExecutor; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import com.airbnb.lottie.LottieAnimationView; @@ -97,11 +98,11 @@ public class LockIconViewControllerTest extends SysuiTestCase { private @Mock DumpManager mDumpManager; private @Mock AccessibilityManager mAccessibilityManager; private @Mock ConfigurationController mConfigurationController; - private @Mock DelayableExecutor mDelayableExecutor; private @Mock Vibrator mVibrator; private @Mock AuthRippleController mAuthRippleController; private @Mock LottieAnimationView mAodFp; private @Mock LayoutInflater mLayoutInflater; + private FakeExecutor mDelayableExecutor = new FakeExecutor(new FakeSystemClock()); private LockIconViewController mLockIconViewController; @@ -223,6 +224,7 @@ public class LockIconViewControllerTest extends SysuiTestCase { // WHEN all authenticators are registered mAuthControllerCallback.onAllAuthenticatorsRegistered(); + mDelayableExecutor.runAllReady(); // THEN lock icon view location is updated with the same coordinates as fpProps verify(mLockIconView).setCenterLocation(mPointCaptor.capture(), eq(udfps.first));