Merge "[Suggestion] Add API to control carrier offload"

This commit is contained in:
Nate Jiang
2020-12-03 17:38:04 +00:00
committed by Android (Google) Code Review
4 changed files with 86 additions and 0 deletions

View File

@@ -483,6 +483,7 @@ package android.net.wifi {
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.net.wifi.WifiConfiguration> getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(@NonNull java.util.List<android.net.wifi.ScanResult>);
method public boolean is60GHzBandSupported();
method public boolean isApMacRandomizationSupported();
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public boolean isCarrierNetworkOffloadEnabled(int, boolean);
method public boolean isConnectedMacRandomizationSupported();
method @Deprecated public boolean isDeviceToDeviceRttSupported();
method public boolean isPortableHotspotSupported();
@@ -501,6 +502,7 @@ package android.net.wifi {
method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveSoftApBackupData();
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setAutoWakeupEnabled(boolean);
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void setCarrierNetworkOffloadEnabled(int, boolean, boolean);
method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS) public void setCoexUnsafeChannels(@NonNull java.util.Set<android.net.wifi.CoexUnsafeChannel>, int);
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);

View File

@@ -296,4 +296,8 @@ interface IWifiManager
void startTemporarilyDisablingAllNonCarrierMergedWifi(int subId);
void stopTemporarilyDisablingAllNonCarrierMergedWifi();
void setCarrierNetworkOffloadEnabled(int subscriptionId, boolean merged, boolean enabled);
boolean isCarrierNetworkOffloadEnabled(int subscriptionId, boolean merged);
}

View File

@@ -53,6 +53,7 @@ import android.os.Looper;
import android.os.RemoteException;
import android.os.WorkSource;
import android.os.connectivity.WifiActivityEnergyInfo;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.CloseGuard;
@@ -6721,4 +6722,63 @@ public class WifiManager {
throw e.rethrowFromSystemServer();
}
}
/**
* Sets the state of carrier offload on merged or unmerged networks for specified subscription.
*
* <p>
* When a subscription's carrier network offload is disabled, all network suggestions related to
* this subscription will not be considered for auto join.
* <p>
* If calling app want disable all carrier network offload from a specified subscription, should
* call this API twice to disable both merged and unmerged carrier network suggestions.
*
* @param subscriptionId See {@link SubscriptionInfo#getSubscriptionId()}.
* @param merged True for carrier merged network, false otherwise.
* See {@link WifiNetworkSuggestion.Builder#setCarrierMerged(boolean)}
* @param enabled True for enable carrier network offload, false otherwise.
* @see #isCarrierNetworkOffloadEnabled(int, boolean)
* @hide
*/
@SystemApi
@RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_SETUP_WIZARD})
public void setCarrierNetworkOffloadEnabled(int subscriptionId, boolean merged,
boolean enabled) {
if (!SdkLevel.isAtLeastS()) {
throw new UnsupportedOperationException();
}
try {
mService.setCarrierNetworkOffloadEnabled(subscriptionId, merged, enabled);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* Get the carrier network offload state for merged or unmerged networks for specified
* subscription.
* @param subscriptionId subscription ID see {@link SubscriptionInfo#getSubscriptionId()}
* @param merged True for carrier merged network, false otherwise.
* See {@link WifiNetworkSuggestion.Builder#setCarrierMerged(boolean)}
* @return True to indicate that carrier network offload is enabled, false otherwise.
* @see #setCarrierNetworkOffloadEnabled(int, boolean, boolean)
* @hide
*/
@SystemApi
@RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_SETUP_WIZARD})
public boolean isCarrierNetworkOffloadEnabled(int subscriptionId, boolean merged) {
if (!SdkLevel.isAtLeastS()) {
throw new UnsupportedOperationException();
}
try {
return mService.isCarrierNetworkOffloadEnabled(subscriptionId, merged);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}

View File

@@ -136,6 +136,7 @@ public class WifiManagerTest {
private static final String[] TEST_MAC_ADDRESSES = {"da:a1:19:0:0:0"};
private static final int TEST_AP_FREQUENCY = 2412;
private static final int TEST_AP_BANDWIDTH = SoftApInfo.CHANNEL_WIDTH_20MHZ;
private static final int TEST_SUB_ID = 3;
@Mock Context mContext;
@Mock android.net.wifi.IWifiManager mWifiService;
@@ -2583,10 +2584,29 @@ public class WifiManagerTest {
@Test
public void testGetNetworkSuggestionUserApprovalStatus() throws Exception {
assumeTrue(SdkLevel.isAtLeastS());
when(mWifiService.getNetworkSuggestionUserApprovalStatus(TEST_PACKAGE_NAME))
.thenReturn(WifiManager.STATUS_SUGGESTION_APPROVAL_APPROVED_BY_USER);
assertEquals(WifiManager.STATUS_SUGGESTION_APPROVAL_APPROVED_BY_USER,
mWifiManager.getNetworkSuggestionUserApprovalStatus());
verify(mWifiService).getNetworkSuggestionUserApprovalStatus(TEST_PACKAGE_NAME);
}
@Test
public void testSetCarrierNetworkOffload() throws Exception {
assumeTrue(SdkLevel.isAtLeastS());
mWifiManager.setCarrierNetworkOffloadEnabled(TEST_SUB_ID, true, false);
verify(mWifiService).setCarrierNetworkOffloadEnabled(TEST_SUB_ID,
true, false);
}
@Test
public void testGetCarrierNetworkOffload() throws Exception {
assumeTrue(SdkLevel.isAtLeastS());
when(mWifiService.isCarrierNetworkOffloadEnabled(TEST_SUB_ID, false)).thenReturn(true);
assertTrue(mWifiManager.isCarrierNetworkOffloadEnabled(TEST_SUB_ID, false));
verify(mWifiService).isCarrierNetworkOffloadEnabled(TEST_SUB_ID, false);
}
}