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
This commit is contained in:
Beverly
2022-03-24 13:34:08 +00:00
committed by Beverly Tai
parent ad2185f625
commit d5584538f1
3 changed files with 23 additions and 1 deletions

View File

@@ -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);
}

View File

@@ -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();
}
}
}
/**

View File

@@ -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.
*/