[Bouncer] fix user switch race condition
When switching from user with auth i.e. password to a user that has swipe to unlock can experience a race condition where bouncer is not dismissed when switching users from bouncer. This happens when switching users very quickly. This can be resolved by changing our subscription to when a user changes. Bug: 228901381 Test: Unit test and manual test Change-Id: I7df7af986094f4719d39ee5d63ceafea8a812493
This commit is contained in:
@@ -67,12 +67,6 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
|
||||
|
||||
private final KeyguardUpdateMonitorCallback mUpdateCallback =
|
||||
new KeyguardUpdateMonitorCallback() {
|
||||
@Override
|
||||
public void onUserSwitchComplete(int userId) {
|
||||
mKeyguardSecurityContainerController.showPrimarySecurityScreen(
|
||||
false /* turning off */);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTrustGrantedWithFlags(int flags, int userId) {
|
||||
if (userId != KeyguardUpdateMonitor.getCurrentUser()) return;
|
||||
|
||||
@@ -97,6 +97,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
|
||||
private int mLastOrientation = Configuration.ORIENTATION_UNDEFINED;
|
||||
|
||||
private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid;
|
||||
private UserSwitcherController.UserSwitchCallback mUserSwitchCallback =
|
||||
() -> showPrimarySecurityScreen(false);
|
||||
|
||||
@VisibleForTesting
|
||||
final Gefingerpoken mGlobalTouchListener = new Gefingerpoken() {
|
||||
@@ -295,6 +297,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
|
||||
mView.setSwipeListener(mSwipeListener);
|
||||
mView.addMotionEventListener(mGlobalTouchListener);
|
||||
mConfigurationController.addCallback(mConfigurationListener);
|
||||
mUserSwitcherController.addUserSwitchCallback(mUserSwitchCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -302,6 +305,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
|
||||
mUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
|
||||
mConfigurationController.removeCallback(mConfigurationListener);
|
||||
mView.removeMotionEventListener(mGlobalTouchListener);
|
||||
mUserSwitcherController.removeUserSwitchCallback(mUserSwitchCallback);
|
||||
}
|
||||
|
||||
/** */
|
||||
|
||||
@@ -287,4 +287,14 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
verify(mView).initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
|
||||
mUserSwitcherController);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addUserSwitchCallback() {
|
||||
mKeyguardSecurityContainerController.onViewAttached();
|
||||
verify(mUserSwitcherController)
|
||||
.addUserSwitchCallback(any(UserSwitcherController.UserSwitchCallback.class));
|
||||
mKeyguardSecurityContainerController.onViewDetached();
|
||||
verify(mUserSwitcherController)
|
||||
.removeUserSwitchCallback(any(UserSwitcherController.UserSwitchCallback.class));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user