DO NOT MERGE Show keyguard when SIM is removed
If the device has a secure lockscreen and the device'
SIM card is removed, lock the device.
Change-Id: I0369af81297169d65254b85bc9a056e4f4a02b7b
Merged-In: I5b0deea8851b38781059732a3cf6fa0a4a00e3ca
Fixes: 30997251
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 6103355..54cd77b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -63,6 +63,8 @@
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.internal.policy.IKeyguardDrawnCallback;
import com.android.internal.policy.IKeyguardExitCallback;
import com.android.internal.policy.IKeyguardStateCallback;
@@ -335,6 +337,7 @@
private boolean mWakeAndUnlocking;
private IKeyguardDrawnCallback mDrawnCallback;
+ private boolean mLockWhenSimRemoved;
private boolean mIsPerUserLock;
@@ -429,7 +432,7 @@
case ABSENT:
// only force lock screen in case of missing sim if user hasn't
// gone through setup wizard
- synchronized (this) {
+ synchronized (KeyguardViewMediator.this) {
if (shouldWaitForProvisioning()) {
if (!mShowing) {
if (DEBUG_SIM_STATES) Log.d(TAG, "ICC_ABSENT isn't showing,"
@@ -440,11 +443,12 @@
resetStateLocked();
}
}
+ onSimNotReadyLocked();
}
break;
case PIN_REQUIRED:
case PUK_REQUIRED:
- synchronized (this) {
+ synchronized (KeyguardViewMediator.this) {
if (!mShowing) {
if (DEBUG_SIM_STATES) Log.d(TAG,
"INTENT_VALUE_ICC_LOCKED and keygaurd isn't "
@@ -456,7 +460,7 @@
}
break;
case PERM_DISABLED:
- synchronized (this) {
+ synchronized (KeyguardViewMediator.this) {
if (!mShowing) {
if (DEBUG_SIM_STATES) Log.d(TAG, "PERM_DISABLED and "
+ "keygaurd isn't showing.");
@@ -466,21 +470,40 @@
+ "show permanently disabled message in lockscreen.");
resetStateLocked();
}
+ onSimNotReadyLocked();
}
break;
case READY:
- synchronized (this) {
+ synchronized (KeyguardViewMediator.this) {
if (mShowing) {
resetStateLocked();
}
+ mLockWhenSimRemoved = true;
}
break;
default:
- if (DEBUG_SIM_STATES) Log.v(TAG, "Ignoring state: " + simState);
+ if (DEBUG_SIM_STATES) Log.v(TAG, "Unspecific state: " + simState);
+ synchronized (KeyguardViewMediator.this) {
+ onSimNotReadyLocked();
+ }
break;
}
}
+ private void onSimNotReadyLocked() {
+ if (isSecure() && mLockWhenSimRemoved) {
+ mLockWhenSimRemoved = false;
+ MetricsLogger.action(mContext,
+ MetricsEvent.ACTION_LOCK_BECAUSE_SIM_REMOVED, mShowing);
+ if (!mShowing) {
+ if (DEBUG_SIM_STATES) Log.d(TAG, "SIM removed, showing keyguard");
+ doKeyguardLocked(null);
+ } else {
+ resetStateLocked();
+ }
+ }
+ }
+
@Override
public void onFingerprintAuthFailed() {
final int currentUser = KeyguardUpdateMonitor.getCurrentUser();
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 8a0dfe5..81d645e 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -2213,6 +2213,14 @@
// ---- End N-MR1 Constants, all N-MR1 constants go above this line ----
+ // ACTION: The lockscreen gets shown because the SIM card was removed
+ // SUBTYPE: false: device was previously unlocked, true: device was previously locked
+ // CATEGORY: GLOBAL_SYSTEM_UI
+ // OS: N-MR2
+ ACTION_LOCK_BECAUSE_SIM_REMOVED = 497;
+
+ // ---- End N-MR2 Constants, all N-MR2 constants go above this line ----
+
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
}