summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/SoftApManager.java44
-rw-r--r--service/java/com/android/server/wifi/WifiApConfigStore.java80
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java4
-rw-r--r--service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java12
-rw-r--r--service/java/com/android/server/wifi/util/ApConfigUtil.java3
-rw-r--r--service/res/values/config.xml15
-rw-r--r--service/res/values/overlayable.xml4
-rw-r--r--tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java86
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java109
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java36
10 files changed, 333 insertions, 60 deletions
diff --git a/service/java/com/android/server/wifi/SoftApManager.java b/service/java/com/android/server/wifi/SoftApManager.java
index f9720477b..ffbb388cc 100644
--- a/service/java/com/android/server/wifi/SoftApManager.java
+++ b/service/java/com/android/server/wifi/SoftApManager.java
@@ -469,12 +469,17 @@ public class SoftApManager implements ActiveModeManager {
return true;
}
+ if (mBlockedClientList.contains(newClient.getMacAddress())) {
+ Log.d(TAG, "Force disconnect for client: " + newClient + "in blocked list");
+ mWifiNative.forceClientDisconnect(
+ mApInterfaceName, newClient.getMacAddress(),
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
+ return false;
+ }
if (config.isClientControlByUserEnabled()
&& !mAllowedClientList.contains(newClient.getMacAddress())) {
- if (!mBlockedClientList.contains(newClient.getMacAddress())) {
- mSoftApCallback.onBlockedClientConnecting(newClient,
- WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
- }
+ mSoftApCallback.onBlockedClientConnecting(newClient,
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
Log.d(TAG, "Force disconnect for unauthorized client: " + newClient);
mWifiNative.forceClientDisconnect(
mApInterfaceName, newClient.getMacAddress(),
@@ -667,25 +672,22 @@ public class SoftApManager implements ActiveModeManager {
}
int targetDisconnectClientNumber = mConnectedClients.size() - finalMaxClientCount;
List<WifiClient> allowedConnectedList = new ArrayList<>();
- if (mApConfig.getSoftApConfiguration().isClientControlByUserEnabled()) {
- // Check allow list first
- Iterator<WifiClient> iterator = mConnectedClients.iterator();
- while (iterator.hasNext()) {
- WifiClient client = iterator.next();
- if (mAllowedClientList.contains(client.getMacAddress())) {
- allowedConnectedList.add(client);
- } else {
- Log.d(TAG, "Force disconnect for not allowed client: " + client);
- mWifiNative.forceClientDisconnect(
- mApInterfaceName, client.getMacAddress(),
- WifiManager
- .SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
- targetDisconnectClientNumber--;
- }
+ Iterator<WifiClient> iterator = mConnectedClients.iterator();
+ while (iterator.hasNext()) {
+ WifiClient client = iterator.next();
+ if (mBlockedClientList.contains(client.getMacAddress())
+ || (mApConfig.getSoftApConfiguration().isClientControlByUserEnabled()
+ && !mAllowedClientList.contains(client.getMacAddress()))) {
+ Log.d(TAG, "Force disconnect for not allowed client: " + client);
+ mWifiNative.forceClientDisconnect(
+ mApInterfaceName, client.getMacAddress(),
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
+ targetDisconnectClientNumber--;
+ } else {
+ allowedConnectedList.add(client);
}
- } else {
- allowedConnectedList = new ArrayList<>(mConnectedClients);
}
+
if (targetDisconnectClientNumber > 0) {
Iterator<WifiClient> allowedClientIterator = allowedConnectedList.iterator();
while (allowedClientIterator.hasNext()) {
diff --git a/service/java/com/android/server/wifi/WifiApConfigStore.java b/service/java/com/android/server/wifi/WifiApConfigStore.java
index 961cbbd3b..3de99711b 100644
--- a/service/java/com/android/server/wifi/WifiApConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiApConfigStore.java
@@ -33,6 +33,7 @@ import com.android.wifi.resources.R;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
+import java.util.ArrayList;
import java.util.Random;
import javax.annotation.Nullable;
@@ -153,10 +154,13 @@ public class WifiApConfigStore {
/**
* Returns SoftApConfiguration in which some parameters might be reset to supported default
- * config.
+ * config since it depends on UI or HW.
*
- * MaxNumberOfClients and setClientControlByUserEnabled will need HAL support client force
- * disconnect. Reset to default when device doesn't support it.
+ * MaxNumberOfClients and isClientControlByUserEnabled will need HAL support client force
+ * disconnect, and Band setting (5g/6g) need HW support.
+ *
+ * HiddenSsid, Channel, ShutdownTimeoutMillis and AutoShutdownEnabled are features
+ * which need UI(Setting) support.
*
* SAE/SAE-Transition need hardware support, reset to secured WPA2 security type when device
* doesn't support it.
@@ -164,15 +168,22 @@ public class WifiApConfigStore {
public SoftApConfiguration resetToDefaultForUnsupportedConfig(
@NonNull SoftApConfiguration config) {
SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(config);
- if (!ApConfigUtil.isClientForceDisconnectSupported(mContext)) {
- configBuilder.setMaxNumberOfClients(0);
+ if ((!ApConfigUtil.isClientForceDisconnectSupported(mContext)
+ || mContext.getResources().getBoolean(
+ R.bool.config_wifiSoftapResetUserControlConfig))
+ && (config.isClientControlByUserEnabled()
+ || config.getBlockedClientList().size() != 0)) {
configBuilder.setClientControlByUserEnabled(false);
- if (config.getMaxNumberOfClients() != 0) {
- Log.e(TAG, "Reset MaxNumberOfClients to 0 due to device doesn't support");
- }
- if (config.isClientControlByUserEnabled()) {
- Log.e(TAG, "Reset ClientControlByUser to false due to device doesn't support");
- }
+ configBuilder.setBlockedClientList(new ArrayList<>());
+ Log.i(TAG, "Reset ClientControlByUser to false due to device doesn't support");
+ }
+
+ if ((!ApConfigUtil.isClientForceDisconnectSupported(mContext)
+ || mContext.getResources().getBoolean(
+ R.bool.config_wifiSoftapResetMaxClientSettingConfig))
+ && config.getMaxNumberOfClients() != 0) {
+ configBuilder.setMaxNumberOfClients(0);
+ Log.i(TAG, "Reset MaxNumberOfClients to 0 due to device doesn't support");
}
if (!ApConfigUtil.isWpa3SaeSupported(mContext) && (config.getSecurityType()
@@ -181,18 +192,51 @@ public class WifiApConfigStore {
== SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION)) {
configBuilder.setPassphrase(generatePassword(),
SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
- Log.e(TAG, "Device doesn't support WPA3-SAE, reset config to WPA2");
+ Log.i(TAG, "Device doesn't support WPA3-SAE, reset config to WPA2");
}
- if (mContext.getResources().getBoolean(R.bool.config_wifiSoftapResetChannelConfig)) {
+ if (mContext.getResources().getBoolean(R.bool.config_wifiSoftapResetChannelConfig)
+ && config.getChannel() != 0) {
// The device might not support customize channel or forced channel might not
// work in some countries. Need to reset it.
- if (config.getChannel() != 0) {
- // Add 2.4G by default
- configBuilder.setBand(SoftApConfiguration.BAND_2GHZ | config.getBand());
- Log.i(TAG, "Reset SAP channel configuration");
- }
+ // Add 2.4G by default
+ configBuilder.setBand(config.getBand() | SoftApConfiguration.BAND_2GHZ);
+ Log.i(TAG, "Reset SAP channel configuration");
+ }
+
+ int newBand = config.getBand();
+ if (!mContext.getResources().getBoolean(R.bool.config_wifi6ghzSupport)
+ && (newBand & SoftApConfiguration.BAND_6GHZ) != 0) {
+ newBand &= ~SoftApConfiguration.BAND_6GHZ;
+ Log.i(TAG, "Device doesn't support 6g, remove 6G band from band setting");
}
+
+ if (!mContext.getResources().getBoolean(R.bool.config_wifi5ghzSupport)
+ && (newBand & SoftApConfiguration.BAND_5GHZ) != 0) {
+ newBand &= ~SoftApConfiguration.BAND_5GHZ;
+ Log.i(TAG, "Device doesn't support 5g, remove 5G band from band setting");
+ }
+
+ if (newBand != config.getBand()) {
+ // Always added 2.4G by default when reset the band.
+ Log.i(TAG, "Reset band from " + config.getBand() + " to "
+ + (newBand | SoftApConfiguration.BAND_2GHZ));
+ configBuilder.setBand(newBand | SoftApConfiguration.BAND_2GHZ);
+ }
+
+ if (mContext.getResources().getBoolean(R.bool.config_wifiSoftapResetHiddenConfig)
+ && config.isHiddenSsid()) {
+ configBuilder.setHiddenSsid(false);
+ Log.i(TAG, "Reset SAP Hidden Network configuration");
+ }
+
+ if (mContext.getResources().getBoolean(
+ R.bool.config_wifiSoftapResetAutoShutdownTimerConfig)
+ && config.getShutdownTimeoutMillis() != 0) {
+ configBuilder.setShutdownTimeoutMillis(0);
+ Log.i(TAG, "Reset SAP auto shutdown configuration");
+ }
+
mWifiMetrics.noteSoftApConfigReset(config, configBuilder.build());
return configBuilder.build();
}
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index 99de9277e..6d04b7a68 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -3240,9 +3240,11 @@ public class WifiConfigManager {
mWifiPermissionsUtil.checkNetworkSettingsPermission(uid);
final boolean hasNetworkSetupWizardPermission =
mWifiPermissionsUtil.checkNetworkSetupWizardPermission(uid);
+ final boolean hasNetworkManagedProvisioningPermission =
+ mWifiPermissionsUtil.checkNetworkManagedProvisioningPermission(uid);
// If |uid| corresponds to the device owner, allow all modifications.
if (isProfileOwner || isDeviceOwner || hasNetworkSettingsPermission
- || hasNetworkSetupWizardPermission) {
+ || hasNetworkSetupWizardPermission || hasNetworkManagedProvisioningPermission) {
return true;
}
if (mVerboseLoggingEnabled) {
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index 56cdba83d..61e6c16bc 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -158,6 +158,12 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
android.Manifest.permission.ACCESS_WIFI_STATE
};
+ private static final String[] RECEIVER_PERMISSIONS_FOR_BROADCAST_LOCATION_OFF = {
+ android.Manifest.permission.NETWORK_SETTINGS,
+ android.Manifest.permission.ACCESS_FINE_LOCATION,
+ android.Manifest.permission.ACCESS_WIFI_STATE
+ };
+
// Maximum number of bytes allowed for a network name, i.e. SSID.
private static final int MAX_NETWORK_NAME_BYTES = 32;
// Minimum number of bytes for a network name, i.e. DIRECT-xy.
@@ -3085,8 +3091,12 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
private void sendBroadcastMultiplePermissions(Intent intent) {
Context context = mContext.createContextAsUser(UserHandle.ALL, 0);
+ String[] permissions = RECEIVER_PERMISSIONS_FOR_BROADCAST;
+ if (!mWifiPermissionsUtil.isLocationModeEnabled()) {
+ permissions = RECEIVER_PERMISSIONS_FOR_BROADCAST_LOCATION_OFF;
+ }
context.sendBroadcastWithMultiplePermissions(
- intent, RECEIVER_PERMISSIONS_FOR_BROADCAST);
+ intent, permissions);
}
private void sendThisDeviceChangedBroadcast() {
diff --git a/service/java/com/android/server/wifi/util/ApConfigUtil.java b/service/java/com/android/server/wifi/util/ApConfigUtil.java
index b385369a7..39d0df5f5 100644
--- a/service/java/com/android/server/wifi/util/ApConfigUtil.java
+++ b/service/java/com/android/server/wifi/util/ApConfigUtil.java
@@ -529,7 +529,8 @@ public class ApConfigUtil {
SoftApCapability capability) {
if (!capability.areFeaturesSupported(
SoftApCapability.SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
- && (config.getMaxNumberOfClients() != 0 || config.isClientControlByUserEnabled())) {
+ && (config.getMaxNumberOfClients() != 0 || config.isClientControlByUserEnabled()
+ || config.getBlockedClientList().size() != 0)) {
Log.d(TAG, "Error, Client control requires HAL support");
return false;
}
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index 7e35eed19..4ea23adc0 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -133,13 +133,24 @@
are no connected devices. -->
<integer translatable="false" name="config_wifiFrameworkSoftApShutDownTimeoutMilliseconds">600000</integer>
-
<!-- Integer indicating maximum hardware supported client number of soft ap -->
<integer translatable="false" name="config_wifiHardwareSoftapMaxClientCount">16</integer>
- <!-- boolean indicating whether reset channel configuration or not during cloud configuration restore -->
+ <!-- boolean indicating whether or not to reset channel configuration during cloud configuration restore -->
<bool translatable="false" name ="config_wifiSoftapResetChannelConfig">true</bool>
+ <!-- boolean indicating whether or not to reset hiddenSsid configuration during cloud configuration restore -->
+ <bool translatable="false" name ="config_wifiSoftapResetHiddenConfig">true</bool>
+
+ <!-- boolean indicating whether or not to reset user control configuration during cloud configuration restore -->
+ <bool translatable="false" name ="config_wifiSoftapResetUserControlConfig">true</bool>
+
+ <!-- boolean indicating whether or not to reset auto shotdown configuration during cloud configuration restore -->
+ <bool translatable="false" name ="config_wifiSoftapResetAutoShutdownTimerConfig">true</bool>
+
+ <!-- boolean indicating whether or not to reset max client setting configuration during cloud configuration restore -->
+ <bool translatable="false" name ="config_wifiSoftapResetMaxClientSettingConfig">true</bool>
+
<!-- List of allowed channels in 2GHz band for softap. If the device doesn't want to restrict
channels this should be empty. Values is a comma separated channel string and/or channel
range string like '1-6,11'. -->
diff --git a/service/res/values/overlayable.xml b/service/res/values/overlayable.xml
index bf96fde62..b02eb9e77 100644
--- a/service/res/values/overlayable.xml
+++ b/service/res/values/overlayable.xml
@@ -58,6 +58,10 @@
<item type="integer" name="config_wifiFrameworkScoreGoodRssiThreshold6ghz" />
<item type="integer" name="config_wifiFrameworkSoftApShutDownTimeoutMilliseconds" />
<item type="bool" name="config_wifiSoftapResetChannelConfig" />
+ <item type="bool" name="config_wifiSoftapResetHiddenConfig" />
+ <item type="bool" name="config_wifiSoftapResetUserControlConfig" />
+ <item type="bool" name="config_wifiSoftapResetAutoShutdownTimerConfig" />
+ <item type="bool" name="config_wifiSoftapResetMaxClientSettingConfig" />
<item type="string" name="config_wifiSoftap2gChannelList" />
<item type="string" name="config_wifiSoftap5gChannelList" />
<item type="string" name="config_wifiSoftap6gChannelList" />
diff --git a/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java b/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
index 99cd2db82..ddd8fe515 100644
--- a/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
@@ -1190,6 +1190,92 @@ public class SoftApManagerTest extends WifiBaseTest {
}
@Test
+ public void testClientConnectFailureWhenClientInBlcokedListAndClientAuthorizationDisabled()
+ throws Exception {
+ ArrayList<MacAddress> blockedClientList = new ArrayList<>();
+ mTestSoftApCapability.setMaxSupportedClients(10);
+ Builder configBuilder = new SoftApConfiguration.Builder();
+ configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
+ configBuilder.setSsid(TEST_SSID);
+ configBuilder.setClientControlByUserEnabled(false);
+ // Client in blocked list
+ blockedClientList.add(TEST_MAC_ADDRESS);
+ configBuilder.setBlockedClientList(blockedClientList);
+ SoftApModeConfiguration apConfig =
+ new SoftApModeConfiguration(WifiManager.IFACE_IP_MODE_TETHERED,
+ configBuilder.build(), mTestSoftApCapability);
+ startSoftApAndVerifyEnabled(apConfig);
+
+ verify(mCallback).onConnectedClientsChanged(new ArrayList<>());
+
+ mSoftApListenerCaptor.getValue().onConnectedClientsChanged(
+ TEST_NATIVE_CLIENT, true);
+ mLooper.dispatchAll();
+
+ // Client is not allow verify
+ verify(mWifiNative).forceClientDisconnect(
+ TEST_INTERFACE_NAME, TEST_MAC_ADDRESS,
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
+ verify(mWifiMetrics, never()).addSoftApNumAssociatedStationsChangedEvent(
+ 1, apConfig.getTargetMode());
+ verify(mCallback, never()).onConnectedClientsChanged(
+ Mockito.argThat((List<WifiClient> clients) ->
+ clients.contains(TEST_CONNECTED_CLIENT))
+ );
+
+ }
+
+ @Test
+ public void testClientDisconnectWhenClientInBlcokedLisUpdatedtAndClientAuthorizationDisabled()
+ throws Exception {
+ ArrayList<MacAddress> blockedClientList = new ArrayList<>();
+ mTestSoftApCapability.setMaxSupportedClients(10);
+ Builder configBuilder = new SoftApConfiguration.Builder();
+ configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
+ configBuilder.setSsid(TEST_SSID);
+ configBuilder.setClientControlByUserEnabled(false);
+ SoftApModeConfiguration apConfig =
+ new SoftApModeConfiguration(WifiManager.IFACE_IP_MODE_TETHERED,
+ configBuilder.build(), mTestSoftApCapability);
+ startSoftApAndVerifyEnabled(apConfig);
+
+ verify(mCallback).onConnectedClientsChanged(new ArrayList<>());
+
+ mSoftApListenerCaptor.getValue().onConnectedClientsChanged(
+ TEST_NATIVE_CLIENT, true);
+ mLooper.dispatchAll();
+
+ // Client connected check
+ verify(mWifiNative, never()).forceClientDisconnect(
+ TEST_INTERFACE_NAME, TEST_MAC_ADDRESS,
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
+ verify(mWifiMetrics).addSoftApNumAssociatedStationsChangedEvent(
+ 1, apConfig.getTargetMode());
+ verify(mCallback, times(2)).onConnectedClientsChanged(
+ Mockito.argThat((List<WifiClient> clients) ->
+ clients.contains(TEST_CONNECTED_CLIENT))
+ );
+
+ reset(mCallback);
+ reset(mWifiNative);
+ // Update configuration
+ blockedClientList.add(TEST_MAC_ADDRESS);
+ configBuilder.setBlockedClientList(blockedClientList);
+ mSoftApManager.updateConfiguration(configBuilder.build());
+ mLooper.dispatchAll();
+ // Client difconnected
+ verify(mWifiNative).forceClientDisconnect(
+ TEST_INTERFACE_NAME, TEST_MAC_ADDRESS,
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
+ // The callback should not trigger in configuration update case.
+ verify(mCallback, never()).onBlockedClientConnecting(TEST_CONNECTED_CLIENT,
+ WifiManager.SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER);
+
+ }
+
+
+
+ @Test
public void testForceClientDisconnectInvokeBecauseClientAuthorizationEnabled()
throws Exception {
mTestSoftApCapability.setMaxSupportedClients(10);
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java b/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
index bc646c1eb..90e01719f 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
@@ -659,24 +659,107 @@ public class WifiApConfigStoreTest extends WifiBaseTest {
@Test
public void testResetToDefaultForUnsupportedConfig() throws Exception {
- mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, false);
- mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, false);
- mResources.setBoolean(R.bool.config_wifiSoftapResetChannelConfig, true);
- SoftApConfiguration sae_config = new SoftApConfiguration.Builder()
- .setPassphrase("secretsecret", SoftApConfiguration.SECURITY_TYPE_WPA3_SAE)
- .setMaxNumberOfClients(10)
- .setClientControlByUserEnabled(true)
- .setChannel(149, SoftApConfiguration.BAND_5GHZ)
- .build();
+ mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, true);
+ mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, true);
+ mResources.setBoolean(R.bool.config_wifi6ghzSupport, true);
+ mResources.setBoolean(R.bool.config_wifi5ghzSupport, true);
+
+ // Test all of the features support and all of the reset config are false.
+ String testPassphrase = "secretsecret";
+ SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
+ configBuilder.setPassphrase(testPassphrase, SoftApConfiguration.SECURITY_TYPE_WPA3_SAE);
WifiApConfigStore store = createWifiApConfigStore();
+ SoftApConfiguration resetedConfig = store.resetToDefaultForUnsupportedConfig(
+ configBuilder.build());
+ assertEquals(resetedConfig, configBuilder.build());
- SoftApConfiguration resetedConfig = store.resetToDefaultForUnsupportedConfig(sae_config);
- assertEquals(resetedConfig.getMaxNumberOfClients(), 0);
- assertFalse(resetedConfig.isClientControlByUserEnabled());
+ verify(mWifiMetrics).noteSoftApConfigReset(configBuilder.build(), resetedConfig);
+
+ // Test SAE not support case.
+ mResources.setBoolean(R.bool.config_wifi_softap_sae_supported, false);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertEquals(resetedConfig.getSecurityType(), SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
+ // Test force channel
+ configBuilder.setChannel(149, SoftApConfiguration.BAND_5GHZ);
+ mResources.setBoolean(
+ R.bool.config_wifiSoftapResetChannelConfig, true);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
assertEquals(resetedConfig.getChannel(), 0);
assertEquals(resetedConfig.getBand(),
SoftApConfiguration.BAND_2GHZ | SoftApConfiguration.BAND_5GHZ);
- verify(mWifiMetrics).noteSoftApConfigReset(sae_config, resetedConfig);
+
+ // Test forced channel band doesn't support.
+ mResources.setBoolean(R.bool.config_wifi5ghzSupport, false);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertEquals(resetedConfig.getChannel(), 0);
+ assertEquals(resetedConfig.getBand(),
+ SoftApConfiguration.BAND_2GHZ);
+
+ // Test band not support with auto channel
+ configBuilder.setBand(SoftApConfiguration.BAND_5GHZ);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertEquals(resetedConfig.getBand(), SoftApConfiguration.BAND_2GHZ);
+
+ // Test reset hidden network
+ mResources.setBoolean(
+ R.bool.config_wifiSoftapResetHiddenConfig, true);
+ configBuilder.setHiddenSsid(true);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertFalse(resetedConfig.isHiddenSsid());
+
+ // Test auto shutdown timer
+ mResources.setBoolean(
+ R.bool.config_wifiSoftapResetAutoShutdownTimerConfig, true);
+ configBuilder.setShutdownTimeoutMillis(8888);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertEquals(resetedConfig.getShutdownTimeoutMillis(), 0);
+
+ // Test max client setting when force client disconnect doesn't support
+ mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, false);
+ configBuilder.setMaxNumberOfClients(10);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertEquals(resetedConfig.getMaxNumberOfClients(), 0);
+
+ // Test client control setting when force client disconnect doesn't support
+ mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, false);
+ ArrayList<MacAddress> blockedClientList = new ArrayList<>();
+ ArrayList<MacAddress> allowedClientList = new ArrayList<>();
+ blockedClientList.add(MacAddress.fromString("11:22:33:44:55:66"));
+ allowedClientList.add(MacAddress.fromString("aa:bb:cc:dd:ee:ff"));
+ configBuilder.setBlockedClientList(blockedClientList);
+ configBuilder.setAllowedClientList(allowedClientList);
+
+ configBuilder.setClientControlByUserEnabled(true);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertFalse(resetedConfig.isClientControlByUserEnabled());
+ // The blocked list will be clean
+ assertEquals(resetedConfig.getBlockedClientList().size(), 0);
+ // The allowed list will be keep
+ assertEquals(resetedConfig.getAllowedClientList(), allowedClientList);
+
+ // Test max client setting when reset enabled but force client disconnect supported
+ mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, true);
+ mResources.setBoolean(
+ R.bool.config_wifiSoftapResetMaxClientSettingConfig, true);
+ assertEquals(resetedConfig.getMaxNumberOfClients(), 0);
+
+ // Test client control setting when reset enabled but force client disconnect supported
+ mResources.setBoolean(R.bool.config_wifiSofapClientForceDisconnectSupported, true);
+ mResources.setBoolean(
+ R.bool.config_wifiSoftapResetUserControlConfig, true);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertFalse(resetedConfig.isClientControlByUserEnabled());
+ assertEquals(resetedConfig.getBlockedClientList().size(), 0);
+ assertEquals(resetedConfig.getAllowedClientList(), allowedClientList);
+
+ // Test blocked list setting will be reset even if client control disabled
+ mResources.setBoolean(
+ R.bool.config_wifiSoftapResetUserControlConfig, true);
+ configBuilder.setClientControlByUserEnabled(false);
+ resetedConfig = store.resetToDefaultForUnsupportedConfig(configBuilder.build());
+ assertFalse(resetedConfig.isClientControlByUserEnabled());
+ assertEquals(resetedConfig.getBlockedClientList().size(), 0);
+ assertEquals(resetedConfig.getAllowedClientList(), allowedClientList);
}
/**
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
index 815b3ad0b..d2584adbc 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -4003,6 +4003,33 @@ public class WifiConfigManagerTest extends WifiBaseTest {
true, // assertSuccess
WifiConfiguration.INVALID_NETWORK_ID); // Update networkID
}
+
+ /**
+ * Verifies that adding a network with a PAC or STATIC proxy, while having the
+ * {@link android.Manifest.permission#NETWORK_MANAGED_PROVISIONING} permission is successful
+ */
+ @Test
+ public void testAddNetworkWithProxyWithNetworkManagedPermission() {
+ verifyAddOrUpdateNetworkWithProxySettingsAndPermissions(
+ false, // withNetworkSettings
+ false, // withNetworkSetupWizard
+ true, // withNetworkManagedProvisioning
+ false, // withProfileOwnerPolicy
+ false, // withDeviceOwnerPolicy
+ WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(),
+ true, // assertSuccess
+ WifiConfiguration.INVALID_NETWORK_ID); // Update networkID
+ verifyAddOrUpdateNetworkWithProxySettingsAndPermissions(
+ false, // withNetworkSettings
+ false, // withNetworkSetupWizard
+ true, // withNetworkManagedProvisioning
+ false, // withProfileOwnerPolicy
+ false, // withDeviceOwnerPolicy
+ WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy(),
+ true, // assertSuccess
+ WifiConfiguration.INVALID_NETWORK_ID); // Update networkID
+ }
+
/**
* Verifies that updating a network (that has no proxy) and adding a PAC or STATIC proxy fails
* without being able to override configs, or holding Device or Profile owner policies.
@@ -4052,7 +4079,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
verifyAddOrUpdateNetworkWithProxySettingsAndPermissions(
false, // withNetworkSettings
true, // withNetworkSetupWizard
- false, // withProfileOwnerPolicy
+ false, false, // withProfileOwnerPolicy
false, // withDeviceOwnerPolicy
WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy(),
true, // assertSuccess
@@ -4633,13 +4660,14 @@ public class WifiConfigManagerTest extends WifiBaseTest {
boolean assertSuccess,
int networkId) {
return verifyAddOrUpdateNetworkWithProxySettingsAndPermissions(withNetworkSettings,
- false, withProfileOwnerPolicy, withDeviceOwnerPolicy, ipConfiguration,
+ false, false, withProfileOwnerPolicy, withDeviceOwnerPolicy, ipConfiguration,
assertSuccess, networkId);
}
private NetworkUpdateResult verifyAddOrUpdateNetworkWithProxySettingsAndPermissions(
boolean withNetworkSettings,
boolean withNetworkSetupWizard,
+ boolean withNetworkManagedProvisioning,
boolean withProfileOwnerPolicy,
boolean withDeviceOwnerPolicy,
IpConfiguration ipConfiguration,
@@ -4660,7 +4688,9 @@ public class WifiConfigManagerTest extends WifiBaseTest {
.thenReturn(withNetworkSettings);
when(mWifiPermissionsUtil.checkNetworkSetupWizardPermission(anyInt()))
.thenReturn(withNetworkSetupWizard);
- int uid = withNetworkSettings || withNetworkSetupWizard
+ when(mWifiPermissionsUtil.checkNetworkManagedProvisioningPermission(anyInt()))
+ .thenReturn(withNetworkManagedProvisioning);
+ int uid = withNetworkSettings || withNetworkSetupWizard || withNetworkManagedProvisioning
? TEST_CREATOR_UID
: TEST_NO_PERM_UID;
NetworkUpdateResult result = addNetworkToWifiConfigManager(network, uid);