Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +18 −1 Original line number Diff line number Diff line Loading @@ -1702,7 +1702,7 @@ public class DataNetworkController extends Handler { * {@link #evaluateDataNetwork(DataNetwork, DataEvaluationReason)}. * @return The tear down reason. */ private @TearDownReason int getTearDownReason(@NonNull DataEvaluation dataEvaluation) { private static @TearDownReason int getTearDownReason(@NonNull DataEvaluation dataEvaluation) { if (dataEvaluation.containsDisallowedReasons()) { switch (dataEvaluation.getDataDisallowedReasons().get(0)) { case DATA_DISABLED: Loading Loading @@ -2145,6 +2145,14 @@ public class DataNetworkController extends Handler { mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting))); } requestList.removeIf(request -> !mAllNetworkRequestList.contains(request)); if (requestList.isEmpty()) { log("onDataNetworkSetupFailed: All requests have been released. " + "Will not evaluate retry."); return; } // Data retry manager will determine if retry is needed. If needed, retry will be scheduled. mDataRetryManager.evaluateDataSetupRetry(dataNetwork.getDataProfile(), dataNetwork.getTransport(), requestList, cause, retryDelayMillis); Loading Loading @@ -2179,8 +2187,17 @@ public class DataNetworkController extends Handler { * @param dataSetupRetryEntry The data setup retry entry scheduled by {@link DataRetryManager}. */ private void onDataNetworkSetupRetry(@NonNull DataSetupRetryEntry dataSetupRetryEntry) { // The request might be already removed before retry happens. Remove them from the list // if that's the case. dataSetupRetryEntry.networkRequestList.removeIf( request -> !mAllNetworkRequestList.contains(request)); if (dataSetupRetryEntry.networkRequestList.isEmpty()) { loge("onDataNetworkSetupRetry: Request list is empty. Abort retry."); return; } TelephonyNetworkRequest telephonyNetworkRequest = dataSetupRetryEntry.networkRequestList.get(0); int networkCapability = telephonyNetworkRequest.getApnTypeNetworkCapability(); int preferredTransport = mAccessNetworksManager.getPreferredTransportByNetworkCapability( networkCapability); Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -2061,4 +2061,22 @@ public class DataNetworkControllerTest extends TelephonyTest { pdcs = pdcsCaptor.getValue(); assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTED); } @Test public void testNetworkRequestRemovedBeforeRetry() { setFailedSetupDataResponse(mMockedWwanDataServiceManager, DataFailCause.CONGESTION, DataCallResponse.RETRY_DURATION_UNDEFINED); TelephonyNetworkRequest networkRequest = createNetworkRequest( NetworkCapabilities.NET_CAPABILITY_INTERNET); mDataNetworkControllerUT.addNetworkRequest(networkRequest); logd("Removing network request."); mDataNetworkControllerUT.removeNetworkRequest(networkRequest); processAllMessages(); // There should be only one invocation, which is the original setup data request. There // shouldn't be more than 1 (i.e. should not retry). verify(mMockedWwanDataServiceManager, times(1)).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), anyInt(), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); } } Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +18 −1 Original line number Diff line number Diff line Loading @@ -1702,7 +1702,7 @@ public class DataNetworkController extends Handler { * {@link #evaluateDataNetwork(DataNetwork, DataEvaluationReason)}. * @return The tear down reason. */ private @TearDownReason int getTearDownReason(@NonNull DataEvaluation dataEvaluation) { private static @TearDownReason int getTearDownReason(@NonNull DataEvaluation dataEvaluation) { if (dataEvaluation.containsDisallowedReasons()) { switch (dataEvaluation.getDataDisallowedReasons().get(0)) { case DATA_DISABLED: Loading Loading @@ -2145,6 +2145,14 @@ public class DataNetworkController extends Handler { mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting))); } requestList.removeIf(request -> !mAllNetworkRequestList.contains(request)); if (requestList.isEmpty()) { log("onDataNetworkSetupFailed: All requests have been released. " + "Will not evaluate retry."); return; } // Data retry manager will determine if retry is needed. If needed, retry will be scheduled. mDataRetryManager.evaluateDataSetupRetry(dataNetwork.getDataProfile(), dataNetwork.getTransport(), requestList, cause, retryDelayMillis); Loading Loading @@ -2179,8 +2187,17 @@ public class DataNetworkController extends Handler { * @param dataSetupRetryEntry The data setup retry entry scheduled by {@link DataRetryManager}. */ private void onDataNetworkSetupRetry(@NonNull DataSetupRetryEntry dataSetupRetryEntry) { // The request might be already removed before retry happens. Remove them from the list // if that's the case. dataSetupRetryEntry.networkRequestList.removeIf( request -> !mAllNetworkRequestList.contains(request)); if (dataSetupRetryEntry.networkRequestList.isEmpty()) { loge("onDataNetworkSetupRetry: Request list is empty. Abort retry."); return; } TelephonyNetworkRequest telephonyNetworkRequest = dataSetupRetryEntry.networkRequestList.get(0); int networkCapability = telephonyNetworkRequest.getApnTypeNetworkCapability(); int preferredTransport = mAccessNetworksManager.getPreferredTransportByNetworkCapability( networkCapability); Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -2061,4 +2061,22 @@ public class DataNetworkControllerTest extends TelephonyTest { pdcs = pdcsCaptor.getValue(); assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTED); } @Test public void testNetworkRequestRemovedBeforeRetry() { setFailedSetupDataResponse(mMockedWwanDataServiceManager, DataFailCause.CONGESTION, DataCallResponse.RETRY_DURATION_UNDEFINED); TelephonyNetworkRequest networkRequest = createNetworkRequest( NetworkCapabilities.NET_CAPABILITY_INTERNET); mDataNetworkControllerUT.addNetworkRequest(networkRequest); logd("Removing network request."); mDataNetworkControllerUT.removeNetworkRequest(networkRequest); processAllMessages(); // There should be only one invocation, which is the original setup data request. There // shouldn't be more than 1 (i.e. should not retry). verify(mMockedWwanDataServiceManager, times(1)).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), anyInt(), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); } }