From 6398957728f963c04fa4f1b7379ebc140c8e5503 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Wed, 12 Feb 2020 12:48:00 -0800 Subject: [PATCH] WifiManager: Add API for scan always available toggle Needed for moving away from using Settings.Global values as pseudo APIs. Bug: 148514485 Test: atest android.net.wifi Test: Verified wifi wifi scan toggle in location settings. Change-Id: Iec75d331c7866180a55a327813466323c565319a --- api/system-current.txt | 1 + wifi/java/android/net/wifi/IWifiManager.aidl | 2 ++ wifi/java/android/net/wifi/WifiManager.java | 20 +++++++++++++++++++ .../src/android/net/wifi/WifiManagerTest.java | 11 ++++++++++ 4 files changed, 34 insertions(+) diff --git a/api/system-current.txt b/api/system-current.txt index cbc63cedef86a..9efefc59d75c5 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7750,6 +7750,7 @@ package android.net.wifi { method @RequiresPermission(android.Manifest.permission.WIFI_SET_DEVICE_MOBILITY_STATE) public void setDeviceMobilityState(int); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMacRandomizationSettingPasspointEnabled(@NonNull String, boolean); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMeteredOverridePasspoint(@NonNull String, int); + method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanAlwaysAvailable(boolean); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanThrottleEnabled(boolean); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean setSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setVerboseLoggingEnabled(boolean); diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 1c330e263d7e0..3025caf740009 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -125,6 +125,8 @@ interface IWifiManager DhcpInfo getDhcpInfo(); + void setScanAlwaysAvailable(boolean isAvailable); + boolean isScanAlwaysAvailable(); boolean acquireWifiLock(IBinder lock, int lockType, String tag, in WorkSource ws); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index f693315c6cfff..af2f2461ac948 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -2754,6 +2754,26 @@ public class WifiManager { } } + /** + * Set if scanning is always available. + * + * If set to {@code true}, apps can issue {@link #startScan} and fetch scan results + * even when Wi-Fi is turned off. + * + * @param isAvailable true to enable, false to disable. + * @hide + * @see #isScanAlwaysAvailable() + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) + public void setScanAlwaysAvailable(boolean isAvailable) { + try { + mService.setScanAlwaysAvailable(isAvailable); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Check if scanning is always available. * diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index 853212aafcdfd..234d929fc05ad 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -2401,4 +2401,15 @@ public class WifiManagerTest { assertFalse(mWifiManager.isAutoWakeupEnabled()); verify(mWifiService).isAutoWakeupEnabled(); } + + + @Test + public void testScanAvailable() throws Exception { + mWifiManager.setScanAlwaysAvailable(true); + verify(mWifiService).setScanAlwaysAvailable(true); + + when(mWifiService.isScanAlwaysAvailable()).thenReturn(false); + assertFalse(mWifiManager.isScanAlwaysAvailable()); + verify(mWifiService).isScanAlwaysAvailable(); + } }