diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java index 0be09b9901228..934e44181471d 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -592,7 +592,10 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { } mRegistrationState = registrationState; - mCdmaRoaming = regCodeIsRoaming(registrationState); + // mCdmaRoaming is true when registration state is roaming and TSB58 roaming + // indicator is not in the carrier-specified list of ERIs for home system + mCdmaRoaming = + regCodeIsRoaming(registrationState) && !isRoamIndForHomeSystem(states[10]); newSS.setState (regCodeToServiceState(registrationState)); this.newCdmaDataConnectionState = radioTechnologyToDataServiceState(radioTechnology); @@ -1168,6 +1171,33 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { return 5 == code; } + /** + * Determine whether a roaming indicator is in the carrier-specified list of ERIs for + * home system + * + * @param roamInd roaming indicator in String + * @return true if the roamInd is in the carrier-specified list of ERIs for home network + */ + private boolean isRoamIndForHomeSystem(String roamInd) { + // retrieve the carrier-specified list of ERIs for home system + String homeRoamIndcators = SystemProperties.get("ro.cdma.homesystem"); + + if (!TextUtils.isEmpty(homeRoamIndcators)) { + // searches through the comma-separated list for a match, + // return true if one is found. + for (String homeRoamInd : homeRoamIndcators.split(",")) { + if (homeRoamInd.equals(roamInd)) { + return true; + } + } + // no matches found against the list! + return false; + } + + // no system property found for the roaming indicators for home system + return false; + } + /** * Set roaming state when cdmaRoaming is true and ons is different from spn * @param cdmaRoaming TS 27.007 7.2 CREG registered roaming