Merge "Fix SystemUI mapping SIM state error issue" into udc-dev
This commit is contained in:
@@ -148,7 +148,8 @@ public class CarrierTextManager {
|
|||||||
/**
|
/**
|
||||||
* The status of this lock screen. Primarily used for widgets on LockScreen.
|
* 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)
|
Normal, // Normal case (sim card present, it's not locked)
|
||||||
NetworkLocked, // SIM card is 'network locked'.
|
NetworkLocked, // SIM card is 'network locked'.
|
||||||
SimMissing, // SIM card is missing.
|
SimMissing, // SIM card is missing.
|
||||||
@@ -158,6 +159,7 @@ public class CarrierTextManager {
|
|||||||
SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure
|
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.
|
SimNotReady, // SIM is not ready yet. May never be on devices w/o a SIM.
|
||||||
SimIoError, // SIM card is faulty
|
SimIoError, // SIM card is faulty
|
||||||
|
SimRestricted, // SIM Card restricted, present but not usable due to carrier restrictions.
|
||||||
SimUnknown // SIM card is unknown
|
SimUnknown // SIM card is unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -493,6 +495,7 @@ public class CarrierTextManager {
|
|||||||
getContext().getText(R.string.keyguard_sim_error_message_short),
|
getContext().getText(R.string.keyguard_sim_error_message_short),
|
||||||
text);
|
text);
|
||||||
break;
|
break;
|
||||||
|
case SimRestricted: // fall through
|
||||||
case SimUnknown:
|
case SimUnknown:
|
||||||
carrierText = null;
|
carrierText = null;
|
||||||
break;
|
break;
|
||||||
@@ -535,19 +538,19 @@ public class CarrierTextManager {
|
|||||||
/**
|
/**
|
||||||
* Determine the current status of the lock screen given the SIM state and other stuff.
|
* Determine the current status of the lock screen given the SIM state and other stuff.
|
||||||
*/
|
*/
|
||||||
private CarrierTextManager.StatusMode getStatusForIccState(int simState) {
|
@VisibleForTesting
|
||||||
final boolean missingAndNotProvisioned =
|
protected CarrierTextManager.StatusMode getStatusForIccState(int simState) {
|
||||||
!mKeyguardUpdateMonitor.isDeviceProvisioned()
|
if (!mKeyguardUpdateMonitor.isDeviceProvisioned()
|
||||||
&& (simState == TelephonyManager.SIM_STATE_ABSENT
|
&& (simState == TelephonyManager.SIM_STATE_ABSENT
|
||||||
|| simState == TelephonyManager.SIM_STATE_PERM_DISABLED);
|
|| simState == TelephonyManager.SIM_STATE_PERM_DISABLED)) {
|
||||||
|
return CarrierTextManager.StatusMode.SimMissingLocked;
|
||||||
|
}
|
||||||
|
|
||||||
// Assume we're NETWORK_LOCKED if not provisioned
|
|
||||||
simState = missingAndNotProvisioned ? TelephonyManager.SIM_STATE_NETWORK_LOCKED : simState;
|
|
||||||
switch (simState) {
|
switch (simState) {
|
||||||
case TelephonyManager.SIM_STATE_ABSENT:
|
case TelephonyManager.SIM_STATE_ABSENT:
|
||||||
return CarrierTextManager.StatusMode.SimMissing;
|
return CarrierTextManager.StatusMode.SimMissing;
|
||||||
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
|
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
|
||||||
return CarrierTextManager.StatusMode.SimMissingLocked;
|
return CarrierTextManager.StatusMode.NetworkLocked;
|
||||||
case TelephonyManager.SIM_STATE_NOT_READY:
|
case TelephonyManager.SIM_STATE_NOT_READY:
|
||||||
return CarrierTextManager.StatusMode.SimNotReady;
|
return CarrierTextManager.StatusMode.SimNotReady;
|
||||||
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
|
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
|
||||||
@@ -562,6 +565,8 @@ public class CarrierTextManager {
|
|||||||
return CarrierTextManager.StatusMode.SimUnknown;
|
return CarrierTextManager.StatusMode.SimUnknown;
|
||||||
case TelephonyManager.SIM_STATE_CARD_IO_ERROR:
|
case TelephonyManager.SIM_STATE_CARD_IO_ERROR:
|
||||||
return CarrierTextManager.StatusMode.SimIoError;
|
return CarrierTextManager.StatusMode.SimIoError;
|
||||||
|
case TelephonyManager.SIM_STATE_CARD_RESTRICTED:
|
||||||
|
return CarrierTextManager.StatusMode.SimRestricted;
|
||||||
}
|
}
|
||||||
return CarrierTextManager.StatusMode.SimUnknown;
|
return CarrierTextManager.StatusMode.SimUnknown;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2045,11 +2045,47 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
|||||||
private final HashMap<Integer, Boolean> mIsUnlockWithFingerprintPossible = new HashMap<>();
|
private final HashMap<Integer, Boolean> mIsUnlockWithFingerprintPossible = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When we receive a
|
* When we receive a {@link android.content.Intent#ACTION_SIM_STATE_CHANGED} broadcast,
|
||||||
* {@link com.android.internal.telephony.TelephonyIntents#ACTION_SIM_STATE_CHANGED} broadcast,
|
|
||||||
* and then pass a result via our handler to {@link KeyguardUpdateMonitor#handleSimStateChange},
|
* 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
|
* we need a single object to pass to the handler. This class helps decode
|
||||||
* the intent and provide a {@link SimData} result.
|
* 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 {
|
private static class SimData {
|
||||||
public int simState;
|
public int simState;
|
||||||
@@ -2063,26 +2099,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
|||||||
}
|
}
|
||||||
|
|
||||||
static SimData fromIntent(Intent intent) {
|
static SimData fromIntent(Intent intent) {
|
||||||
int state;
|
|
||||||
if (!Intent.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {
|
if (!Intent.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {
|
||||||
throw new IllegalArgumentException("only handles intent ACTION_SIM_STATE_CHANGED");
|
throw new IllegalArgumentException("only handles intent ACTION_SIM_STATE_CHANGED");
|
||||||
}
|
}
|
||||||
|
int state = TelephonyManager.SIM_STATE_UNKNOWN;
|
||||||
String stateExtra = intent.getStringExtra(Intent.EXTRA_SIM_STATE);
|
String stateExtra = intent.getStringExtra(Intent.EXTRA_SIM_STATE);
|
||||||
int slotId = intent.getIntExtra(SubscriptionManager.EXTRA_SLOT_INDEX, 0);
|
int slotId = intent.getIntExtra(SubscriptionManager.EXTRA_SLOT_INDEX, 0);
|
||||||
int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
|
int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
|
||||||
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
||||||
if (Intent.SIM_STATE_ABSENT.equals(stateExtra)) {
|
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;
|
state = TelephonyManager.SIM_STATE_ABSENT;
|
||||||
}
|
|
||||||
} else if (Intent.SIM_STATE_READY.equals(stateExtra)) {
|
|
||||||
state = TelephonyManager.SIM_STATE_READY;
|
|
||||||
} else if (Intent.SIM_STATE_LOCKED.equals(stateExtra)) {
|
} else if (Intent.SIM_STATE_LOCKED.equals(stateExtra)) {
|
||||||
final String lockedReason = intent
|
final String lockedReason = intent
|
||||||
.getStringExtra(Intent.EXTRA_SIM_LOCKED_REASON);
|
.getStringExtra(Intent.EXTRA_SIM_LOCKED_REASON);
|
||||||
@@ -2090,22 +2116,24 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
|||||||
state = TelephonyManager.SIM_STATE_PIN_REQUIRED;
|
state = TelephonyManager.SIM_STATE_PIN_REQUIRED;
|
||||||
} else if (Intent.SIM_LOCKED_ON_PUK.equals(lockedReason)) {
|
} else if (Intent.SIM_LOCKED_ON_PUK.equals(lockedReason)) {
|
||||||
state = TelephonyManager.SIM_STATE_PUK_REQUIRED;
|
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)) {
|
} else if (Intent.SIM_ABSENT_ON_PERM_DISABLED.equals(lockedReason)) {
|
||||||
state = TelephonyManager.SIM_STATE_PERM_DISABLED;
|
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)) {
|
} else if (Intent.SIM_STATE_CARD_IO_ERROR.equals(stateExtra)) {
|
||||||
state = TelephonyManager.SIM_STATE_CARD_IO_ERROR;
|
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)) {
|
|| 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.
|
// these state transitions. See bug 7197471.
|
||||||
state = TelephonyManager.SIM_STATE_READY;
|
state = TelephonyManager.SIM_STATE_READY;
|
||||||
} else {
|
|
||||||
state = TelephonyManager.SIM_STATE_UNKNOWN;
|
|
||||||
}
|
}
|
||||||
return new SimData(state, slotId, subId);
|
return new SimData(state, slotId, subId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -561,6 +561,66 @@ public class CarrierTextManagerTest extends SysuiTestCase {
|
|||||||
captor.getValue().carrierText);
|
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) {
|
private Context getContextSpyForStickyBroadcast(Intent returnVal) {
|
||||||
Context contextSpy = spy(mContext);
|
Context contextSpy = spy(mContext);
|
||||||
doReturn(returnVal).when(contextSpy).registerReceiver(eq(null), any(IntentFilter.class));
|
doReturn(returnVal).when(contextSpy).registerReceiver(eq(null), any(IntentFilter.class));
|
||||||
|
|||||||
@@ -167,6 +167,7 @@ import java.util.Random;
|
|||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidTestingRunner.class)
|
@RunWith(AndroidTestingRunner.class)
|
||||||
@@ -671,6 +672,130 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
|||||||
verify(mTestCallback, times(2)).onRefreshCarrierInfo();
|
verify(mTestCallback, times(2)).onRefreshCarrierInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Test
|
||||||
public void testTriesToAuthenticateFingerprint_whenKeyguard() {
|
public void testTriesToAuthenticateFingerprint_whenKeyguard() {
|
||||||
mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */);
|
mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */);
|
||||||
@@ -3122,6 +3247,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
|||||||
|
|
||||||
private class TestableKeyguardUpdateMonitor extends KeyguardUpdateMonitor {
|
private class TestableKeyguardUpdateMonitor extends KeyguardUpdateMonitor {
|
||||||
AtomicBoolean mSimStateChanged = new AtomicBoolean(false);
|
AtomicBoolean mSimStateChanged = new AtomicBoolean(false);
|
||||||
|
AtomicInteger mCachedSimState = new AtomicInteger(-1);
|
||||||
|
|
||||||
protected TestableKeyguardUpdateMonitor(Context context) {
|
protected TestableKeyguardUpdateMonitor(Context context) {
|
||||||
super(context, mUserTracker,
|
super(context, mUserTracker,
|
||||||
@@ -3144,9 +3270,14 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
|
|||||||
return mSimStateChanged.getAndSet(false);
|
return mSimStateChanged.getAndSet(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCachedSimState() {
|
||||||
|
return mCachedSimState.getAndSet(-1);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleSimStateChange(int subId, int slotId, int state) {
|
protected void handleSimStateChange(int subId, int slotId, int state) {
|
||||||
mSimStateChanged.set(true);
|
mSimStateChanged.set(true);
|
||||||
|
mCachedSimState.set(state);
|
||||||
super.handleSimStateChange(subId, slotId, state);
|
super.handleSimStateChange(subId, slotId, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user