summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java33
2 files changed, 35 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index ff62aea10e5b..bc41ab3156df 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -1253,7 +1253,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
@Override
public void onPrimaryBouncerShowingChanged() {
synchronized (KeyguardViewMediator.this) {
- if (mKeyguardStateController.isPrimaryBouncerShowing()) {
+ if (mKeyguardStateController.isPrimaryBouncerShowing()
+ && !mKeyguardStateController.isKeyguardGoingAway()) {
mPendingPinLock = false;
}
adjustStatusBarLocked(mKeyguardStateController.isPrimaryBouncerShowing(), false);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index 770765260446..c280538f2d30 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -156,6 +156,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock ShadeWindowLogger mShadeWindowLogger;
private @Captor ArgumentCaptor<KeyguardUpdateMonitorCallback>
mKeyguardUpdateMonitorCallbackCaptor;
+ private @Captor ArgumentCaptor<KeyguardStateController.Callback>
+ mKeyguardStateControllerCallback;
private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
@@ -662,6 +664,33 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
);
}
+ @Test
+ @TestableLooper.RunWithLooper(setAsMainLooper = true)
+ public void pendingPinLockOnKeyguardGoingAway_doKeyguardLockedOnKeyguardVisibilityChanged() {
+ // GIVEN SIM_STATE_PIN_REQUIRED
+ mViewMediator.onSystemReady();
+ final KeyguardUpdateMonitorCallback keyguardUpdateMonitorCallback =
+ mViewMediator.mUpdateCallback;
+ keyguardUpdateMonitorCallback.onSimStateChanged(0, 0,
+ TelephonyManager.SIM_STATE_PIN_REQUIRED);
+ TestableLooper.get(this).processAllMessages();
+
+ // ...and then the primary bouncer shows while the keyguard is going away
+ captureKeyguardStateControllerCallback();
+ when(mKeyguardStateController.isPrimaryBouncerShowing()).thenReturn(true);
+ when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
+ mKeyguardStateControllerCallback.getValue().onPrimaryBouncerShowingChanged();
+ TestableLooper.get(this).processAllMessages();
+
+ // WHEN keyguard visibility becomes FALSE
+ mViewMediator.setShowingLocked(false);
+ keyguardUpdateMonitorCallback.onKeyguardVisibilityChanged(false);
+ TestableLooper.get(this).processAllMessages();
+
+ // THEN keyguard shows due to the pending SIM PIN lock
+ assertTrue(mViewMediator.isShowingAndNotOccluded());
+ }
+
private void createAndStartViewMediator() {
mViewMediator = new KeyguardViewMediator(
mContext,
@@ -708,4 +737,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private void captureKeyguardUpdateMonitorCallback() {
verify(mUpdateMonitor).registerCallback(mKeyguardUpdateMonitorCallbackCaptor.capture());
}
+
+ private void captureKeyguardStateControllerCallback() {
+ verify(mKeyguardStateController).addCallback(mKeyguardStateControllerCallback.capture());
+ }
}