Loading src/com/android/settings/wifi/WifiConfigController.java +62 −29 Original line number Diff line number Diff line Loading @@ -179,7 +179,9 @@ public class WifiConfigController implements TextWatcher, private TextView mSsidView; private Context mContext; private Integer mSecurityInPosition[]; @VisibleForTesting Integer mSecurityInPosition[]; private final WifiManager mWifiManager; Loading Loading @@ -322,7 +324,7 @@ public class WifiConfigController implements TextWatcher, if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive() && !mAccessPoint.isPasspointConfig()) || mMode != WifiConfigUiBase.MODE_VIEW) { showSecurityFields(); showSecurityFields(/* refreshEapMethods */ true, /* refreshCertificates */ true); showIpConfigFields(); showProxyFields(); final CheckBox advancedTogglebox = Loading Loading @@ -956,7 +958,7 @@ public class WifiConfigController implements TextWatcher, return 0; } private void showSecurityFields() { private void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) { if (mAccessPointSecurity == AccessPoint.SECURITY_NONE || mAccessPointSecurity == AccessPoint.SECURITY_OWE || mAccessPointSecurity == AccessPoint.SECURITY_OWE_TRANSITION) { Loading Loading @@ -988,22 +990,6 @@ public class WifiConfigController implements TextWatcher, if (mEapMethodSpinner == null) { mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method); mEapMethodSpinner.setOnItemSelectedListener(this); if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean( com.android.internal.R.bool.config_eap_sim_based_auth_supported)) { String[] eapMethods = mContext.getResources().getStringArray( R.array.eap_method_without_sim_auth); ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, eapMethods); spinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); mEapMethodSpinner.setAdapter(spinnerAdapter); } else { final ArrayAdapter<CharSequence> wifispinnerAdapter = getSpinnerArrayWithEapMethodsTts(R.array.wifi_eap_method); wifispinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); mEapMethodSpinner.setAdapter(wifispinnerAdapter); } mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2); mPhase2Spinner.setOnItemSelectedListener(this); mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert); Loading @@ -1014,11 +1000,38 @@ public class WifiConfigController implements TextWatcher, mEapUserCertSpinner.setOnItemSelectedListener(this); mEapIdentityView = (TextView) mView.findViewById(R.id.identity); mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); } if (mAccessPoint != null && mAccessPoint.isCarrierAp()) { if (refreshEapMethods) { ArrayAdapter<CharSequence> eapMethodSpinnerAdapter; if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) { eapMethodSpinnerAdapter = getSpinnerAdapterWithEapMethods(R.array.wifi_eap_method); mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter); // WAP3-Enterprise 192-bit only allows EAP method TLS mEapMethodSpinner.setSelection(Eap.TLS); mEapMethodSpinner.setEnabled(false); } else if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean( com.android.internal.R.bool.config_eap_sim_based_auth_supported)) { eapMethodSpinnerAdapter = getSpinnerAdapterWithEapMethods( R.array.eap_method_without_sim_auth); mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter); mEapMethodSpinner.setEnabled(true); } else { eapMethodSpinnerAdapter = getSpinnerArrayWithEapMethodsTts(R.array.wifi_eap_method); eapMethodSpinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter); mEapMethodSpinner.setEnabled(true); } } if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B && mAccessPoint != null && mAccessPoint.isCarrierAp()) { mEapMethodSpinner.setSelection(mAccessPoint.getCarrierApEapType()); } if (refreshCertificates) { loadCertificates( mEapCaCertSpinner, Credentials.CA_CERTIFICATE, Loading @@ -1031,6 +1044,7 @@ public class WifiConfigController implements TextWatcher, mDoNotProvideEapUserCertString, false, false); } // Modifying an existing network if (mAccessPoint != null && mAccessPoint.isSaved()) { Loading Loading @@ -1097,10 +1111,6 @@ 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 { showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); } Loading Loading @@ -1395,7 +1405,17 @@ public class WifiConfigController implements TextWatcher, } catch (Exception e) { Log.e(TAG, "can't get the certificate list from KeyStore"); } if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B) { certs.add(noCertificateString); } // If there is only mUnspecifiedCertString and one item to select, only shows the item if (certs.size() == 2) { certs.remove(mUnspecifiedCertString); spinner.setEnabled(false); } else { spinner.setEnabled(true); } final ArrayAdapter<String> adapter = new ArrayAdapter<String>( context, android.R.layout.simple_spinner_item, Loading Loading @@ -1492,15 +1512,17 @@ public class WifiConfigController implements TextWatcher, if (parent == mSecuritySpinner) { // Convert menu position to actual Wi-Fi security type mAccessPointSecurity = mSecurityInPosition[position]; showSecurityFields(); showSecurityFields(/* refreshEapMethods */ true, /* refreshCertificates */ true); if (WifiDppUtils.isSupportEnrolleeQrCodeScanner(mContext, mAccessPointSecurity)) { mSsidScanButton.setVisibility(View.VISIBLE); } else { mSsidScanButton.setVisibility(View.GONE); } } else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) { showSecurityFields(); } else if (parent == mEapMethodSpinner) { showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ true); } else if (parent == mEapCaCertSpinner) { showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false); } else if (parent == mPhase2Spinner && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) { showPeapFields(); Loading Loading @@ -1620,6 +1642,17 @@ public class WifiConfigController implements TextWatcher, return returnEntries; } private ArrayAdapter<CharSequence> getSpinnerAdapterWithEapMethods( int contentStringArrayResId) { String[] eapMethods = mContext.getResources().getStringArray( contentStringArrayResId); ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<>(mContext, android.R.layout.simple_spinner_item, eapMethods); spinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); return spinnerAdapter; } /** * This function is to span the TTS strings to each EAP method items in the * spinner to have detail TTS content for the TTS engine usage. Loading tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -485,4 +485,28 @@ public class WifiConfigControllerTest { assertThat(targetStringArray.length).isEqualTo(ttsStringArray.length); } @Test public void selectSecurity_wpa3Eap192bit_eapMethodTls() { final WifiManager wifiManager = mock(WifiManager.class); when(wifiManager.isWpa3SuiteBSupported()).thenReturn(true); mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, WifiConfigUiBase.MODE_MODIFY, wifiManager); final Spinner securitySpinner = mView.findViewById(R.id.security); final Spinner eapMethodSpinner = mView.findViewById(R.id.method); int wpa3Eap192bitPosition = -1; final int securityCount = mController.mSecurityInPosition.length; for (int i = 0; i < securityCount; i++) { if (mController.mSecurityInPosition[i] != null && mController.mSecurityInPosition[i] == AccessPoint.SECURITY_EAP_SUITE_B) { wpa3Eap192bitPosition = i; } } mController.onItemSelected(securitySpinner, /* view */ null, wpa3Eap192bitPosition, /* id */ 0); final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition(); assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS"); } } Loading
src/com/android/settings/wifi/WifiConfigController.java +62 −29 Original line number Diff line number Diff line Loading @@ -179,7 +179,9 @@ public class WifiConfigController implements TextWatcher, private TextView mSsidView; private Context mContext; private Integer mSecurityInPosition[]; @VisibleForTesting Integer mSecurityInPosition[]; private final WifiManager mWifiManager; Loading Loading @@ -322,7 +324,7 @@ public class WifiConfigController implements TextWatcher, if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive() && !mAccessPoint.isPasspointConfig()) || mMode != WifiConfigUiBase.MODE_VIEW) { showSecurityFields(); showSecurityFields(/* refreshEapMethods */ true, /* refreshCertificates */ true); showIpConfigFields(); showProxyFields(); final CheckBox advancedTogglebox = Loading Loading @@ -956,7 +958,7 @@ public class WifiConfigController implements TextWatcher, return 0; } private void showSecurityFields() { private void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) { if (mAccessPointSecurity == AccessPoint.SECURITY_NONE || mAccessPointSecurity == AccessPoint.SECURITY_OWE || mAccessPointSecurity == AccessPoint.SECURITY_OWE_TRANSITION) { Loading Loading @@ -988,22 +990,6 @@ public class WifiConfigController implements TextWatcher, if (mEapMethodSpinner == null) { mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method); mEapMethodSpinner.setOnItemSelectedListener(this); if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean( com.android.internal.R.bool.config_eap_sim_based_auth_supported)) { String[] eapMethods = mContext.getResources().getStringArray( R.array.eap_method_without_sim_auth); ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, eapMethods); spinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); mEapMethodSpinner.setAdapter(spinnerAdapter); } else { final ArrayAdapter<CharSequence> wifispinnerAdapter = getSpinnerArrayWithEapMethodsTts(R.array.wifi_eap_method); wifispinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); mEapMethodSpinner.setAdapter(wifispinnerAdapter); } mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2); mPhase2Spinner.setOnItemSelectedListener(this); mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert); Loading @@ -1014,11 +1000,38 @@ public class WifiConfigController implements TextWatcher, mEapUserCertSpinner.setOnItemSelectedListener(this); mEapIdentityView = (TextView) mView.findViewById(R.id.identity); mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); } if (mAccessPoint != null && mAccessPoint.isCarrierAp()) { if (refreshEapMethods) { ArrayAdapter<CharSequence> eapMethodSpinnerAdapter; if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) { eapMethodSpinnerAdapter = getSpinnerAdapterWithEapMethods(R.array.wifi_eap_method); mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter); // WAP3-Enterprise 192-bit only allows EAP method TLS mEapMethodSpinner.setSelection(Eap.TLS); mEapMethodSpinner.setEnabled(false); } else if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean( com.android.internal.R.bool.config_eap_sim_based_auth_supported)) { eapMethodSpinnerAdapter = getSpinnerAdapterWithEapMethods( R.array.eap_method_without_sim_auth); mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter); mEapMethodSpinner.setEnabled(true); } else { eapMethodSpinnerAdapter = getSpinnerArrayWithEapMethodsTts(R.array.wifi_eap_method); eapMethodSpinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter); mEapMethodSpinner.setEnabled(true); } } if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B && mAccessPoint != null && mAccessPoint.isCarrierAp()) { mEapMethodSpinner.setSelection(mAccessPoint.getCarrierApEapType()); } if (refreshCertificates) { loadCertificates( mEapCaCertSpinner, Credentials.CA_CERTIFICATE, Loading @@ -1031,6 +1044,7 @@ public class WifiConfigController implements TextWatcher, mDoNotProvideEapUserCertString, false, false); } // Modifying an existing network if (mAccessPoint != null && mAccessPoint.isSaved()) { Loading Loading @@ -1097,10 +1111,6 @@ 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 { showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); } Loading Loading @@ -1395,7 +1405,17 @@ public class WifiConfigController implements TextWatcher, } catch (Exception e) { Log.e(TAG, "can't get the certificate list from KeyStore"); } if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B) { certs.add(noCertificateString); } // If there is only mUnspecifiedCertString and one item to select, only shows the item if (certs.size() == 2) { certs.remove(mUnspecifiedCertString); spinner.setEnabled(false); } else { spinner.setEnabled(true); } final ArrayAdapter<String> adapter = new ArrayAdapter<String>( context, android.R.layout.simple_spinner_item, Loading Loading @@ -1492,15 +1512,17 @@ public class WifiConfigController implements TextWatcher, if (parent == mSecuritySpinner) { // Convert menu position to actual Wi-Fi security type mAccessPointSecurity = mSecurityInPosition[position]; showSecurityFields(); showSecurityFields(/* refreshEapMethods */ true, /* refreshCertificates */ true); if (WifiDppUtils.isSupportEnrolleeQrCodeScanner(mContext, mAccessPointSecurity)) { mSsidScanButton.setVisibility(View.VISIBLE); } else { mSsidScanButton.setVisibility(View.GONE); } } else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) { showSecurityFields(); } else if (parent == mEapMethodSpinner) { showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ true); } else if (parent == mEapCaCertSpinner) { showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false); } else if (parent == mPhase2Spinner && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) { showPeapFields(); Loading Loading @@ -1620,6 +1642,17 @@ public class WifiConfigController implements TextWatcher, return returnEntries; } private ArrayAdapter<CharSequence> getSpinnerAdapterWithEapMethods( int contentStringArrayResId) { String[] eapMethods = mContext.getResources().getStringArray( contentStringArrayResId); ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<>(mContext, android.R.layout.simple_spinner_item, eapMethods); spinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); return spinnerAdapter; } /** * This function is to span the TTS strings to each EAP method items in the * spinner to have detail TTS content for the TTS engine usage. Loading
tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -485,4 +485,28 @@ public class WifiConfigControllerTest { assertThat(targetStringArray.length).isEqualTo(ttsStringArray.length); } @Test public void selectSecurity_wpa3Eap192bit_eapMethodTls() { final WifiManager wifiManager = mock(WifiManager.class); when(wifiManager.isWpa3SuiteBSupported()).thenReturn(true); mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, WifiConfigUiBase.MODE_MODIFY, wifiManager); final Spinner securitySpinner = mView.findViewById(R.id.security); final Spinner eapMethodSpinner = mView.findViewById(R.id.method); int wpa3Eap192bitPosition = -1; final int securityCount = mController.mSecurityInPosition.length; for (int i = 0; i < securityCount; i++) { if (mController.mSecurityInPosition[i] != null && mController.mSecurityInPosition[i] == AccessPoint.SECURITY_EAP_SUITE_B) { wpa3Eap192bitPosition = i; } } mController.onItemSelected(securitySpinner, /* view */ null, wpa3Eap192bitPosition, /* id */ 0); final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition(); assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS"); } }