[Wi-Fi] Fix crash after editing invalid hotspot password
From Android 11, Wi-Fi framework only supports ASCII encoding for hotspot password, APP should check if password character is valid. This change checks if SoftApConfiguration accepts the password and disable the OK button if the password is invalid. Bug: 163353576 Test: make RunSettingsRoboTests ROBOTEST_FILTER=WifiUtilsTest Change-Id: Ief3c6c1f08f8fcdf128768cde3ab8eef91f19fbe
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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() {
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user