summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Beverly Tai <beverlyt@google.com> 2023-06-15 13:12:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-06-15 13:12:44 +0000
commit6fd60cc2056c00d08a291b0b712c750c23191296 (patch)
treeb4ea2cd4f71ff34c8969202804346ff3e16252cb
parent51890ebfa3c1d5e6b184d49d74514d7828144edc (diff)
parent13647d752f526ed15f3ad9bf4653e920b4ddd394 (diff)
Merge "Fix SystemUI mapping SIM state error issue" into udc-dev
-rw-r--r--packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java25
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java72
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java60
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java131
4 files changed, 256 insertions, 32 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java
index a724514f6ec9..b52ee01bfa61 100644
--- a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java
@@ -148,7 +148,8 @@ public class CarrierTextManager {
/**
* The status of this lock screen. Primarily used for widgets on LockScreen.
*/
- private enum StatusMode {
+ @VisibleForTesting
+ protected enum StatusMode {
Normal, // Normal case (sim card present, it's not locked)
NetworkLocked, // SIM card is 'network locked'.
SimMissing, // SIM card is missing.
@@ -158,6 +159,7 @@ public class CarrierTextManager {
SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure
SimNotReady, // SIM is not ready yet. May never be on devices w/o a SIM.
SimIoError, // SIM card is faulty
+ SimRestricted, // SIM Card restricted, present but not usable due to carrier restrictions.
SimUnknown // SIM card is unknown
}
@@ -493,6 +495,7 @@ public class CarrierTextManager {
getContext().getText(R.string.keyguard_sim_error_message_short),
text);
break;
+ case SimRestricted: // fall through
case SimUnknown:
carrierText = null;
break;
@@ -535,19 +538,19 @@ public class CarrierTextManager {
/**
* Determine the current status of the lock screen given the SIM state and other stuff.
*/
- private CarrierTextManager.StatusMode getStatusForIccState(int simState) {
- final boolean missingAndNotProvisioned =
- !mKeyguardUpdateMonitor.isDeviceProvisioned()
- && (simState == TelephonyManager.SIM_STATE_ABSENT
- || simState == TelephonyManager.SIM_STATE_PERM_DISABLED);
-
- // Assume we're NETWORK_LOCKED if not provisioned
- simState = missingAndNotProvisioned ? TelephonyManager.SIM_STATE_NETWORK_LOCKED : simState;
+ @VisibleForTesting
+ protected CarrierTextManager.StatusMode getStatusForIccState(int simState) {
+ if (!mKeyguardUpdateMonitor.isDeviceProvisioned()
+ && (simState == TelephonyManager.SIM_STATE_ABSENT
+ || simState == TelephonyManager.SIM_STATE_PERM_DISABLED)) {
+ return CarrierTextManager.StatusMode.SimMissingLocked;
+ }
+
switch (simState) {
case TelephonyManager.SIM_STATE_ABSENT:
return CarrierTextManager.StatusMode.SimMissing;
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
- return CarrierTextManager.StatusMode.SimMissingLocked;
+ return CarrierTextManager.StatusMode.NetworkLocked;
case TelephonyManager.SIM_STATE_NOT_READY:
return CarrierTextManager.StatusMode.SimNotReady;
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
@@ -562,6 +565,8 @@ public class CarrierTextManager {
return CarrierTextManager.StatusMode.SimUnknown;
case TelephonyManager.SIM_STATE_CARD_IO_ERROR:
return CarrierTextManager.StatusMode.SimIoError;
+ case TelephonyManager.SIM_STATE_CARD_RESTRICTED:
+ return CarrierTextManager.StatusMode.SimRestricted;
}
return CarrierTextManager.StatusMode.SimUnknown;
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index c7e817e5781a..ae061c032429 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -2045,11 +2045,47 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private final HashMap<Integer, Boolean> mIsUnlockWithFingerprintPossible = new HashMap<>();
/**
- * When we receive a
- * {@link com.android.internal.telephony.TelephonyIntents#ACTION_SIM_STATE_CHANGED} broadcast,
+ * When we receive a {@link android.content.Intent#ACTION_SIM_STATE_CHANGED} broadcast,
* and then pass a result via our handler to {@link KeyguardUpdateMonitor#handleSimStateChange},
* we need a single object to pass to the handler. This class helps decode
* the intent and provide a {@link SimData} result.
+ *
+ * Below is the Sim state mapping matrixs:
+ * +---+-----------------------------------------------------+----------------------------+
+ * | |Telephony FWK broadcast with action |SystemUI mapping SIM state |
+ * | |android.content.Intent#ACTION_SIM_STATE_CHANGED |refer to android.telephony. |
+ * |NO.+-------------------------+---------------------------+TelephonyManager#getSimState|
+ * | |EXTRA_SIM_STATE |EXTRA_SIM_LOCKED_REASON | |
+ * | |(Intent#XXX) |(Intent#XXX) |TelephonyManager#SimState |
+ * +===+=====================================================+============================+
+ * |1 |SIM_STATE_UNKNOWN |always null |SIM_STATE_UNKNOWN |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |2 |SIM_STATE_ABSENT |always null |SIM_STATE_ABSENT |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |3 |SIM_STATE_CARD_IO_ERROR |SIM_STATE_CARD_IO_ERROR |SIM_STATE_CARD_IO_ERROR |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |4 |SIM_STATE_CARD_RESTRICTED|SIM_STATE_CARD_RESTRICTED |SIM_STATE_CARD_RESTRICTED |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |5 |SIM_STATE_LOCKED |SIM_LOCKED_ON_PIN |SIM_STATE_PIN_REQUIRED |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |6 |SIM_STATE_LOCKED |SIM_LOCKED_ON_PUK |SIM_STATE_PUK_REQUIRED |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |7 |SIM_STATE_LOCKED |SIM_LOCKED_NETWORK |SIM_STATE_NETWORK_LOCKED |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |8 |SIM_STATE_LOCKED |SIM_ABSENT_ON_PERM_DISABLED|SIM_STATE_PERM_DISABLED |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |9 |SIM_STATE_NOT_READY |always null |SIM_STATE_NOT_READY |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |10 |SIM_STATE_IMSI |always null |SIM_STATE_READY |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |11 |SIM_STATE_READY |always null |SIM_STATE_READY |
+ * +---+-------------------------+---------------------------+----------------------------+
+ * |12 |SIM_STATE_LOADED |always null |SIM_STATE_READY |
+ * +---+-------------------------+---------------------------+----------------------------+
+ *
+ * Note that, it seems #10 imsi ready case(i.e. SIM_STATE_IMSI) is never triggered from
+ * Android Pie(telephony FWK doesn't trigger this broadcast any more), but it is still
+ * OK keep this mapping logic.
*/
private static class SimData {
public int simState;
@@ -2063,26 +2099,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
static SimData fromIntent(Intent intent) {
- int state;
if (!Intent.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {
throw new IllegalArgumentException("only handles intent ACTION_SIM_STATE_CHANGED");
}
+ int state = TelephonyManager.SIM_STATE_UNKNOWN;
String stateExtra = intent.getStringExtra(Intent.EXTRA_SIM_STATE);
int slotId = intent.getIntExtra(SubscriptionManager.EXTRA_SLOT_INDEX, 0);
int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
if (Intent.SIM_STATE_ABSENT.equals(stateExtra)) {
- final String absentReason = intent
- .getStringExtra(Intent.EXTRA_SIM_LOCKED_REASON);
-
- if (Intent.SIM_ABSENT_ON_PERM_DISABLED.equals(
- absentReason)) {
- state = TelephonyManager.SIM_STATE_PERM_DISABLED;
- } else {
- state = TelephonyManager.SIM_STATE_ABSENT;
- }
- } else if (Intent.SIM_STATE_READY.equals(stateExtra)) {
- state = TelephonyManager.SIM_STATE_READY;
+ state = TelephonyManager.SIM_STATE_ABSENT;
} else if (Intent.SIM_STATE_LOCKED.equals(stateExtra)) {
final String lockedReason = intent
.getStringExtra(Intent.EXTRA_SIM_LOCKED_REASON);
@@ -2090,22 +2116,24 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
state = TelephonyManager.SIM_STATE_PIN_REQUIRED;
} else if (Intent.SIM_LOCKED_ON_PUK.equals(lockedReason)) {
state = TelephonyManager.SIM_STATE_PUK_REQUIRED;
+ } else if (Intent.SIM_LOCKED_NETWORK.equals(lockedReason)) {
+ state = TelephonyManager.SIM_STATE_NETWORK_LOCKED;
} else if (Intent.SIM_ABSENT_ON_PERM_DISABLED.equals(lockedReason)) {
state = TelephonyManager.SIM_STATE_PERM_DISABLED;
- } else {
- state = TelephonyManager.SIM_STATE_UNKNOWN;
}
- } else if (Intent.SIM_LOCKED_NETWORK.equals(stateExtra)) {
- state = TelephonyManager.SIM_STATE_NETWORK_LOCKED;
} else if (Intent.SIM_STATE_CARD_IO_ERROR.equals(stateExtra)) {
state = TelephonyManager.SIM_STATE_CARD_IO_ERROR;
- } else if (Intent.SIM_STATE_LOADED.equals(stateExtra)
+ } else if (Intent.SIM_STATE_CARD_RESTRICTED.equals(stateExtra)) {
+ state = TelephonyManager.SIM_STATE_CARD_RESTRICTED;
+ } else if (Intent.SIM_STATE_NOT_READY.equals(stateExtra)) {
+ state = TelephonyManager.SIM_STATE_NOT_READY;
+ } else if (Intent.SIM_STATE_READY.equals(stateExtra)
+ || Intent.SIM_STATE_LOADED.equals(stateExtra)
|| Intent.SIM_STATE_IMSI.equals(stateExtra)) {
- // This is required because telephony doesn't return to "READY" after
+ // Mapping SIM_STATE_LOADED and SIM_STATE_IMSI to SIM_STATE_READY is required
+ // because telephony doesn't return to "READY" after
// these state transitions. See bug 7197471.
state = TelephonyManager.SIM_STATE_READY;
- } else {
- state = TelephonyManager.SIM_STATE_UNKNOWN;
}
return new SimData(state, slotId, subId);
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java
index 48a8d1bc90d7..e7d420bcb32b 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java
@@ -561,6 +561,66 @@ public class CarrierTextManagerTest extends SysuiTestCase {
captor.getValue().carrierText);
}
+ @Test
+ public void testGetStatusForIccState() {
+ when(mKeyguardUpdateMonitor.isDeviceProvisioned()).thenReturn(false);
+ assertEquals(CarrierTextManager.StatusMode.SimMissingLocked,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_ABSENT));
+ assertEquals(CarrierTextManager.StatusMode.NetworkLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_NETWORK_LOCKED));
+ assertEquals(CarrierTextManager.StatusMode.SimNotReady,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_NOT_READY));
+ assertEquals(CarrierTextManager.StatusMode.SimLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_PIN_REQUIRED));
+ assertEquals(CarrierTextManager.StatusMode.SimPukLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_PUK_REQUIRED));
+ assertEquals(CarrierTextManager.StatusMode.Normal,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_READY));
+ assertEquals(CarrierTextManager.StatusMode.SimMissingLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_PERM_DISABLED));
+ assertEquals(CarrierTextManager.StatusMode.SimUnknown,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_UNKNOWN));
+ assertEquals(CarrierTextManager.StatusMode.SimIoError,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_CARD_IO_ERROR));
+ assertEquals(CarrierTextManager.StatusMode.SimRestricted,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_CARD_RESTRICTED));
+
+ when(mKeyguardUpdateMonitor.isDeviceProvisioned()).thenReturn(true);
+ assertEquals(CarrierTextManager.StatusMode.SimMissing,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_ABSENT));
+ assertEquals(CarrierTextManager.StatusMode.NetworkLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_NETWORK_LOCKED));
+ assertEquals(CarrierTextManager.StatusMode.SimNotReady,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_NOT_READY));
+ assertEquals(CarrierTextManager.StatusMode.SimLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_PIN_REQUIRED));
+ assertEquals(CarrierTextManager.StatusMode.SimPukLocked,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_PUK_REQUIRED));
+ assertEquals(CarrierTextManager.StatusMode.Normal,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_READY));
+ assertEquals(CarrierTextManager.StatusMode.SimPermDisabled,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_PERM_DISABLED));
+ assertEquals(CarrierTextManager.StatusMode.SimUnknown,
+ mCarrierTextManager.getStatusForIccState(TelephonyManager.SIM_STATE_UNKNOWN));
+ assertEquals(CarrierTextManager.StatusMode.SimIoError,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_CARD_IO_ERROR));
+ assertEquals(CarrierTextManager.StatusMode.SimRestricted,
+ mCarrierTextManager.getStatusForIccState(
+ TelephonyManager.SIM_STATE_CARD_RESTRICTED));
+ }
+
private Context getContextSpyForStickyBroadcast(Intent returnVal) {
Context contextSpy = spy(mContext);
doReturn(returnVal).when(contextSpy).registerReceiver(eq(null), any(IntentFilter.class));
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index de306d669476..1e675f8e4540 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -167,6 +167,7 @@ import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -672,6 +673,130 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
}
@Test
+ public void testHandleSimStateChange_Unknown() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_UNKNOWN);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_UNKNOWN,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
+ public void testHandleSimStateChange_Absent() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_ABSENT);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_ABSENT,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
+ public void testHandleSimStateChange_CardIOError() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_CARD_IO_ERROR);
+ intent.putExtra(Intent.EXTRA_SIM_LOCKED_REASON, Intent.SIM_STATE_CARD_IO_ERROR);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_CARD_IO_ERROR,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
+ public void testHandleSimStateChange_CardRestricted() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_CARD_RESTRICTED);
+ intent.putExtra(Intent.EXTRA_SIM_LOCKED_REASON, Intent.SIM_STATE_CARD_RESTRICTED);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_CARD_RESTRICTED,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
+ public void testHandleSimStateChange_Locked() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_LOCKED);
+
+ // locked on PIN1
+ intent.putExtra(Intent.EXTRA_SIM_LOCKED_REASON, Intent.SIM_LOCKED_ON_PIN);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, true));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_PIN_REQUIRED,
+ mKeyguardUpdateMonitor.getCachedSimState());
+
+ // locked on PUK1
+ intent.putExtra(Intent.EXTRA_SIM_LOCKED_REASON, Intent.SIM_LOCKED_ON_PUK);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, true));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_PUK_REQUIRED,
+ mKeyguardUpdateMonitor.getCachedSimState());
+
+ // locked on network personalization
+ intent.putExtra(Intent.EXTRA_SIM_LOCKED_REASON, Intent.SIM_LOCKED_NETWORK);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, true));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_NETWORK_LOCKED,
+ mKeyguardUpdateMonitor.getCachedSimState());
+
+ // permanently disabled due to puk fails
+ intent.putExtra(Intent.EXTRA_SIM_LOCKED_REASON, Intent.SIM_ABSENT_ON_PERM_DISABLED);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, true));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_PERM_DISABLED,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
+ public void testHandleSimStateChange_NotReady() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_NOT_READY);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_NOT_READY,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
+ public void testHandleSimStateChange_Ready() {
+ Intent intent = new Intent(Intent.ACTION_SIM_STATE_CHANGED);
+
+ // ICC IMSI is ready in property
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_IMSI);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_READY,
+ mKeyguardUpdateMonitor.getCachedSimState());
+
+ // ICC is ready to access
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_READY);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, false));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_READY,
+ mKeyguardUpdateMonitor.getCachedSimState());
+
+ // all ICC records, including IMSI, are loaded
+ intent.putExtra(Intent.EXTRA_SIM_STATE, Intent.SIM_STATE_LOADED);
+ mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(),
+ putPhoneInfo(intent, null, true));
+ mTestableLooper.processAllMessages();
+ Assert.assertEquals(TelephonyManager.SIM_STATE_READY,
+ mKeyguardUpdateMonitor.getCachedSimState());
+ }
+
+ @Test
public void testTriesToAuthenticateFingerprint_whenKeyguard() {
mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */);
mTestableLooper.processAllMessages();
@@ -3122,6 +3247,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private class TestableKeyguardUpdateMonitor extends KeyguardUpdateMonitor {
AtomicBoolean mSimStateChanged = new AtomicBoolean(false);
+ AtomicInteger mCachedSimState = new AtomicInteger(-1);
protected TestableKeyguardUpdateMonitor(Context context) {
super(context, mUserTracker,
@@ -3144,9 +3270,14 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
return mSimStateChanged.getAndSet(false);
}
+ public int getCachedSimState() {
+ return mCachedSimState.getAndSet(-1);
+ }
+
@Override
protected void handleSimStateChange(int subId, int slotId, int state) {
mSimStateChanged.set(true);
+ mCachedSimState.set(state);
super.handleSimStateChange(subId, slotId, state);
}