From 9e698c6c3ad1081bfb4a8d1a0d595ea14b5b076f Mon Sep 17 00:00:00 2001 From: Wink Saville Date: Tue, 21 Aug 2012 22:58:54 -0700 Subject: [PATCH] Empty DC's apnList when the DC is free. Not doing this causes DC.apnList's to have multiple entries in the apnlist which causes DC's to look like its connected to both IMS and INTERNET. And when selecting CDMA only mode on a Xoom we will not bring up the connection thus no data connectivity. Bug: 6939338 Change-Id: I17bc17cd1938ebac773db8131d12d0fa724348b0 --- .../gsm/GsmDataConnectionTracker.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index a971066a6bad9..23364b49a1014 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -996,9 +996,23 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } private boolean dataConnectionNotInUse(DataConnectionAc dcac) { + if (DBG) log("dataConnectionNotInUse: check if dcac is inuse dc=" + dcac.dataConnection); for (ApnContext apnContext : mApnContexts.values()) { - if (apnContext.getDataConnectionAc() == dcac) return false; + if (apnContext.getDataConnectionAc() == dcac) { + if (DBG) log("dataConnectionNotInUse: in use by apnContext=" + apnContext); + return false; + } } + // TODO: Fix retry handling so free DataConnections have empty apnlists. + // Probably move retry handling into DataConnections and reduce complexity + // of DCT. + for (ApnContext apnContext : dcac.getApnListSync()) { + if (DBG) { + log("dataConnectionNotInUse: removing apnContext=" + apnContext); + } + dcac.removeApnContextSync(apnContext); + } + if (DBG) log("dataConnectionNotInUse: not in use return true"); return true; } @@ -2131,14 +2145,14 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { protected void onDisconnectDone(int connId, AsyncResult ar) { ApnContext apnContext = null; - if(DBG) log("onDisconnectDone: EVENT_DISCONNECT_DONE connId=" + connId); if (ar.userObj instanceof ApnContext) { apnContext = (ApnContext) ar.userObj; } else { - loge("Invalid ar in onDisconnectDone"); + loge("onDisconnectDone: Invalid ar in onDisconnectDone, ignore"); return; } + if(DBG) log("onDisconnectDone: EVENT_DISCONNECT_DONE apnContext=" + apnContext); apnContext.setState(State.IDLE); mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());