diff options
4 files changed, 73 insertions, 21 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java index bac15a6901d3..8a60b5a070f9 100755 --- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java +++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java @@ -1030,13 +1030,8 @@ public class CDMAPhone extends PhoneBase { case EVENT_NV_READY:{ Log.d(LOG_TAG, "Event EVENT_NV_READY Received"); //Inform the Service State Tracker - mEriManager.loadEriFile(); mNvLoadedRegistrants.notifyRegistrants(); - if(mEriManager.isEriFileLoaded()) { - // when the ERI file is loaded - Log.d(LOG_TAG, "ERI read, notify registrants"); - mEriFileLoadedRegistrants.notifyRegistrants(); - } + prepareEri(); } break; @@ -1424,6 +1419,19 @@ public class CDMAPhone extends PhoneBase { return false; } + public void prepareEri() { + mEriManager.loadEriFile(); + if(mEriManager.isEriFileLoaded()) { + // when the ERI file is loaded + log("ERI read, notify registrants"); + mEriFileLoadedRegistrants.notifyRegistrants(); + } + } + + public boolean isEriFileLoaded() { + return mEriManager.isEriFileLoaded(); + } + protected void log(String s) { if (DBG) Log.d(LOG_TAG, "[CDMAPhone] " + s); diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java index 318cf3728f54..459cf87d5720 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java @@ -21,13 +21,15 @@ import com.android.internal.telephony.MccTable; import com.android.internal.telephony.EventLogTags; import com.android.internal.telephony.RILConstants; +import android.content.Intent; import android.telephony.SignalStrength; import android.telephony.ServiceState; import android.telephony.cdma.CdmaCellLocation; import android.os.AsyncResult; import android.os.Message; +import android.provider.Telephony.Intents; - +import android.text.TextUtils; import android.util.Log; import android.util.EventLog; @@ -37,6 +39,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { CDMALTEPhone mCdmaLtePhone; private ServiceState mLteSS; // The last LTE state from Voice Registration + private String mCurrentSpn = null; public CdmaLteServiceStateTracker(CDMALTEPhone phone) { super(phone); @@ -73,6 +76,9 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { pollState(); // Signal strength polling stops when radio is off. queueNextSignalStrengthPoll(); + + // load ERI file + phone.prepareEri(); break; case EVENT_SIM_RECORDS_LOADED: CdmaLteUiccRecords sim = (CdmaLteUiccRecords)phone.mIccRecords; @@ -84,6 +90,10 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { mIsMinInfoReady = true; updateOtaspState(); } + // SID/NID/PRL is loaded. Poll service state + // again to update to the roaming state with + // the latest variables. + pollState(); break; default: super.handleMessage(msg); @@ -319,7 +329,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { } if (hasChanged) { - if (cm.getNvState().isNVReady()) { + if (phone.isEriFileLoaded()) { String eriText; // Now the CDMAPhone sees the new ServiceState so it can get the // new ERI text @@ -334,13 +344,6 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { } ss.setOperatorAlphaLong(eriText); } - if (cm.getSimState().isSIMReady()) { - // SIM is found on the device. Read the operator name from the card. - ss.setOperatorAlphaLong(phone.mIccRecords.getServiceProviderName()); - - // If SIM card is present, Eri will not be used. Turn it off - ss.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF); - } String operatorNumeric; @@ -465,6 +468,43 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { } @Override + protected void updateSpnDisplay() { + // mOperatorAlphaLong contains the ERI text + String plmn = ss.getOperatorAlphaLong(); + + boolean showSpn = false; + String spn = null; + if (cm.getSimState().isSIMReady()) { + // SIM is found on the device. Read the operator name from the card. + showSpn = ((CdmaLteUiccRecords)phone.mIccRecords).getCsimSpnDisplayCondition(); + spn = phone.mIccRecords.getServiceProviderName(); + + // double check we are not printing identicall test + if (TextUtils.equals(plmn, spn)) showSpn = false; + } + + if (!TextUtils.equals(plmn, mCurPlmn) || + !TextUtils.equals(spn, mCurrentSpn)) { + boolean showPlmn = plmn != null; + if (DBG) { + log(String.format("updateSpnDisplay: changed sending intent" + + " showPlmn='%b' plmn='%s' showSpn='%b' spn='%s'", + showPlmn, plmn, showSpn, spn)); + } + Intent intent = new Intent(Intents.SPN_STRINGS_UPDATED_ACTION); + intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); + intent.putExtra(Intents.EXTRA_SHOW_SPN, showSpn); + intent.putExtra(Intents.EXTRA_SPN, spn); + intent.putExtra(Intents.EXTRA_SHOW_PLMN, showPlmn); + intent.putExtra(Intents.EXTRA_PLMN, plmn); + phone.getContext().sendStickyBroadcast(intent); + } + + mCurPlmn = plmn; + mCurrentSpn = spn; + } + + @Override protected void log(String s) { Log.d(LOG_TAG, "[CdmaLteSST] " + s); } diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java index 73b5d97c8b97..10515f71cfc5 100755 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java @@ -38,7 +38,7 @@ public final class CdmaLteUiccRecords extends SIMRecords { // From CSIM application private byte[] mEFpl = null; private byte[] mEFli = null; - boolean csimSpnDisplayCondition = false; + boolean mCsimSpnDisplayCondition = false; private String mMdn; private String mMin; private String mPrlVersion; @@ -235,7 +235,7 @@ public final class CdmaLteUiccRecords extends SIMRecords { IccUtils.bytesToHexString(data)); // C.S0065 for EF_SPN decoding - csimSpnDisplayCondition = ((0x02 & data[0]) > 0)?true:false; + mCsimSpnDisplayCondition = ((0x01 & data[0]) != 0) ? true : false; int encoding = data[1]; int language = data[2]; @@ -272,7 +272,7 @@ public final class CdmaLteUiccRecords extends SIMRecords { log("spn decode error: " + e); } if (DBG) log("spn=" + spn); - if (DBG) log("spnCondition=" + csimSpnDisplayCondition); + if (DBG) log("spnCondition=" + mCsimSpnDisplayCondition); phone.setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, spn); } @@ -437,6 +437,10 @@ public final class CdmaLteUiccRecords extends SIMRecords { return mPrlVersion; } + public boolean getCsimSpnDisplayCondition() { + return mCsimSpnDisplayCondition; + } + @Override public boolean isProvisioned() { // If UICC card has CSIM app, look for MDN and MIN field diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java index 5ebdd22e3c7e..24a468a7d2c1 100755 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -127,7 +127,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { private static final String WAKELOCK_TAG = "ServiceStateTracker"; /** Contains the name of the registered network in CDMA (either ONS or ERI text). */ - private String curPlmn = null; + protected String mCurPlmn = null; protected String mMdn; private int mHomeSystemId[] = null; @@ -484,7 +484,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { // mOperatorAlphaLong contains the ERI text String plmn = ss.getOperatorAlphaLong(); - if (!TextUtils.equals(plmn, curPlmn)) { + if (!TextUtils.equals(plmn, mCurPlmn)) { // Allow A blank plmn, "" to set showPlmn to true. Previously, we // would set showPlmn to true only if plmn was not empty, i.e. was not // null and not blank. But this would cause us to incorrectly display @@ -503,7 +503,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { phone.getContext().sendStickyBroadcast(intent); } - curPlmn = plmn; + mCurPlmn = plmn; } @Override |