diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 2dcbf90c74b75..26ca3d4aa5d7f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -265,6 +265,9 @@ public class AccessPoint implements Comparable { public String toString() { StringBuilder builder = new StringBuilder().append("AccessPoint(") .append(ssid); + if (bssid != null) { + builder.append(":").append(bssid); + } if (isSaved()) { builder.append(',').append("saved"); } @@ -280,6 +283,7 @@ public class AccessPoint implements Comparable { if (security != SECURITY_NONE) { builder.append(',').append(securityToString(security, pskType)); } + builder.append(",level=").append(getLevel()); builder.append(",rankingScore=").append(mRankingScore); builder.append(",badge=").append(mBadge); diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index 11bcdcad40cfc..8421c2c9dee3b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -271,7 +271,6 @@ public class WifiTracker { if (mWifiManager.isWifiEnabled()) { mScanner.resume(); } - mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS); } /** @@ -715,9 +714,9 @@ public class WifiTracker { mMainHandler.sendEmptyMessage(MainHandler.MSG_CONNECTED_CHANGED); - mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS); mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO, info) .sendToTarget(); + mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS); } } }; 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 2018c13a622d3..e100884869101 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 @@ -15,6 +15,8 @@ */ package com.android.settingslib.wifi; +import static com.google.common.truth.Truth.assertThat; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -28,6 +30,7 @@ import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkBadging; +import android.net.NetworkInfo; import android.net.NetworkKey; import android.net.NetworkScoreManager; import android.net.ScoredNetwork; @@ -35,6 +38,7 @@ import android.net.RssiCurve; import android.net.WifiKey; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiNetworkScoreCache; import android.net.wifi.WifiSsid; @@ -68,6 +72,8 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +// TODO(sghuman): Change these to robolectric tests b/35766684. + @SmallTest @RunWith(AndroidJUnit4.class) public class WifiTrackerTest { @@ -115,9 +121,10 @@ public class WifiTrackerTest { @Before public void setUp() { - mContext = InstrumentationRegistry.getTargetContext(); MockitoAnnotations.initMocks(this); + mContext = InstrumentationRegistry.getTargetContext(); + mWorkerThread = new HandlerThread("TestHandlerWorkerThread"); mWorkerThread.start(); mLooper = mWorkerThread.getLooper(); @@ -221,9 +228,15 @@ public class WifiTrackerTest { SystemClock.elapsedRealtime() * 1000 /* microsecond timestamp */); } - private WifiTracker createTrackerAndInjectInitialScanResults() throws InterruptedException { + private WifiTracker createTrackerWithImmediateBroadcastsAndInjectInitialScanResults( + Intent ... intents) + throws InterruptedException { WifiTracker tracker = createMockedWifiTracker(); + startTracking(tracker); + for (Intent intent : intents) { + tracker.mReceiver.onReceive(mContext, intent); + } mAccessPointsChangedLatch = new CountDownLatch(1); sendScanResultsAndProcess(tracker); @@ -235,16 +248,16 @@ public class WifiTrackerTest { private WifiTracker createMockedWifiTracker() { WifiTracker tracker = new WifiTracker( - mContext, - mockWifiListener, - mLooper, - true, - true, - true, - mockWifiManager, - mockConnectivityManager, - mockNetworkScoreManager, - mMainLooper + mContext, + mockWifiListener, + mLooper, + true, + true, + true, + mockWifiManager, + mockConnectivityManager, + mockNetworkScoreManager, + mMainLooper ); return tracker; @@ -294,6 +307,31 @@ public class WifiTrackerTest { scoreCache.updateScores(Arrays.asList(sc1, sc2)); } + private WifiTracker createTrackerWithScanResultsAndAccessPoint1Connected() + throws InterruptedException { + int networkId = 123; + + WifiInfo wifiInfo = new WifiInfo(); + wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(SSID_1)); + wifiInfo.setBSSID(BSSID_1); + wifiInfo.setNetworkId(networkId); + when(mockWifiManager.getConnectionInfo()).thenReturn(wifiInfo); + + WifiConfiguration configuration = new WifiConfiguration(); + configuration.SSID = SSID_1; + configuration.BSSID = BSSID_1; + configuration.networkId = networkId; + when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration)); + + NetworkInfo networkInfo = new NetworkInfo( + ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype"); + networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "connected", "test"); + + Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); + intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); + return createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(intent); + } + @Test public void testAccessPointListenerSetWhenLookingUpUsingScanResults() { ScanResult scanResult = new ScanResult(); @@ -356,13 +394,22 @@ public class WifiTrackerTest { .unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, scoreCache); } + @Test + public void startTrackingShouldSetConnectedAccessPointAsActive() throws InterruptedException { + WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected(); + + List aps = tracker.getAccessPoints(); + + assertThat(aps).hasSize(2); + assertThat(aps.get(0).isActive()).isTrue(); + } + @Test public void startTrackingShouldRequestScoresForCurrentAccessPoints() throws InterruptedException { // Start the tracker and inject the initial scan results and then stop tracking - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); tracker.stopTracking(); - android.util.Log.d("WifiTrackerTest", "Clearing previously captured requested keys"); mRequestedKeys.clear(); mRequestScoresLatch = new CountDownLatch(1); @@ -370,7 +417,6 @@ public class WifiTrackerTest { assertTrue("Latch timed out", mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); - android.util.Log.d("WifiTrackerTest", "requested keys: " + mRequestedKeys); assertTrue(mRequestedKeys.contains(NETWORK_KEY_1)); assertTrue(mRequestedKeys.contains(NETWORK_KEY_2)); } @@ -394,7 +440,7 @@ public class WifiTrackerTest { @Test public void scoreCacheUpdateScoresShouldChangeSortOrder() throws InterruptedException { - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); List aps = tracker.getAccessPoints(); assertTrue(aps.size() == 2); assertEquals(aps.get(0).getSsidStr(), SSID_1); @@ -416,7 +462,7 @@ public class WifiTrackerTest { Settings.Global.NETWORK_SCORING_UI_ENABLED, 0 /* disabled */); - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); List aps = tracker.getAccessPoints(); assertTrue(aps.size() == 2); assertEquals(aps.get(0).getSsidStr(), SSID_1); @@ -432,7 +478,7 @@ public class WifiTrackerTest { @Test public void scoreCacheUpdateScoresShouldInsertBadgeIntoAccessPoint() throws InterruptedException { - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); updateScoresAndWaitForAccessPointsChangedCallback(); List aps = tracker.getAccessPoints(); @@ -454,7 +500,7 @@ public class WifiTrackerTest { Settings.Global.NETWORK_SCORING_UI_ENABLED, 0 /* disabled */); - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); updateScoresAndWaitForAccessPointsChangedCallback(); List aps = tracker.getAccessPoints(); @@ -473,7 +519,7 @@ public class WifiTrackerTest { // Scores can be requested together or serially depending on how the scan results are // processed. mRequestScoresLatch = new CountDownLatch(2); - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); mRequestedKeys.clear(); @@ -503,7 +549,7 @@ public class WifiTrackerTest { @Test public void scoreCacheAndListenerShouldBeUnregisteredWhenStopTrackingIsCalled() throws Exception { - WifiTracker tracker = createTrackerAndInjectInitialScanResults(); + WifiTracker tracker = createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(); WifiNetworkScoreCache cache = mScoreCacheCaptor.getValue(); tracker.stopTracking();