aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/java/com/android/internal/telephony/ServiceStateTracker.java43
1 files changed, 26 insertions, 17 deletions
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 8d1993a613..04241c871e 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -89,9 +89,11 @@ import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.TransportManager;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
+import com.android.internal.telephony.uicc.IccCardStatus.CardState;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.RuimRecords;
import com.android.internal.telephony.uicc.SIMRecords;
+import com.android.internal.telephony.uicc.UiccCard;
import com.android.internal.telephony.uicc.UiccCardApplication;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.util.NotificationChannelController;
@@ -219,7 +221,6 @@ public class ServiceStateTracker extends Handler {
protected static final int EVENT_ALL_DATA_DISCONNECTED = 49;
protected static final int EVENT_PHONE_TYPE_SWITCHED = 50;
protected static final int EVENT_RADIO_POWER_FROM_CARRIER = 51;
- protected static final int EVENT_SIM_NOT_INSERTED = 52;
protected static final int EVENT_IMS_SERVICE_STATE_CHANGED = 53;
protected static final int EVENT_RADIO_POWER_OFF_DONE = 54;
protected static final int EVENT_PHYSICAL_CHANNEL_CONFIG = 55;
@@ -340,14 +341,6 @@ public class ServiceStateTracker extends Handler {
}
// update voicemail count and notify message waiting changed
mPhone.updateVoiceMail();
-
- // cancel notifications if we see SIM_NOT_INSERTED (This happens on bootup before
- // the SIM is first detected and then subsequently on SIM removals)
- if (mSubscriptionController.getSlotIndex(subId)
- == SubscriptionManager.SIM_NOT_INSERTED) {
- // this is handled on the main thread to mitigate racing with setNotification().
- sendMessage(obtainMessage(EVENT_SIM_NOT_INSERTED));
- }
}
}
};
@@ -1015,6 +1008,15 @@ public class ServiceStateTracker extends Handler {
break;
case EVENT_ICC_CHANGED:
+ if (isSimAbsent()) {
+ if (DBG) log("EVENT_ICC_CHANGED: SIM absent");
+ // cancel notifications if SIM is removed/absent
+ cancelAllNotifications();
+ // clear cached values on SIM removal
+ mMdn = null;
+ mMin = null;
+ mIsMinInfoReady = false;
+ }
onUpdateIccAvailability();
if (mUiccApplcation != null
&& mUiccApplcation.getState() != AppState.APPSTATE_READY) {
@@ -1272,14 +1274,6 @@ public class ServiceStateTracker extends Handler {
}
break;
- case EVENT_SIM_NOT_INSERTED:
- if (DBG) log("EVENT_SIM_NOT_INSERTED");
- cancelAllNotifications();
- mMdn = null;
- mMin = null;
- mIsMinInfoReady = false;
- break;
-
case EVENT_ALL_DATA_DISCONNECTED:
int dds = SubscriptionManager.getDefaultDataSubscriptionId();
ProxyController.getInstance().unregisterForAllDataDisconnected(dds, this);
@@ -1475,6 +1469,21 @@ public class ServiceStateTracker extends Handler {
}
}
+ private boolean isSimAbsent() {
+ boolean simAbsent;
+ if (mUiccController == null) {
+ simAbsent = true;
+ } else {
+ UiccCard uiccCard = mUiccController.getUiccCard(mPhone.getPhoneId());
+ if (uiccCard == null) {
+ simAbsent = true;
+ } else {
+ simAbsent = (uiccCard.getCardState() == CardState.CARDSTATE_ABSENT);
+ }
+ }
+ return simAbsent;
+ }
+
private int[] getBandwidthsFromConfigs(List<PhysicalChannelConfig> list) {
return list.stream()
.map(PhysicalChannelConfig::getCellBandwidthDownlink)