diff options
author | Wink Saville <wink@google.com> | 2011-09-16 17:53:50 -0700 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2011-09-16 17:53:50 -0700 |
commit | ea0d54b44e6e2a1319097fa8002ff841e603e652 (patch) | |
tree | 21d51016d683dfd3c5ad1bf82d974700cd0e11d3 /telephony | |
parent | ebdcae732f648871dd0df6586a5ba57aae015bd4 (diff) | |
download | frameworks_base-ea0d54b44e6e2a1319097fa8002ff841e603e652.zip frameworks_base-ea0d54b44e6e2a1319097fa8002ff841e603e652.tar.gz frameworks_base-ea0d54b44e6e2a1319097fa8002ff841e603e652.tar.bz2 |
Have all connections disconnected before turning off radio.
Bug: 5306201
Change-Id: I8a121e5ed951f286b6f3edc70c468e86ccedfbf0
Diffstat (limited to 'telephony')
-rw-r--r-- | telephony/java/com/android/internal/telephony/ApnContext.java | 6 | ||||
-rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java | 29 |
2 files changed, 25 insertions, 10 deletions
diff --git a/telephony/java/com/android/internal/telephony/ApnContext.java b/telephony/java/com/android/internal/telephony/ApnContext.java index a52f1ca..8aeee87 100644 --- a/telephony/java/com/android/internal/telephony/ApnContext.java +++ b/telephony/java/com/android/internal/telephony/ApnContext.java @@ -154,6 +154,12 @@ public class ApnContext { return mState; } + public boolean isDisconnected() { + DataConnectionTracker.State currentState = getState(); + return ((currentState == DataConnectionTracker.State.IDLE) || + currentState == DataConnectionTracker.State.FAILED); + } + public synchronized void setReason(String reason) { if (DBG) { log("set reason as " + reason + ", for type " + mApnType + ",current state " + mState); diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index 6d0b696..dd8a60a 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -787,9 +787,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } DataConnectionAc dcac = apnContext.getDataConnectionAc(); if (tearDown) { - boolean isConnected = (apnContext.getState() != State.IDLE - && apnContext.getState() != State.FAILED); - if (!isConnected) { + if (apnContext.isDisconnected()) { // The request is tearDown and but ApnContext is not connected. // If apnContext is not enabled anymore, break the linkage to the DCAC/DC. apnContext.setState(State.IDLE); @@ -1019,11 +1017,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { */ private void onApnChanged() { // TODO: How to handle when multiple APNs are active? - boolean isConnected; ApnContext defaultApnContext = mApnContexts.get(Phone.APN_TYPE_DEFAULT); - isConnected = (defaultApnContext.getState() != State.IDLE - && defaultApnContext.getState() != State.FAILED); + boolean defaultApnIsDisconnected = defaultApnContext.isDisconnected(); if (mPhone instanceof GSMPhone) { // The "current" may no longer be valid. MMS depends on this to send properly. TBD @@ -1034,8 +1030,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { // match the current operator. if (DBG) log("onApnChanged: createAllApnList and cleanUpAllConnections"); createAllApnList(); - cleanUpAllConnections(isConnected, Phone.REASON_APN_CHANGED); - if (!isConnected) { + cleanUpAllConnections(!defaultApnIsDisconnected, Phone.REASON_APN_CHANGED); + if (defaultApnIsDisconnected) { setupDataOnReadyApns(Phone.REASON_APN_CHANGED); } } @@ -1885,7 +1881,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { // if all data connection are gone, check whether Airplane mode request was // pending. - if (!isConnected()) { + if (isDisconnected()) { if (mPhone.getServiceStateTracker().processPendingRadioPowerOffAfterDataOff()) { // Radio will be turned off. No need to retry data setup apnContext.setApnSetting(null); @@ -1957,12 +1953,25 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { protected boolean isConnected() { for (ApnContext apnContext : mApnContexts.values()) { if (apnContext.getState() == State.CONNECTED) { - return true; + // At least one context is connected, return true + return true; } } + // There are not any contexts connected, return false return false; } + protected boolean isDisconnected() { + for (ApnContext apnContext : mApnContexts.values()) { + if (!apnContext.isDisconnected()) { + // At least one context was not disconnected return false + return false; + } + } + // All contexts were disconnected so return true + return true; + } + @Override protected void notifyDataConnection(String reason) { if (DBG) log("notifyDataConnection: reason=" + reason); |