SettingsLib: Fix wifi crash during settings index

and test it

Bug: 21365029
Change-Id: I9a914773577dcbe591b41c9114ba4d078b5e7369
This commit is contained in:
Jason Monk
2015-05-22 11:25:04 -04:00
committed by Jason Monk
parent ae0940fe75
commit bf3d1af3d8
2 changed files with 28 additions and 0 deletions

View File

@@ -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);

View File

@@ -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);