OSDN Git Service

Allow user to specify EAP-SIM under PEAP
authorPaul Stewart <pstew@google.com>
Thu, 26 Jan 2017 04:54:27 +0000 (20:54 -0800)
committerPeter Qiu <zqiu@google.com>
Fri, 7 Apr 2017 17:28:49 +0000 (10:28 -0700)
Allow the user to select EAP-SIM methods as a second phase after
an outer PEAP authentication.  This hides the "identity" and
"password" fields if one of these methods is selected.

Bug: 34835771
Test: Manual: Connect to PEAP/EAP-SIM AP
Change-Id: I7e448fbebd352a4b0facbfafa74afaff6b704386

res/values/arrays.xml
src/com/android/settings/wifi/WifiConfigController.java

index 8980568..873576c 100644 (file)
         <item>GTC</item>
     </string-array>
 
+    <!-- Type of EAP method when EAP SIM, AKA, AKA' are supported -->
+    <string-array name="wifi_peap_phase2_entries_with_sim_auth">
+        <item>None</item>
+        <!-- Do not translate. -->
+        <item>MSCHAPV2</item>
+        <!-- Do not translate. -->
+        <item>GTC</item>
+        <!-- Do not translate. -->
+        <item>SIM</item>
+        <!-- Do not translate. -->
+        <item>AKA</item>
+        <!-- Do not translate. -->
+        <item>AKA\'</item>
+    </string-array>
+
     <!-- Phase 2 options for rest of EAP methods -->
     <string-array name="wifi_phase2_entries">
         <item>None</item>
index 4380cbe..fe2bbb3 100644 (file)
@@ -106,6 +106,9 @@ public class WifiConfigController implements TextWatcher,
     public static final int WIFI_PEAP_PHASE2_NONE       = 0;
     public static final int WIFI_PEAP_PHASE2_MSCHAPV2   = 1;
     public static final int WIFI_PEAP_PHASE2_GTC        = 2;
+    public static final int WIFI_PEAP_PHASE2_SIM        = 3;
+    public static final int WIFI_PEAP_PHASE2_AKA        = 4;
+    public static final int WIFI_PEAP_PHASE2_AKA_PRIME  = 5;
 
     /* Phase2 methods supported by PEAP are limited */
     private final ArrayAdapter<String> mPhase2PeapAdapter;
@@ -176,9 +179,16 @@ public class WifiConfigController implements TextWatcher,
         final Resources res = mContext.getResources();
 
         mLevels = res.getStringArray(R.array.wifi_signal);
-        mPhase2PeapAdapter = new ArrayAdapter<String>(
-            mContext, android.R.layout.simple_spinner_item,
-            res.getStringArray(R.array.wifi_peap_phase2_entries));
+        if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
+            mPhase2PeapAdapter = new ArrayAdapter<String>(
+                    mContext, android.R.layout.simple_spinner_item,
+                    res.getStringArray(R.array.wifi_peap_phase2_entries));
+        } else {
+            mPhase2PeapAdapter = new ArrayAdapter<String>(
+                    mContext, android.R.layout.simple_spinner_item,
+                    res.getStringArray(R.array.wifi_peap_phase2_entries_with_sim_auth));
+        }
         mPhase2PeapAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
         mPhase2FullAdapter = new ArrayAdapter<String>(
@@ -532,6 +542,15 @@ public class WifiConfigController implements TextWatcher,
                             case WIFI_PEAP_PHASE2_GTC:
                                 config.enterpriseConfig.setPhase2Method(Phase2.GTC);
                                 break;
+                            case WIFI_PEAP_PHASE2_SIM:
+                                config.enterpriseConfig.setPhase2Method(Phase2.SIM);
+                                break;
+                            case WIFI_PEAP_PHASE2_AKA:
+                                config.enterpriseConfig.setPhase2Method(Phase2.AKA);
+                                break;
+                            case WIFI_PEAP_PHASE2_AKA_PRIME:
+                                config.enterpriseConfig.setPhase2Method(Phase2.AKA_PRIME);
+                                break;
                             default:
                                 Log.e(TAG, "Unknown phase2 method" + phase2Method);
                                 break;
@@ -795,6 +814,7 @@ public class WifiConfigController implements TextWatcher,
                 mEapMethodSpinner.setAdapter(spinnerAdapter);
             }
             mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
+            mPhase2Spinner.setOnItemSelectedListener(this);
             mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert);
             mEapCaCertSpinner.setOnItemSelectedListener(this);
             mEapDomainView = (TextView) mView.findViewById(R.id.domain);
@@ -836,6 +856,15 @@ public class WifiConfigController implements TextWatcher,
                             case Phase2.GTC:
                                 mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC);
                                 break;
+                            case Phase2.SIM:
+                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_SIM);
+                                break;
+                            case Phase2.AKA:
+                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA);
+                                break;
+                            case Phase2.AKA_PRIME:
+                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA_PRIME);
+                                break;
                             default:
                                 Log.e(TAG, "Invalid phase 2 method " + phase2Method);
                                 break;
@@ -874,6 +903,7 @@ public class WifiConfigController implements TextWatcher,
                 mEapIdentityView.setText(enterpriseConfig.getIdentity());
                 mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
             } else {
+                mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
                 showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
             }
         } else {
@@ -886,11 +916,11 @@ public class WifiConfigController implements TextWatcher,
      *   identity
      *   password
      * EAP-PEAP valid fields include
-     *   phase2: MSCHAPV2, GTC
+     *   phase2: MSCHAPV2, GTC, SIM, AKA, AKA'
      *   ca_cert
      *   identity
      *   anonymous_identity
-     *   password
+     *   password (not required for SIM, AKA, AKA')
      * EAP-TLS valid fields include
      *   user_cert
      *   ca_cert
@@ -938,6 +968,7 @@ public class WifiConfigController implements TextWatcher,
                 }
                 mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE);
                 mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
+                showPeapFields();
                 setUserCertInvisible();
                 break;
             case WIFI_EAP_METHOD_TTLS:
@@ -974,6 +1005,21 @@ public class WifiConfigController implements TextWatcher,
         }
     }
 
+    private void showPeapFields() {
+        int phase2Method = mPhase2Spinner.getSelectedItemPosition();
+        if (phase2Method == WIFI_PEAP_PHASE2_SIM || phase2Method == WIFI_PEAP_PHASE2_AKA
+                 || phase2Method == WIFI_PEAP_PHASE2_AKA_PRIME) {
+            mEapIdentityView.setText("");
+            mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
+            setPasswordInvisible();
+        } else {
+            mView.findViewById(R.id.l_identity).setVisibility(View.VISIBLE);
+            mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
+            mView.findViewById(R.id.password_layout).setVisibility(View.VISIBLE);
+            mView.findViewById(R.id.show_password_layout).setVisibility(View.VISIBLE);
+        }
+    }
+
     private void setIdentityInvisible() {
         mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
         mPhase2Spinner.setSelection(Phase2.NONE);
@@ -1239,6 +1285,9 @@ public class WifiConfigController implements TextWatcher,
             showSecurityFields();
         } else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) {
             showSecurityFields();
+        } else if (parent == mPhase2Spinner
+                && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) {
+            showPeapFields();
         } else if (parent == mProxySettingsSpinner) {
             showProxyFields();
         } else {