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
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 2774be6..4ce59b9 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -80,11 +80,14 @@
@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 @@
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 0a54c88..fe663ab 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.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 @@
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 @@
private LiveData<Integer> mSpeedSummary;
@Mock
private SettingsMainSwitchBar mMainSwitchBar;
+ @Mock
+ private WifiTetherSSIDPreferenceController mSSIDPreferenceController;
+ @Mock
+ private WifiTetherPasswordPreferenceController mPasswordPreferenceController;
+ @Mock
+ private WifiTetherAutoOffPreferenceController mWifiTetherAutoOffPreferenceController;
private WifiTetherSettings mSettings;
@@ -143,6 +154,12 @@
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);
@@ -327,6 +344,22 @@
}
@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());