Add BaseWifiTracker#disableScanning()
Add a method to disable scanning permanently. This is intended to be a
temporary solution for SysUI to use WifiPickerTracker without invoking
scans all the time in the background.
Bug: 292591403
Test: atest WifiPickerTrackerTest
Change-Id: I34e3f2bb699fc9417a27a01039676c303c2929c0
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index ef7d6f4..6a61aa9 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -100,6 +100,7 @@
private int mWifiState = WifiManager.WIFI_STATE_DISABLED;
private boolean mIsInitialized = false;
+ private boolean mIsScanningDisabled = false;
// Registered on the worker thread
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -368,6 +369,13 @@
}
/**
+ * Disable the scanning mechanism permanently.
+ */
+ public void disableScanning() {
+ mIsScanningDisabled = true;
+ }
+
+ /**
* Returns the LifecycleObserver to listen on the app's lifecycle state.
*/
@AnyThread
@@ -781,7 +789,7 @@
* Scanning should only happen when Wi-Fi is enabled and the activity is started.
*/
private boolean shouldScan() {
- return mIsWifiEnabled && mIsStartedState;
+ return mIsWifiEnabled && mIsStartedState && !mIsScanningDisabled;
}
@WorkerThread
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index 6229037..88f8470 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -2167,6 +2167,27 @@
verify(mMockWifiManager).startScan();
}
+ /**
+ * Tests that the BaseWifiTracker.Scanner does not scan if scanning was disabled.
+ */
+ @Test
+ public void testScanner_scanningDisabled_scannerDoesNotStart() {
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.disableScanning();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockContext).registerReceiver(mBroadcastReceiverCaptor.capture(),
+ any(), any(), any());
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
+ new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION).putExtra(
+ WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED));
+
+ ArgumentCaptor<WifiScanner.ScanListener> mScanListenerCaptor =
+ ArgumentCaptor.forClass(WifiScanner.ScanListener.class);
+ verify(mWifiScanner, never()).startScan(any(), mScanListenerCaptor.capture());
+ verify(mMockWifiManager, never()).startScan();
+ }
+
@Test
public void testScanner_startAfterOnStop_doesNotStart() {
final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();