Loading api/system-current.txt +2 −1 Original line number Diff line number Diff line Loading @@ -6120,6 +6120,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 Loading Loading @@ -6322,7 +6323,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(); Loading wifi/java/android/net/wifi/SoftApConfiguration.java +55 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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. Loading wifi/java/android/net/wifi/WifiManager.java +10 −37 Original line number Diff line number Diff line Loading @@ -3223,9 +3223,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 Loading Loading @@ -3727,13 +3731,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"); } Loading @@ -3748,7 +3754,7 @@ public class WifiManager { @Deprecated @Nullable public WifiConfiguration getWifiConfiguration() { return convertToWifiConfiguration(mConfig); return mWifiConfig; } /** Loading @@ -3756,40 +3762,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 Loading wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java +39 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<>(); Loading @@ -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); } } Loading
api/system-current.txt +2 −1 Original line number Diff line number Diff line Loading @@ -6120,6 +6120,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 Loading Loading @@ -6322,7 +6323,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(); Loading
wifi/java/android/net/wifi/SoftApConfiguration.java +55 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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. Loading
wifi/java/android/net/wifi/WifiManager.java +10 −37 Original line number Diff line number Diff line Loading @@ -3223,9 +3223,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 Loading Loading @@ -3727,13 +3731,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"); } Loading @@ -3748,7 +3754,7 @@ public class WifiManager { @Deprecated @Nullable public WifiConfiguration getWifiConfiguration() { return convertToWifiConfiguration(mConfig); return mWifiConfig; } /** Loading @@ -3756,40 +3762,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 Loading
wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java +39 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<>(); Loading @@ -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); } }