Snap for 11216811 from 1c8c7fbed262639d6eeafa5692c8f3b3c7c572c7 to 24Q1-release
Change-Id: I58ef2641d49f87306b9ca0468d3406b562a55782
diff --git a/framework/java/android/net/wifi/SoftApConfiguration.java b/framework/java/android/net/wifi/SoftApConfiguration.java
index f1151d6..dde9891 100644
--- a/framework/java/android/net/wifi/SoftApConfiguration.java
+++ b/framework/java/android/net/wifi/SoftApConfiguration.java
@@ -1070,14 +1070,6 @@
}
/**
- * @see #isIeee80211beEnabled()
- * @hide
- */
- public boolean isIeee80211beEnabledInternal() {
- return mIeee80211beEnabled;
- }
-
- /**
* Returns whether or not the Soft AP is configured to enable 802.11be.
* This is an indication that if the device support 802.11be AP then to enable or disable
* that feature. If the device does not support 802.11be AP then this flag is ignored.
@@ -1090,7 +1082,7 @@
if (!SdkLevel.isAtLeastT()) {
throw new UnsupportedOperationException();
}
- return isIeee80211beEnabledInternal();
+ return mIeee80211beEnabled;
}
/**
diff --git a/service/java/com/android/server/wifi/HostapdHalAidlImp.java b/service/java/com/android/server/wifi/HostapdHalAidlImp.java
index e453eb8..b4a95d5 100644
--- a/service/java/com/android/server/wifi/HostapdHalAidlImp.java
+++ b/service/java/com/android/server/wifi/HostapdHalAidlImp.java
@@ -912,9 +912,9 @@
R.bool.config_wifiSoftapHeMuBeamformerSupported);
hwModeParams.enableHeTargetWakeTime = mContext.getResources().getBoolean(
R.bool.config_wifiSoftapHeTwtSupported);
- hwModeParams.enable80211BE = config.isIeee80211beEnabledInternal();
if (SdkLevel.isAtLeastT()) {
+ hwModeParams.enable80211BE = config.isIeee80211beEnabled();
hwModeParams.maximumChannelBandwidth =
mapSoftApInfoBandwidthToHal(config.getMaxChannelBandwidth());
} else {
diff --git a/service/java/com/android/server/wifi/SoftApManager.java b/service/java/com/android/server/wifi/SoftApManager.java
index 8f249e4..b2e823d 100644
--- a/service/java/com/android/server/wifi/SoftApManager.java
+++ b/service/java/com/android/server/wifi/SoftApManager.java
@@ -1297,6 +1297,16 @@
handleStartSoftApFailure(START_RESULT_FAILURE_INTERFACE_CONFLICT);
break;
}
+ if (SdkLevel.isAtLeastT()
+ && mCurrentSoftApConfiguration.isIeee80211beEnabled()
+ && !mCurrentSoftApCapability.areFeaturesSupported(
+ SoftApCapability.SOFTAP_FEATURE_IEEE80211_BE)) {
+ Log.d(getTag(), "11BE is not supported, removing from configuration");
+ mCurrentSoftApConfiguration = new SoftApConfiguration
+ .Builder(mCurrentSoftApConfiguration)
+ .setIeee80211beEnabled(false)
+ .build();
+ }
mApInterfaceName = mWifiNative.setupInterfaceForSoftApMode(
mWifiNativeInterfaceCallback, mRequestorWs,
mCurrentSoftApConfiguration.getBand(), isBridgeRequired(),
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 3795d4a..d24b9eb 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -1260,8 +1260,11 @@
return false;
}
- // If SoftAp is enabled, only privileged apps are allowed to toggle wifi
- if (!isPrivileged && mTetheredSoftApTracker.getState() == WIFI_AP_STATE_ENABLED) {
+ // Pre-S interface priority is solely based on interface type, which allows STA to delete AP
+ // for any requester. To prevent non-privileged apps from deleting a tethering AP by
+ // enabling Wi-Fi, only allow privileged apps to toggle Wi-Fi if tethering AP is up.
+ if (!SdkLevel.isAtLeastS() && !isPrivileged
+ && mTetheredSoftApTracker.getState() == WIFI_AP_STATE_ENABLED) {
mLog.err("setWifiEnabled with SoftAp enabled: only Settings can toggle wifi").flush();
return false;
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
index a3663a4..50c73ec 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
@@ -392,7 +392,8 @@
| SoftApCapability.SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT
| SoftApCapability.SOFTAP_FEATURE_ACS_OFFLOAD
| SoftApCapability.SOFTAP_FEATURE_WPA3_SAE
- | SoftApCapability.SOFTAP_FEATURE_MAC_ADDRESS_CUSTOMIZATION;
+ | SoftApCapability.SOFTAP_FEATURE_MAC_ADDRESS_CUSTOMIZATION
+ | SoftApCapability.SOFTAP_FEATURE_IEEE80211_BE;
mTestSoftApCapability = new SoftApCapability(testSoftApFeature);
mTestSoftApCapability.setMaxSupportedClients(10);
mTestSoftApCapability.setSupportedChannelList(
@@ -2395,10 +2396,17 @@
randomizedBssidConfig = randomizedBssidConfigBuilder.build();
when(mWifiApConfigStore.randomizeBssidIfUnset(any(), any())).thenReturn(
randomizedBssidConfig);
- expectedConfig = new SoftApConfiguration.Builder(randomizedBssidConfig)
- .build();
+
+ expectedConfig = randomizedBssidConfig;
} else {
- expectedConfig = new SoftApConfiguration.Builder(config)
+ expectedConfig = config;
+ }
+ if (SdkLevel.isAtLeastT()
+ && expectedConfig.isIeee80211beEnabled()
+ && !softApConfig.getCapability().areFeaturesSupported(
+ SoftApCapability.SOFTAP_FEATURE_IEEE80211_BE)) {
+ expectedConfig = new SoftApConfiguration.Builder(expectedConfig)
+ .setIeee80211beEnabled(false)
.build();
}
}
@@ -2512,8 +2520,7 @@
verify(mListener).onStarted(mSoftApManager);
verify(mWifiMetrics).addSoftApUpChangedEvent(true, softApConfig.getTargetMode(),
TEST_DEFAULT_SHUTDOWN_TIMEOUT_MILLIS, expectedConfig.getBands().length > 1);
- verify(mWifiMetrics).updateSoftApConfiguration(config == null
- ? randomizedBssidConfig : expectedConfig, softApConfig.getTargetMode(),
+ verify(mWifiMetrics).updateSoftApConfiguration(expectedConfig, softApConfig.getTargetMode(),
expectedConfig.getBands().length > 1);
verify(mWifiMetrics)
.updateSoftApCapability(
@@ -3868,5 +3875,24 @@
startSoftApAndVerifyEnabled(apConfig, configBuilder.build(), false);
}
+ /**
+ * Tests that 11BE is set to disabled in the SoftApConfiguration if it isn't supported by
+ * SoftApCapability.
+ */
+ @Test
+ public void testStartSoftApRemoves11BEIfNotSupported() throws Exception {
+ assumeTrue(SdkLevel.isAtLeastT());
+ mTestSoftApCapability.setSupportedFeatures(false,
+ SoftApCapability.SOFTAP_FEATURE_IEEE80211_BE);
+ Builder configBuilder = new SoftApConfiguration.Builder();
+ configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
+ configBuilder.setSsid(TEST_SSID);
+ configBuilder.setIeee80211beEnabled(true);
+ SoftApModeConfiguration apConfig = new SoftApModeConfiguration(
+ WifiManager.IFACE_IP_MODE_TETHERED, configBuilder.build(),
+ mTestSoftApCapability, TEST_COUNTRY_CODE);
+ SoftApConfiguration expectedConfig = configBuilder.setIeee80211beEnabled(false).build();
+ startSoftApAndVerifyEnabled(apConfig, expectedConfig, false);
+ }
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index 6c64cd1..aa6bb77 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -620,6 +620,9 @@
when(mScanRequestProxy.startScan(anyInt(), anyString())).thenReturn(true);
when(mLohsCallback.asBinder()).thenReturn(mock(IBinder.class));
when(mWifiSettingsConfigStore.get(eq(WIFI_VERBOSE_LOGGING_ENABLED))).thenReturn(true);
+ when(mWifiSettingsConfigStore.get(
+ eq(SHOW_DIALOG_WHEN_THIRD_PARTY_APPS_ENABLE_WIFI_SET_BY_API)))
+ .thenReturn(false);
when(mWifiPermissionsUtil.isSystem(anyString(), anyInt())).thenReturn(false);
when(mActiveModeWarden.getClientModeManagersInRoles(
ROLE_CLIENT_LOCAL_ONLY, ROLE_CLIENT_SECONDARY_LONG_LIVED))
@@ -874,9 +877,6 @@
*/
@Test
public void testSetWifiEnabledMetricsNormalAppBelowQSdk() throws Exception {
- when(mWifiSettingsConfigStore.get(
- eq(SHOW_DIALOG_WHEN_THIRD_PARTY_APPS_ENABLE_WIFI_SET_BY_API)))
- .thenReturn(false);
doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager)
.noteOp(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, Process.myUid(), TEST_PACKAGE_NAME);
when(mWifiPermissionsUtil.isTargetSdkLessThan(anyString(),
@@ -986,9 +986,6 @@
*/
@Test
public void testSetWifiEnabledSuccessForAppsTargetingBelowQSdk() throws Exception {
- when(mWifiSettingsConfigStore.get(
- eq(SHOW_DIALOG_WHEN_THIRD_PARTY_APPS_ENABLE_WIFI_SET_BY_API)))
- .thenReturn(false);
doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager)
.noteOp(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, Process.myUid(), TEST_PACKAGE_NAME);
when(mWifiPermissionsUtil.isTargetSdkLessThan(anyString(),
@@ -1159,9 +1156,6 @@
*/
@Test
public void testSetWifiEnabledDialogForThirdPartyAppsTargetingBelowQSdk() throws Exception {
- when(mWifiSettingsConfigStore.get(
- eq(SHOW_DIALOG_WHEN_THIRD_PARTY_APPS_ENABLE_WIFI_SET_BY_API)))
- .thenReturn(false);
when(mResources.getBoolean(
R.bool.config_showConfirmationDialogForThirdPartyAppsEnablingWifi))
.thenReturn(true);
@@ -1328,9 +1322,6 @@
*/
@Test
public void testSetWifiEnabledNoDialogForNonThirdPartyAppsTargetingBelowQSdk() {
- when(mWifiSettingsConfigStore.get(
- eq(SHOW_DIALOG_WHEN_THIRD_PARTY_APPS_ENABLE_WIFI_SET_BY_API)))
- .thenReturn(false);
when(mResources.getBoolean(
R.bool.config_showConfirmationDialogForThirdPartyAppsEnablingWifi))
.thenReturn(true);
@@ -1389,10 +1380,10 @@
}
/**
- * Verify that a call from an app cannot enable wifi if we are in softap mode.
+ * Verify that a call from an app cannot enable wifi if we are in softap mode for Pre-S
*/
@Test
- public void testSetWifiEnabledFromAppFailsWhenApEnabled() throws Exception {
+ public void testSetWifiEnabledFromAppFailsWhenApEnabledForPreS() throws Exception {
doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager)
.noteOp(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, Process.myUid(), TEST_PACKAGE_NAME);
when(mWifiPermissionsUtil.isTargetSdkLessThan(anyString(),
@@ -1408,9 +1399,16 @@
eq(android.Manifest.permission.NETWORK_SETTINGS), anyInt(), anyInt()))
.thenReturn(PackageManager.PERMISSION_DENIED);
when(mSettingsStore.isAirplaneModeOn()).thenReturn(false);
- assertFalse(mWifiServiceImpl.setWifiEnabled(TEST_PACKAGE_NAME, true));
- verify(mSettingsStore, never()).handleWifiToggled(anyBoolean());
- verify(mActiveModeWarden, never()).wifiToggled(any());
+ when(mSettingsStore.handleWifiToggled(eq(true))).thenReturn(true);
+ if (!SdkLevel.isAtLeastS()) {
+ assertFalse(mWifiServiceImpl.setWifiEnabled(TEST_PACKAGE_NAME, true));
+ verify(mSettingsStore, never()).handleWifiToggled(anyBoolean());
+ verify(mActiveModeWarden, never()).wifiToggled(any());
+ } else {
+ assertTrue(mWifiServiceImpl.setWifiEnabled(TEST_PACKAGE_NAME, true));
+ verify(mActiveModeWarden).wifiToggled(
+ eq(new WorkSource(Binder.getCallingUid(), TEST_PACKAGE_NAME)));
+ }
}