From 8e80fd4478764643ac9543d63a77db62014a843a Mon Sep 17 00:00:00 2001 From: Yong Zhang Date: Mon, 6 Jul 2009 09:25:01 -0500 Subject: [PATCH] Add the condition check of ERI for CDMA roaming. With this fix, phone will not show that it is roaming when it is not, and there is no need to enable the "Data Roaming" in order to get the data to work. --- .../cdma/CdmaServiceStateTracker.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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