From 6d48eabe6b2b474bfc774ee10488a79ceffc5753 Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Mon, 17 Sep 2018 17:17:14 -0700 Subject: [PATCH] Hide bouncer after unlocking SIM card We don't want to hide the bouncer when the SIM card is READY, unless we were already at the bouncer because of the SIM PIN/PUK Test: Insert locked SIM card on lock screen or launcher. Type PIN Test: Insert unlocked SIM card after pulling up the bouncer Fixes: 114740965 Change-Id: I4f781b47c1e2a12e5c6f064f303cd457ece01b67 --- .../keyguard/KeyguardViewMediator.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 1655c01f5e8ea..757c821f37e3a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -20,6 +20,9 @@ import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.view.Display.INVALID_DISPLAY; import static com.android.internal.telephony.IccCardConstants.State.ABSENT; +import static com.android.internal.telephony.IccCardConstants.State.PIN_REQUIRED; +import static com.android.internal.telephony.IccCardConstants.State.PUK_REQUIRED; +import static com.android.internal.telephony.IccCardConstants.State.READY; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW; import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT; @@ -30,7 +33,6 @@ import android.app.ActivityTaskManager; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.StatusBarManager; -import android.hardware.biometrics.BiometricSourceType; import android.app.trust.TrustManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -38,6 +40,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.UserInfo; +import android.hardware.biometrics.BiometricSourceType; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; @@ -58,6 +61,7 @@ import android.telephony.TelephonyManager; import android.util.EventLog; import android.util.Log; import android.util.Slog; +import android.util.SparseArray; import android.view.ViewGroup; import android.view.WindowManagerPolicyConstants; import android.view.animation.Animation; @@ -70,21 +74,21 @@ import com.android.internal.policy.IKeyguardDrawnCallback; import com.android.internal.policy.IKeyguardExitCallback; import com.android.internal.policy.IKeyguardStateCallback; import com.android.internal.telephony.IccCardConstants; +import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardConstants; import com.android.keyguard.KeyguardDisplayManager; import com.android.keyguard.KeyguardSecurityView; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; -import com.android.internal.util.LatencyTracker; import com.android.keyguard.ViewMediatorCallback; import com.android.systemui.Dependency; import com.android.systemui.SystemUI; import com.android.systemui.SystemUIFactory; import com.android.systemui.UiOffloadThread; import com.android.systemui.classifier.FalsingManager; -import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.BiometricUnlockController; +import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; @@ -274,6 +278,12 @@ public class KeyguardViewMediator extends SystemUI { private KeyguardUpdateMonitor mUpdateMonitor; + /** + * Last SIM state reported by the telephony system. + * Index is the slotId - in case of multiple SIM cards. + */ + private final SparseArray mLastSimStates = new SparseArray<>(); + private boolean mDeviceInteractive; private boolean mGoingToSleep; @@ -450,6 +460,14 @@ public class KeyguardViewMediator extends SystemUI { } } + boolean simWasLocked; + synchronized (KeyguardViewMediator.this) { + IccCardConstants.State lastState = mLastSimStates.get(slotId); + simWasLocked = (lastState == PIN_REQUIRED || lastState == PUK_REQUIRED) + && simState == READY; + mLastSimStates.append(slotId, simState); + } + switch (simState) { case NOT_READY: case ABSENT: @@ -503,6 +521,9 @@ public class KeyguardViewMediator extends SystemUI { case READY: synchronized (KeyguardViewMediator.this) { if (DEBUG_SIM_STATES) Log.d(TAG, "READY, reset state? " + mShowing); + if (mShowing && simWasLocked) { + resetStateLocked(); + } mLockWhenSimRemoved = true; } break;