From bf3d1af3d8bd32f410aa5cc44ccdc1df593ef210 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 22 May 2015 11:25:04 -0400 Subject: SettingsLib: Fix wifi crash during settings index and test it Bug: 21365029 Change-Id: I9a914773577dcbe591b41c9114ba4d078b5e7369 --- .../com/android/settingslib/wifi/WifiTracker.java | 4 ++++ .../android/settingslib/wifi/WifiTrackerTest.java | 24 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) 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 wifiConfigs = new ArrayList(); + List scanResults = new ArrayList(); + 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 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); -- cgit v1.2.3-59-g8ed1b