Merge "Allow user to specify EAP-SIM under PEAP" into oc-dev
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 8980568..873576c 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -388,6 +388,21 @@
<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>
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 4380cbe..fe2bbb3 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -106,6 +106,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
mEapIdentityView.setText(enterpriseConfig.getIdentity());
mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
} else {
+ mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
}
} else {
@@ -886,11 +916,11 @@
* 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 @@
}
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 @@
}
}
+ 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 @@
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 {