diff --git a/src/com/android/settings/wifi/WifiUtils.java b/src/com/android/settings/wifi/WifiUtils.java index 244fe48c8be..06f74d54e55 100644 --- a/src/com/android/settings/wifi/WifiUtils.java +++ b/src/com/android/settings/wifi/WifiUtils.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.net.NetworkCapabilities; import android.net.wifi.ScanResult; +import android.net.wifi.SoftApConfiguration; import android.net.wifi.WifiConfiguration; import android.os.UserHandle; import android.os.UserManager; @@ -38,8 +39,6 @@ public class WifiUtils { private static final int SSID_ASCII_MIN_LENGTH = 1; private static final int SSID_ASCII_MAX_LENGTH = 32; - private static final int PASSWORD_MIN_LENGTH = 8; - private static final int PASSWORD_MAX_LENGTH = 63; public static boolean isSSIDTooLong(String ssid) { @@ -56,13 +55,17 @@ public class WifiUtils { return ssid.length() < SSID_ASCII_MIN_LENGTH; } - public static boolean isHotspotPasswordValid(String password) { - if (TextUtils.isEmpty(password)) { + /** + * Check if the WPA2-PSK hotspot password is valid. + */ + public static boolean isHotspotWpa2PasswordValid(String password) { + final SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder(); + try { + configBuilder.setPassphrase(password, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); + } catch (IllegalArgumentException e) { return false; } - - final int length = password.length(); - return length >= PASSWORD_MIN_LENGTH && length <= PASSWORD_MAX_LENGTH; + return true; } /** diff --git a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java index a4a51dc0e72..be67d22d966 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java @@ -118,7 +118,7 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer @Override public boolean isTextValid(String value) { - return WifiUtils.isHotspotPasswordValid(value); + return WifiUtils.isHotspotWpa2PasswordValid(value); } private static String generateRandomPassword() { diff --git a/tests/robotests/src/com/android/settings/wifi/WifiUtilsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiUtilsTest.java index a3609f7eede..630b31939d7 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiUtilsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiUtilsTest.java @@ -45,11 +45,12 @@ public class WifiUtilsTest { public void testPassword() { final String longPassword = "123456789012345678901234567890" + "1234567890123456789012345678901234567890"; - assertThat(WifiUtils.isHotspotPasswordValid("123")).isFalse(); - assertThat(WifiUtils.isHotspotPasswordValid("12345678")).isTrue(); - assertThat(WifiUtils.isHotspotPasswordValid("1234567890")).isTrue(); - assertThat(WifiUtils.isHotspotPasswordValid(longPassword)).isFalse(); - assertThat(WifiUtils.isHotspotPasswordValid("")).isFalse(); + assertThat(WifiUtils.isHotspotWpa2PasswordValid("123")).isFalse(); + assertThat(WifiUtils.isHotspotWpa2PasswordValid("12345678")).isTrue(); + assertThat(WifiUtils.isHotspotWpa2PasswordValid("1234567890")).isTrue(); + assertThat(WifiUtils.isHotspotWpa2PasswordValid(longPassword)).isFalse(); + assertThat(WifiUtils.isHotspotWpa2PasswordValid("")).isFalse(); + assertThat(WifiUtils.isHotspotWpa2PasswordValid("€¥£")).isFalse(); } @Test