Loading src/java/com/android/internal/telephony/dataconnection/DataConnection.java +11 −1 Original line number Diff line number Diff line Loading @@ -190,6 +190,7 @@ public class DataConnection extends StateMachine { private NetworkInfo mNetworkInfo; private DcNetworkAgent mNetworkAgent; private LocalLog mNetCapsLocalLog = new LocalLog(50); private int mDisabledApnTypeBitMask = 0; int mTag; public int mCid; Loading Loading @@ -739,6 +740,7 @@ public class DataConnection extends StateMachine { mUnmeteredUseOnly = false; mRestrictedNetworkOverride = false; mDcFailCause = null; mDisabledApnTypeBitMask = 0; } /** Loading Loading @@ -991,7 +993,7 @@ public class DataConnection extends StateMachine { if (mApnSetting != null) { final String[] types = ApnSetting.getApnTypesStringFromBitmask( mApnSetting.getApnTypeBitmask()).split(","); mApnSetting.getApnTypeBitmask() & ~mDisabledApnTypeBitMask).split(","); for (String type : types) { if (!mRestrictedNetworkOverride && mUnmeteredUseOnly && ApnSettingUtils.isMeteredApnType(type, mPhone)) { Loading Loading @@ -1760,6 +1762,10 @@ public class DataConnection extends StateMachine { // either add this new apn context to our set or // update the existing cp with the latest connection generation number mApnContexts.put(cp.mApnContext, cp); // TODO (b/118347948): evaluate if it's still needed after assigning // different scores to different Cellular network. mDisabledApnTypeBitMask &= ~cp.mApnContext.getApnTypeBitmask(); mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities()); if (DBG) { log("DcActiveState: EVENT_CONNECT cp=" + cp + " dc=" + DataConnection.this); } Loading Loading @@ -1788,6 +1794,10 @@ public class DataConnection extends StateMachine { transitionTo(mDisconnectingState); } else { mApnContexts.remove(dp.mApnContext); // TODO (b/118347948): evaluate if it's still needed after assigning // different scores to different Cellular network. mDisabledApnTypeBitMask |= dp.mApnContext.getApnTypeBitmask(); mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities()); notifyDisconnectCompleted(dp, false); } } else { Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +6 −2 Original line number Diff line number Diff line Loading @@ -861,11 +861,15 @@ public class DcTracker extends Handler { if (apnContext != null) apnContext.requestNetwork(networkRequest, log); } public void releaseNetwork(NetworkRequest networkRequest, LocalLog log) { public void releaseNetwork(NetworkRequest networkRequest, LocalLog log, boolean cleanUpConnection) { final int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest); final ApnContext apnContext = mApnContextsByType.get(apnType); log.log("DcTracker.releaseNetwork for " + networkRequest + " found " + apnContext); if (apnContext != null) apnContext.releaseNetwork(networkRequest, log); if (apnContext != null) { apnContext.releaseNetwork(networkRequest, log); if (cleanUpConnection) cleanUpConnectionInternal(true, apnContext); } } // Turn telephony radio on or off. Loading src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java +8 −7 Original line number Diff line number Diff line Loading @@ -160,8 +160,8 @@ public class TelephonyNetworkFactory extends NetworkFactory { private static final int ACTION_REQUEST = 1; private static final int ACTION_RELEASE = 2; private void applyRequests(HashMap<NetworkRequest, LocalLog> requestMap, int action, String logStr) { private void applyRequestsOnActivePhoneSwitch(HashMap<NetworkRequest, LocalLog> requestMap, boolean cleanUpOnRelease, int action, String logStr) { if (action == ACTION_NO_OP) return; for (NetworkRequest networkRequest : requestMap.keySet()) { Loading @@ -170,7 +170,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { if (action == ACTION_REQUEST) { mDcTracker.requestNetwork(networkRequest, localLog); } else if (action == ACTION_RELEASE) { mDcTracker.releaseNetwork(networkRequest, localLog); mDcTracker.releaseNetwork(networkRequest, localLog, cleanUpOnRelease); } } } Loading @@ -196,9 +196,10 @@ public class TelephonyNetworkFactory extends NetworkFactory { + "newIsActiveForDefault " + newIsActiveForDefault + ")"; if (DBG) log(logString); applyRequests(mSpecificRequests, getAction(mIsActive, newIsActive), logString); applyRequests(mDefaultRequests, getAction(mIsActiveForDefault, newIsActiveForDefault), logString); applyRequestsOnActivePhoneSwitch(mSpecificRequests, false, getAction(mIsActive, newIsActive), logString); applyRequestsOnActivePhoneSwitch(mDefaultRequests, true, getAction(mIsActiveForDefault, newIsActiveForDefault), logString); mIsActive = newIsActive; mIsActiveForDefault = newIsActiveForDefault; Loading Loading @@ -279,7 +280,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { String s = "onReleaseNetworkFor"; localLog.log(s); log(s + " " + networkRequest); mDcTracker.releaseNetwork(networkRequest, localLog); mDcTracker.releaseNetwork(networkRequest, localLog, false); } else { String s = "not releasing - isApplicable=" + isApplicable + ", mIsActive=" + mIsActive; localLog.log(s); Loading tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.doAnswer; import android.content.Context; Loading Loading @@ -116,7 +117,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest { doAnswer(invocation -> { mNetworkRequestList.remove((NetworkRequest) invocation.getArguments()[0]); return null; }).when(mDcTracker).releaseNetwork(any(), any()); }).when(mDcTracker).releaseNetwork(any(), any(), anyBoolean()); } @After Loading Loading
src/java/com/android/internal/telephony/dataconnection/DataConnection.java +11 −1 Original line number Diff line number Diff line Loading @@ -190,6 +190,7 @@ public class DataConnection extends StateMachine { private NetworkInfo mNetworkInfo; private DcNetworkAgent mNetworkAgent; private LocalLog mNetCapsLocalLog = new LocalLog(50); private int mDisabledApnTypeBitMask = 0; int mTag; public int mCid; Loading Loading @@ -739,6 +740,7 @@ public class DataConnection extends StateMachine { mUnmeteredUseOnly = false; mRestrictedNetworkOverride = false; mDcFailCause = null; mDisabledApnTypeBitMask = 0; } /** Loading Loading @@ -991,7 +993,7 @@ public class DataConnection extends StateMachine { if (mApnSetting != null) { final String[] types = ApnSetting.getApnTypesStringFromBitmask( mApnSetting.getApnTypeBitmask()).split(","); mApnSetting.getApnTypeBitmask() & ~mDisabledApnTypeBitMask).split(","); for (String type : types) { if (!mRestrictedNetworkOverride && mUnmeteredUseOnly && ApnSettingUtils.isMeteredApnType(type, mPhone)) { Loading Loading @@ -1760,6 +1762,10 @@ public class DataConnection extends StateMachine { // either add this new apn context to our set or // update the existing cp with the latest connection generation number mApnContexts.put(cp.mApnContext, cp); // TODO (b/118347948): evaluate if it's still needed after assigning // different scores to different Cellular network. mDisabledApnTypeBitMask &= ~cp.mApnContext.getApnTypeBitmask(); mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities()); if (DBG) { log("DcActiveState: EVENT_CONNECT cp=" + cp + " dc=" + DataConnection.this); } Loading Loading @@ -1788,6 +1794,10 @@ public class DataConnection extends StateMachine { transitionTo(mDisconnectingState); } else { mApnContexts.remove(dp.mApnContext); // TODO (b/118347948): evaluate if it's still needed after assigning // different scores to different Cellular network. mDisabledApnTypeBitMask |= dp.mApnContext.getApnTypeBitmask(); mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities()); notifyDisconnectCompleted(dp, false); } } else { Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +6 −2 Original line number Diff line number Diff line Loading @@ -861,11 +861,15 @@ public class DcTracker extends Handler { if (apnContext != null) apnContext.requestNetwork(networkRequest, log); } public void releaseNetwork(NetworkRequest networkRequest, LocalLog log) { public void releaseNetwork(NetworkRequest networkRequest, LocalLog log, boolean cleanUpConnection) { final int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest); final ApnContext apnContext = mApnContextsByType.get(apnType); log.log("DcTracker.releaseNetwork for " + networkRequest + " found " + apnContext); if (apnContext != null) apnContext.releaseNetwork(networkRequest, log); if (apnContext != null) { apnContext.releaseNetwork(networkRequest, log); if (cleanUpConnection) cleanUpConnectionInternal(true, apnContext); } } // Turn telephony radio on or off. Loading
src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java +8 −7 Original line number Diff line number Diff line Loading @@ -160,8 +160,8 @@ public class TelephonyNetworkFactory extends NetworkFactory { private static final int ACTION_REQUEST = 1; private static final int ACTION_RELEASE = 2; private void applyRequests(HashMap<NetworkRequest, LocalLog> requestMap, int action, String logStr) { private void applyRequestsOnActivePhoneSwitch(HashMap<NetworkRequest, LocalLog> requestMap, boolean cleanUpOnRelease, int action, String logStr) { if (action == ACTION_NO_OP) return; for (NetworkRequest networkRequest : requestMap.keySet()) { Loading @@ -170,7 +170,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { if (action == ACTION_REQUEST) { mDcTracker.requestNetwork(networkRequest, localLog); } else if (action == ACTION_RELEASE) { mDcTracker.releaseNetwork(networkRequest, localLog); mDcTracker.releaseNetwork(networkRequest, localLog, cleanUpOnRelease); } } } Loading @@ -196,9 +196,10 @@ public class TelephonyNetworkFactory extends NetworkFactory { + "newIsActiveForDefault " + newIsActiveForDefault + ")"; if (DBG) log(logString); applyRequests(mSpecificRequests, getAction(mIsActive, newIsActive), logString); applyRequests(mDefaultRequests, getAction(mIsActiveForDefault, newIsActiveForDefault), logString); applyRequestsOnActivePhoneSwitch(mSpecificRequests, false, getAction(mIsActive, newIsActive), logString); applyRequestsOnActivePhoneSwitch(mDefaultRequests, true, getAction(mIsActiveForDefault, newIsActiveForDefault), logString); mIsActive = newIsActive; mIsActiveForDefault = newIsActiveForDefault; Loading Loading @@ -279,7 +280,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { String s = "onReleaseNetworkFor"; localLog.log(s); log(s + " " + networkRequest); mDcTracker.releaseNetwork(networkRequest, localLog); mDcTracker.releaseNetwork(networkRequest, localLog, false); } else { String s = "not releasing - isApplicable=" + isApplicable + ", mIsActive=" + mIsActive; localLog.log(s); Loading
tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.doAnswer; import android.content.Context; Loading Loading @@ -116,7 +117,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest { doAnswer(invocation -> { mNetworkRequestList.remove((NetworkRequest) invocation.getArguments()[0]); return null; }).when(mDcTracker).releaseNetwork(any(), any()); }).when(mDcTracker).releaseNetwork(any(), any(), anyBoolean()); } @After Loading