Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +51 −1 Original line number Diff line number Diff line Loading @@ -1340,7 +1340,7 @@ public final class DcTracker extends DcTrackerBase { if (DBG) log("onApnChanged: createAllApnList and cleanUpAllConnections"); createAllApnList(); setInitialAttachApn(); cleanUpAllConnections(!isDisconnected, Phone.REASON_APN_CHANGED); cleanUpConnectionsOnUpdatedApns(!isDisconnected); // FIXME: See bug 17426028 maybe no conditional is needed. if (mPhone.getSubId() == SubscriptionManager.getDefaultDataSubId()) { Loading Loading @@ -3001,4 +3001,54 @@ public final class DcTracker extends DcTrackerBase { } } } private void cleanUpConnectionsOnUpdatedApns(boolean tearDown) { if (DBG) log("cleanUpConnectionsOnUpdatedApns: tearDown=" + tearDown); if (mAllApnSettings.isEmpty()) { cleanUpAllConnections(tearDown, Phone.REASON_APN_CHANGED); } else { for (ApnContext apnContext : mApnContexts.values()) { if (VDBG) log("cleanUpConnectionsOnUpdatedApns for "+ apnContext); boolean cleanUpApn = true; ArrayList<ApnSetting> currentWaitingApns = apnContext.getWaitingApns(); if ((currentWaitingApns != null) && (!apnContext.isDisconnected())) { int radioTech = mPhone.getServiceState().getRilDataRadioTechnology(); ArrayList<ApnSetting> waitingApns = buildWaitingApns( apnContext.getApnType(), radioTech); if (VDBG) log("new waitingApns:" + waitingApns); if (waitingApns.size() == currentWaitingApns.size()) { cleanUpApn = false; for (int i = 0; i < waitingApns.size(); i++) { if (!currentWaitingApns.get(i).equals(waitingApns.get(i))) { if (VDBG) log("new waiting apn is different at " + i); cleanUpApn = true; apnContext.setWaitingApns(waitingApns); break; } } } } if (cleanUpApn) { apnContext.setReason(Phone.REASON_APN_CHANGED); cleanUpConnection(true, apnContext); } } } if (!isConnected()) { stopNetStatPoll(); stopDataStallAlarm(); } mRequestedApnType = PhoneConstants.APN_TYPE_DEFAULT; if (DBG) log("mDisconnectPendingCount = " + mDisconnectPendingCount); if (tearDown && mDisconnectPendingCount == 0) { notifyDataDisconnectComplete(); notifyAllDataDisconnected(); } } } Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +51 −1 Original line number Diff line number Diff line Loading @@ -1340,7 +1340,7 @@ public final class DcTracker extends DcTrackerBase { if (DBG) log("onApnChanged: createAllApnList and cleanUpAllConnections"); createAllApnList(); setInitialAttachApn(); cleanUpAllConnections(!isDisconnected, Phone.REASON_APN_CHANGED); cleanUpConnectionsOnUpdatedApns(!isDisconnected); // FIXME: See bug 17426028 maybe no conditional is needed. if (mPhone.getSubId() == SubscriptionManager.getDefaultDataSubId()) { Loading Loading @@ -3001,4 +3001,54 @@ public final class DcTracker extends DcTrackerBase { } } } private void cleanUpConnectionsOnUpdatedApns(boolean tearDown) { if (DBG) log("cleanUpConnectionsOnUpdatedApns: tearDown=" + tearDown); if (mAllApnSettings.isEmpty()) { cleanUpAllConnections(tearDown, Phone.REASON_APN_CHANGED); } else { for (ApnContext apnContext : mApnContexts.values()) { if (VDBG) log("cleanUpConnectionsOnUpdatedApns for "+ apnContext); boolean cleanUpApn = true; ArrayList<ApnSetting> currentWaitingApns = apnContext.getWaitingApns(); if ((currentWaitingApns != null) && (!apnContext.isDisconnected())) { int radioTech = mPhone.getServiceState().getRilDataRadioTechnology(); ArrayList<ApnSetting> waitingApns = buildWaitingApns( apnContext.getApnType(), radioTech); if (VDBG) log("new waitingApns:" + waitingApns); if (waitingApns.size() == currentWaitingApns.size()) { cleanUpApn = false; for (int i = 0; i < waitingApns.size(); i++) { if (!currentWaitingApns.get(i).equals(waitingApns.get(i))) { if (VDBG) log("new waiting apn is different at " + i); cleanUpApn = true; apnContext.setWaitingApns(waitingApns); break; } } } } if (cleanUpApn) { apnContext.setReason(Phone.REASON_APN_CHANGED); cleanUpConnection(true, apnContext); } } } if (!isConnected()) { stopNetStatPoll(); stopDataStallAlarm(); } mRequestedApnType = PhoneConstants.APN_TYPE_DEFAULT; if (DBG) log("mDisconnectPendingCount = " + mDisconnectPendingCount); if (tearDown && mDisconnectPendingCount == 0) { notifyDataDisconnectComplete(); notifyAllDataDisconnected(); } } }