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

Commit d34049ed authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fixed unnecessary network request removal" into tm-dev am: 9f226a10 am: fece65df

parents fdcb29a7 fece65df
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -1157,7 +1157,7 @@ public class DataNetworkController extends Handler {
            loge("onAddNetworkRequest: Duplicate network request. " + networkRequest);
            return;
        }
        logv("onAddNetworkRequest: added " + networkRequest);
        log("onAddNetworkRequest: added " + networkRequest);
        onSatisfyNetworkRequest(networkRequest);
    }

@@ -1495,12 +1495,15 @@ public class DataNetworkController extends Handler {
        }

        networkRequest.setEvaluation(evaluation);
        // EXTERNAL_QUERY generates too many log spam.
        if (reason != DataEvaluationReason.EXTERNAL_QUERY) {
            log(evaluation.toString() + ", network type="
                    + TelephonyManager.getNetworkTypeName(getDataNetworkType(transport))
                    + ", reg state="
                    + NetworkRegistrationInfo.registrationStateToString(
                    getDataRegistrationState(transport))
                    + ", " + networkRequest);
        }
        return evaluation;
    }

@@ -1921,7 +1924,7 @@ public class DataNetworkController extends Handler {
        if (networkRequest.getAttachedNetwork() != null) {
            networkRequest.getAttachedNetwork().detachNetworkRequest(networkRequest);
        }
        logv("onRemoveNetworkRequest: Removed " + networkRequest);
        log("onRemoveNetworkRequest: Removed " + networkRequest);
    }

    /**
+27 −12
Original line number Diff line number Diff line
@@ -267,6 +267,13 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        }
    }

    private void releaseNetworkInternal(TelephonyNetworkRequest networkRequest) {
        NetworkRequestsStats.addNetworkRelease(networkRequest.getNativeNetworkRequest(),
                mSubscriptionId);
        mPhone.getDataNetworkController().removeNetworkRequest(networkRequest);
    }

    // TODO: Clean this up after old data stack removed.
    private void releaseNetworkInternal(TelephonyNetworkRequest networkRequest,
                                        @ReleaseNetworkType int releaseType,
                                        int transport) {
@@ -311,9 +318,13 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_NORMAL,
                        getTransportTypeFromNetworkRequest(networkRequest), null);
            } else if (action == ACTION_RELEASE) {
                if (mPhone.isUsingNewDataStack()) {
                    releaseNetworkInternal(networkRequest);
                } else {
                    releaseNetworkInternal(networkRequest, DcTracker.RELEASE_TYPE_DETACH,
                            getTransportTypeFromNetworkRequest(networkRequest));
                }
            }

            mNetworkRequests.put(networkRequest,
                    shouldApply ? transportType : AccessNetworkConstants.TRANSPORT_TYPE_INVALID);
@@ -375,18 +386,22 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        logl("onReleaseNetworkFor " + networkRequest + " applied " + applied);

        if (applied) {
            // Most of the time, the network request only exists in one of the DcTracker, but in the
            // middle of handover, the network request temporarily exists in both DcTrackers. If
            // connectivity service releases the network request while handover is ongoing, we need
            // to remove network requests from both DcTrackers.
            // Note that this part will be refactored in T, where we won't even have DcTracker at
            // all.
            if (mPhone.isUsingNewDataStack()) {
                releaseNetworkInternal(networkRequest);
            } else {
                // Most of the time, the network request only exists in one of the DcTracker, but in
                // the middle of handover, the network request temporarily exists in both
                // DcTrackers. If connectivity service releases the network request while handover
                // is ongoing, we need to remove network requests from both DcTrackers.
                // Note that this part will be refactored in T, where we won't even have DcTracker
                // at all.
                releaseNetworkInternal(networkRequest, DcTracker.RELEASE_TYPE_NORMAL,
                        AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
                releaseNetworkInternal(networkRequest, DcTracker.RELEASE_TYPE_NORMAL,
                        AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
            }
        }
    }

    private void onDataHandoverNeeded(@ApnType int apnType, int targetTransport,
                                      HandoverParams handoverParams) {
+0 −37
Original line number Diff line number Diff line
@@ -439,41 +439,4 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        verify(mDataNetworkController, times(1)).removeNetworkRequest(any());
        verify(mDataNetworkController, times(1)).addNetworkRequest(any());
    }

    @Test
    @SmallTest
    public void testNetworkRequestReleasedDuringHandover() throws Exception {
        createMockedTelephonyComponents();
        doReturn(0).when(mSubscriptionController).getSubIdUsingPhoneId(0);
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
                TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);

        activatePhoneInPhoneSwitcher(0, true);
        makeDefaultInternetRequest();

        NetworkRequest mmsNetworkRequest = makeSubSpecificMmsRequest(0);
        processAllMessages();

        Field f = TelephonyNetworkFactory.class.getDeclaredField("mInternalHandler");
        f.setAccessible(true);
        Handler h = (Handler) f.get(mTelephonyNetworkFactoryUT);

        HandoverCallback handoverCallback = mock(HandoverCallback.class);
        //Mockito.reset(mDcTracker);
        doReturn(mDataConnection).when(mDcTracker).getDataConnectionByApnType(anyString());
        doReturn(true).when(mDataConnection).isActive();

        HandoverParams hp = new HandoverParams(ApnSetting.TYPE_MMS,
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN, handoverCallback);
        AsyncResult ar = new AsyncResult(null, hp, null);
        h.sendMessage(h.obtainMessage(5 /* EVENT_DATA_HANDOVER_NEEDED */, ar));
        processAllMessages();

        // Now release the network request while handover is still ongoing.
        mTelephonyNetworkFactoryUT.releaseNetworkFor(mmsNetworkRequest);
        processAllMessages();

        // Ensure the release is called one more time after the normal release
        verify(mDataNetworkController, times(2)).removeNetworkRequest(any());
    }
}