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

Commit 9d5f970c authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Check if the SIM is secure before dispatching swipe to unlock.

Due to an existing bug, KeyguardStateController#canDismissLockScreen
returns true even if the device is SIM-locked, if there is no device
lock set. This caused the new sc-v2 unlock code to believe we could
dismiss the lock screen via swiping. Since the panel expansion is used
to drive swipe to unlock on the lock screen, this meant that swiping
the notification panel over the emergency dialer was interpreted as a
swipe to unlock, so we unlocked.

We'll fix the underlying issue with canDismissLockScreen in T:
b/214057466. This method is used 25+ times all over the code, and it
would be extremely risky to add the SIM-lock check there at this point.

Fixes: 214057466
Test: insert locked SIM, emergency dialer, pull down shade, try to go back/home
Change-Id: Iee86cadc8c4903c703d4fab515dc4f6f73953467
parent 091aba97
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -1727,6 +1727,21 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
                || mUpdateMonitor.isSimPinSecure();
    }

    /**
     * Whether any of the SIMs on the device are secured with a PIN. If so, the keyguard should not
     * be dismissable until the PIN is entered, even if the device itself has no lock set.
     */
    public boolean isAnySimPinSecure() {
        for (int i = 0; i < mLastSimStates.size(); i++) {
            final int key = mLastSimStates.keyAt(i);
            if (KeyguardUpdateMonitor.isSimPinSecure(mLastSimStates.get(key))) {
                return true;
            }
        }

        return false;
    }

    public void setSwitchingUser(boolean switching) {
        mUpdateMonitor.setSwitchingUser(switching);
    }
+4 −0
Original line number Diff line number Diff line
@@ -1354,10 +1354,14 @@ public class StatusBar extends SystemUI implements
        // Things that mean we're not dismissing the keyguard, and should ignore this expansion:
        // - Keyguard isn't even visible.
        // - Keyguard is visible, but can't be dismissed (swiping up will show PIN/password prompt).
        // - The SIM is locked, you can't swipe to unlock. If the SIM is locked but there is no
        //   device lock set, canDismissLockScreen returns true even though you should not be able
        //   to dismiss the lock screen until entering the SIM PIN.
        // - QS is expanded and we're swiping - swiping up now will hide QS, not dismiss the
        //   keyguard.
        if (!isKeyguardShowing()
                || !mKeyguardStateController.canDismissLockScreen()
                || mKeyguardViewMediator.isAnySimPinSecure()
                || (mNotificationPanelViewController.isQsExpanded() && trackingTouch)) {
            return;
        }