Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit def54492 authored by Aaron Liu's avatar Aaron Liu
Browse files

Do not show primary auth when finished auth sim

When we auth sim pin, we do not want to change the screen to the
primary auth. We go back to lockscreen when Keyguard is reset due to a
sim state change.

Flag: NONE
Test: auth sim pin when password security method
Fixes: 311049241

Change-Id: I1a68a8b8015ecfa9997321c04adb87591e37a514
parent e2b283d9
Loading
Loading
Loading
Loading
+51 −23
Original line number Diff line number Diff line
@@ -464,29 +464,6 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
        verify(view).resetScale()
    }

    @Test
    fun showNextSecurityScreenOrFinish_setsSecurityScreenToPinAfterSimPinUnlock() {
        // 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.PIN)
        underTest.showNextSecurityScreenOrFinish(
            /* authenticated= */ true,
            TARGET_USER_ID,
            /* bypassSecondaryLockScreen= */ true,
            SecurityMode.SimPin
        )

        // THEN the next security method of PIN is set, and the keyguard is not marked as done
        verify(viewMediatorCallback, never()).keyguardDonePending(anyInt())
        verify(viewMediatorCallback, never()).keyguardDone(anyInt())
        Truth.assertThat(underTest.currentSecurityMode).isEqualTo(SecurityMode.PIN)
    }

    @Test
    fun showNextSecurityScreenOrFinish_DeviceNotSecure() {
        // GIVEN the current security method is SimPin
@@ -577,6 +554,57 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
        verify(viewMediatorCallback).keyguardDone(anyInt())
    }

    @Test
    fun showNextSecurityScreenOrFinish_SimPin_Password() {
        // 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.Password)
        // 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 we will not show the password screen.
        verify(viewFlipperController, never())
            .getSecurityView(eq(SecurityMode.Password), any(), any())
    }

    @Test
    fun showNextSecurityScreenOrFinish_SimPin_SimPin() {
        // 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.SimPin)
        // 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 we will not show the password screen.
        verify(viewFlipperController).getSecurityView(eq(SecurityMode.SimPin), any(), any())
    }

    @Test
    fun onSwipeUp_forwardsItToFaceAuthInteractor() {
        val registeredSwipeListener = registeredSwipeListener
+9 −5
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_SIM
import static com.android.keyguard.KeyguardSecurityContainer.USER_TYPE_PRIMARY;
import static com.android.keyguard.KeyguardSecurityContainer.USER_TYPE_SECONDARY_USER;
import static com.android.keyguard.KeyguardSecurityContainer.USER_TYPE_WORK_PROFILE;
import static com.android.keyguard.KeyguardSecurityModel.SecurityMode.SimPin;
import static com.android.keyguard.KeyguardSecurityModel.SecurityMode.SimPuk;
import static com.android.systemui.DejankUtils.whitelistIpcs;
import static com.android.systemui.flags.Flags.LOCKSCREEN_ENABLE_LANDSCAPE;
import static com.android.systemui.flags.Flags.REVAMPED_BOUNCER_MESSAGES;
@@ -99,6 +101,7 @@ import com.android.systemui.util.settings.GlobalSettings;
import dagger.Lazy;

import java.io.File;
import java.util.Arrays;
import java.util.Optional;

import javax.inject.Inject;
@@ -164,8 +167,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                    }
                    mCurrentUser = mSelectedUserInteractor.getSelectedUserId();
                    showPrimarySecurityScreen(false);
                    if (mCurrentSecurityMode != SecurityMode.SimPin
                            && mCurrentSecurityMode != SecurityMode.SimPuk) {
                    if (mCurrentSecurityMode != SimPin
                            && mCurrentSecurityMode != SimPuk) {
                        reinflateViewFlipper((l) -> {
                        });
                    }
@@ -888,7 +891,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                        finish = true;
                        eventSubtype = BOUNCER_DISMISS_SIM;
                        uiEvent = BouncerUiEvent.BOUNCER_DISMISS_SIM;
                    } else {
                    } else if (Arrays.asList(SimPin, SimPuk).contains(securityMode)) {
                        // There are additional screens to the sim pin/puk flow.
                        showSecurityScreen(securityMode);
                    }
                    break;
@@ -1095,8 +1099,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
    }

    private void configureMode() {
        boolean useSimSecurity = mCurrentSecurityMode == SecurityMode.SimPin
                || mCurrentSecurityMode == SecurityMode.SimPuk;
        boolean useSimSecurity = mCurrentSecurityMode == SimPin
                || mCurrentSecurityMode == SimPuk;
        int mode = KeyguardSecurityContainer.MODE_DEFAULT;
        if (canDisplayUserSwitcher() && !useSimSecurity) {
            mode = KeyguardSecurityContainer.MODE_USER_SWITCHER;