diff options
-rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java | 43 | ||||
-rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java | 48 |
2 files changed, 33 insertions, 58 deletions
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index b063e0a..c85b9bd 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -351,7 +351,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { * @return false while no data connection if all above requirements are met. */ public boolean isDataConnectionAsDesired() { - boolean roaming = getDataRoaming(); + boolean roaming = phone.getServiceState().getRoaming(); if (mGsmPhone.mSIMRecords.getRecordsLoaded() && mGsmPhone.mSST.getCurrentGprsState() == ServiceState.STATE_IN_SERVICE && @@ -363,10 +363,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { return true; } - private boolean getDataRoaming() { - return mGsmPhone.mSST.getDataRoaming(); - } - @Override protected boolean isApnTypeActive(String type) { // TODO: support simultaneous with List instead @@ -394,7 +390,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } private boolean isDataAllowed() { - boolean roaming = getDataRoaming(); + boolean roaming = phone.getServiceState().getRoaming(); return getAnyDataEnabled() && (!roaming || getDataOnRoamingEnabled()); } @@ -441,7 +437,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } int gprsState = mGsmPhone.mSST.getCurrentGprsState(); - boolean roaming = getDataRoaming(); boolean desiredPowerState = mGsmPhone.mSST.getDesiredPowerState(); if ((state == State.IDLE || state == State.SCANNING) @@ -477,7 +472,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { " phoneState=" + phone.getState() + " isDataAllowed=" + isDataAllowed() + " dataEnabled=" + getAnyDataEnabled() + - " roaming=" + roaming + + " roaming=" + phone.getServiceState().getRoaming() + " dataOnRoamingEnable=" + getDataOnRoamingEnabled() + " ps restricted=" + mIsPsRestricted + " desiredPowerState=" + desiredPowerState); @@ -1112,38 +1107,18 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { return trySetupData(reason); } - /** - * Check the data roaming consistency since this can be triggered by - * voice roaming flag of ServiceState in setDataOnRoamingEnabled() - * - * TODO make this triggered by data roaming state only - */ @Override protected void onRoamingOff() { - if (!getDataRoaming()) { //data roaming is off - trySetupData(Phone.REASON_ROAMING_OFF); - } else { // Inconsistent! data roaming is on - sendMessage(obtainMessage(EVENT_ROAMING_ON)); - } + trySetupData(Phone.REASON_ROAMING_OFF); } - /** - * Check the data roaming consistency since this can be triggered by - * voice roaming flag of ServiceState in setDataOnRoamingEnabled() - * - * TODO make this triggered by data roaming state only - */ @Override protected void onRoamingOn() { - if (getDataRoaming()) { // data roaming is on - if (getDataOnRoamingEnabled()) { - trySetupData(Phone.REASON_ROAMING_ON); - } else { - if (DBG) log("Tear down data connection on roaming."); - cleanUpConnection(true, Phone.REASON_ROAMING_ON); - } - } else { // Inconsistent! data roaming is off - sendMessage(obtainMessage(EVENT_ROAMING_OFF)); + if (getDataOnRoamingEnabled()) { + trySetupData(Phone.REASON_ROAMING_ON); + } else { + if (DBG) log("Tear down data connection on roaming."); + cleanUpConnection(true, Phone.REASON_ROAMING_ON); } } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java index 003899b..8140654 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java @@ -83,12 +83,17 @@ final class GsmServiceStateTracker extends ServiceStateTracker { private int networkType = 0; private int newNetworkType = 0; - /** GSM roaming status solely based on TS 27.007 7.2 CREG. */ + /** + * GSM roaming status solely based on TS 27.007 7.2 CREG. Only used by + * handlePollStateResult to store CREG roaming result. + */ private boolean mGsmRoaming = false; - /** Data roaming status solely based on TS 27.007 10.1.19 CGREG. */ + /** + * Data roaming status solely based on TS 27.007 10.1.19 CGREG. Only used by + * handlePollStateResult to store CGREG roaming result. + */ private boolean mDataRoaming = false; - private boolean newDataRoaming = false; private RegistrantList gprsAttachedRegistrants = new RegistrantList(); private RegistrantList gprsDetachedRegistrants = new RegistrantList(); @@ -310,10 +315,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker { psRestrictDisabledRegistrants.remove(h); } - boolean getDataRoaming() { - return mDataRoaming; - } - public void handleMessage (Message msg) { AsyncResult ar; int[] ints; @@ -627,7 +628,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker { mGsmRoaming = regCodeIsRoaming(regState); newSS.setState (regCodeToServiceState(regState)); - // LAC and CID are -1 if not avail newCellLoc.setLacAndCid(lac, cid); break; @@ -650,7 +650,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker { } } newGPRSState = regCodeToServiceState(regState); - newDataRoaming = regCodeIsRoaming(regState); + mDataRoaming = regCodeIsRoaming(regState); newNetworkType = type; newSS.setRadioTechnology(type); break; @@ -678,15 +678,22 @@ final class GsmServiceStateTracker extends ServiceStateTracker { pollingContext[0]--; if (pollingContext[0] == 0) { - newSS.setRoaming(isRoamingBetweenOperators(mGsmRoaming, newSS)); - // when both roaming indicators are true but not roaming between - // operators, roaming should set to false. - if (newDataRoaming && mGsmRoaming && !newSS.getRoaming()) { - newDataRoaming = false; + /** + * Since the roaming states of gsm service (from +CREG) and + * data service (from +CGREG) could be different, the new SS + * is set roaming while either one is roaming. + * + * There is an exception for the above rule. The new SS is not set + * as roaming while gsm service reports roaming but indeed it is + * not roaming between operators. + */ + boolean roaming = (mGsmRoaming || mDataRoaming); + if (mGsmRoaming && !isRoamingBetweenOperators(mGsmRoaming, newSS)) { + roaming = false; } + newSS.setRoaming(roaming); pollStateDone(); } - } private void setSignalStrengthDefaultValues() { @@ -711,8 +718,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker { newCellLoc.setStateInvalid(); setSignalStrengthDefaultValues(); mGotCountryCode = false; - newDataRoaming = false; - pollStateDone(); break; @@ -721,8 +726,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker { newCellLoc.setStateInvalid(); setSignalStrengthDefaultValues(); mGotCountryCode = false; - newDataRoaming = false; - pollStateDone(); break; @@ -736,8 +739,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker { newCellLoc.setStateInvalid(); setSignalStrengthDefaultValues(); mGotCountryCode = false; - newDataRoaming = false; - mDataRoaming = false; //NOTE: pollStateDone() is not needed in this case break; @@ -830,9 +831,9 @@ final class GsmServiceStateTracker extends ServiceStateTracker { boolean hasChanged = !newSS.equals(ss); - boolean hasRoamingOn = !mDataRoaming && newDataRoaming; + boolean hasRoamingOn = !ss.getRoaming() && newSS.getRoaming(); - boolean hasRoamingOff = mDataRoaming && !newDataRoaming; + boolean hasRoamingOff = ss.getRoaming() && !newSS.getRoaming(); boolean hasLocationChanged = !newCellLoc.equals(cellLoc); @@ -849,7 +850,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker { gprsState = newGPRSState; networkType = newNetworkType; - mDataRoaming = newDataRoaming; newSS.setStateOutOfService(); // clean slate for next time |