From 8c50edd1e71b6a89fb41f0f4bf8bca84e649780e Mon Sep 17 00:00:00 2001 From: Weng Su Date: Wed, 26 Apr 2023 18:40:58 +0800 Subject: [PATCH] Fixed speed selection lost when changing password in Wi-Fi hotspot settings - Use current SoftApConfiguration to build new SoftApConfiguration to keep unchanged properties Bug: 279717060 Test: manual test atest -c WifiTetherSettingsTest Change-Id: I3ee7960b13b339445cc79c3d440f5c56c78c015f --- .../wifi/tether/WifiTetherSettings.java | 17 ++++++---- .../wifi/tether/WifiTetherSettingsTest.java | 33 +++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java index 2774be66585..4ce59b9b53f 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java @@ -80,11 +80,14 @@ public class WifiTetherSettings extends RestrictedDashboardFragment @VisibleForTesting SettingsMainSwitchBar mMainSwitchBar; private WifiTetherSwitchBarController mSwitchBarController; - private WifiTetherSSIDPreferenceController mSSIDPreferenceController; - private WifiTetherPasswordPreferenceController mPasswordPreferenceController; + @VisibleForTesting + WifiTetherSSIDPreferenceController mSSIDPreferenceController; + @VisibleForTesting + WifiTetherPasswordPreferenceController mPasswordPreferenceController; private WifiTetherSecurityPreferenceController mSecurityPreferenceController; private WifiTetherMaximizeCompatibilityPreferenceController mMaxCompatibilityPrefController; - private WifiTetherAutoOffPreferenceController mWifiTetherAutoOffPreferenceController; + @VisibleForTesting + WifiTetherAutoOffPreferenceController mWifiTetherAutoOffPreferenceController; private boolean mUnavailable; private WifiRestriction mWifiRestriction; @@ -269,10 +272,12 @@ public class WifiTetherSettings extends RestrictedDashboardFragment setLoading(restarting, false); } - private SoftApConfiguration buildNewConfig() { - SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(); + @VisibleForTesting + SoftApConfiguration buildNewConfig() { + SoftApConfiguration currentConfig = mWifiTetherViewModel.getSoftApConfiguration(); + SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(currentConfig); int securityType = (mWifiTetherViewModel.isSpeedFeatureAvailable()) - ? mWifiTetherViewModel.getSoftApConfiguration().getSecurityType() + ? currentConfig.getSecurityType() : mSecurityPreferenceController.getSecurityType(); configBuilder.setSsid(mSSIDPreferenceController.getSSID()); if (securityType != SoftApConfiguration.SECURITY_TYPE_OPEN) { diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java index 0a54c888d58..fe663abbc28 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java @@ -16,10 +16,12 @@ package com.android.settings.wifi.tether; +import static android.net.wifi.SoftApConfiguration.SECURITY_TYPE_WPA3_SAE; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; import static com.android.settings.wifi.WifiUtils.setCanShowWifiHotspotCached; +import static com.android.settings.wifi.repository.WifiHotspotRepository.BAND_2GHZ_5GHZ_6GHZ; import static com.android.settings.wifi.tether.WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY; import static com.android.settings.wifi.tether.WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED; @@ -41,6 +43,7 @@ import android.content.Context; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.TetheringManager; +import android.net.wifi.SoftApConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserManager; @@ -84,6 +87,8 @@ public class WifiTetherSettingsTest { private static final int XML_RES = R.xml.wifi_tether_settings; private static final String[] WIFI_REGEXS = {"wifi_regexs"}; + private static final String SSID = "ssid"; + private static final String PASSWORD = "password"; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -117,6 +122,12 @@ public class WifiTetherSettingsTest { private LiveData mSpeedSummary; @Mock private SettingsMainSwitchBar mMainSwitchBar; + @Mock + private WifiTetherSSIDPreferenceController mSSIDPreferenceController; + @Mock + private WifiTetherPasswordPreferenceController mPasswordPreferenceController; + @Mock + private WifiTetherAutoOffPreferenceController mWifiTetherAutoOffPreferenceController; private WifiTetherSettings mSettings; @@ -143,6 +154,12 @@ public class WifiTetherSettingsTest { mSettings = spy(new WifiTetherSettings(mWifiRestriction)); mSettings.mMainSwitchBar = mMainSwitchBar; + mSettings.mSSIDPreferenceController = mSSIDPreferenceController; + when(mSSIDPreferenceController.getSSID()).thenReturn(SSID); + mSettings.mPasswordPreferenceController = mPasswordPreferenceController; + when(mPasswordPreferenceController.getPasswordValidated(anyInt())).thenReturn(PASSWORD); + mSettings.mWifiTetherAutoOffPreferenceController = mWifiTetherAutoOffPreferenceController; + when(mWifiTetherAutoOffPreferenceController.isEnabled()).thenReturn(true); mSettings.mWifiTetherViewModel = mWifiTetherViewModel; when(mSettings.findPreference(KEY_WIFI_HOTSPOT_SECURITY)).thenReturn(mWifiHotspotSecurity); when(mSettings.findPreference(KEY_WIFI_HOTSPOT_SPEED)).thenReturn(mWifiHotspotSpeed); @@ -326,6 +343,22 @@ public class WifiTetherSettingsTest { verify(mSettings).setLoading(true, false); } + @Test + public void buildNewConfig_speedFeatureIsAvailableAndPasswordChanged_bandShouldNotBeLost() { + String newPassword = "new" + PASSWORD; + SoftApConfiguration currentConfig = new SoftApConfiguration.Builder() + .setPassphrase(PASSWORD, SECURITY_TYPE_WPA3_SAE) + .setBand(BAND_2GHZ_5GHZ_6GHZ) + .build(); + when(mWifiTetherViewModel.getSoftApConfiguration()).thenReturn(currentConfig); + when(mWifiTetherViewModel.isSpeedFeatureAvailable()).thenReturn(true); + when(mPasswordPreferenceController.getPasswordValidated(anyInt())).thenReturn(newPassword); + + SoftApConfiguration newConfig = mSettings.buildNewConfig(); + + assertThat(newConfig.getBand()).isEqualTo(currentConfig.getBand()); + } + @Test public void onRestartingChanged_restartingFalse_setLoadingFalse() { doNothing().when(mSettings).setLoading(anyBoolean(), anyBoolean());