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
This commit is contained in:
@@ -7750,6 +7750,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
// all networks except in the case of an underlying network for a VCN.
|
||||
if (newSatisfier.isNascent()) {
|
||||
newSatisfier.unlingerRequest(NetworkRequest.REQUEST_ID_NONE);
|
||||
newSatisfier.unsetInactive();
|
||||
}
|
||||
|
||||
// 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.
|
||||
networkAgent.lingerRequest(NetworkRequest.REQUEST_ID_NONE,
|
||||
SystemClock.elapsedRealtime(), mNascentDelayMs);
|
||||
networkAgent.setInactive();
|
||||
|
||||
// Consider network even though it is not yet validated.
|
||||
rematchAllNetworksAndRequests();
|
||||
|
||||
@@ -4547,9 +4547,8 @@ public class ConnectivityServiceTest {
|
||||
expectNoRequestChanged(testFactory);
|
||||
testFactory.assertRequestCountEquals(0);
|
||||
assertFalse(testFactory.getMyStartRequested());
|
||||
// ... and cell data to be torn down after nascent network timeout.
|
||||
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent,
|
||||
mService.mNascentDelayMs + TEST_CALLBACK_TIMEOUT_MS);
|
||||
// ... and cell data to be torn down immediately since it is no longer nascent.
|
||||
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||
waitForIdle();
|
||||
assertLength(1, mCm.getAllNetworks());
|
||||
} finally {
|
||||
@@ -11788,6 +11787,11 @@ public class ConnectivityServiceTest {
|
||||
internetFactory.expectRequestRemove();
|
||||
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.
|
||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED);
|
||||
@@ -11796,7 +11800,7 @@ public class ConnectivityServiceTest {
|
||||
mWiFiNetworkAgent.connect(true);
|
||||
|
||||
// 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();
|
||||
expectNoRequestChanged(internetFactory);
|
||||
|
||||
@@ -11807,6 +11811,7 @@ public class ConnectivityServiceTest {
|
||||
// unmetered network, so the oemPaidNetworkFactory still can't beat this.
|
||||
expectNoRequestChanged(oemPaidFactory);
|
||||
internetFactory.expectRequestAdd();
|
||||
mCm.unregisterNetworkCallback(wifiCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user