Make FSM for loading SPN more robust
Let FSM for loading SPN continue if the loaded
data is null or empty.
Change-Id: Ie0a138edb62a02761108b9dbf117d9199ef8354b
diff --git a/src/java/com/android/internal/telephony/uicc/SIMRecords.java b/src/java/com/android/internal/telephony/uicc/SIMRecords.java
index 06ea59b..7df7aa4 100644
--- a/src/java/com/android/internal/telephony/uicc/SIMRecords.java
+++ b/src/java/com/android/internal/telephony/uicc/SIMRecords.java
@@ -1732,22 +1732,32 @@
if (ar != null && ar.exception == null) {
data = (byte[]) ar.result;
mSpnDisplayCondition = 0xff & data[0];
+
setServiceProviderName(IccUtils.adnStringFieldToString(
data, 1, data.length - 1));
+ // for card double-check and brand override
+ // we have to do this:
+ final String spn = getServiceProviderName();
- if (DBG) log("Load EF_SPN: " + getServiceProviderName()
- + " spnDisplayCondition: " + mSpnDisplayCondition);
- mTelephonyManager.setSimOperatorNameForPhone(
- mParentApp.getPhoneId(), getServiceProviderName());
+ if (spn == null || spn.length() == 0) {
+ mSpnState = GetSpnFsmState.READ_SPN_CPHS;
+ } else {
+ if (DBG) log("Load EF_SPN: " + spn
+ + " spnDisplayCondition: " + mSpnDisplayCondition);
+ mTelephonyManager.setSimOperatorNameForPhone(
+ mParentApp.getPhoneId(), spn);
- mSpnState = GetSpnFsmState.IDLE;
+ mSpnState = GetSpnFsmState.IDLE;
+ }
} else {
+ mSpnState = GetSpnFsmState.READ_SPN_CPHS;
+ }
+
+ if (mSpnState == GetSpnFsmState.READ_SPN_CPHS) {
mFh.loadEFTransparent( EF_SPN_CPHS,
obtainMessage(EVENT_GET_SPN_DONE));
mRecordsToLoad++;
- mSpnState = GetSpnFsmState.READ_SPN_CPHS;
-
// See TS 51.011 10.3.11. Basically, default to
// show PLMN always, and SPN also if roaming.
mSpnDisplayCondition = -1;
@@ -1756,34 +1766,57 @@
case READ_SPN_CPHS:
if (ar != null && ar.exception == null) {
data = (byte[]) ar.result;
- setServiceProviderName(IccUtils.adnStringFieldToString(data, 0, data.length));
- // Display CPHS Operator Name only when not roaming
- mSpnDisplayCondition = 2;
- if (DBG) log("Load EF_SPN_CPHS: " + getServiceProviderName());
- mTelephonyManager.setSimOperatorNameForPhone(
- mParentApp.getPhoneId(), getServiceProviderName());
+ setServiceProviderName(IccUtils.adnStringFieldToString(
+ data, 0, data.length));
+ // for card double-check and brand override
+ // we have to do this:
+ final String spn = getServiceProviderName();
- mSpnState = GetSpnFsmState.IDLE;
+ if (spn == null || spn.length() == 0) {
+ mSpnState = GetSpnFsmState.READ_SPN_SHORT_CPHS;
+ } else {
+ // Display CPHS Operator Name only when not roaming
+ mSpnDisplayCondition = 2;
+
+ if (DBG) log("Load EF_SPN_CPHS: " + spn);
+ mTelephonyManager.setSimOperatorNameForPhone(
+ mParentApp.getPhoneId(), spn);
+
+ mSpnState = GetSpnFsmState.IDLE;
+ }
} else {
+ mSpnState = GetSpnFsmState.READ_SPN_SHORT_CPHS;
+ }
+
+ if (mSpnState == GetSpnFsmState.READ_SPN_SHORT_CPHS) {
mFh.loadEFTransparent(
EF_SPN_SHORT_CPHS, obtainMessage(EVENT_GET_SPN_DONE));
mRecordsToLoad++;
-
- mSpnState = GetSpnFsmState.READ_SPN_SHORT_CPHS;
}
break;
case READ_SPN_SHORT_CPHS:
if (ar != null && ar.exception == null) {
data = (byte[]) ar.result;
- setServiceProviderName(IccUtils.adnStringFieldToString(data, 0, data.length));
- // Display CPHS Operator Name only when not roaming
- mSpnDisplayCondition = 2;
- if (DBG) log("Load EF_SPN_SHORT_CPHS: " + getServiceProviderName());
- mTelephonyManager.setSimOperatorNameForPhone(
- mParentApp.getPhoneId(), getServiceProviderName());
- }else {
+ setServiceProviderName(IccUtils.adnStringFieldToString(
+ data, 0, data.length));
+ // for card double-check and brand override
+ // we have to do this:
+ final String spn = getServiceProviderName();
+
+ if (spn == null || spn.length() == 0) {
+ if (DBG) log("No SPN loaded in either CHPS or 3GPP");
+ } else {
+ // Display CPHS Operator Name only when not roaming
+ mSpnDisplayCondition = 2;
+
+ if (DBG) log("Load EF_SPN_SHORT_CPHS: " + spn);
+ mTelephonyManager.setSimOperatorNameForPhone(
+ mParentApp.getPhoneId(), spn);
+ }
+ } else {
+ setServiceProviderName(null);
if (DBG) log("No SPN loaded in either CHPS or 3GPP");
}