diff options
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java | 16 | ||||
| -rw-r--r-- | packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java | 30 |
2 files changed, 42 insertions, 4 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index df1a7a84e07e..2482095af419 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -527,10 +527,7 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro WifiConfiguration connectionConfig = null; if (mLastInfo != null) { - // TODO(sghuman): Refactor to match config network id when updating configs below, and - // then update network info and wifi info only on match - connectionConfig = getWifiConfigurationForNetworkId( - mLastInfo.getNetworkId(), configs); + connectionConfig = getWifiConfigurationForNetworkId(mLastInfo.getNetworkId(), configs); } // Rather than dropping and reacquiring the lock multiple times in this method, we lock @@ -564,6 +561,17 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro accessPoints.add(accessPoint); } + // If there were no scan results, create an AP for the currently connected network (if + // it exists). + // TODO(sghuman): Investigate if this works for an ephemeral (auto-connected) network + // when there are no scan results, as it may not have a valid WifiConfiguration + if (accessPoints.isEmpty() && connectionConfig != null) { + AccessPoint activeAp = new AccessPoint(mContext, connectionConfig); + activeAp.update(connectionConfig, mLastInfo, mLastNetworkInfo); + accessPoints.add(activeAp); + scoresToRequest.add(NetworkKey.createFromWifiInfo(mLastInfo)); + } + requestScoresForNetworkKeys(scoresToRequest); for (AccessPoint ap : accessPoints) { ap.update(mScoreCache, mNetworkScoringUiEnabled, mMaxSpeedLabelScoreCacheAge); diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java index 27eebaae7717..ca965f38f639 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java @@ -696,6 +696,36 @@ public class WifiTrackerTest { } @Test + public void onStartShouldDisplayConnectedAccessPointWhenThereAreNoScanResults() + throws Exception { + Network mockNetwork = mock(Network.class); + when(mockWifiManager.getCurrentNetwork()).thenReturn(mockNetwork); + + when(mockWifiManager.getConnectionInfo()).thenReturn(CONNECTED_AP_1_INFO); + + NetworkInfo networkInfo = new NetworkInfo( + ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype"); + networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "connected", "test"); + when(mockConnectivityManager.getNetworkInfo(any(Network.class))).thenReturn(networkInfo); + + // Don't return any scan results + when(mockWifiManager.getScanResults()).thenReturn(new ArrayList<>()); + + WifiTracker tracker = createMockedWifiTracker(); + startTracking(tracker); + + verify(mockWifiManager).getConnectionInfo(); + verify(mockWifiManager, times(1)).getConfiguredNetworks(); + verify(mockConnectivityManager).getNetworkInfo(any(Network.class)); + + // mStaleAccessPoints is true + verify(mockWifiListenerExecutor, never()).onAccessPointsChanged(); + + assertThat(tracker.getAccessPoints().size()).isEqualTo(1); + assertThat(tracker.getAccessPoints().get(0).isActive()).isTrue(); + } + + @Test public void stopTrackingShouldRemoveAllPendingWork() throws Exception { WifiTracker tracker = createMockedWifiTracker(); startTracking(tracker); |