summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java4
-rw-r--r--packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java24
2 files changed, 28 insertions, 0 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 7060c64bb369..68803b39ea1d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -106,6 +106,10 @@ public class WifiTracker {
throw new IllegalArgumentException("Must include either saved or scans");
}
mContext = context;
+ if (currentLooper == null) {
+ // When we aren't on a looper thread, default to the main.
+ currentLooper = Looper.getMainLooper();
+ }
mMainHandler = new MainHandler(currentLooper);
mWorkHandler = new WorkHandler(
workerLooper != null ? workerLooper : currentLooper);
diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java
index 103cd3a65659..479c7be0105b 100644
--- a/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java
+++ b/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java
@@ -171,6 +171,30 @@ public class WifiTrackerTest extends BaseTest {
assertEquals(TEST_SSIDS[0], accessPoints.get(1).getSsid());
}
+ /**
+ * This tests the case where Settings runs this on a non-looper thread for indexing.
+ */
+ public void testSavedOnlyNoLooper() {
+ mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, false, true,
+ mWifiManager, null);
+ mWifiTracker.mScanner = mWifiTracker.new Scanner();
+
+ List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>();
+ List<ScanResult> scanResults = new ArrayList<ScanResult>();
+ generateTestNetworks(wifiConfigs, scanResults, true);
+
+ // Send all of the configs and scan results to the tracker.
+ Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs);
+ Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults);
+ mWifiTracker.forceUpdate();
+
+ List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
+ // Only expect the first two to come back in the results.
+ assertEquals("Expected number of results", 2, accessPoints.size());
+ assertEquals(TEST_SSIDS[1], accessPoints.get(0).getSsid());
+ assertEquals(TEST_SSIDS[0], accessPoints.get(1).getSsid());
+ }
+
public void testAvailableOnly() {
mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true,
mWifiManager, mMainLooper);