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.
This commit is contained in:
Yong Zhang
2009-07-06 09:25:01 -05:00
committed by Wink Saville
parent fca3ae1517
commit 8e80fd4478

View File

@@ -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