Merge "Hide keyguard when SIM transitions to READY"
This commit is contained in:
@@ -62,6 +62,7 @@ import android.telephony.TelephonyManager;
|
||||
import android.util.EventLog;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -294,6 +295,13 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
|
||||
*/
|
||||
private final SparseIntArray mLastSimStates = new SparseIntArray();
|
||||
|
||||
/**
|
||||
* Indicates if a SIM card had the SIM PIN enabled during the initialization, before
|
||||
* reaching the SIM_STATE_READY state. The flag is reset to false at SIM_STATE_READY.
|
||||
* Index is the slotId - in case of multiple SIM cards.
|
||||
*/
|
||||
private final SparseBooleanArray mSimWasLocked = new SparseBooleanArray();
|
||||
|
||||
private boolean mDeviceInteractive;
|
||||
private boolean mGoingToSleep;
|
||||
|
||||
@@ -465,10 +473,10 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
|
||||
}
|
||||
}
|
||||
|
||||
boolean simWasLocked;
|
||||
boolean lastSimStateWasLocked;
|
||||
synchronized (KeyguardViewMediator.this) {
|
||||
int lastState = mLastSimStates.get(slotId);
|
||||
simWasLocked = (lastState == TelephonyManager.SIM_STATE_PIN_REQUIRED
|
||||
lastSimStateWasLocked = (lastState == TelephonyManager.SIM_STATE_PIN_REQUIRED
|
||||
|| lastState == TelephonyManager.SIM_STATE_PUK_REQUIRED);
|
||||
mLastSimStates.append(slotId, simState);
|
||||
}
|
||||
@@ -492,17 +500,19 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
|
||||
if (simState == TelephonyManager.SIM_STATE_ABSENT) {
|
||||
// MVNO SIMs can become transiently NOT_READY when switching networks,
|
||||
// so we should only lock when they are ABSENT.
|
||||
if (simWasLocked) {
|
||||
if (lastSimStateWasLocked) {
|
||||
if (DEBUG_SIM_STATES) Log.d(TAG, "SIM moved to ABSENT when the "
|
||||
+ "previous state was locked. Reset the state.");
|
||||
resetStateLocked();
|
||||
}
|
||||
mSimWasLocked.append(slotId, false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
|
||||
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
|
||||
synchronized (KeyguardViewMediator.this) {
|
||||
mSimWasLocked.append(slotId, true);
|
||||
if (!mShowing) {
|
||||
if (DEBUG_SIM_STATES) Log.d(TAG,
|
||||
"INTENT_VALUE_ICC_LOCKED and keygaurd isn't "
|
||||
@@ -529,9 +539,10 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
|
||||
case TelephonyManager.SIM_STATE_READY:
|
||||
synchronized (KeyguardViewMediator.this) {
|
||||
if (DEBUG_SIM_STATES) Log.d(TAG, "READY, reset state? " + mShowing);
|
||||
if (mShowing && simWasLocked) {
|
||||
if (mShowing && mSimWasLocked.get(slotId, false)) {
|
||||
if (DEBUG_SIM_STATES) Log.d(TAG, "SIM moved to READY when the "
|
||||
+ "previous state was locked. Reset the state.");
|
||||
+ "previously was locked. Reset the state.");
|
||||
mSimWasLocked.append(slotId, false);
|
||||
resetStateLocked();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user