Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +1 −46 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ import com.android.ims.ImsManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.cdma.CdmaMmiCode; import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.cdma.EriManager; import com.android.internal.telephony.dataconnection.DataEnabledSettings; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; Loading Loading @@ -142,11 +141,7 @@ public class GsmCdmaPhone extends Phone { public static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer private CdmaSubscriptionSourceManager mCdmaSSM; public int mCdmaSubscriptionSource = CdmaSubscriptionSourceManager.SUBSCRIPTION_SOURCE_UNKNOWN; @UnsupportedAppUsage public EriManager mEriManager; private PowerManager.WakeLock mWakeLock; // mEriFileLoadedRegistrants are informed after the ERI text has been loaded private final RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); // mEcmExitRespRegistrant is informed after the phone has been exited @UnsupportedAppUsage private Registrant mEcmExitRespRegistrant; Loading Loading @@ -333,8 +328,6 @@ public class GsmCdmaPhone extends Phone { mCdmaSSM = mTelephonyComponentFactory.inject(CdmaSubscriptionSourceManager.class.getName()) .getCdmaSubscriptionSourceManagerInstance(mContext, mCi, this, EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null); mEriManager = mTelephonyComponentFactory.inject(EriManager.class.getName()) .makeEriManager(this, mContext, EriManager.ERI_FROM_XML); mCi.setEmergencyCallbackMode(this, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); mCi.registerForExitEmergencyCallbackMode(this, EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE, null); Loading Loading @@ -2526,11 +2519,6 @@ public class GsmCdmaPhone extends Phone { } else { loge("didn't get the cdma_roaming_mode changes from the carrier config."); } // Load the ERI based on carrier config. Carrier might have their specific ERI. prepareEri(); mSST.pollState(); break; case EVENT_SET_ROAMING_PREFERENCE_DONE: Loading Loading @@ -2942,38 +2930,6 @@ public class GsmCdmaPhone extends Phone { return mIccPhoneBookIntManager; } //CDMA public void registerForEriFileLoaded(Handler h, int what, Object obj) { Registrant r = new Registrant (h, what, obj); mEriFileLoadedRegistrants.add(r); } //CDMA public void unregisterForEriFileLoaded(Handler h) { mEriFileLoadedRegistrants.remove(h); } //CDMA public void prepareEri() { if (mEriManager == null) { Rlog.e(LOG_TAG, "PrepareEri: Trying to access stale objects"); return; } mEriManager.loadEriFile(); if(mEriManager.isEriFileLoaded()) { // when the ERI file is loaded logd("ERI read, notify registrants"); mEriFileLoadedRegistrants.notifyRegistrants(); } } //CDMA @UnsupportedAppUsage public boolean isEriFileLoaded() { return mEriManager.isEriFileLoaded(); } /** * Activate or deactivate cell broadcast SMS. * Loading Loading @@ -3450,7 +3406,7 @@ public class GsmCdmaPhone extends Phone { } else { int roamInd = getServiceState().getCdmaRoamingIndicator(); int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); return mEriManager.getCdmaEriText(roamInd, defRoamInd); return mSST.getCdmaEriText(roamInd, defRoamInd); } } Loading Loading @@ -3659,7 +3615,6 @@ public class GsmCdmaPhone extends Phone { if (VDBG) pw.println(" mVmNumber=" + mVmNumber); pw.println(" mCdmaSSM=" + mCdmaSSM); pw.println(" mCdmaSubscriptionSource=" + mCdmaSubscriptionSource); pw.println(" mEriManager=" + mEriManager); pw.println(" mWakeLock=" + mWakeLock); pw.println(" isInEcm()=" + isInEcm()); if (VDBG) pw.println(" mEsn=" + mEsn); Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +89 −122 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.provider.Telephony.ServiceStateTable.getUriForSubscription import static com.android.internal.telephony.CarrierActionAgent.CARRIER_ACTION_SET_RADIO_ENABLED; import android.Manifest.permission; import android.annotation.NonNull; import android.annotation.UnsupportedAppUsage; import android.app.AlarmManager; import android.app.Notification; Loading Loading @@ -86,6 +87,7 @@ import android.util.TimestampedValue; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.cdma.EriInfo; import com.android.internal.telephony.cdma.EriManager; import com.android.internal.telephony.dataconnection.DataConnection; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; Loading Loading @@ -241,7 +243,6 @@ public class ServiceStateTracker extends Handler { protected static final int EVENT_RUIM_RECORDS_LOADED = 27; protected static final int EVENT_POLL_STATE_CDMA_SUBSCRIPTION = 34; protected static final int EVENT_NV_READY = 35; protected static final int EVENT_ERI_FILE_LOADED = 36; protected static final int EVENT_OTA_PROVISION_STATUS_CHANGE = 37; protected static final int EVENT_SET_RADIO_POWER_OFF = 38; protected static final int EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 39; Loading @@ -262,6 +263,7 @@ public class ServiceStateTracker extends Handler { protected static final int EVENT_RADIO_POWER_OFF_DONE = 54; protected static final int EVENT_PHYSICAL_CHANNEL_CONFIG = 55; protected static final int EVENT_CELL_LOCATION_RESPONSE = 56; protected static final int EVENT_CARRIER_CONFIG_CHANGED = 57; private List<Message> mPendingCellInfoRequests = new LinkedList<Message>(); // @GuardedBy("mPendingCellInfoRequests") Loading Loading @@ -401,6 +403,7 @@ public class ServiceStateTracker extends Handler { private CellIdentity mNewCellIdentity; private static final int MS_PER_HOUR = 60 * 60 * 1000; private final NitzStateMachine mNitzState; private final EriManager mEriManager; @UnsupportedAppUsage private final ContentResolver mCr; Loading Loading @@ -474,10 +477,11 @@ public class ServiceStateTracker extends Handler { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals( CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) { onCarrierConfigChanged(); sendEmptyMessage(EVENT_CARRIER_CONFIG_CHANGED); return; } // TODO: Remove this weird check left over from CDMA/GSM service state tracker merge. if (!mPhone.isPhoneTypeGsm()) { loge("Ignoring intent " + intent + " received on CDMA phone"); return; Loading Loading @@ -546,6 +550,9 @@ public class ServiceStateTracker extends Handler { mPhone = phone; mCi = ci; mEriManager = TelephonyComponentFactory.getInstance().inject(EriManager.class.getName()) .makeEriManager(mPhone, EriManager.ERI_FROM_XML); mRatRatcheter = new RatRatcheter(mPhone); mVoiceCapable = mPhone.getContext().getResources().getBoolean( com.android.internal.R.bool.config_voice_capable); Loading Loading @@ -684,7 +691,6 @@ public class ServiceStateTracker extends Handler { } mCi.unregisterForCdmaPrlChanged(this); mPhone.unregisterForEriFileLoaded(this); mCi.unregisterForCdmaOtaProvision(this); mPhone.unregisterForSimRecordsLoaded(this); Loading @@ -696,7 +702,6 @@ public class ServiceStateTracker extends Handler { CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM); mCi.registerForCdmaPrlChanged(this, EVENT_CDMA_PRL_VERSION_CHANGED, null); mPhone.registerForEriFileLoaded(this, EVENT_ERI_FILE_LOADED, null); mCi.registerForCdmaOtaProvision(this, EVENT_OTA_PROVISION_STATUS_CHANGE, null); mHbpcdUtils = new HbpcdUtils(mPhone.getContext()); Loading Loading @@ -1466,13 +1471,6 @@ public class ServiceStateTracker extends Handler { } } break; case EVENT_ERI_FILE_LOADED: // Repoll the state once the ERI file has been loaded. if (DBG) log("ERI file has been loaded, repolling."); pollState(); break; case EVENT_OTA_PROVISION_STATUS_CHANGE: ar = (AsyncResult)msg.obj; if (ar.exception == null) { Loading Loading @@ -1543,6 +1541,10 @@ public class ServiceStateTracker extends Handler { rspRspMsg.sendToTarget(); break; case EVENT_CARRIER_CONFIG_CHANGED: onCarrierConfigChanged(); break; default: log("Unhandled message with number: " + msg.what); break; Loading Loading @@ -1862,9 +1864,9 @@ public class ServiceStateTracker extends Handler { } int roamingIndicator = mNewSS.getCdmaRoamingIndicator(); mNewSS.setCdmaEriIconIndex(mPhone.mEriManager.getCdmaEriIconIndex(roamingIndicator, mNewSS.setCdmaEriIconIndex(mEriManager.getCdmaEriIconIndex(roamingIndicator, mDefaultRoamingIndicator)); mNewSS.setCdmaEriIconMode(mPhone.mEriManager.getCdmaEriIconMode(roamingIndicator, mNewSS.setCdmaEriIconMode(mEriManager.getCdmaEriIconMode(roamingIndicator, mDefaultRoamingIndicator)); // NOTE: Some operator may require overriding mCdmaRoaming Loading Loading @@ -2361,6 +2363,8 @@ public class ServiceStateTracker extends Handler { */ @UnsupportedAppUsage protected void updateRoamingState() { PersistableBundle bundle = getCarrierConfig(); if (mPhone.isPhoneTypeGsm()) { /** * Since the roaming state of gsm service (from +CREG) and Loading @@ -2385,62 +2389,38 @@ public class ServiceStateTracker extends Handler { roaming = false; } CarrierConfigManager configLoader = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); if (alwaysOnHomeNetwork(b)) { if (alwaysOnHomeNetwork(bundle)) { log("updateRoamingState: carrier config override always on home network"); roaming = false; } else if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { } else if (isNonRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set non roaming:" + mNewSS.getOperatorNumeric()); roaming = false; } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { } else if (isRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric()); roaming = true; } } catch (Exception e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } mNewSS.setVoiceRoaming(roaming); mNewSS.setDataRoaming(roaming); } else { CarrierConfigManager configLoader = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); String systemId = Integer.toString(mNewSS.getCdmaSystemId()); if (alwaysOnHomeNetwork(b)) { if (alwaysOnHomeNetwork(bundle)) { log("updateRoamingState: carrier config override always on home network"); setRoamingOff(); } else if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isNonRoamingInCdmaNetwork(b, systemId)) { } else if (isNonRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric()) || isNonRoamingInCdmaNetwork(bundle, systemId)) { log("updateRoamingState: carrier config override set non-roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); setRoamingOff(); } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isRoamingInCdmaNetwork(b, systemId)) { } else if (isRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric()) || isRoamingInCdmaNetwork(bundle, systemId)) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); setRoamingOn(); } } catch (Exception e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) { mNewSS.setVoiceRoaming(true); Loading Loading @@ -2507,24 +2487,16 @@ public class ServiceStateTracker extends Handler { int dataIdx = 0; int flightModeIdx = -1; boolean useRootLocale = false; CarrierConfigManager configLoader = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); if (b != null) { voiceIdx = b.getInt(CarrierConfigManager.KEY_WFC_SPN_FORMAT_IDX_INT); dataIdx = b.getInt( PersistableBundle bundle = getCarrierConfig(); voiceIdx = bundle.getInt(CarrierConfigManager.KEY_WFC_SPN_FORMAT_IDX_INT); dataIdx = bundle.getInt( CarrierConfigManager.KEY_WFC_DATA_SPN_FORMAT_IDX_INT); flightModeIdx = b.getInt( flightModeIdx = bundle.getInt( CarrierConfigManager.KEY_WFC_FLIGHT_MODE_SPN_FORMAT_IDX_INT); useRootLocale = b.getBoolean(CarrierConfigManager.KEY_WFC_SPN_USE_ROOT_LOCALE); } } catch (Exception e) { loge("updateSpnDisplay: carrier config error: " + e); } } bundle.getBoolean(CarrierConfigManager.KEY_WFC_SPN_USE_ROOT_LOCALE); String[] wfcSpnFormats = SubscriptionManager.getResourcesForSubId(mPhone.getContext(), mPhone.getSubId(), useRootLocale) Loading @@ -2535,7 +2507,8 @@ public class ServiceStateTracker extends Handler { voiceIdx = 0; } if (dataIdx < 0 || dataIdx >= wfcSpnFormats.length) { loge("updateSpnDisplay: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " + dataIdx); loge("updateSpnDisplay: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " + dataIdx); dataIdx = 0; } if (flightModeIdx < 0 || flightModeIdx >= wfcSpnFormats.length) { Loading Loading @@ -3424,7 +3397,7 @@ public class ServiceStateTracker extends Handler { boolean hasBrandOverride = mUiccController.getUiccCard(getPhoneId()) != null && mUiccController.getUiccCard(getPhoneId()).getOperatorBrandOverride() != null; if (!hasBrandOverride && (mCi.getRadioState() == TelephonyManager.RADIO_POWER_ON) && (mPhone.isEriFileLoaded()) && (mEriManager.isEriFileLoaded()) && (!ServiceState.isLte(mSS.getRilVoiceRadioTechnology()) || mPhone.getContext().getResources().getBoolean(com.android.internal.R .bool.config_LTE_eri_for_network_name))) { Loading Loading @@ -3656,16 +3629,11 @@ public class ServiceStateTracker extends Handler { */ private boolean isOperatorConsideredNonRoaming(ServiceState s) { String operatorNumeric = s.getOperatorNumeric(); final CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); String[] numericArray = null; if (configManager != null) { PersistableBundle config = configManager.getConfigForSubId(mPhone.getSubId()); if (config != null) { numericArray = config.getStringArray( PersistableBundle config = getCarrierConfig(); String[] numericArray = config.getStringArray( CarrierConfigManager.KEY_NON_ROAMING_OPERATOR_STRING_ARRAY); } } if (ArrayUtils.isEmpty(numericArray) || operatorNumeric == null) { return false; } Loading @@ -3680,16 +3648,9 @@ public class ServiceStateTracker extends Handler { private boolean isOperatorConsideredRoaming(ServiceState s) { String operatorNumeric = s.getOperatorNumeric(); final CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); String[] numericArray = null; if (configManager != null) { PersistableBundle config = configManager.getConfigForSubId(mPhone.getSubId()); if (config != null) { numericArray = config.getStringArray( PersistableBundle config = getCarrierConfig(); String[] numericArray = config.getStringArray( CarrierConfigManager.KEY_ROAMING_OPERATOR_STRING_ARRAY); } } if (ArrayUtils.isEmpty(numericArray) || operatorNumeric == null) { return false; } Loading Loading @@ -3939,11 +3900,7 @@ public class ServiceStateTracker extends Handler { boolean autoCancelCsRejectNotification = false; CarrierConfigManager configManager = (CarrierConfigManager) context.getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager != null) { PersistableBundle bundle = configManager.getConfigForSubId(mPhone.getSubId()); if (bundle != null) { PersistableBundle bundle = getCarrierConfig(); boolean disableVoiceBarringNotification = bundle.getBoolean( CarrierConfigManager.KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL, false); if (disableVoiceBarringNotification && (notifyType == CS_ENABLED Loading @@ -3954,8 +3911,6 @@ public class ServiceStateTracker extends Handler { } autoCancelCsRejectNotification = bundle.getBoolean( CarrierConfigManager.KEY_AUTO_CANCEL_CS_REJECT_NOTIFICATION, false); } } CharSequence details = ""; CharSequence title = ""; Loading Loading @@ -4521,14 +4476,20 @@ public class ServiceStateTracker extends Handler { } private void onCarrierConfigChanged() { CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); PersistableBundle config = configManager.getConfigForSubId(mPhone.getSubId()); PersistableBundle config = getCarrierConfig(); // Load the ERI based on carrier config. Carrier might have their specific ERI. mEriManager.loadEriFile(); if (config != null) { updateLteEarfcnLists(config); updateReportingCriteria(config); } // Sometimes the network registration information comes before carrier config is ready. // For some cases like roaming/non-roaming overriding, we need carrier config. So it's // important to poll state again when carrier config is ready. pollState(); } private void updateLteEarfcnLists(PersistableBundle config) { Loading Loading @@ -4865,6 +4826,7 @@ public class ServiceStateTracker extends Handler { pw.println(" mSpnUpdatePending=" + mSpnUpdatePending); pw.println(" mLteRsrpBoost=" + mLteRsrpBoost); pw.println(" mCellInfoMinIntervalMs=" + mCellInfoMinIntervalMs); pw.println(" mEriManager=" + mEriManager); dumpEarfcnPairList(pw); mLocaleTracker.dump(fd, pw, args); Loading Loading @@ -5176,6 +5138,7 @@ public class ServiceStateTracker extends Handler { * @return A {@link PersistableBundle} containing the config for the given subId, * or default values for an invalid subId. */ @NonNull private PersistableBundle getCarrierConfig() { CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading @@ -5193,4 +5156,8 @@ public class ServiceStateTracker extends Handler { public LocaleTracker getLocaleTracker() { return mLocaleTracker; } String getCdmaEriText(int roamInd, int defRoamInd) { return mEriManager.getCdmaEriText(roamInd, defRoamInd); } } src/java/com/android/internal/telephony/TelephonyComponentFactory.java +2 −2 Original line number Diff line number Diff line Loading @@ -343,8 +343,8 @@ public class TelephonyComponentFactory { return new UiccProfile(context, ci, ics, phoneId, uiccCard, lock); } public EriManager makeEriManager(Phone phone, Context context, int eriFileSource) { return new EriManager(phone, context, eriFileSource); public EriManager makeEriManager(Phone phone, int eriFileSource) { return new EriManager(phone, eriFileSource); } public WspTypeDecoder makeWspTypeDecoder(byte[] pdu) { Loading src/java/com/android/internal/telephony/cdma/EriManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -101,9 +101,9 @@ public class EriManager { private EriFile mEriFile; private final Phone mPhone; public EriManager(Phone phone, Context context, int eriFileSource) { public EriManager(Phone phone, int eriFileSource) { mPhone = phone; mContext = context; mContext = mPhone.getContext(); mEriFileSource = eriFileSource; mEriFile = new EriFile(); } Loading tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java +0 −28 Original line number Diff line number Diff line Loading @@ -156,24 +156,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest { assertTrue(mPhoneUT.isPhoneTypeCdmaLte()); } @Test @SmallTest public void testHandleActionCarrierConfigChanged() { Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); mContext.sendBroadcast(intent); waitForMs(50); verify(mSST, times(1)).pollState(); // set voice radio tech in RIL to 1xRTT. ACTION_CARRIER_CONFIG_CHANGED should trigger a // query and change phone type mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); assertTrue(mPhoneUT.isPhoneTypeGsm()); mContext.sendBroadcast(intent); waitForMs(50); assertTrue(mPhoneUT.isPhoneTypeCdmaLte()); verify(mSST, times(2)).pollState(); } @Test @SmallTest public void testGetServiceState() { Loading Loading @@ -904,16 +886,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest { editor.apply(); } @Test @SmallTest public void testEriLoading() { mPhoneUT.mEriManager = mEriManager; mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_CARRIER_CONFIG_CHANGED, null)); waitForMs(100); verify(mEriManager, times(1)).loadEriFile(); } @Test @SmallTest public void testGetIccCardUnknownAndAbsent() { Loading Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +1 −46 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ import com.android.ims.ImsManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.cdma.CdmaMmiCode; import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.cdma.EriManager; import com.android.internal.telephony.dataconnection.DataEnabledSettings; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; Loading Loading @@ -142,11 +141,7 @@ public class GsmCdmaPhone extends Phone { public static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer private CdmaSubscriptionSourceManager mCdmaSSM; public int mCdmaSubscriptionSource = CdmaSubscriptionSourceManager.SUBSCRIPTION_SOURCE_UNKNOWN; @UnsupportedAppUsage public EriManager mEriManager; private PowerManager.WakeLock mWakeLock; // mEriFileLoadedRegistrants are informed after the ERI text has been loaded private final RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); // mEcmExitRespRegistrant is informed after the phone has been exited @UnsupportedAppUsage private Registrant mEcmExitRespRegistrant; Loading Loading @@ -333,8 +328,6 @@ public class GsmCdmaPhone extends Phone { mCdmaSSM = mTelephonyComponentFactory.inject(CdmaSubscriptionSourceManager.class.getName()) .getCdmaSubscriptionSourceManagerInstance(mContext, mCi, this, EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null); mEriManager = mTelephonyComponentFactory.inject(EriManager.class.getName()) .makeEriManager(this, mContext, EriManager.ERI_FROM_XML); mCi.setEmergencyCallbackMode(this, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); mCi.registerForExitEmergencyCallbackMode(this, EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE, null); Loading Loading @@ -2526,11 +2519,6 @@ public class GsmCdmaPhone extends Phone { } else { loge("didn't get the cdma_roaming_mode changes from the carrier config."); } // Load the ERI based on carrier config. Carrier might have their specific ERI. prepareEri(); mSST.pollState(); break; case EVENT_SET_ROAMING_PREFERENCE_DONE: Loading Loading @@ -2942,38 +2930,6 @@ public class GsmCdmaPhone extends Phone { return mIccPhoneBookIntManager; } //CDMA public void registerForEriFileLoaded(Handler h, int what, Object obj) { Registrant r = new Registrant (h, what, obj); mEriFileLoadedRegistrants.add(r); } //CDMA public void unregisterForEriFileLoaded(Handler h) { mEriFileLoadedRegistrants.remove(h); } //CDMA public void prepareEri() { if (mEriManager == null) { Rlog.e(LOG_TAG, "PrepareEri: Trying to access stale objects"); return; } mEriManager.loadEriFile(); if(mEriManager.isEriFileLoaded()) { // when the ERI file is loaded logd("ERI read, notify registrants"); mEriFileLoadedRegistrants.notifyRegistrants(); } } //CDMA @UnsupportedAppUsage public boolean isEriFileLoaded() { return mEriManager.isEriFileLoaded(); } /** * Activate or deactivate cell broadcast SMS. * Loading Loading @@ -3450,7 +3406,7 @@ public class GsmCdmaPhone extends Phone { } else { int roamInd = getServiceState().getCdmaRoamingIndicator(); int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); return mEriManager.getCdmaEriText(roamInd, defRoamInd); return mSST.getCdmaEriText(roamInd, defRoamInd); } } Loading Loading @@ -3659,7 +3615,6 @@ public class GsmCdmaPhone extends Phone { if (VDBG) pw.println(" mVmNumber=" + mVmNumber); pw.println(" mCdmaSSM=" + mCdmaSSM); pw.println(" mCdmaSubscriptionSource=" + mCdmaSubscriptionSource); pw.println(" mEriManager=" + mEriManager); pw.println(" mWakeLock=" + mWakeLock); pw.println(" isInEcm()=" + isInEcm()); if (VDBG) pw.println(" mEsn=" + mEsn); Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +89 −122 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.provider.Telephony.ServiceStateTable.getUriForSubscription import static com.android.internal.telephony.CarrierActionAgent.CARRIER_ACTION_SET_RADIO_ENABLED; import android.Manifest.permission; import android.annotation.NonNull; import android.annotation.UnsupportedAppUsage; import android.app.AlarmManager; import android.app.Notification; Loading Loading @@ -86,6 +87,7 @@ import android.util.TimestampedValue; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.cdma.EriInfo; import com.android.internal.telephony.cdma.EriManager; import com.android.internal.telephony.dataconnection.DataConnection; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; Loading Loading @@ -241,7 +243,6 @@ public class ServiceStateTracker extends Handler { protected static final int EVENT_RUIM_RECORDS_LOADED = 27; protected static final int EVENT_POLL_STATE_CDMA_SUBSCRIPTION = 34; protected static final int EVENT_NV_READY = 35; protected static final int EVENT_ERI_FILE_LOADED = 36; protected static final int EVENT_OTA_PROVISION_STATUS_CHANGE = 37; protected static final int EVENT_SET_RADIO_POWER_OFF = 38; protected static final int EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 39; Loading @@ -262,6 +263,7 @@ public class ServiceStateTracker extends Handler { protected static final int EVENT_RADIO_POWER_OFF_DONE = 54; protected static final int EVENT_PHYSICAL_CHANNEL_CONFIG = 55; protected static final int EVENT_CELL_LOCATION_RESPONSE = 56; protected static final int EVENT_CARRIER_CONFIG_CHANGED = 57; private List<Message> mPendingCellInfoRequests = new LinkedList<Message>(); // @GuardedBy("mPendingCellInfoRequests") Loading Loading @@ -401,6 +403,7 @@ public class ServiceStateTracker extends Handler { private CellIdentity mNewCellIdentity; private static final int MS_PER_HOUR = 60 * 60 * 1000; private final NitzStateMachine mNitzState; private final EriManager mEriManager; @UnsupportedAppUsage private final ContentResolver mCr; Loading Loading @@ -474,10 +477,11 @@ public class ServiceStateTracker extends Handler { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals( CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) { onCarrierConfigChanged(); sendEmptyMessage(EVENT_CARRIER_CONFIG_CHANGED); return; } // TODO: Remove this weird check left over from CDMA/GSM service state tracker merge. if (!mPhone.isPhoneTypeGsm()) { loge("Ignoring intent " + intent + " received on CDMA phone"); return; Loading Loading @@ -546,6 +550,9 @@ public class ServiceStateTracker extends Handler { mPhone = phone; mCi = ci; mEriManager = TelephonyComponentFactory.getInstance().inject(EriManager.class.getName()) .makeEriManager(mPhone, EriManager.ERI_FROM_XML); mRatRatcheter = new RatRatcheter(mPhone); mVoiceCapable = mPhone.getContext().getResources().getBoolean( com.android.internal.R.bool.config_voice_capable); Loading Loading @@ -684,7 +691,6 @@ public class ServiceStateTracker extends Handler { } mCi.unregisterForCdmaPrlChanged(this); mPhone.unregisterForEriFileLoaded(this); mCi.unregisterForCdmaOtaProvision(this); mPhone.unregisterForSimRecordsLoaded(this); Loading @@ -696,7 +702,6 @@ public class ServiceStateTracker extends Handler { CdmaSubscriptionSourceManager.SUBSCRIPTION_FROM_RUIM); mCi.registerForCdmaPrlChanged(this, EVENT_CDMA_PRL_VERSION_CHANGED, null); mPhone.registerForEriFileLoaded(this, EVENT_ERI_FILE_LOADED, null); mCi.registerForCdmaOtaProvision(this, EVENT_OTA_PROVISION_STATUS_CHANGE, null); mHbpcdUtils = new HbpcdUtils(mPhone.getContext()); Loading Loading @@ -1466,13 +1471,6 @@ public class ServiceStateTracker extends Handler { } } break; case EVENT_ERI_FILE_LOADED: // Repoll the state once the ERI file has been loaded. if (DBG) log("ERI file has been loaded, repolling."); pollState(); break; case EVENT_OTA_PROVISION_STATUS_CHANGE: ar = (AsyncResult)msg.obj; if (ar.exception == null) { Loading Loading @@ -1543,6 +1541,10 @@ public class ServiceStateTracker extends Handler { rspRspMsg.sendToTarget(); break; case EVENT_CARRIER_CONFIG_CHANGED: onCarrierConfigChanged(); break; default: log("Unhandled message with number: " + msg.what); break; Loading Loading @@ -1862,9 +1864,9 @@ public class ServiceStateTracker extends Handler { } int roamingIndicator = mNewSS.getCdmaRoamingIndicator(); mNewSS.setCdmaEriIconIndex(mPhone.mEriManager.getCdmaEriIconIndex(roamingIndicator, mNewSS.setCdmaEriIconIndex(mEriManager.getCdmaEriIconIndex(roamingIndicator, mDefaultRoamingIndicator)); mNewSS.setCdmaEriIconMode(mPhone.mEriManager.getCdmaEriIconMode(roamingIndicator, mNewSS.setCdmaEriIconMode(mEriManager.getCdmaEriIconMode(roamingIndicator, mDefaultRoamingIndicator)); // NOTE: Some operator may require overriding mCdmaRoaming Loading Loading @@ -2361,6 +2363,8 @@ public class ServiceStateTracker extends Handler { */ @UnsupportedAppUsage protected void updateRoamingState() { PersistableBundle bundle = getCarrierConfig(); if (mPhone.isPhoneTypeGsm()) { /** * Since the roaming state of gsm service (from +CREG) and Loading @@ -2385,62 +2389,38 @@ public class ServiceStateTracker extends Handler { roaming = false; } CarrierConfigManager configLoader = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); if (alwaysOnHomeNetwork(b)) { if (alwaysOnHomeNetwork(bundle)) { log("updateRoamingState: carrier config override always on home network"); roaming = false; } else if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { } else if (isNonRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set non roaming:" + mNewSS.getOperatorNumeric()); roaming = false; } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { } else if (isRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric()); roaming = true; } } catch (Exception e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } mNewSS.setVoiceRoaming(roaming); mNewSS.setDataRoaming(roaming); } else { CarrierConfigManager configLoader = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); String systemId = Integer.toString(mNewSS.getCdmaSystemId()); if (alwaysOnHomeNetwork(b)) { if (alwaysOnHomeNetwork(bundle)) { log("updateRoamingState: carrier config override always on home network"); setRoamingOff(); } else if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isNonRoamingInCdmaNetwork(b, systemId)) { } else if (isNonRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric()) || isNonRoamingInCdmaNetwork(bundle, systemId)) { log("updateRoamingState: carrier config override set non-roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); setRoamingOff(); } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isRoamingInCdmaNetwork(b, systemId)) { } else if (isRoamingInGsmNetwork(bundle, mNewSS.getOperatorNumeric()) || isRoamingInCdmaNetwork(bundle, systemId)) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); setRoamingOn(); } } catch (Exception e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) { mNewSS.setVoiceRoaming(true); Loading Loading @@ -2507,24 +2487,16 @@ public class ServiceStateTracker extends Handler { int dataIdx = 0; int flightModeIdx = -1; boolean useRootLocale = false; CarrierConfigManager configLoader = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); if (b != null) { voiceIdx = b.getInt(CarrierConfigManager.KEY_WFC_SPN_FORMAT_IDX_INT); dataIdx = b.getInt( PersistableBundle bundle = getCarrierConfig(); voiceIdx = bundle.getInt(CarrierConfigManager.KEY_WFC_SPN_FORMAT_IDX_INT); dataIdx = bundle.getInt( CarrierConfigManager.KEY_WFC_DATA_SPN_FORMAT_IDX_INT); flightModeIdx = b.getInt( flightModeIdx = bundle.getInt( CarrierConfigManager.KEY_WFC_FLIGHT_MODE_SPN_FORMAT_IDX_INT); useRootLocale = b.getBoolean(CarrierConfigManager.KEY_WFC_SPN_USE_ROOT_LOCALE); } } catch (Exception e) { loge("updateSpnDisplay: carrier config error: " + e); } } bundle.getBoolean(CarrierConfigManager.KEY_WFC_SPN_USE_ROOT_LOCALE); String[] wfcSpnFormats = SubscriptionManager.getResourcesForSubId(mPhone.getContext(), mPhone.getSubId(), useRootLocale) Loading @@ -2535,7 +2507,8 @@ public class ServiceStateTracker extends Handler { voiceIdx = 0; } if (dataIdx < 0 || dataIdx >= wfcSpnFormats.length) { loge("updateSpnDisplay: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " + dataIdx); loge("updateSpnDisplay: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " + dataIdx); dataIdx = 0; } if (flightModeIdx < 0 || flightModeIdx >= wfcSpnFormats.length) { Loading Loading @@ -3424,7 +3397,7 @@ public class ServiceStateTracker extends Handler { boolean hasBrandOverride = mUiccController.getUiccCard(getPhoneId()) != null && mUiccController.getUiccCard(getPhoneId()).getOperatorBrandOverride() != null; if (!hasBrandOverride && (mCi.getRadioState() == TelephonyManager.RADIO_POWER_ON) && (mPhone.isEriFileLoaded()) && (mEriManager.isEriFileLoaded()) && (!ServiceState.isLte(mSS.getRilVoiceRadioTechnology()) || mPhone.getContext().getResources().getBoolean(com.android.internal.R .bool.config_LTE_eri_for_network_name))) { Loading Loading @@ -3656,16 +3629,11 @@ public class ServiceStateTracker extends Handler { */ private boolean isOperatorConsideredNonRoaming(ServiceState s) { String operatorNumeric = s.getOperatorNumeric(); final CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); String[] numericArray = null; if (configManager != null) { PersistableBundle config = configManager.getConfigForSubId(mPhone.getSubId()); if (config != null) { numericArray = config.getStringArray( PersistableBundle config = getCarrierConfig(); String[] numericArray = config.getStringArray( CarrierConfigManager.KEY_NON_ROAMING_OPERATOR_STRING_ARRAY); } } if (ArrayUtils.isEmpty(numericArray) || operatorNumeric == null) { return false; } Loading @@ -3680,16 +3648,9 @@ public class ServiceStateTracker extends Handler { private boolean isOperatorConsideredRoaming(ServiceState s) { String operatorNumeric = s.getOperatorNumeric(); final CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); String[] numericArray = null; if (configManager != null) { PersistableBundle config = configManager.getConfigForSubId(mPhone.getSubId()); if (config != null) { numericArray = config.getStringArray( PersistableBundle config = getCarrierConfig(); String[] numericArray = config.getStringArray( CarrierConfigManager.KEY_ROAMING_OPERATOR_STRING_ARRAY); } } if (ArrayUtils.isEmpty(numericArray) || operatorNumeric == null) { return false; } Loading Loading @@ -3939,11 +3900,7 @@ public class ServiceStateTracker extends Handler { boolean autoCancelCsRejectNotification = false; CarrierConfigManager configManager = (CarrierConfigManager) context.getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager != null) { PersistableBundle bundle = configManager.getConfigForSubId(mPhone.getSubId()); if (bundle != null) { PersistableBundle bundle = getCarrierConfig(); boolean disableVoiceBarringNotification = bundle.getBoolean( CarrierConfigManager.KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL, false); if (disableVoiceBarringNotification && (notifyType == CS_ENABLED Loading @@ -3954,8 +3911,6 @@ public class ServiceStateTracker extends Handler { } autoCancelCsRejectNotification = bundle.getBoolean( CarrierConfigManager.KEY_AUTO_CANCEL_CS_REJECT_NOTIFICATION, false); } } CharSequence details = ""; CharSequence title = ""; Loading Loading @@ -4521,14 +4476,20 @@ public class ServiceStateTracker extends Handler { } private void onCarrierConfigChanged() { CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); PersistableBundle config = configManager.getConfigForSubId(mPhone.getSubId()); PersistableBundle config = getCarrierConfig(); // Load the ERI based on carrier config. Carrier might have their specific ERI. mEriManager.loadEriFile(); if (config != null) { updateLteEarfcnLists(config); updateReportingCriteria(config); } // Sometimes the network registration information comes before carrier config is ready. // For some cases like roaming/non-roaming overriding, we need carrier config. So it's // important to poll state again when carrier config is ready. pollState(); } private void updateLteEarfcnLists(PersistableBundle config) { Loading Loading @@ -4865,6 +4826,7 @@ public class ServiceStateTracker extends Handler { pw.println(" mSpnUpdatePending=" + mSpnUpdatePending); pw.println(" mLteRsrpBoost=" + mLteRsrpBoost); pw.println(" mCellInfoMinIntervalMs=" + mCellInfoMinIntervalMs); pw.println(" mEriManager=" + mEriManager); dumpEarfcnPairList(pw); mLocaleTracker.dump(fd, pw, args); Loading Loading @@ -5176,6 +5138,7 @@ public class ServiceStateTracker extends Handler { * @return A {@link PersistableBundle} containing the config for the given subId, * or default values for an invalid subId. */ @NonNull private PersistableBundle getCarrierConfig() { CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading @@ -5193,4 +5156,8 @@ public class ServiceStateTracker extends Handler { public LocaleTracker getLocaleTracker() { return mLocaleTracker; } String getCdmaEriText(int roamInd, int defRoamInd) { return mEriManager.getCdmaEriText(roamInd, defRoamInd); } }
src/java/com/android/internal/telephony/TelephonyComponentFactory.java +2 −2 Original line number Diff line number Diff line Loading @@ -343,8 +343,8 @@ public class TelephonyComponentFactory { return new UiccProfile(context, ci, ics, phoneId, uiccCard, lock); } public EriManager makeEriManager(Phone phone, Context context, int eriFileSource) { return new EriManager(phone, context, eriFileSource); public EriManager makeEriManager(Phone phone, int eriFileSource) { return new EriManager(phone, eriFileSource); } public WspTypeDecoder makeWspTypeDecoder(byte[] pdu) { Loading
src/java/com/android/internal/telephony/cdma/EriManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -101,9 +101,9 @@ public class EriManager { private EriFile mEriFile; private final Phone mPhone; public EriManager(Phone phone, Context context, int eriFileSource) { public EriManager(Phone phone, int eriFileSource) { mPhone = phone; mContext = context; mContext = mPhone.getContext(); mEriFileSource = eriFileSource; mEriFile = new EriFile(); } Loading
tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java +0 −28 Original line number Diff line number Diff line Loading @@ -156,24 +156,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest { assertTrue(mPhoneUT.isPhoneTypeCdmaLte()); } @Test @SmallTest public void testHandleActionCarrierConfigChanged() { Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); mContext.sendBroadcast(intent); waitForMs(50); verify(mSST, times(1)).pollState(); // set voice radio tech in RIL to 1xRTT. ACTION_CARRIER_CONFIG_CHANGED should trigger a // query and change phone type mSimulatedCommands.setVoiceRadioTech(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT); assertTrue(mPhoneUT.isPhoneTypeGsm()); mContext.sendBroadcast(intent); waitForMs(50); assertTrue(mPhoneUT.isPhoneTypeCdmaLte()); verify(mSST, times(2)).pollState(); } @Test @SmallTest public void testGetServiceState() { Loading Loading @@ -904,16 +886,6 @@ public class GsmCdmaPhoneTest extends TelephonyTest { editor.apply(); } @Test @SmallTest public void testEriLoading() { mPhoneUT.mEriManager = mEriManager; mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_CARRIER_CONFIG_CHANGED, null)); waitForMs(100); verify(mEriManager, times(1)).loadEriFile(); } @Test @SmallTest public void testGetIccCardUnknownAndAbsent() { Loading