Merge "Allow 64 char HEX string PSKs in WifiSettingsUi" into oc-mr1-dev
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 5a3d426..6935749 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -411,15 +411,23 @@
         submit.setEnabled(isSubmittable());
     }
 
+    boolean isValidPsk(String password) {
+        if (password.length() == 64 && password.matches("[0-9A-Fa-f]{64}")) {
+            return true;
+        } else if (password.length() >= 8 && password.length() <= 63) {
+            return true;
+        }
+        return false;
+    }
+
     boolean isSubmittable() {
         boolean enabled = false;
         boolean passwordInvalid = false;
-
         if (mPasswordView != null
                 && ((mAccessPointSecurity == AccessPoint.SECURITY_WEP
                         && mPasswordView.length() == 0)
                     || (mAccessPointSecurity == AccessPoint.SECURITY_PSK
-                           && (mPasswordView.length() < 8 || mPasswordView.length() > 63)))) {
+                           && !isValidPsk(mPasswordView.getText().toString())))) {
             passwordInvalid = true;
         }
         if ((mSsidView != null && mSsidView.length() == 0)
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index 3dcdc91..e9b6146 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -55,8 +55,9 @@
     private AccessPoint mAccessPoint;
 
     public WifiConfigController mController;
-
-    // An invalid PSK pass phrase. It is 64 characters long, must not be greater than 63
+    private static final String HEX_PSK = "01234567012345670123456701234567012345670123456701234567"
+            + "01abcdef";
+    // An invalid ASCII PSK pass phrase. It is 64 characters long, must not be greater than 63
     private static final String LONG_PSK =
             "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl";
     // An invalid PSK pass phrase. It is 7 characters long, must be at least 8
@@ -141,6 +142,14 @@
     }
 
     @Test
+    public void isSubmittable_hexPsk_shouldReturnTrue() {
+        final TextView password = mView.findViewById(R.id.password);
+        password.setText(HEX_PSK);
+        assertThat(mController.isSubmittable()).isTrue();
+
+    }
+
+    @Test
     public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() {
         final TextView password = mView.findViewById(R.id.password);
         password.setText("");