Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f427e1b authored by Ling Ma's avatar Ling Ma Committed by Automerger Merge Worker
Browse files

Check transport when unthrottle am: 3514daf2

parents 8f840cc2 3514daf2
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -962,7 +962,8 @@ public class DataRetryManager extends Handler {
    public DataRetryManager(@NonNull Phone phone,
            @NonNull DataNetworkController dataNetworkController,
            @NonNull SparseArray<DataServiceManager> dataServiceManagers,
            @NonNull Looper looper, @NonNull DataRetryManagerCallback dataRetryManagerCallback) {
            @NonNull Looper looper,
            @NonNull DataRetryManagerCallback dataRetryManagerCallback) {
        super(looper);
        mPhone = phone;
        mRil = phone.mCi;
@@ -1517,9 +1518,11 @@ public class DataRetryManager extends Handler {
        DataThrottlingEntry entry = new DataThrottlingEntry(dataProfile, networkRequestList,
                dataNetwork, transport, retryType, expirationTime);
        // Remove previous entry that contains the same data profile. Therefore it should always
        // contain at maximum all the distinct data profiles of the current subscription.
        // contain at maximu all the distinct data profiles of the current subscription times each
        // transport.
        mDataThrottlingEntries.removeIf(
                throttlingEntry -> dataProfile.equals(throttlingEntry.dataProfile));
                throttlingEntry -> dataProfile.equals(throttlingEntry.dataProfile)
                        && (throttlingEntry.transport == transport));

        if (mDataThrottlingEntries.size() >= MAXIMUM_HISTORICAL_ENTRIES) {
            // If we don't see the anomaly report after U release, we should remove this check for
@@ -1581,7 +1584,8 @@ public class DataRetryManager extends Handler {
            // in DataProfileInfo.aidl), so we need to get the equivalent data profile from data
            // profile manager.
            Stream<DataThrottlingEntry> stream = mDataThrottlingEntries.stream();
            stream = stream.filter(entry -> entry.expirationTimeMillis > now);
            stream = stream.filter(entry -> entry.expirationTimeMillis > now
                    && (entry.transport == transport));
            if (dataProfile.getApnSetting() != null) {
                stream = stream
                        .filter(entry -> entry.dataProfile.getApnSetting() != null)
+32 −18
Original line number Diff line number Diff line
@@ -160,7 +160,8 @@ public class DataRetryManagerTest extends TelephonyTest {
        mockedDataServiceManagers.put(AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
                mMockedWlanDataServiceManager);
        mDataRetryManagerUT = new DataRetryManager(mPhone, mDataNetworkController,
                mockedDataServiceManagers, Looper.myLooper(), mDataRetryManagerCallbackMock);
                mockedDataServiceManagers, Looper.myLooper(),
                mDataRetryManagerCallbackMock);

        ArgumentCaptor<DataConfigManagerCallback> dataConfigManagerCallbackCaptor =
                ArgumentCaptor.forClass(DataConfigManagerCallback.class);
@@ -342,29 +343,29 @@ public class DataRetryManagerTest extends TelephonyTest {

    @Test
    public void testDataSetupUnthrottling() throws Exception {
        testDataSetupRetryNetworkSuggestedNeverRetry();
        NetworkRequest request = new NetworkRequest.Builder()
                .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
                .build();
        TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone);
        DataNetworkController.NetworkRequestList
                networkRequestList = new DataNetworkController.NetworkRequestList(tnr);
        mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile3,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN, networkRequestList, 123,
                456);
        mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile3,
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN, networkRequestList, 123,
                456);
        processAllFutureMessages();
        Mockito.clearInvocations(mDataRetryManagerCallbackMock);

        DataNetworkController.NetworkRequestList mockNrl = Mockito.mock(
                DataNetworkController.NetworkRequestList.class);
        Field field = DataRetryManager.class.getDeclaredField("mDataRetryEntries");
        field.setAccessible(true);
        List<DataRetryEntry> mDataRetryEntries =
                (List<DataRetryEntry>) field.get(mDataRetryManagerUT);
        assertThat(mDataRetryEntries.size()).isEqualTo(2);

        // schedule 2 setup retries
        DataSetupRetryEntry scheduledRetry1 = new DataSetupRetryEntry.Builder<>()
                .setDataProfile(mDataProfile3)
                .setNetworkRequestList(mockNrl)
                .setTransport(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
                .setSetupRetryType(1)
                .build();
        DataSetupRetryEntry scheduledRetry2 = new DataSetupRetryEntry.Builder<>()
                .setNetworkRequestList(mockNrl)
                .setDataProfile(mDataProfile3)
                .setTransport(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)
                .setSetupRetryType(1)
                .build();
        mDataRetryEntries.addAll(List.of(scheduledRetry1, scheduledRetry2));
        // Suppose we set the data profile as permanently failed.
        mDataProfile3.getApnSetting().setPermanentFailed(true);

@@ -410,8 +411,21 @@ public class DataRetryManagerTest extends TelephonyTest {
        assertThat(entry.transport).isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WWAN);

        // check mDataProfile3-WWAN retry is cancelled, but not the WLAN
        assertThat(scheduledRetry1.getState()).isEqualTo(DataRetryEntry.RETRY_STATE_CANCELLED);
        assertThat(scheduledRetry2.getState()).isEqualTo(DataRetryEntry.RETRY_STATE_NOT_RETRIED);
        assertThat(mDataRetryEntries.size()).isEqualTo(3);
        for (DataRetryEntry retry : mDataRetryEntries) {
            DataSetupRetryEntry setupRetry = (DataSetupRetryEntry) retry;
            if (setupRetry.transport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
                if (setupRetry.retryDelayMillis == 0) {
                    assertThat(setupRetry.getState())
                            .isEqualTo(DataRetryEntry.RETRY_STATE_NOT_RETRIED);
                } else {
                    assertThat(setupRetry.getState())
                            .isEqualTo(DataRetryEntry.RETRY_STATE_CANCELLED);
                }
            } else {
                assertThat(setupRetry.getState()).isEqualTo(DataRetryEntry.RETRY_STATE_NOT_RETRIED);
            }
        }
    }

    @Test