Loading packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +3 −0 Original line number Diff line number Diff line Loading @@ -826,6 +826,9 @@ public class AccessPoint implements Comparable<AccessPoint> { } static String removeDoubleQuotes(String string) { if (TextUtils.isEmpty(string)) { return ""; } int length = string.length(); if ((length > 1) && (string.charAt(0) == '"') && (string.charAt(length - 1) == '"')) { Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +9 −5 Original line number Diff line number Diff line Loading @@ -95,20 +95,20 @@ public class WifiTracker { public WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper, boolean includeSaved, boolean includeScans, boolean includePasspoints) { this(context, wifiListener, workerLooper, includeSaved, includeScans, includePasspoints, (WifiManager) context.getSystemService(Context.WIFI_SERVICE)); (WifiManager) context.getSystemService(Context.WIFI_SERVICE), Looper.myLooper()); } @VisibleForTesting WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper, boolean includeSaved, boolean includeScans, boolean includePasspoints, WifiManager wifiManager) { WifiManager wifiManager, Looper currentLooper) { if (!includeSaved && !includeScans) { throw new IllegalArgumentException("Must include either saved or scans"); } mContext = context; mMainHandler = new MainHandler(); mMainHandler = new MainHandler(currentLooper); mWorkHandler = new WorkHandler( workerLooper != null ? workerLooper : Looper.myLooper()); workerLooper != null ? workerLooper : currentLooper); mWifiManager = wifiManager; mIncludeSaved = includeSaved; mIncludeScans = includeScans; Loading Loading @@ -439,6 +439,10 @@ public class WifiTracker { private static final int MSG_WIFI_STATE_CHANGED = 1; private static final int MSG_ACCESS_POINT_CHANGED = 2; public MainHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { if (mListener == null) { Loading Loading @@ -481,7 +485,7 @@ public class WifiTracker { @VisibleForTesting class Scanner extends Handler { private static final int MSG_SCAN = 0; static final int MSG_SCAN = 0; private int mRetry = 0; Loading packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java +51 −13 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiSsid; import android.os.HandlerThread; import android.os.Looper; import android.util.Log; import com.android.settingslib.BaseTest; import com.android.settingslib.wifi.WifiTracker.Scanner; import com.android.settingslib.wifi.WifiTracker.WifiListener; import org.mockito.ArgumentCaptor; Loading Loading @@ -54,13 +57,25 @@ public class WifiTrackerTest extends BaseTest { private WifiTracker mWifiTracker; private HandlerThread mWorkerThread; private Looper mLooper; private HandlerThread mMainThread; private Looper mMainLooper; @Override protected void setUp() throws Exception { super.setUp(); mWifiManager = Mockito.mock(WifiManager.class); mWifiListener = Mockito.mock(WifiListener.class); mWifiTracker = new WifiTracker(mContext, mWifiListener, true, true, mWifiManager); mWorkerThread = new HandlerThread("TestHandlerThread"); mWorkerThread.start(); mLooper = mWorkerThread.getLooper(); mMainThread = new HandlerThread("TestHandlerThread"); mMainThread.start(); mMainLooper = mMainThread.getLooper(); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, true, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); Mockito.when(mWifiManager.isWifiEnabled()).thenReturn(true); } Loading @@ -76,13 +91,14 @@ public class WifiTrackerTest extends BaseTest { } public void testAccessPointsCallback() { sendScanResultsAvailable(); sendScanResultsAndProcess(false); Mockito.verify(mWifiListener, Mockito.atLeastOnce()).onAccessPointsChanged(); } public void testConnectedCallback() { sendConnected(); waitForThreads(); Mockito.verify(mWifiListener, Mockito.atLeastOnce()).onConnectedChanged(); assertEquals(true, mWifiTracker.isConnected()); Loading @@ -94,6 +110,7 @@ public class WifiTrackerTest extends BaseTest { Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); i.putExtra(WifiManager.EXTRA_WIFI_STATE, TEST_WIFI_STATE); mWifiTracker.mReceiver.onReceive(mContext, i); waitForThreads(); ArgumentCaptor<Integer> wifiState = ArgumentCaptor.forClass(Integer.class); Mockito.verify(mWifiListener, Mockito.atLeastOnce()) Loading @@ -106,7 +123,7 @@ public class WifiTrackerTest extends BaseTest { // Make scans be successful. Mockito.when(mWifiManager.startScan()).thenReturn(true); mWifiTracker.mScanner.handleMessage(null); mWifiTracker.mScanner.handleMessage(mWifiTracker.mScanner.obtainMessage(Scanner.MSG_SCAN)); Mockito.verify(mWifiManager, Mockito.atLeastOnce()).startScan(); } Loading @@ -121,7 +138,7 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); sendScanResultsAndProcess(false); List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); assertEquals("Expected number of results", NUM_NETWORKS, accessPoints.size()); Loading @@ -131,7 +148,8 @@ public class WifiTrackerTest extends BaseTest { } public void testSavedOnly() { mWifiTracker = new WifiTracker(mContext, mWifiListener, true, false, mWifiManager); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, false, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>(); Loading @@ -144,7 +162,7 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); sendScanResultsAndProcess(false); List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); // Only expect the first two to come back in the results. Loading @@ -154,7 +172,8 @@ public class WifiTrackerTest extends BaseTest { } public void testAvailableOnly() { mWifiTracker = new WifiTracker(mContext, mWifiListener, false, true, mWifiManager); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>(); Loading @@ -167,7 +186,7 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); sendScanResultsAndProcess(false); // Expect the last one (sorted order) to be left off since its only saved. List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); Loading @@ -178,12 +197,13 @@ public class WifiTrackerTest extends BaseTest { } public void testNonEphemeralConnected() { mWifiTracker = new WifiTracker(mContext, mWifiListener, false, true, mWifiManager); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>(); List<ScanResult> scanResults = new ArrayList<ScanResult>(); String[] expectedSsids = generateTestNetworks(wifiConfigs, scanResults, false); generateTestNetworks(wifiConfigs, scanResults, false); // Tell WifiTracker we are connected now. sendConnected(); Loading @@ -191,9 +211,8 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); // Do this twice to catch a bug that was happening in the caching, making things ephemeral. sendScanResultsAvailable(); sendScanResultsAndProcess(true); List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); assertEquals("Expected number of results", NUM_NETWORKS - 1, accessPoints.size()); Loading Loading @@ -299,9 +318,28 @@ public class WifiTrackerTest extends BaseTest { mWifiTracker.mReceiver.onReceive(mContext, intent); } private void sendScanResultsAvailable() { private void sendScanResultsAndProcess(boolean sendTwice) { Intent i = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); mWifiTracker.mReceiver.onReceive(mContext, i); if (sendTwice) { mWifiTracker.mReceiver.onReceive(mContext, i); } waitForThreads(); } private void waitForThreads() { // Run all processing. mWorkerThread.quitSafely(); try { mWorkerThread.join(); } catch (InterruptedException e) { } // Send all callbacks. mMainThread.quitSafely(); try { mMainThread.join(); } catch (InterruptedException e) { } } } Loading
packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +3 −0 Original line number Diff line number Diff line Loading @@ -826,6 +826,9 @@ public class AccessPoint implements Comparable<AccessPoint> { } static String removeDoubleQuotes(String string) { if (TextUtils.isEmpty(string)) { return ""; } int length = string.length(); if ((length > 1) && (string.charAt(0) == '"') && (string.charAt(length - 1) == '"')) { Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +9 −5 Original line number Diff line number Diff line Loading @@ -95,20 +95,20 @@ public class WifiTracker { public WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper, boolean includeSaved, boolean includeScans, boolean includePasspoints) { this(context, wifiListener, workerLooper, includeSaved, includeScans, includePasspoints, (WifiManager) context.getSystemService(Context.WIFI_SERVICE)); (WifiManager) context.getSystemService(Context.WIFI_SERVICE), Looper.myLooper()); } @VisibleForTesting WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper, boolean includeSaved, boolean includeScans, boolean includePasspoints, WifiManager wifiManager) { WifiManager wifiManager, Looper currentLooper) { if (!includeSaved && !includeScans) { throw new IllegalArgumentException("Must include either saved or scans"); } mContext = context; mMainHandler = new MainHandler(); mMainHandler = new MainHandler(currentLooper); mWorkHandler = new WorkHandler( workerLooper != null ? workerLooper : Looper.myLooper()); workerLooper != null ? workerLooper : currentLooper); mWifiManager = wifiManager; mIncludeSaved = includeSaved; mIncludeScans = includeScans; Loading Loading @@ -439,6 +439,10 @@ public class WifiTracker { private static final int MSG_WIFI_STATE_CHANGED = 1; private static final int MSG_ACCESS_POINT_CHANGED = 2; public MainHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { if (mListener == null) { Loading Loading @@ -481,7 +485,7 @@ public class WifiTracker { @VisibleForTesting class Scanner extends Handler { private static final int MSG_SCAN = 0; static final int MSG_SCAN = 0; private int mRetry = 0; Loading
packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java +51 −13 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiSsid; import android.os.HandlerThread; import android.os.Looper; import android.util.Log; import com.android.settingslib.BaseTest; import com.android.settingslib.wifi.WifiTracker.Scanner; import com.android.settingslib.wifi.WifiTracker.WifiListener; import org.mockito.ArgumentCaptor; Loading Loading @@ -54,13 +57,25 @@ public class WifiTrackerTest extends BaseTest { private WifiTracker mWifiTracker; private HandlerThread mWorkerThread; private Looper mLooper; private HandlerThread mMainThread; private Looper mMainLooper; @Override protected void setUp() throws Exception { super.setUp(); mWifiManager = Mockito.mock(WifiManager.class); mWifiListener = Mockito.mock(WifiListener.class); mWifiTracker = new WifiTracker(mContext, mWifiListener, true, true, mWifiManager); mWorkerThread = new HandlerThread("TestHandlerThread"); mWorkerThread.start(); mLooper = mWorkerThread.getLooper(); mMainThread = new HandlerThread("TestHandlerThread"); mMainThread.start(); mMainLooper = mMainThread.getLooper(); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, true, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); Mockito.when(mWifiManager.isWifiEnabled()).thenReturn(true); } Loading @@ -76,13 +91,14 @@ public class WifiTrackerTest extends BaseTest { } public void testAccessPointsCallback() { sendScanResultsAvailable(); sendScanResultsAndProcess(false); Mockito.verify(mWifiListener, Mockito.atLeastOnce()).onAccessPointsChanged(); } public void testConnectedCallback() { sendConnected(); waitForThreads(); Mockito.verify(mWifiListener, Mockito.atLeastOnce()).onConnectedChanged(); assertEquals(true, mWifiTracker.isConnected()); Loading @@ -94,6 +110,7 @@ public class WifiTrackerTest extends BaseTest { Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); i.putExtra(WifiManager.EXTRA_WIFI_STATE, TEST_WIFI_STATE); mWifiTracker.mReceiver.onReceive(mContext, i); waitForThreads(); ArgumentCaptor<Integer> wifiState = ArgumentCaptor.forClass(Integer.class); Mockito.verify(mWifiListener, Mockito.atLeastOnce()) Loading @@ -106,7 +123,7 @@ public class WifiTrackerTest extends BaseTest { // Make scans be successful. Mockito.when(mWifiManager.startScan()).thenReturn(true); mWifiTracker.mScanner.handleMessage(null); mWifiTracker.mScanner.handleMessage(mWifiTracker.mScanner.obtainMessage(Scanner.MSG_SCAN)); Mockito.verify(mWifiManager, Mockito.atLeastOnce()).startScan(); } Loading @@ -121,7 +138,7 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); sendScanResultsAndProcess(false); List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); assertEquals("Expected number of results", NUM_NETWORKS, accessPoints.size()); Loading @@ -131,7 +148,8 @@ public class WifiTrackerTest extends BaseTest { } public void testSavedOnly() { mWifiTracker = new WifiTracker(mContext, mWifiListener, true, false, mWifiManager); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, false, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>(); Loading @@ -144,7 +162,7 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); sendScanResultsAndProcess(false); List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); // Only expect the first two to come back in the results. Loading @@ -154,7 +172,8 @@ public class WifiTrackerTest extends BaseTest { } public void testAvailableOnly() { mWifiTracker = new WifiTracker(mContext, mWifiListener, false, true, mWifiManager); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>(); Loading @@ -167,7 +186,7 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); sendScanResultsAndProcess(false); // Expect the last one (sorted order) to be left off since its only saved. List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); Loading @@ -178,12 +197,13 @@ public class WifiTrackerTest extends BaseTest { } public void testNonEphemeralConnected() { mWifiTracker = new WifiTracker(mContext, mWifiListener, false, true, mWifiManager); mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true, mWifiManager, mMainLooper); mWifiTracker.mScanner = mWifiTracker.new Scanner(); List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>(); List<ScanResult> scanResults = new ArrayList<ScanResult>(); String[] expectedSsids = generateTestNetworks(wifiConfigs, scanResults, false); generateTestNetworks(wifiConfigs, scanResults, false); // Tell WifiTracker we are connected now. sendConnected(); Loading @@ -191,9 +211,8 @@ public class WifiTrackerTest extends BaseTest { // Send all of the configs and scan results to the tracker. Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs); Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults); sendScanResultsAvailable(); // Do this twice to catch a bug that was happening in the caching, making things ephemeral. sendScanResultsAvailable(); sendScanResultsAndProcess(true); List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); assertEquals("Expected number of results", NUM_NETWORKS - 1, accessPoints.size()); Loading Loading @@ -299,9 +318,28 @@ public class WifiTrackerTest extends BaseTest { mWifiTracker.mReceiver.onReceive(mContext, intent); } private void sendScanResultsAvailable() { private void sendScanResultsAndProcess(boolean sendTwice) { Intent i = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); mWifiTracker.mReceiver.onReceive(mContext, i); if (sendTwice) { mWifiTracker.mReceiver.onReceive(mContext, i); } waitForThreads(); } private void waitForThreads() { // Run all processing. mWorkerThread.quitSafely(); try { mWorkerThread.join(); } catch (InterruptedException e) { } // Send all callbacks. mMainThread.quitSafely(); try { mMainThread.join(); } catch (InterruptedException e) { } } }