diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index e39c36aec0..59e2022065 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -2319,9 +2319,7 @@ public class ConnectivityService extends IConnectivityManager.Stub final ArrayList result = new ArrayList<>(); for (Network network : getAllNetworks()) { final NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network); - // TODO: Consider include SUSPENDED networks, which should be considered as - // temporary shortage of connectivity of a connected network. - if (nai != null && nai.networkInfo.isConnected()) { + if (nai != null && nai.everConnected) { // TODO (b/73321673) : NetworkStateSnapshot contains a copy of the // NetworkCapabilities, which may contain UIDs of apps to which the // network applies. Should the UIDs be cleared so as not to leak or diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index b0b5081ddf..78f6578886 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -6355,16 +6355,16 @@ public class ConnectivityServiceTest { mCm.unregisterNetworkCallback(networkCallback); } - private void expectNotifyNetworkStatus(List networks, String defaultIface, + private void expectNotifyNetworkStatus(List defaultNetworks, String defaultIface, Integer vpnUid, String vpnIfname, List underlyingIfaces) throws Exception { - ArgumentCaptor> networksCaptor = ArgumentCaptor.forClass(List.class); + ArgumentCaptor> defaultNetworksCaptor = ArgumentCaptor.forClass(List.class); ArgumentCaptor> vpnInfosCaptor = ArgumentCaptor.forClass(List.class); - verify(mStatsManager, atLeastOnce()).notifyNetworkStatus(networksCaptor.capture(), + verify(mStatsManager, atLeastOnce()).notifyNetworkStatus(defaultNetworksCaptor.capture(), any(List.class), eq(defaultIface), vpnInfosCaptor.capture()); - assertSameElements(networks, networksCaptor.getValue()); + assertSameElements(defaultNetworks, defaultNetworksCaptor.getValue()); List infos = vpnInfosCaptor.getValue(); if (vpnUid != null) { @@ -6380,8 +6380,8 @@ public class ConnectivityServiceTest { } private void expectNotifyNetworkStatus( - List networks, String defaultIface) throws Exception { - expectNotifyNetworkStatus(networks, defaultIface, null, null, List.of()); + List defaultNetworks, String defaultIface) throws Exception { + expectNotifyNetworkStatus(defaultNetworks, defaultIface, null, null, List.of()); } @Test @@ -13102,21 +13102,26 @@ public class ConnectivityServiceTest { assertLength(2, snapshots); assertContainsAll(snapshots, cellSnapshot, wifiSnapshot); - // Set cellular as suspended, verify the snapshots will not contain suspended networks. - // TODO: Consider include SUSPENDED networks, which should be considered as - // temporary shortage of connectivity of a connected network. + // Set cellular as suspended, verify the snapshots will contain suspended networks. mCellNetworkAgent.suspend(); waitForIdle(); + final NetworkCapabilities cellSuspendedNc = + mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()); + assertFalse(cellSuspendedNc.hasCapability(NET_CAPABILITY_NOT_SUSPENDED)); + final NetworkStateSnapshot cellSuspendedSnapshot = new NetworkStateSnapshot( + mCellNetworkAgent.getNetwork(), cellSuspendedNc, cellLp, + null, ConnectivityManager.TYPE_MOBILE); snapshots = mCm.getAllNetworkStateSnapshots(); - assertLength(1, snapshots); - assertEquals(wifiSnapshot, snapshots.get(0)); + assertLength(2, snapshots); + assertContainsAll(snapshots, cellSuspendedSnapshot, wifiSnapshot); - // Disconnect wifi, verify the snapshots contain nothing. + // Disconnect wifi, verify the snapshots contain only cellular. mWiFiNetworkAgent.disconnect(); waitForIdle(); snapshots = mCm.getAllNetworkStateSnapshots(); assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); - assertLength(0, snapshots); + assertLength(1, snapshots); + assertEquals(cellSuspendedSnapshot, snapshots.get(0)); mCellNetworkAgent.resume(); waitForIdle();