diff --git a/wifi/api/system-current.txt b/wifi/api/system-current.txt index 1d2bed8a6fd97..c4a1766f982cd 100644 --- a/wifi/api/system-current.txt +++ b/wifi/api/system-current.txt @@ -500,9 +500,11 @@ package android.net.wifi { method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback); method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public boolean startScan(android.os.WorkSource); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback); + method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void startTemporarilyDisablingAllNonCarrierMergedWifi(int); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startTetheredHotspot(@Nullable android.net.wifi.SoftApConfiguration); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession(); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp(); + method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void stopTemporarilyDisablingAllNonCarrierMergedWifi(); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterNetworkRequestMatchCallback(@NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterSoftApCallback(@NonNull android.net.wifi.WifiManager.SoftApCallback); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterTrafficStateCallback(@NonNull android.net.wifi.WifiManager.TrafficStateCallback); diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 48e23125e03c9..cc864eafcff1f 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -277,4 +277,8 @@ interface IWifiManager boolean isAutoWakeupEnabled(); int getNetworkSuggestionUserApprovalStatus(String packageName); + + void startTemporarilyDisablingAllNonCarrierMergedWifi(int subId); + + void stopTemporarilyDisablingAllNonCarrierMergedWifi(); } diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 7e04d8ff117de..9db50b3f9c157 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -4291,6 +4291,45 @@ public class WifiManager { connectInternal(null, networkId, listener); } + /** + * Temporarily disable autojoin for all currently visible and provisioned (saved, suggested) + * wifi networks except merged carrier networks from the provided subscription ID. + * + * Disabled networks will get automatically re-enabled when they are out of range for a period + * of time, or after the maximum disable duration specified in the framework. + * + * Calling {@link #stopTemporarilyDisablingAllNonCarrierMergedWifi()} will immediately re-enable + * autojoin on all disabled networks. + * + * @param subscriptionId the subscription ID of the carrier whose merged wifi networks won't be + * disabled {@link android.telephony.SubscriptionInfo#getSubscriptionId()} + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) + public void startTemporarilyDisablingAllNonCarrierMergedWifi(int subscriptionId) { + try { + mService.startTemporarilyDisablingAllNonCarrierMergedWifi(subscriptionId); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Re-enable autojoin for all non carrier merged wifi networks temporarily disconnected by + * {@link #startTemporarilyDisablingAllNonCarrierMergedWifi(int)}. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) + public void stopTemporarilyDisablingAllNonCarrierMergedWifi() { + try { + mService.stopTemporarilyDisablingAllNonCarrierMergedWifi(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Save the given network to the list of configured networks for the * foreground user. If the network already exists, the configuration diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index 572924757226a..aefebbcec607a 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -1633,6 +1633,24 @@ public class WifiManagerTest { verify(mWifiService).getFactoryMacAddresses(); } + /** + * Verify the call to startTemporarilyDisablingAllNonCarrierMergedWifi goes to WifiServiceImpl. + */ + @Test + public void testStartTemporarilyDisablingAllNonCarrierMergedWifi() throws Exception { + mWifiManager.startTemporarilyDisablingAllNonCarrierMergedWifi(1); + verify(mWifiService).startTemporarilyDisablingAllNonCarrierMergedWifi(1); + } + + /** + * Verify the call to stopTemporarilyDisablingAllNonCarrierMergedWifi goes to WifiServiceImpl. + */ + @Test + public void testStopTemporarilyDisablingAllNonCarrierMergedWifi() throws Exception { + mWifiManager.stopTemporarilyDisablingAllNonCarrierMergedWifi(); + verify(mWifiService).stopTemporarilyDisablingAllNonCarrierMergedWifi(); + } + /** * Verify the call to addOnWifiUsabilityStatsListener goes to WifiServiceImpl. */