Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eed926a1 authored by Nate Jiang's avatar Nate Jiang
Browse files

[Suggestion] Add API to control carrier offload

A new API to control carrier offload for target carrier/subscription.

Bug: 155109689
Test: atest android.net.wifi

Change-Id: Id29205223dad6c226bd7b5cdb28ef6642f3b505a
parent ccfa9a66
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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);
+4 −0
Original line number Diff line number Diff line
@@ -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);
}
+60 −0
Original line number Diff line number Diff line
@@ -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();
        }
    }

}
+20 −0
Original line number Diff line number Diff line
@@ -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);
    }

}