Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +83 −103 Original line number Diff line number Diff line Loading @@ -327,18 +327,10 @@ public class ServiceStateTracker extends Handler { private boolean mImsRegistrationOnOff = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mDeviceShuttingDown = false; private CarrierDisplayNameData mCarrierDisplayNameData = new CarrierDisplayNameData.Builder().build(); /** Keep track of SPN display rules, so we only broadcast intent if something changes. */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mCurSpn = null; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mCurDataSpn = null; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mCurPlmn = null; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mCurShowPlmn = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mCurShowSpn = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @VisibleForTesting public int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mPrevSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -452,7 +444,7 @@ public class ServiceStateTracker extends Handler { // Once sub id becomes valid, we need to update the service provider name // displayed on the UI again. The old SPN update intents sent to // MobileSignalController earlier were actually ignored due to invalid sub id. updateSpnDisplay(); updateCarrierDisplayName(); } mSubId = curSubId; } Loading Loading @@ -559,12 +551,12 @@ public class ServiceStateTracker extends Handler { pollState(); // Depends on modem, ServiceState is not necessarily updated, so make sure updating // SPN. updateSpnDisplay(); updateCarrierDisplayName(); } else if (action.equals(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED)) { String lastKnownNetworkCountry = intent.getStringExtra( TelephonyManager.EXTRA_LAST_KNOWN_NETWORK_COUNTRY); if (!mLastKnownNetworkCountry.equals(lastKnownNetworkCountry)) { updateSpnDisplay(); updateCarrierDisplayName(); } } } Loading Loading @@ -1245,7 +1237,7 @@ public class ServiceStateTracker extends Handler { if (mUiccApplication == null || mUiccApplication.getState() != AppState.APPSTATE_READY) { mIsSimReady = false; updateSpnDisplay(); updateCarrierDisplayName(); } break; Loading Loading @@ -1424,7 +1416,7 @@ public class ServiceStateTracker extends Handler { updateOtaspState(); if (mPhone.isPhoneTypeGsm()) { mCdnr.updateEfFromUsim((SIMRecords) mIccRecords); updateSpnDisplay(); updateCarrierDisplayName(); } break; Loading Loading @@ -1531,7 +1523,7 @@ public class ServiceStateTracker extends Handler { case EVENT_IMS_CAPABILITY_CHANGED: if (DBG) log("EVENT_IMS_CAPABILITY_CHANGED"); updateSpnDisplay(); updateCarrierDisplayName(); mImsCapabilityChangedRegistrants.notifyRegistrants(); break; Loading Loading @@ -1623,7 +1615,7 @@ public class ServiceStateTracker extends Handler { mCdnr.updateEfFromRuim((RuimRecords) mIccRecords); updatePhoneObject(); if (mPhone.isPhoneTypeCdma()) { updateSpnDisplay(); updateCarrierDisplayName(); } else { RuimRecords ruim = (RuimRecords) mIccRecords; if (ruim != null) { Loading Loading @@ -2761,53 +2753,34 @@ public class ServiceStateTracker extends Handler { } } private void notifySpnDisplayUpdate(CarrierDisplayNameData data) { int subId = mPhone.getSubId(); // Update ACTION_SERVICE_PROVIDERS_UPDATED if any value changes if (mSubId != subId || data.shouldShowPlmn() != mCurShowPlmn || data.shouldShowSpn() != mCurShowSpn || !TextUtils.equals(data.getSpn(), mCurSpn) || !TextUtils.equals(data.getDataSpn(), mCurDataSpn) || !TextUtils.equals(data.getPlmn(), mCurPlmn)) { final String log = String.format("updateSpnDisplay: changed sending intent, " + "rule=%d, showPlmn='%b', plmn='%s', showSpn='%b', spn='%s', " + "dataSpn='%s', subId='%d'", private void notifyCarrierDisplayNameDataChanged() { final String log = String.format("notifyCarrierDisplayNameDataChanged: " + "changed sending intent, " + "rule=%d, CarrierDisplayNameData=%s, subId=%d", getCarrierNameDisplayBitmask(mSS), data.shouldShowPlmn(), data.getPlmn(), data.shouldShowSpn(), data.getSpn(), data.getDataSpn(), subId); mCarrierDisplayNameData, mPhone.getSubId()); mCdnrLogs.log(log); if (DBG) log("updateSpnDisplay: " + log); if (DBG) log(log); Intent intent = new Intent(TelephonyManager.ACTION_SERVICE_PROVIDERS_UPDATED); intent.putExtra(TelephonyManager.EXTRA_SHOW_SPN, data.shouldShowSpn()); intent.putExtra(TelephonyManager.EXTRA_SPN, data.getSpn()); intent.putExtra(TelephonyManager.EXTRA_DATA_SPN, data.getDataSpn()); intent.putExtra(TelephonyManager.EXTRA_SHOW_PLMN, data.shouldShowPlmn()); intent.putExtra(TelephonyManager.EXTRA_PLMN, data.getPlmn()); intent.putExtra(TelephonyManager.EXTRA_SHOW_SPN, mCarrierDisplayNameData.shouldShowSpn()); intent.putExtra(TelephonyManager.EXTRA_SPN, mCarrierDisplayNameData.getSpn()); intent.putExtra(TelephonyManager.EXTRA_DATA_SPN, mCarrierDisplayNameData.getDataSpn()); intent.putExtra(TelephonyManager.EXTRA_SHOW_PLMN, mCarrierDisplayNameData.shouldShowPlmn()); intent.putExtra(TelephonyManager.EXTRA_PLMN, mCarrierDisplayNameData.getPlmn()); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId()); mPhone.getContext().sendStickyBroadcastAsUser(intent, UserHandle.ALL); if (SubscriptionManager.isValidSubscriptionId(subId)) { mSubscriptionManagerService.setCarrierName(subId, TextUtils.emptyIfNull( getCarrierName(data.shouldShowPlmn(), data.getPlmn(), data.shouldShowSpn(), data.getSpn()))); } } mCurShowSpn = data.shouldShowSpn(); mCurShowPlmn = data.shouldShowPlmn(); mCurSpn = data.getSpn(); mCurDataSpn = data.getDataSpn(); mCurPlmn = data.getPlmn(); } @NonNull private String getCarrierName(boolean showPlmn, String plmn, boolean showSpn, String spn) { private String getCarrierName(CarrierDisplayNameData cdnd) { boolean showPlmn = cdnd.shouldShowPlmn(); boolean showSpn = cdnd.shouldShowSpn(); String plmn = cdnd.getPlmn(); String spn = cdnd.getSpn(); String carrierName = ""; if (showPlmn) { carrierName = plmn; Loading @@ -2825,29 +2798,34 @@ public class ServiceStateTracker extends Handler { } else if (showSpn) { carrierName = spn; } return carrierName; } private void updateSpnDisplayCdnr() { log("updateSpnDisplayCdnr+"); CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); notifySpnDisplayUpdate(data); log("updateSpnDisplayCdnr-"); return TextUtils.emptyIfNull(carrierName); } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @VisibleForTesting public void updateSpnDisplay() { if (mCarrierConfig.getBoolean( CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL)) { updateSpnDisplayCdnr(); } else { updateSpnDisplayLegacy(); public void updateCarrierDisplayName() { final boolean useCdnr = mCarrierConfig.getBoolean( CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL); final CarrierDisplayNameData cdnd = useCdnr ? mCdnr.getCarrierDisplayNameData() : getCarrierDisplayNameLegacy(); final int subId = mPhone.getSubId(); // Avoid sending unnecessary updates if (subId == mSubId && cdnd.equals(mCarrierDisplayNameData)) return; if (SubscriptionManager.isValidSubscriptionId(subId)) { mSubscriptionManagerService.setCarrierName(subId, getCarrierName(cdnd)); } mCarrierDisplayNameData = cdnd; // notify...() relies on the updated value notifyCarrierDisplayNameDataChanged(); } private void updateSpnDisplayLegacy() { log("updateSpnDisplayLegacy+"); private @NonNull CarrierDisplayNameData getCarrierDisplayNameLegacy() { log("getCarrierDisplayNameLegacy+"); String spn = null; String dataSpn = null; Loading Loading @@ -2888,11 +2866,12 @@ public class ServiceStateTracker extends Handler { .getStringArray(com.android.internal.R.array.wfcSpnFormats); if (voiceIdx < 0 || voiceIdx >= wfcSpnFormats.length) { loge("updateSpnDisplay: KEY_WFC_SPN_FORMAT_IDX_INT out of bounds: " + voiceIdx); loge("updateCarrierDisplayName: KEY_WFC_SPN_FORMAT_IDX_INT out of bounds: " + voiceIdx); voiceIdx = 0; } if (dataIdx < 0 || dataIdx >= wfcSpnFormats.length) { loge("updateSpnDisplay: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " loge("updateCarrierDisplayName: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " + dataIdx); dataIdx = 0; } Loading Loading @@ -2926,7 +2905,7 @@ public class ServiceStateTracker extends Handler { .getStringArray(R.array.crossSimSpnFormats); if (crossSimSpnFormatIdx < 0 || crossSimSpnFormatIdx >= crossSimSpnFormats.length) { loge("updateSpnDisplay: KEY_CROSS_SIM_SPN_FORMAT_INT out of bounds: " loge("updateCarrierDisplayName: KEY_CROSS_SIM_SPN_FORMAT_INT out of bounds: " + crossSimSpnFormatIdx); crossSimSpnFormatIdx = 0; } Loading Loading @@ -2971,22 +2950,26 @@ public class ServiceStateTracker extends Handler { .toString(); noService = true; } if (DBG) log("updateSpnDisplay: radio is on but out " + "of service, set plmn='" + plmn + "'"); if (DBG) { log("updateCarrierDisplayName: radio is on but out " + "of service, set plmn='" + plmn + "'"); } } else if (combinedRegState == ServiceState.STATE_IN_SERVICE) { // In either home or roaming service plmn = mSS.getOperatorAlpha(); showPlmn = !TextUtils.isEmpty(plmn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN); if (DBG) log("updateSpnDisplay: rawPlmn = " + plmn); if (DBG) log("updateCarrierDisplayName: rawPlmn = " + plmn); } else { // Power off state, such as airplane mode, show plmn as null showPlmn = true; plmn = null; if (DBG) log("updateSpnDisplay: radio is off w/ showPlmn=" if (DBG) { log("updateCarrierDisplayName: radio is off w/ showPlmn=" + showPlmn + " plmn=" + plmn); } } // The value of spn/showSpn are same in different scenarios. // EXTRA_SHOW_SPN = depending on IccRecords rule and radio/IMS state Loading @@ -2997,7 +2980,7 @@ public class ServiceStateTracker extends Handler { showSpn = !noService && !TextUtils.isEmpty(spn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN); if (DBG) log("updateSpnDisplay: rawSpn = " + spn); if (DBG) log("updateCarrierDisplayName: rawSpn = " + spn); if (!TextUtils.isEmpty(crossSimSpnFormat)) { if (!TextUtils.isEmpty(spn)) { // Show SPN + Cross-SIM Calling If SIM has SPN and SPN display condition Loading Loading @@ -3056,7 +3039,7 @@ public class ServiceStateTracker extends Handler { // mOperatorAlpha contains the ERI text plmn = mSS.getOperatorAlpha(); if (DBG) log("updateSpnDisplay: cdma rawPlmn = " + plmn); if (DBG) log("updateCarrierDisplayName: cdma rawPlmn = " + plmn); showPlmn = plmn != null; Loading @@ -3068,8 +3051,8 @@ public class ServiceStateTracker extends Handler { // todo: temporary hack; should have a better fix. This is to avoid using operator // name from ServiceState (populated in processIwlanRegistrationInfo()) until // wifi calling is actually enabled log("updateSpnDisplay: overwriting plmn from " + plmn + " to null as radio " + "state is off"); log("updateCarrierDisplayName: overwriting plmn from " + plmn + " to null as radio " + "state is off"); plmn = null; } Loading @@ -3077,20 +3060,21 @@ public class ServiceStateTracker extends Handler { plmn = Resources.getSystem().getText(com.android.internal.R.string .lockscreen_carrier_default).toString(); if (DBG) { log("updateSpnDisplay: radio is on but out of svc, set plmn='" + plmn + "'"); log("updateCarrierDisplayName: radio is on but out of svc, set plmn='" + plmn + "'"); } } } notifySpnDisplayUpdate(new CarrierDisplayNameData.Builder() log("getCarrierDisplayNameLegacy-"); return new CarrierDisplayNameData.Builder() .setSpn(spn) .setDataSpn(dataSpn) .setShowSpn(showSpn) .setPlmn(plmn) .setShowPlmn(showPlmn) .build()); log("updateSpnDisplayLegacy-"); .build(); } /** Loading Loading @@ -3299,7 +3283,7 @@ public class ServiceStateTracker extends Handler { mImsRegistrationOnOff = registered; // It's possible ServiceState changes did not trigger SPN display update; we update it here. updateSpnDisplay(); updateCarrierDisplayName(); } public void onImsCapabilityChanged() { Loading Loading @@ -3713,11 +3697,11 @@ public class ServiceStateTracker extends Handler { String eriText = mPhone.getCdmaEriText(); boolean hasEriChanged = !TextUtils.equals(mEriText, eriText); mEriText = eriText; // Trigger updateSpnDisplay when // Trigger updateCarrierDisplayName when // 1. Service state is changed. // 2. phone type is Cdma or CdmaLte and ERI text has changed. if (hasChanged || (!mPhone.isPhoneTypeGsm() && hasEriChanged)) { updateSpnDisplay(); updateCarrierDisplayName(); } if (hasChanged) { Loading Loading @@ -5279,11 +5263,7 @@ public class ServiceStateTracker extends Handler { pw.println(" mStartedGprsRegCheck=" + mStartedGprsRegCheck); pw.println(" mReportedGprsNoReg=" + mReportedGprsNoReg); pw.println(" mNotification=" + mNotification); pw.println(" mCurSpn=" + mCurSpn); pw.println(" mCurDataSpn=" + mCurDataSpn); pw.println(" mCurShowSpn=" + mCurShowSpn); pw.println(" mCurPlmn=" + mCurPlmn); pw.println(" mCurShowPlmn=" + mCurShowPlmn); pw.println(" mCarrierDisplayNameData=" + mCarrierDisplayNameData); pw.flush(); pw.println(" mCurrentOtaspMode=" + mCurrentOtaspMode); pw.println(" mRoamingIndicator=" + mRoamingIndicator); Loading src/java/com/android/internal/telephony/cdnr/CarrierDisplayNameResolver.java +1 −1 Original line number Diff line number Diff line Loading @@ -190,7 +190,7 @@ public class CarrierDisplayNameResolver { } /** Get the resolved carrier display name. */ public CarrierDisplayNameData getCarrierDisplayNameData() { public @NonNull CarrierDisplayNameData getCarrierDisplayNameData() { resolveCarrierDisplayName(); return mCarrierDisplayNameData; } Loading tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java +11 −11 Original line number Diff line number Diff line Loading @@ -2983,7 +2983,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(ServiceState.STATE_IN_SERVICE).when(mSST).getCombinedRegState(ss); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "Emergency call only" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading @@ -3005,7 +3005,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { sst.mSS = ss; // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading @@ -3026,7 +3026,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { sst.mSS = ss; // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is null Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading @@ -3049,7 +3049,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(false).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Show both spn & plmn String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3091,7 +3091,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(formats).when(r).getStringArray(anyInt()); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Only spn should be shown String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3128,7 +3128,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isImsRegistered(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Only spn should be shown String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3161,7 +3161,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isImsRegistered(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Only plmn should be shown String plmn = mBundle.getStringArray(CarrierConfigManager.KEY_PNN_OVERRIDE_STRING_ARRAY)[0]; Loading @@ -3187,7 +3187,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(false).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Show both spn & plmn String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3240,7 +3240,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(false).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading Loading @@ -3271,7 +3271,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading Loading @@ -3303,7 +3303,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +83 −103 Original line number Diff line number Diff line Loading @@ -327,18 +327,10 @@ public class ServiceStateTracker extends Handler { private boolean mImsRegistrationOnOff = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mDeviceShuttingDown = false; private CarrierDisplayNameData mCarrierDisplayNameData = new CarrierDisplayNameData.Builder().build(); /** Keep track of SPN display rules, so we only broadcast intent if something changes. */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mCurSpn = null; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mCurDataSpn = null; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mCurPlmn = null; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mCurShowPlmn = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mCurShowSpn = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @VisibleForTesting public int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mPrevSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -452,7 +444,7 @@ public class ServiceStateTracker extends Handler { // Once sub id becomes valid, we need to update the service provider name // displayed on the UI again. The old SPN update intents sent to // MobileSignalController earlier were actually ignored due to invalid sub id. updateSpnDisplay(); updateCarrierDisplayName(); } mSubId = curSubId; } Loading Loading @@ -559,12 +551,12 @@ public class ServiceStateTracker extends Handler { pollState(); // Depends on modem, ServiceState is not necessarily updated, so make sure updating // SPN. updateSpnDisplay(); updateCarrierDisplayName(); } else if (action.equals(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED)) { String lastKnownNetworkCountry = intent.getStringExtra( TelephonyManager.EXTRA_LAST_KNOWN_NETWORK_COUNTRY); if (!mLastKnownNetworkCountry.equals(lastKnownNetworkCountry)) { updateSpnDisplay(); updateCarrierDisplayName(); } } } Loading Loading @@ -1245,7 +1237,7 @@ public class ServiceStateTracker extends Handler { if (mUiccApplication == null || mUiccApplication.getState() != AppState.APPSTATE_READY) { mIsSimReady = false; updateSpnDisplay(); updateCarrierDisplayName(); } break; Loading Loading @@ -1424,7 +1416,7 @@ public class ServiceStateTracker extends Handler { updateOtaspState(); if (mPhone.isPhoneTypeGsm()) { mCdnr.updateEfFromUsim((SIMRecords) mIccRecords); updateSpnDisplay(); updateCarrierDisplayName(); } break; Loading Loading @@ -1531,7 +1523,7 @@ public class ServiceStateTracker extends Handler { case EVENT_IMS_CAPABILITY_CHANGED: if (DBG) log("EVENT_IMS_CAPABILITY_CHANGED"); updateSpnDisplay(); updateCarrierDisplayName(); mImsCapabilityChangedRegistrants.notifyRegistrants(); break; Loading Loading @@ -1623,7 +1615,7 @@ public class ServiceStateTracker extends Handler { mCdnr.updateEfFromRuim((RuimRecords) mIccRecords); updatePhoneObject(); if (mPhone.isPhoneTypeCdma()) { updateSpnDisplay(); updateCarrierDisplayName(); } else { RuimRecords ruim = (RuimRecords) mIccRecords; if (ruim != null) { Loading Loading @@ -2761,53 +2753,34 @@ public class ServiceStateTracker extends Handler { } } private void notifySpnDisplayUpdate(CarrierDisplayNameData data) { int subId = mPhone.getSubId(); // Update ACTION_SERVICE_PROVIDERS_UPDATED if any value changes if (mSubId != subId || data.shouldShowPlmn() != mCurShowPlmn || data.shouldShowSpn() != mCurShowSpn || !TextUtils.equals(data.getSpn(), mCurSpn) || !TextUtils.equals(data.getDataSpn(), mCurDataSpn) || !TextUtils.equals(data.getPlmn(), mCurPlmn)) { final String log = String.format("updateSpnDisplay: changed sending intent, " + "rule=%d, showPlmn='%b', plmn='%s', showSpn='%b', spn='%s', " + "dataSpn='%s', subId='%d'", private void notifyCarrierDisplayNameDataChanged() { final String log = String.format("notifyCarrierDisplayNameDataChanged: " + "changed sending intent, " + "rule=%d, CarrierDisplayNameData=%s, subId=%d", getCarrierNameDisplayBitmask(mSS), data.shouldShowPlmn(), data.getPlmn(), data.shouldShowSpn(), data.getSpn(), data.getDataSpn(), subId); mCarrierDisplayNameData, mPhone.getSubId()); mCdnrLogs.log(log); if (DBG) log("updateSpnDisplay: " + log); if (DBG) log(log); Intent intent = new Intent(TelephonyManager.ACTION_SERVICE_PROVIDERS_UPDATED); intent.putExtra(TelephonyManager.EXTRA_SHOW_SPN, data.shouldShowSpn()); intent.putExtra(TelephonyManager.EXTRA_SPN, data.getSpn()); intent.putExtra(TelephonyManager.EXTRA_DATA_SPN, data.getDataSpn()); intent.putExtra(TelephonyManager.EXTRA_SHOW_PLMN, data.shouldShowPlmn()); intent.putExtra(TelephonyManager.EXTRA_PLMN, data.getPlmn()); intent.putExtra(TelephonyManager.EXTRA_SHOW_SPN, mCarrierDisplayNameData.shouldShowSpn()); intent.putExtra(TelephonyManager.EXTRA_SPN, mCarrierDisplayNameData.getSpn()); intent.putExtra(TelephonyManager.EXTRA_DATA_SPN, mCarrierDisplayNameData.getDataSpn()); intent.putExtra(TelephonyManager.EXTRA_SHOW_PLMN, mCarrierDisplayNameData.shouldShowPlmn()); intent.putExtra(TelephonyManager.EXTRA_PLMN, mCarrierDisplayNameData.getPlmn()); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId()); mPhone.getContext().sendStickyBroadcastAsUser(intent, UserHandle.ALL); if (SubscriptionManager.isValidSubscriptionId(subId)) { mSubscriptionManagerService.setCarrierName(subId, TextUtils.emptyIfNull( getCarrierName(data.shouldShowPlmn(), data.getPlmn(), data.shouldShowSpn(), data.getSpn()))); } } mCurShowSpn = data.shouldShowSpn(); mCurShowPlmn = data.shouldShowPlmn(); mCurSpn = data.getSpn(); mCurDataSpn = data.getDataSpn(); mCurPlmn = data.getPlmn(); } @NonNull private String getCarrierName(boolean showPlmn, String plmn, boolean showSpn, String spn) { private String getCarrierName(CarrierDisplayNameData cdnd) { boolean showPlmn = cdnd.shouldShowPlmn(); boolean showSpn = cdnd.shouldShowSpn(); String plmn = cdnd.getPlmn(); String spn = cdnd.getSpn(); String carrierName = ""; if (showPlmn) { carrierName = plmn; Loading @@ -2825,29 +2798,34 @@ public class ServiceStateTracker extends Handler { } else if (showSpn) { carrierName = spn; } return carrierName; } private void updateSpnDisplayCdnr() { log("updateSpnDisplayCdnr+"); CarrierDisplayNameData data = mCdnr.getCarrierDisplayNameData(); notifySpnDisplayUpdate(data); log("updateSpnDisplayCdnr-"); return TextUtils.emptyIfNull(carrierName); } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @VisibleForTesting public void updateSpnDisplay() { if (mCarrierConfig.getBoolean( CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL)) { updateSpnDisplayCdnr(); } else { updateSpnDisplayLegacy(); public void updateCarrierDisplayName() { final boolean useCdnr = mCarrierConfig.getBoolean( CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL); final CarrierDisplayNameData cdnd = useCdnr ? mCdnr.getCarrierDisplayNameData() : getCarrierDisplayNameLegacy(); final int subId = mPhone.getSubId(); // Avoid sending unnecessary updates if (subId == mSubId && cdnd.equals(mCarrierDisplayNameData)) return; if (SubscriptionManager.isValidSubscriptionId(subId)) { mSubscriptionManagerService.setCarrierName(subId, getCarrierName(cdnd)); } mCarrierDisplayNameData = cdnd; // notify...() relies on the updated value notifyCarrierDisplayNameDataChanged(); } private void updateSpnDisplayLegacy() { log("updateSpnDisplayLegacy+"); private @NonNull CarrierDisplayNameData getCarrierDisplayNameLegacy() { log("getCarrierDisplayNameLegacy+"); String spn = null; String dataSpn = null; Loading Loading @@ -2888,11 +2866,12 @@ public class ServiceStateTracker extends Handler { .getStringArray(com.android.internal.R.array.wfcSpnFormats); if (voiceIdx < 0 || voiceIdx >= wfcSpnFormats.length) { loge("updateSpnDisplay: KEY_WFC_SPN_FORMAT_IDX_INT out of bounds: " + voiceIdx); loge("updateCarrierDisplayName: KEY_WFC_SPN_FORMAT_IDX_INT out of bounds: " + voiceIdx); voiceIdx = 0; } if (dataIdx < 0 || dataIdx >= wfcSpnFormats.length) { loge("updateSpnDisplay: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " loge("updateCarrierDisplayName: KEY_WFC_DATA_SPN_FORMAT_IDX_INT out of bounds: " + dataIdx); dataIdx = 0; } Loading Loading @@ -2926,7 +2905,7 @@ public class ServiceStateTracker extends Handler { .getStringArray(R.array.crossSimSpnFormats); if (crossSimSpnFormatIdx < 0 || crossSimSpnFormatIdx >= crossSimSpnFormats.length) { loge("updateSpnDisplay: KEY_CROSS_SIM_SPN_FORMAT_INT out of bounds: " loge("updateCarrierDisplayName: KEY_CROSS_SIM_SPN_FORMAT_INT out of bounds: " + crossSimSpnFormatIdx); crossSimSpnFormatIdx = 0; } Loading Loading @@ -2971,22 +2950,26 @@ public class ServiceStateTracker extends Handler { .toString(); noService = true; } if (DBG) log("updateSpnDisplay: radio is on but out " + "of service, set plmn='" + plmn + "'"); if (DBG) { log("updateCarrierDisplayName: radio is on but out " + "of service, set plmn='" + plmn + "'"); } } else if (combinedRegState == ServiceState.STATE_IN_SERVICE) { // In either home or roaming service plmn = mSS.getOperatorAlpha(); showPlmn = !TextUtils.isEmpty(plmn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_PLMN); if (DBG) log("updateSpnDisplay: rawPlmn = " + plmn); if (DBG) log("updateCarrierDisplayName: rawPlmn = " + plmn); } else { // Power off state, such as airplane mode, show plmn as null showPlmn = true; plmn = null; if (DBG) log("updateSpnDisplay: radio is off w/ showPlmn=" if (DBG) { log("updateCarrierDisplayName: radio is off w/ showPlmn=" + showPlmn + " plmn=" + plmn); } } // The value of spn/showSpn are same in different scenarios. // EXTRA_SHOW_SPN = depending on IccRecords rule and radio/IMS state Loading @@ -2997,7 +2980,7 @@ public class ServiceStateTracker extends Handler { showSpn = !noService && !TextUtils.isEmpty(spn) && ((rule & CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN) == CARRIER_NAME_DISPLAY_BITMASK_SHOW_SPN); if (DBG) log("updateSpnDisplay: rawSpn = " + spn); if (DBG) log("updateCarrierDisplayName: rawSpn = " + spn); if (!TextUtils.isEmpty(crossSimSpnFormat)) { if (!TextUtils.isEmpty(spn)) { // Show SPN + Cross-SIM Calling If SIM has SPN and SPN display condition Loading Loading @@ -3056,7 +3039,7 @@ public class ServiceStateTracker extends Handler { // mOperatorAlpha contains the ERI text plmn = mSS.getOperatorAlpha(); if (DBG) log("updateSpnDisplay: cdma rawPlmn = " + plmn); if (DBG) log("updateCarrierDisplayName: cdma rawPlmn = " + plmn); showPlmn = plmn != null; Loading @@ -3068,8 +3051,8 @@ public class ServiceStateTracker extends Handler { // todo: temporary hack; should have a better fix. This is to avoid using operator // name from ServiceState (populated in processIwlanRegistrationInfo()) until // wifi calling is actually enabled log("updateSpnDisplay: overwriting plmn from " + plmn + " to null as radio " + "state is off"); log("updateCarrierDisplayName: overwriting plmn from " + plmn + " to null as radio " + "state is off"); plmn = null; } Loading @@ -3077,20 +3060,21 @@ public class ServiceStateTracker extends Handler { plmn = Resources.getSystem().getText(com.android.internal.R.string .lockscreen_carrier_default).toString(); if (DBG) { log("updateSpnDisplay: radio is on but out of svc, set plmn='" + plmn + "'"); log("updateCarrierDisplayName: radio is on but out of svc, set plmn='" + plmn + "'"); } } } notifySpnDisplayUpdate(new CarrierDisplayNameData.Builder() log("getCarrierDisplayNameLegacy-"); return new CarrierDisplayNameData.Builder() .setSpn(spn) .setDataSpn(dataSpn) .setShowSpn(showSpn) .setPlmn(plmn) .setShowPlmn(showPlmn) .build()); log("updateSpnDisplayLegacy-"); .build(); } /** Loading Loading @@ -3299,7 +3283,7 @@ public class ServiceStateTracker extends Handler { mImsRegistrationOnOff = registered; // It's possible ServiceState changes did not trigger SPN display update; we update it here. updateSpnDisplay(); updateCarrierDisplayName(); } public void onImsCapabilityChanged() { Loading Loading @@ -3713,11 +3697,11 @@ public class ServiceStateTracker extends Handler { String eriText = mPhone.getCdmaEriText(); boolean hasEriChanged = !TextUtils.equals(mEriText, eriText); mEriText = eriText; // Trigger updateSpnDisplay when // Trigger updateCarrierDisplayName when // 1. Service state is changed. // 2. phone type is Cdma or CdmaLte and ERI text has changed. if (hasChanged || (!mPhone.isPhoneTypeGsm() && hasEriChanged)) { updateSpnDisplay(); updateCarrierDisplayName(); } if (hasChanged) { Loading Loading @@ -5279,11 +5263,7 @@ public class ServiceStateTracker extends Handler { pw.println(" mStartedGprsRegCheck=" + mStartedGprsRegCheck); pw.println(" mReportedGprsNoReg=" + mReportedGprsNoReg); pw.println(" mNotification=" + mNotification); pw.println(" mCurSpn=" + mCurSpn); pw.println(" mCurDataSpn=" + mCurDataSpn); pw.println(" mCurShowSpn=" + mCurShowSpn); pw.println(" mCurPlmn=" + mCurPlmn); pw.println(" mCurShowPlmn=" + mCurShowPlmn); pw.println(" mCarrierDisplayNameData=" + mCarrierDisplayNameData); pw.flush(); pw.println(" mCurrentOtaspMode=" + mCurrentOtaspMode); pw.println(" mRoamingIndicator=" + mRoamingIndicator); Loading
src/java/com/android/internal/telephony/cdnr/CarrierDisplayNameResolver.java +1 −1 Original line number Diff line number Diff line Loading @@ -190,7 +190,7 @@ public class CarrierDisplayNameResolver { } /** Get the resolved carrier display name. */ public CarrierDisplayNameData getCarrierDisplayNameData() { public @NonNull CarrierDisplayNameData getCarrierDisplayNameData() { resolveCarrierDisplayName(); return mCarrierDisplayNameData; } Loading
tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java +11 −11 Original line number Diff line number Diff line Loading @@ -2983,7 +2983,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(ServiceState.STATE_IN_SERVICE).when(mSST).getCombinedRegState(ss); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "Emergency call only" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading @@ -3005,7 +3005,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { sst.mSS = ss; // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading @@ -3026,7 +3026,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { sst.mSS = ss; // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is null Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading @@ -3049,7 +3049,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(false).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Show both spn & plmn String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3091,7 +3091,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(formats).when(r).getStringArray(anyInt()); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Only spn should be shown String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3128,7 +3128,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isImsRegistered(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Only spn should be shown String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3161,7 +3161,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isImsRegistered(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Only plmn should be shown String plmn = mBundle.getStringArray(CarrierConfigManager.KEY_PNN_OVERRIDE_STRING_ARRAY)[0]; Loading @@ -3187,7 +3187,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(false).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Show both spn & plmn String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING); Loading Loading @@ -3240,7 +3240,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(false).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading Loading @@ -3271,7 +3271,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading Loading @@ -3303,7 +3303,7 @@ public class ServiceStateTrackerTest extends TelephonyTest { doReturn(true).when(mPhone).isWifiCallingEnabled(); // update the spn sst.updateSpnDisplay(); sst.updateCarrierDisplayName(); // Plmn should be shown, and the string is "No service" Bundle b = getExtrasFromLastSpnUpdateIntent(); Loading