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

Commit d5584538 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Add Keyguard DPM state change callback

DevicePolicyManager can change the security mode
(ie: pin/pattern/password/none), so on DPM state changes,
update SecurityContainer so that the Bouncer will be in the
correct security mode if there are any changes while the device
is already on the keyguard.

Prior to this CL, the security mode would eventually be reset when
the device went to sleep & woke back up; however, this issue
was causing flaky & slow tests.

Test: manual
  From home screen: adb shell locksettings set-pin "1234"
  From lock screen: adb shell locksettings clear --old "1234"
  On lock screen: adb shell wm dismiss-keyguard
  Observe & expect: keyguard is dismissed (previously bouncer would show)
Fixes: 223440441
Change-Id: I22281dcc85d75509f1a754d57359d5f862e3d8d0
parent ad2185f6
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -233,6 +233,13 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                    mSecurityViewFlipperController.reloadColors();
                }
            };
    private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
        @Override
        public void onDevicePolicyManagerStateChanged() {
            showPrimarySecurityScreen(false);
        }
    };

    private KeyguardSecurityContainerController(KeyguardSecurityContainer view,
            AdminSecondaryLockScreenController.Factory adminSecondaryLockScreenControllerFactory,
@@ -279,6 +286,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard

    @Override
    protected void onViewAttached() {
        mUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
        mView.setSwipeListener(mSwipeListener);
        mView.addMotionEventListener(mGlobalTouchListener);
        mConfigurationController.addCallback(mConfigurationListener);
@@ -286,6 +294,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard

    @Override
    protected void onViewDetached() {
        mUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
        mConfigurationController.removeCallback(mConfigurationListener);
        mView.removeMotionEventListener(mGlobalTouchListener);
    }
+9 −1
Original line number Diff line number Diff line
@@ -2717,12 +2717,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    }

    /**
     * Handle {@link #MSG_DPM_STATE_CHANGED}
     * Handle {@link #MSG_DPM_STATE_CHANGED} which can change primary authentication methods to
     * pin/pattern/password/none.
     */
    private void handleDevicePolicyManagerStateChanged(int userId) {
        Assert.isMainThread();
        updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
        updateSecondaryLockscreenRequirement(userId);

        for (int i = 0; i < mCallbacks.size(); i++) {
            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
            if (cb != null) {
                cb.onDevicePolicyManagerStateChanged();
            }
        }
    }

    /**
+5 −0
Original line number Diff line number Diff line
@@ -299,6 +299,11 @@ public class KeyguardUpdateMonitorCallback {
     */
    public void onSecondaryLockscreenRequirementChanged(int userId) { }

    /**
     * Called when device policy manager state changes.
     */
    public void onDevicePolicyManagerStateChanged() { }

    /**
     * Called when notifying user to unlock in order to use NFC.
     */