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

Commit 59fe0357 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "softap: Add util function toWifiConfiguration in SoftApConfiguration."

parents ece12a89 ac374939
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -6124,6 +6124,7 @@ package android.net.wifi {
    method public int getMaxNumberOfClients();
    method public int getShutdownTimeoutMillis();
    method public boolean isClientControlByUserEnabled();
    method @Nullable public android.net.wifi.WifiConfiguration toWifiConfiguration();
    field public static final int BAND_2GHZ = 1; // 0x1
    field public static final int BAND_5GHZ = 2; // 0x2
    field public static final int BAND_6GHZ = 4; // 0x4
@@ -6326,7 +6327,7 @@ package android.net.wifi {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.SoftApConfiguration getSoftApConfiguration();
    method public int getVerboseLoggingLevel();
    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void getWifiActivityEnergyInfoAsync(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiActivityEnergyInfoListener);
    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration();
    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration();
    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState();
    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 isApMacRandomizationSupported();
+55 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.net.MacAddress;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
@@ -56,6 +57,8 @@ import java.util.Objects;
 */
public final class SoftApConfiguration implements Parcelable {

    private static final String TAG = "SoftApConfiguration";

    @VisibleForTesting
    static final int PSK_MIN_LEN = 8;

@@ -471,6 +474,58 @@ public final class SoftApConfiguration implements Parcelable {
        return mAllowedClientList;
    }

    /**
     * Returns a {@link WifiConfiguration} representation of this {@link SoftApConfiguration}.
     * Note that SoftApConfiguration may contain configuration which is cannot be represented
     * by the legacy WifiConfiguration, in such cases a null will be returned.
     *
     * <li> SoftAp band in {@link WifiConfiguration.apBand} only supports
     * 2GHz, 5GHz, 2GHz+5GHz bands, so conversion is limited to these bands. </li>
     *
     * <li> SoftAp security type in {@link WifiConfiguration.KeyMgmt} only supports
     * NONE, WPA2_PSK, so conversion is limited to these security type.</li>
     * @hide
     */
    @Nullable
    @SystemApi
    public WifiConfiguration toWifiConfiguration() {
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = mSsid;
        if (mBssid != null) {
            wifiConfig.BSSID = mBssid.toString();
        }
        wifiConfig.preSharedKey = mPassphrase;
        wifiConfig.hiddenSSID = mHiddenSsid;
        wifiConfig.apChannel = mChannel;
        switch (mSecurityType) {
            case SECURITY_TYPE_OPEN:
                wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                break;
            case SECURITY_TYPE_WPA2_PSK:
                wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA2_PSK);
                break;
            default:
                Log.e(TAG, "Convert fail, unsupported security type :" + mSecurityType);
                return null;
        }

        switch (mBand) {
            case BAND_2GHZ:
                wifiConfig.apBand  = WifiConfiguration.AP_BAND_2GHZ;
                break;
            case BAND_5GHZ:
                wifiConfig.apBand  = WifiConfiguration.AP_BAND_5GHZ;
                break;
            case BAND_ANY:
                wifiConfig.apBand  = WifiConfiguration.AP_BAND_ANY;
                break;
            default:
                Log.e(TAG, "Convert fail, unsupported band setting :" + mBand);
                return null;
        }
        return wifiConfig;
    }

    /**
     * Builds a {@link SoftApConfiguration}, which allows an app to configure various aspects of a
     * Soft AP.
+10 −37
Original line number Diff line number Diff line
@@ -3255,9 +3255,13 @@ public class WifiManager {
     * Gets the Wi-Fi AP Configuration.
     * @return AP details in WifiConfiguration
     *
     * Note that AP detail may contain configuration which is cannot be represented
     * by the legacy WifiConfiguration, in such cases a null will be returned.
     *
     * @deprecated This API is deprecated. Use {@link #getSoftApConfiguration()} instead.
     * @hide
     */
    @Nullable
    @SystemApi
    @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE)
    @Deprecated
@@ -3759,13 +3763,15 @@ public class WifiManager {
    public class LocalOnlyHotspotReservation implements AutoCloseable {

        private final CloseGuard mCloseGuard = new CloseGuard();
        private final SoftApConfiguration mConfig;
        private final SoftApConfiguration mSoftApConfig;
        private final WifiConfiguration mWifiConfig;
        private boolean mClosed = false;

        /** @hide */
        @VisibleForTesting
        public LocalOnlyHotspotReservation(SoftApConfiguration config) {
            mConfig = config;
            mSoftApConfig = config;
            mWifiConfig = config.toWifiConfiguration();
            mCloseGuard.open("close");
        }

@@ -3780,7 +3786,7 @@ public class WifiManager {
        @Deprecated
        @Nullable
        public WifiConfiguration getWifiConfiguration() {
            return convertToWifiConfiguration(mConfig);
            return mWifiConfig;
        }

        /**
@@ -3788,40 +3794,7 @@ public class WifiManager {
         */
        @NonNull
        public SoftApConfiguration getSoftApConfiguration() {
            return mConfig;
        }

        /**
         * Convert to WifiConfiguration from SoftApConfuration.
         *
         * Copy to the filed which is public and used by SoftAp.
         */
        private WifiConfiguration convertToWifiConfiguration(SoftApConfiguration softApConfig) {
            if (softApConfig == null) return null;

            WifiConfiguration wifiConfig = new WifiConfiguration();
            wifiConfig.networkId = WifiConfiguration.LOCAL_ONLY_NETWORK_ID;
            wifiConfig.SSID = softApConfig.getSsid();
            if (softApConfig.getBssid() != null) {
                wifiConfig.BSSID = softApConfig.getBssid().toString();
            }
            wifiConfig.preSharedKey = softApConfig.getPassphrase();
            wifiConfig.hiddenSSID = softApConfig.isHiddenSsid();
            int authType = softApConfig.getSecurityType();
            switch (authType) {
                case SoftApConfiguration.SECURITY_TYPE_OPEN:
                    authType = WifiConfiguration.KeyMgmt.NONE;
                    wifiConfig.allowedKeyManagement.set(authType);
                    break;
                case SoftApConfiguration.SECURITY_TYPE_WPA2_PSK:
                    authType = WifiConfiguration.KeyMgmt.WPA2_PSK;
                    wifiConfig.allowedKeyManagement.set(authType);
                    break;
                default:
                    wifiConfig = null;
                    break;
            }
            return wifiConfig;
            return mSoftApConfig;
        }

        @Override
+39 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.net.wifi;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertNull;

import android.net.MacAddress;
import android.os.Parcel;

@@ -251,7 +253,7 @@ public class SoftApConfigurationTest {
    }

    @Test(expected = IllegalArgumentException.class)
    public void testsetClientListExceptionWhenExistMacAddressInBothList() {
    public void testSetClientListExceptionWhenExistMacAddressInBothList() {
        final MacAddress testMacAddress_1 = MacAddress.fromString("22:33:44:55:66:77");
        final MacAddress testMacAddress_2 = MacAddress.fromString("aa:bb:cc:dd:ee:ff");
        ArrayList<MacAddress> testAllowedClientList = new ArrayList<>();
@@ -262,4 +264,40 @@ public class SoftApConfigurationTest {
        SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
        configBuilder.setClientList(testBlockedClientList, testAllowedClientList);
    }

    @Test
    public void testToWifiConfigurationWithUnsupportedParameter() {
        SoftApConfiguration sae_config = new SoftApConfiguration.Builder()
                .setPassphrase("secretsecret", SoftApConfiguration.SECURITY_TYPE_WPA3_SAE)
                .build();

        assertNull(sae_config.toWifiConfiguration());
        SoftApConfiguration band_6g_config = new SoftApConfiguration.Builder()
                .setBand(SoftApConfiguration.BAND_6GHZ)
                .build();

        assertNull(band_6g_config.toWifiConfiguration());
        SoftApConfiguration sae_transition_config = new SoftApConfiguration.Builder()
                .setPassphrase("secretsecret",
                        SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION)
                .build();

        assertNull(sae_transition_config.toWifiConfiguration());
    }

    @Test
    public void testToWifiConfigurationWithSupportedParameter() {
        SoftApConfiguration softApConfig = new SoftApConfiguration.Builder()
                .setPassphrase("secretsecret",
                        SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
                .setChannel(149, SoftApConfiguration.BAND_5GHZ)
                .setHiddenSsid(true)
                .build();
        WifiConfiguration wifiConfig = softApConfig.toWifiConfiguration();
        assertThat(wifiConfig.getAuthType()).isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
        assertThat(wifiConfig.preSharedKey).isEqualTo("secretsecret");
        assertThat(wifiConfig.apBand).isEqualTo(WifiConfiguration.AP_BAND_5GHZ);
        assertThat(wifiConfig.apChannel).isEqualTo(149);
        assertThat(wifiConfig.hiddenSSID).isEqualTo(true);
    }
}