Loading res/values/arrays.xml +8 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,10 @@ <!-- Security types for wireless tether --> <string-array name="wifi_tether_security"> <!-- Do not translate. --> <item>@string/wifi_security_sae</item> <!-- Do not translate. --> <item>@string/wifi_security_psk_sae</item> <!-- Do not translate. --> <item>@string/wifi_security_wpa2</item> <!-- Do not translate. --> Loading @@ -230,6 +234,10 @@ <!-- Values for security type for wireless tether --> <string-array name="wifi_tether_security_values" translatable="false"> <!-- Do not translate. --> <item>3</item> <!-- Do not translate. --> <item>2</item> <!-- Do not translate. --> <item>1</item> <!-- Do not translate. --> Loading src/com/android/settings/AllInOneTetherSettings.java +1 −1 Original line number Diff line number Diff line Loading @@ -355,7 +355,7 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment @Override public void onTetherConfigUpdated(AbstractPreferenceController controller) { final SoftApConfiguration config = buildNewConfig(); mPasswordPreferenceController.updateVisibility(config.getSecurityType()); mPasswordPreferenceController.setSecurityType(config.getSecurityType()); mWifiManager.setSoftApConfiguration(config); if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED) { Loading src/com/android/settings/wifi/WifiUtils.java +3 −3 Original line number Diff line number Diff line Loading @@ -56,12 +56,12 @@ public class WifiUtils { } /** * Check if the WPA2-PSK hotspot password is valid. * Check if the hotspot password is valid. */ public static boolean isHotspotWpa2PasswordValid(String password) { public static boolean isHotspotPasswordValid(String password, int securityType) { final SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(); try { configBuilder.setPassphrase(password, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); configBuilder.setPassphrase(password, securityType); } catch (IllegalArgumentException e) { return false; } Loading src/com/android/settings/wifi/dpp/WifiDppUtils.java +10 −6 Original line number Diff line number Diff line Loading @@ -301,7 +301,11 @@ public class WifiDppUtils { final String ssid = removeFirstAndLastDoubleQuotes(softApConfiguration.getSsid()); String security; if (softApConfiguration.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) { final int securityType = softApConfiguration.getSecurityType(); if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE) { security = WifiQrCode.SECURITY_SAE; } else if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK || securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION) { security = WifiQrCode.SECURITY_WPA_PSK; } else { security = WifiQrCode.SECURITY_NO_PASSWORD; Loading Loading @@ -431,11 +435,11 @@ public class WifiDppUtils { private static boolean isSupportHotspotConfiguratorQrCodeGenerator( SoftApConfiguration softApConfiguration) { // QR code generator produces QR code with ZXing's Wi-Fi network config format, // it supports PSK and WEP and non security // KeyMgmt.NONE is for WEP or non security return softApConfiguration.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK || softApConfiguration.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OPEN; final int securityType = softApConfiguration.getSecurityType(); return securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE || securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION || securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK || securityType == SoftApConfiguration.SECURITY_TYPE_OPEN; } private static boolean isSupportWifiDpp(Context context, int wifiEntrySecurity) { Loading src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java +17 −6 Original line number Diff line number Diff line Loading @@ -37,12 +37,16 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.UUID; /** * Controller for logic pertaining to the password of Wi-Fi tethering. */ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePreferenceController implements ValidatedEditTextPreference.Validator { private static final String PREF_KEY = "wifi_tether_network_password"; private String mPassword; private int mSecurityType; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading @@ -68,13 +72,13 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer @Override public void updateDisplay() { final SoftApConfiguration config = mWifiManager.getSoftApConfiguration(); if (config == null || (config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK && TextUtils.isEmpty(config.getPassphrase()))) { if (config.getSecurityType() != SoftApConfiguration.SECURITY_TYPE_OPEN && TextUtils.isEmpty(config.getPassphrase())) { mPassword = generateRandomPassword(); } else { mPassword = config.getPassphrase(); } mSecurityType = config.getSecurityType(); ((ValidatedEditTextPreference) mPreference).setValidator(this); ((ValidatedEditTextPreference) mPreference).setIsPassword(true); ((ValidatedEditTextPreference) mPreference).setIsSummaryPassword(true); Loading Loading @@ -105,20 +109,27 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer // don't actually overwrite unless we get a new config in case it was accidentally toggled. if (securityType == SoftApConfiguration.SECURITY_TYPE_OPEN) { return ""; } else if (!isTextValid(mPassword)) { } else if (!WifiUtils.isHotspotPasswordValid(mPassword, securityType)) { mPassword = generateRandomPassword(); updatePasswordDisplay((EditTextPreference) mPreference); } return mPassword; } public void updateVisibility(int securityType) { /** * This method set the security type of user selection. Then the controller will based on the * security type changed to update the password changed on the preference. * * @param securityType The security type of SoftApConfiguration. */ public void setSecurityType(int securityType) { mSecurityType = securityType; mPreference.setVisible(securityType != SoftApConfiguration.SECURITY_TYPE_OPEN); } @Override public boolean isTextValid(String value) { return WifiUtils.isHotspotWpa2PasswordValid(value); return WifiUtils.isHotspotPasswordValid(value, mSecurityType); } private static String generateRandomPassword() { Loading Loading
res/values/arrays.xml +8 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,10 @@ <!-- Security types for wireless tether --> <string-array name="wifi_tether_security"> <!-- Do not translate. --> <item>@string/wifi_security_sae</item> <!-- Do not translate. --> <item>@string/wifi_security_psk_sae</item> <!-- Do not translate. --> <item>@string/wifi_security_wpa2</item> <!-- Do not translate. --> Loading @@ -230,6 +234,10 @@ <!-- Values for security type for wireless tether --> <string-array name="wifi_tether_security_values" translatable="false"> <!-- Do not translate. --> <item>3</item> <!-- Do not translate. --> <item>2</item> <!-- Do not translate. --> <item>1</item> <!-- Do not translate. --> Loading
src/com/android/settings/AllInOneTetherSettings.java +1 −1 Original line number Diff line number Diff line Loading @@ -355,7 +355,7 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment @Override public void onTetherConfigUpdated(AbstractPreferenceController controller) { final SoftApConfiguration config = buildNewConfig(); mPasswordPreferenceController.updateVisibility(config.getSecurityType()); mPasswordPreferenceController.setSecurityType(config.getSecurityType()); mWifiManager.setSoftApConfiguration(config); if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED) { Loading
src/com/android/settings/wifi/WifiUtils.java +3 −3 Original line number Diff line number Diff line Loading @@ -56,12 +56,12 @@ public class WifiUtils { } /** * Check if the WPA2-PSK hotspot password is valid. * Check if the hotspot password is valid. */ public static boolean isHotspotWpa2PasswordValid(String password) { public static boolean isHotspotPasswordValid(String password, int securityType) { final SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(); try { configBuilder.setPassphrase(password, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); configBuilder.setPassphrase(password, securityType); } catch (IllegalArgumentException e) { return false; } Loading
src/com/android/settings/wifi/dpp/WifiDppUtils.java +10 −6 Original line number Diff line number Diff line Loading @@ -301,7 +301,11 @@ public class WifiDppUtils { final String ssid = removeFirstAndLastDoubleQuotes(softApConfiguration.getSsid()); String security; if (softApConfiguration.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) { final int securityType = softApConfiguration.getSecurityType(); if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE) { security = WifiQrCode.SECURITY_SAE; } else if (securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK || securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION) { security = WifiQrCode.SECURITY_WPA_PSK; } else { security = WifiQrCode.SECURITY_NO_PASSWORD; Loading Loading @@ -431,11 +435,11 @@ public class WifiDppUtils { private static boolean isSupportHotspotConfiguratorQrCodeGenerator( SoftApConfiguration softApConfiguration) { // QR code generator produces QR code with ZXing's Wi-Fi network config format, // it supports PSK and WEP and non security // KeyMgmt.NONE is for WEP or non security return softApConfiguration.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK || softApConfiguration.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_OPEN; final int securityType = softApConfiguration.getSecurityType(); return securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE || securityType == SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION || securityType == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK || securityType == SoftApConfiguration.SECURITY_TYPE_OPEN; } private static boolean isSupportWifiDpp(Context context, int wifiEntrySecurity) { Loading
src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java +17 −6 Original line number Diff line number Diff line Loading @@ -37,12 +37,16 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.UUID; /** * Controller for logic pertaining to the password of Wi-Fi tethering. */ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePreferenceController implements ValidatedEditTextPreference.Validator { private static final String PREF_KEY = "wifi_tether_network_password"; private String mPassword; private int mSecurityType; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading @@ -68,13 +72,13 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer @Override public void updateDisplay() { final SoftApConfiguration config = mWifiManager.getSoftApConfiguration(); if (config == null || (config.getSecurityType() == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK && TextUtils.isEmpty(config.getPassphrase()))) { if (config.getSecurityType() != SoftApConfiguration.SECURITY_TYPE_OPEN && TextUtils.isEmpty(config.getPassphrase())) { mPassword = generateRandomPassword(); } else { mPassword = config.getPassphrase(); } mSecurityType = config.getSecurityType(); ((ValidatedEditTextPreference) mPreference).setValidator(this); ((ValidatedEditTextPreference) mPreference).setIsPassword(true); ((ValidatedEditTextPreference) mPreference).setIsSummaryPassword(true); Loading Loading @@ -105,20 +109,27 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer // don't actually overwrite unless we get a new config in case it was accidentally toggled. if (securityType == SoftApConfiguration.SECURITY_TYPE_OPEN) { return ""; } else if (!isTextValid(mPassword)) { } else if (!WifiUtils.isHotspotPasswordValid(mPassword, securityType)) { mPassword = generateRandomPassword(); updatePasswordDisplay((EditTextPreference) mPreference); } return mPassword; } public void updateVisibility(int securityType) { /** * This method set the security type of user selection. Then the controller will based on the * security type changed to update the password changed on the preference. * * @param securityType The security type of SoftApConfiguration. */ public void setSecurityType(int securityType) { mSecurityType = securityType; mPreference.setVisible(securityType != SoftApConfiguration.SECURITY_TYPE_OPEN); } @Override public boolean isTextValid(String value) { return WifiUtils.isHotspotWpa2PasswordValid(value); return WifiUtils.isHotspotPasswordValid(value, mSecurityType); } private static String generateRandomPassword() { Loading