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