Allow user to specify EAP-SIM under PEAP
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
This commit is contained in:
@@ -388,6 +388,21 @@
|
|||||||
<item>GTC</item>
|
<item>GTC</item>
|
||||||
</string-array>
|
</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 -->
|
<!-- Phase 2 options for rest of EAP methods -->
|
||||||
<string-array name="wifi_phase2_entries">
|
<string-array name="wifi_phase2_entries">
|
||||||
<item>None</item>
|
<item>None</item>
|
||||||
|
@@ -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_NONE = 0;
|
||||||
public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 1;
|
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_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 */
|
/* Phase2 methods supported by PEAP are limited */
|
||||||
private final ArrayAdapter<String> mPhase2PeapAdapter;
|
private final ArrayAdapter<String> mPhase2PeapAdapter;
|
||||||
@@ -176,9 +179,16 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
final Resources res = mContext.getResources();
|
final Resources res = mContext.getResources();
|
||||||
|
|
||||||
mLevels = res.getStringArray(R.array.wifi_signal);
|
mLevels = res.getStringArray(R.array.wifi_signal);
|
||||||
|
if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
|
||||||
|
com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
|
||||||
mPhase2PeapAdapter = new ArrayAdapter<String>(
|
mPhase2PeapAdapter = new ArrayAdapter<String>(
|
||||||
mContext, android.R.layout.simple_spinner_item,
|
mContext, android.R.layout.simple_spinner_item,
|
||||||
res.getStringArray(R.array.wifi_peap_phase2_entries));
|
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);
|
mPhase2PeapAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
|
||||||
mPhase2FullAdapter = new ArrayAdapter<String>(
|
mPhase2FullAdapter = new ArrayAdapter<String>(
|
||||||
@@ -532,6 +542,15 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
case WIFI_PEAP_PHASE2_GTC:
|
case WIFI_PEAP_PHASE2_GTC:
|
||||||
config.enterpriseConfig.setPhase2Method(Phase2.GTC);
|
config.enterpriseConfig.setPhase2Method(Phase2.GTC);
|
||||||
break;
|
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:
|
default:
|
||||||
Log.e(TAG, "Unknown phase2 method" + phase2Method);
|
Log.e(TAG, "Unknown phase2 method" + phase2Method);
|
||||||
break;
|
break;
|
||||||
@@ -795,6 +814,7 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
mEapMethodSpinner.setAdapter(spinnerAdapter);
|
mEapMethodSpinner.setAdapter(spinnerAdapter);
|
||||||
}
|
}
|
||||||
mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
|
mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
|
||||||
|
mPhase2Spinner.setOnItemSelectedListener(this);
|
||||||
mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert);
|
mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert);
|
||||||
mEapCaCertSpinner.setOnItemSelectedListener(this);
|
mEapCaCertSpinner.setOnItemSelectedListener(this);
|
||||||
mEapDomainView = (TextView) mView.findViewById(R.id.domain);
|
mEapDomainView = (TextView) mView.findViewById(R.id.domain);
|
||||||
@@ -836,6 +856,15 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
case Phase2.GTC:
|
case Phase2.GTC:
|
||||||
mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC);
|
mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC);
|
||||||
break;
|
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:
|
default:
|
||||||
Log.e(TAG, "Invalid phase 2 method " + phase2Method);
|
Log.e(TAG, "Invalid phase 2 method " + phase2Method);
|
||||||
break;
|
break;
|
||||||
@@ -874,6 +903,7 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
mEapIdentityView.setText(enterpriseConfig.getIdentity());
|
mEapIdentityView.setText(enterpriseConfig.getIdentity());
|
||||||
mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
|
mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
|
||||||
} else {
|
} else {
|
||||||
|
mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
|
||||||
showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
|
showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -886,11 +916,11 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
* identity
|
* identity
|
||||||
* password
|
* password
|
||||||
* EAP-PEAP valid fields include
|
* EAP-PEAP valid fields include
|
||||||
* phase2: MSCHAPV2, GTC
|
* phase2: MSCHAPV2, GTC, SIM, AKA, AKA'
|
||||||
* ca_cert
|
* ca_cert
|
||||||
* identity
|
* identity
|
||||||
* anonymous_identity
|
* anonymous_identity
|
||||||
* password
|
* password (not required for SIM, AKA, AKA')
|
||||||
* EAP-TLS valid fields include
|
* EAP-TLS valid fields include
|
||||||
* user_cert
|
* user_cert
|
||||||
* ca_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_phase2).setVisibility(View.VISIBLE);
|
||||||
mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
|
mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
|
||||||
|
showPeapFields();
|
||||||
setUserCertInvisible();
|
setUserCertInvisible();
|
||||||
break;
|
break;
|
||||||
case WIFI_EAP_METHOD_TTLS:
|
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() {
|
private void setIdentityInvisible() {
|
||||||
mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
|
mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
|
||||||
mPhase2Spinner.setSelection(Phase2.NONE);
|
mPhase2Spinner.setSelection(Phase2.NONE);
|
||||||
@@ -1239,6 +1285,9 @@ public class WifiConfigController implements TextWatcher,
|
|||||||
showSecurityFields();
|
showSecurityFields();
|
||||||
} else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) {
|
} else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) {
|
||||||
showSecurityFields();
|
showSecurityFields();
|
||||||
|
} else if (parent == mPhase2Spinner
|
||||||
|
&& mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) {
|
||||||
|
showPeapFields();
|
||||||
} else if (parent == mProxySettingsSpinner) {
|
} else if (parent == mProxySettingsSpinner) {
|
||||||
showProxyFields();
|
showProxyFields();
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user