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

Commit 4ad53edc authored by junyulai's avatar junyulai
Browse files

Fix nascent timer never get removed

By design, the nascent timer will be removed after a network
satisfied first request. However, this never happens.
Because the mInactive is false when that happens, so isNascent
is never true.

Furthermore, when removing a nascent timer, the inactivity
state can never be updated since no condition in the
updateInactivityState will be met to update the state correctly.

Thus, update inactive state accordingly when adding/removing the
nascent timer.

Test: TH
Bug: 184227264
Ignore-AOSP-First: prevent merge conflict
Change-Id: I4c1521b6e0ef68ac489771a2ab6b09ef3e381577
parent ceaff386
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -7750,6 +7750,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            // all networks except in the case of an underlying network for a VCN.
            // all networks except in the case of an underlying network for a VCN.
            if (newSatisfier.isNascent()) {
            if (newSatisfier.isNascent()) {
                newSatisfier.unlingerRequest(NetworkRequest.REQUEST_ID_NONE);
                newSatisfier.unlingerRequest(NetworkRequest.REQUEST_ID_NONE);
                newSatisfier.unsetInactive();
            }
            }


            // if newSatisfier is not null, then newRequest may not be null.
            // if newSatisfier is not null, then newRequest may not be null.
@@ -8254,6 +8255,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            // But it will be removed as soon as the network satisfies a request for the first time.
            // But it will be removed as soon as the network satisfies a request for the first time.
            networkAgent.lingerRequest(NetworkRequest.REQUEST_ID_NONE,
            networkAgent.lingerRequest(NetworkRequest.REQUEST_ID_NONE,
                    SystemClock.elapsedRealtime(), mNascentDelayMs);
                    SystemClock.elapsedRealtime(), mNascentDelayMs);
            networkAgent.setInactive();


            // Consider network even though it is not yet validated.
            // Consider network even though it is not yet validated.
            rematchAllNetworksAndRequests();
            rematchAllNetworksAndRequests();
+9 −4
Original line number Original line Diff line number Diff line
@@ -4547,9 +4547,8 @@ public class ConnectivityServiceTest {
            expectNoRequestChanged(testFactory);
            expectNoRequestChanged(testFactory);
            testFactory.assertRequestCountEquals(0);
            testFactory.assertRequestCountEquals(0);
            assertFalse(testFactory.getMyStartRequested());
            assertFalse(testFactory.getMyStartRequested());
            // ...  and cell data to be torn down after nascent network timeout.
            // ...  and cell data to be torn down immediately since it is no longer nascent.
            cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent,
            cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
                    mService.mNascentDelayMs + TEST_CALLBACK_TIMEOUT_MS);
            waitForIdle();
            waitForIdle();
            assertLength(1, mCm.getAllNetworks());
            assertLength(1, mCm.getAllNetworks());
        } finally {
        } finally {
@@ -11788,6 +11787,11 @@ public class ConnectivityServiceTest {
        internetFactory.expectRequestRemove();
        internetFactory.expectRequestRemove();
        internetFactory.assertRequestCountEquals(0);
        internetFactory.assertRequestCountEquals(0);
        // Create a request that holds the upcoming wifi network.
        final TestNetworkCallback wifiCallback = new TestNetworkCallback();
        mCm.requestNetwork(new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI).build(),
                wifiCallback);
        // Now WiFi connects and it's unmetered, but it's weaker than cell.
        // Now WiFi connects and it's unmetered, but it's weaker than cell.
        mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
        mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED);
        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED);
@@ -11796,7 +11800,7 @@ public class ConnectivityServiceTest {
        mWiFiNetworkAgent.connect(true);
        mWiFiNetworkAgent.connect(true);
        // The OEM_PAID preference prefers an unmetered network to an OEM_PAID network, so
        // The OEM_PAID preference prefers an unmetered network to an OEM_PAID network, so
        // the oemPaidFactory can't beat this no matter how high its score.
        // the oemPaidFactory can't beat wifi no matter how high its score.
        oemPaidFactory.expectRequestRemove();
        oemPaidFactory.expectRequestRemove();
        expectNoRequestChanged(internetFactory);
        expectNoRequestChanged(internetFactory);
@@ -11807,6 +11811,7 @@ public class ConnectivityServiceTest {
        // unmetered network, so the oemPaidNetworkFactory still can't beat this.
        // unmetered network, so the oemPaidNetworkFactory still can't beat this.
        expectNoRequestChanged(oemPaidFactory);
        expectNoRequestChanged(oemPaidFactory);
        internetFactory.expectRequestAdd();
        internetFactory.expectRequestAdd();
        mCm.unregisterNetworkCallback(wifiCallback);
    }
    }
    /**
    /**