Re-register for IccStatus changes on SIM_STATE_CHANGED.
Anything that relies on Phone.getIccCard() needs to re-query the
card on SIM_STATE_CHANGED as in the absence of a SIM a dummy
object is returned from Phone.
Test: manual (verified from logs that re-registration is done
with real IccCard object after SIM state changed)
Bug: 116190181
Change-Id: I11221e2109d650be96b7e5d582310f01a199a50d
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index a5cd06b..3d82e74 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -598,14 +598,22 @@
airplaneMode = AIRPLANE_ON;
}
handleAirplaneModeChange(context, airplaneMode);
- } else if ((action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) &&
- (mPUKEntryActivity != null)) {
- // if an attempt to un-PUK-lock the device was made, while we're
- // receiving this state change notification, notify the handler.
- // NOTE: This is ONLY triggered if an attempt to un-PUK-lock has
- // been attempted.
- mHandler.sendMessage(mHandler.obtainMessage(EVENT_SIM_STATE_CHANGED,
- intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE)));
+ } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
+ // re-register as it may be a new IccCard
+ int phoneId = intent.getIntExtra(PhoneConstants.PHONE_KEY,
+ SubscriptionManager.INVALID_PHONE_INDEX);
+ if (SubscriptionManager.isValidPhoneId(phoneId)) {
+ PhoneUtils.unregisterIccStatus(mHandler, phoneId);
+ PhoneUtils.registerIccStatus(mHandler, EVENT_SIM_NETWORK_LOCKED, phoneId);
+ }
+ if (mPUKEntryActivity != null) {
+ // if an attempt to un-PUK-lock the device was made, while we're
+ // receiving this state change notification, notify the handler.
+ // NOTE: This is ONLY triggered if an attempt to un-PUK-lock has
+ // been attempted.
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_SIM_STATE_CHANGED,
+ intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE)));
+ }
} else if (action.equals(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED)) {
String newPhone = intent.getStringExtra(PhoneConstants.PHONE_NAME_KEY);
Log.d(LOG_TAG, "Radio technology switched. Now " + newPhone + " is active.");