Ensure finish lockscreen when usersetup incomplete

Ensure that when the usersetup for the user is not complete, we do not
want to go to lockscreen, even if lockscreen is not disabled.

Bug: 222446076
Test: add Unit test,
Test: Wipe device, auth sim pin in setup, observe that lockscreen is
not there.
Test: multiple locked sim pin with none and swipe security methods

Change-Id: I8e33db8eb6e2c917966cab3d6a4f982670473040
This commit is contained in:
Aaron Liu
2023-08-11 11:02:33 -07:00
parent 770f721742
commit deba34ccbf
2 changed files with 37 additions and 3 deletions

View File

@@ -84,6 +84,7 @@ import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.user.domain.interactor.UserInteractor; import com.android.systemui.user.domain.interactor.UserInteractor;
@@ -411,6 +412,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
private final UserInteractor mUserInteractor; private final UserInteractor mUserInteractor;
private final Provider<AuthenticationInteractor> mAuthenticationInteractor; private final Provider<AuthenticationInteractor> mAuthenticationInteractor;
private final Provider<JavaAdapter> mJavaAdapter; private final Provider<JavaAdapter> mJavaAdapter;
private final DeviceProvisionedController mDeviceProvisionedController;
@Nullable private Job mSceneTransitionCollectionJob; @Nullable private Job mSceneTransitionCollectionJob;
@Inject @Inject
@@ -439,6 +441,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
BouncerMessageInteractor bouncerMessageInteractor, BouncerMessageInteractor bouncerMessageInteractor,
Provider<JavaAdapter> javaAdapter, Provider<JavaAdapter> javaAdapter,
UserInteractor userInteractor, UserInteractor userInteractor,
DeviceProvisionedController deviceProvisionedController,
FaceAuthAccessibilityDelegate faceAuthAccessibilityDelegate, FaceAuthAccessibilityDelegate faceAuthAccessibilityDelegate,
KeyguardTransitionInteractor keyguardTransitionInteractor, KeyguardTransitionInteractor keyguardTransitionInteractor,
Provider<AuthenticationInteractor> authenticationInteractor Provider<AuthenticationInteractor> authenticationInteractor
@@ -473,6 +476,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
mAuthenticationInteractor = authenticationInteractor; mAuthenticationInteractor = authenticationInteractor;
mJavaAdapter = javaAdapter; mJavaAdapter = javaAdapter;
mKeyguardTransitionInteractor = keyguardTransitionInteractor; mKeyguardTransitionInteractor = keyguardTransitionInteractor;
mDeviceProvisionedController = deviceProvisionedController;
} }
@Override @Override
@@ -857,9 +861,11 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
// Shortcut for SIM PIN/PUK to go to directly to user's security screen or home // Shortcut for SIM PIN/PUK to go to directly to user's security screen or home
SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId); SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId);
boolean isLockscreenDisabled = mLockPatternUtils.isLockScreenDisabled( boolean isLockscreenDisabled = mLockPatternUtils.isLockScreenDisabled(
KeyguardUpdateMonitor.getCurrentUser()); KeyguardUpdateMonitor.getCurrentUser())
if (securityMode == SecurityMode.None || isLockscreenDisabled) { || !mDeviceProvisionedController.isUserSetup(targetUserId);
finish = isLockscreenDisabled;
if (securityMode == SecurityMode.None && isLockscreenDisabled) {
finish = true;
eventSubtype = BOUNCER_DISMISS_SIM; eventSubtype = BOUNCER_DISMISS_SIM;
uiEvent = BouncerUiEvent.BOUNCER_DISMISS_SIM; uiEvent = BouncerUiEvent.BOUNCER_DISMISS_SIM;
} else { } else {

View File

@@ -58,6 +58,7 @@ import com.android.systemui.scene.shared.model.ObservableTransitionState
import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneModel import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.statusbar.policy.UserSwitcherController
import com.android.systemui.user.domain.interactor.UserInteractor import com.android.systemui.user.domain.interactor.UserInteractor
@@ -135,6 +136,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
@Mock private lateinit var audioManager: AudioManager @Mock private lateinit var audioManager: AudioManager
@Mock private lateinit var userInteractor: UserInteractor @Mock private lateinit var userInteractor: UserInteractor
@Mock private lateinit var faceAuthAccessibilityDelegate: FaceAuthAccessibilityDelegate @Mock private lateinit var faceAuthAccessibilityDelegate: FaceAuthAccessibilityDelegate
@Mock private lateinit var deviceProvisionedController: DeviceProvisionedController
@Captor @Captor
private lateinit var swipeListenerArgumentCaptor: private lateinit var swipeListenerArgumentCaptor:
@@ -184,6 +186,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
whenever(keyguardPasswordView.windowInsetsController).thenReturn(windowInsetsController) whenever(keyguardPasswordView.windowInsetsController).thenReturn(windowInsetsController)
whenever(keyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(SecurityMode.PIN) whenever(keyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(SecurityMode.PIN)
whenever(keyguardStateController.canDismissLockScreen()).thenReturn(true) whenever(keyguardStateController.canDismissLockScreen()).thenReturn(true)
whenever(deviceProvisionedController.isUserSetup(anyInt())).thenReturn(true)
featureFlags = FakeFeatureFlags() featureFlags = FakeFeatureFlags()
featureFlags.set(Flags.REVAMPED_BOUNCER_MESSAGES, true) featureFlags.set(Flags.REVAMPED_BOUNCER_MESSAGES, true)
@@ -251,6 +254,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
mock(), mock(),
{ JavaAdapter(sceneTestUtils.testScope.backgroundScope) }, { JavaAdapter(sceneTestUtils.testScope.backgroundScope) },
userInteractor, userInteractor,
deviceProvisionedController,
faceAuthAccessibilityDelegate, faceAuthAccessibilityDelegate,
keyguardTransitionInteractor, keyguardTransitionInteractor,
{ authenticationInteractor }, { authenticationInteractor },
@@ -507,6 +511,30 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
// THEN the next security method of None will dismiss keyguard. // THEN the next security method of None will dismiss keyguard.
verify(viewMediatorCallback, never()).keyguardDone(anyBoolean(), anyInt()) verify(viewMediatorCallback, never()).keyguardDone(anyBoolean(), anyInt())
} }
@Test
fun showNextSecurityScreenOrFinish_SimPin_Swipe_userNotSetup() {
// GIVEN the current security method is SimPin
whenever(keyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(false)
whenever(keyguardUpdateMonitor.getUserUnlockedWithBiometric(TARGET_USER_ID))
.thenReturn(false)
underTest.showSecurityScreen(SecurityMode.SimPin)
// WHEN a request is made from the SimPin screens to show the next security method
whenever(keyguardSecurityModel.getSecurityMode(TARGET_USER_ID))
.thenReturn(SecurityMode.None)
// WHEN security method is SWIPE
whenever(lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false)
whenever(deviceProvisionedController.isUserSetup(anyInt())).thenReturn(false)
underTest.showNextSecurityScreenOrFinish(
/* authenticated= */ true,
TARGET_USER_ID,
/* bypassSecondaryLockScreen= */ true,
SecurityMode.SimPin
)
// THEN the next security method of None will dismiss keyguard.
verify(viewMediatorCallback).keyguardDone(anyBoolean(), anyInt())
}
@Test @Test
fun onSwipeUp_whenFaceDetectionIsNotRunning_initiatesFaceAuth() { fun onSwipeUp_whenFaceDetectionIsNotRunning_initiatesFaceAuth() {