Loading src/com/android/settings/wifi/AddNetworkFragment.java +7 −1 Original line number Diff line number Diff line Loading @@ -85,6 +85,13 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf return rootView; } @Override public void onResume() { super.onResume(); mUIController.showSecurityFields( /* refreshEapMethods */ false, /* refreshCertificates */ true); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); Loading @@ -110,7 +117,6 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER) { if (resultCode != Activity.RESULT_OK) { return; Loading src/com/android/settings/wifi/ConfigureWifiEntryFragment.java +7 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,13 @@ public class ConfigureWifiEntryFragment extends InstrumentedFragment implements return rootView; } @Override public void onResume() { super.onResume(); mUiController.showSecurityFields( /* refreshEapMethods */ false, /* refreshCertificates */ true); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); Loading src/com/android/settings/wifi/WifiConfigController2.java +37 −8 Original line number Diff line number Diff line Loading @@ -16,7 +16,10 @@ package com.android.settings.wifi; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.InetAddresses; import android.net.IpConfiguration; Loading @@ -32,6 +35,7 @@ import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiManager; import android.os.IBinder; import android.os.UserHandle; import android.security.keystore.KeyProperties; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; Loading Loading @@ -144,6 +148,15 @@ public class WifiConfigController2 implements TextWatcher, UNDESIRED_CERTIFICATE_MACRANDSAPSECRET }; /* These values are for install certificate */ private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller"; private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain"; private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage"; private static final String INSTALL_CERTIFICATE_VALUE = "wifi"; protected int REQUEST_INSTALL_CERTS = 1; /* Phase2 methods supported by PEAP are limited */ private ArrayAdapter<CharSequence> mPhase2PeapAdapter; /* Phase2 methods supported by TTLS are limited */ Loading @@ -159,12 +172,13 @@ public class WifiConfigController2 implements TextWatcher, private String mMultipleCertSetString; private String mUseSystemCertsString; private String mDoNotProvideEapUserCertString; @VisibleForTesting String mInstallCertsString; private Spinner mSecuritySpinner; @VisibleForTesting Spinner mEapMethodSpinner; private int mLastShownEapMethod; @VisibleForTesting Spinner mEapSimSpinner; // For EAP-SIM, EAP-AKA and EAP-AKA-PRIME. private Spinner mEapCaCertSpinner; @VisibleForTesting Spinner mEapCaCertSpinner; private Spinner mEapOcspSpinner; private TextView mEapDomainView; private Spinner mPhase2Spinner; Loading Loading @@ -258,6 +272,7 @@ public class WifiConfigController2 implements TextWatcher, mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); mDoNotProvideEapUserCertString = mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); mInstallCertsString = mContext.getString(R.string.wifi_install_credentials); mSsidScanButton = (ImageButton) mView.findViewById(R.id.ssid_scanner_button); mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); Loading Loading @@ -942,7 +957,7 @@ public class WifiConfigController2 implements TextWatcher, } } private void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) { protected void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) { if (mWifiEntrySecurity == WifiEntry.SECURITY_NONE || mWifiEntrySecurity == WifiEntry.SECURITY_OWE) { mView.findViewById(R.id.security_fields).setVisibility(View.GONE); Loading Loading @@ -1031,11 +1046,8 @@ public class WifiConfigController2 implements TextWatcher, mDoNotProvideEapUserCertString, false /* showMultipleCerts */, false /* showUsePreinstalledCertOption */); // To avoid the user connects to a non-secure network unexpectedly, // request using system trusted certificates by default // unless the user explicitly chooses "Do not validate" or other // CA certificates. setSelection(mEapCaCertSpinner, mUseSystemCertsString); setSelection(mEapCaCertSpinner, mUnspecifiedCertString); } // Modifying an existing network Loading Loading @@ -1494,6 +1506,7 @@ public class WifiConfigController2 implements TextWatcher, } if (showUsePreinstalledCertOption) { certs.add(mUseSystemCertsString); certs.add(mInstallCertsString); } if (choices != null && choices.size() != 0) { Loading Loading @@ -1661,6 +1674,10 @@ public class WifiConfigController2 implements TextWatcher, showSecurityFields(/* refreshEapMethods */false, /* refreshCertificates */ true); } } else if (parent == mEapCaCertSpinner) { String selectedItem = parent.getItemAtPosition(position).toString(); if (selectedItem.equals(mInstallCertsString)) { startActivityForInstallCerts(); } showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false); } else if (parent == mPhase2Spinner && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) { Loading @@ -1682,6 +1699,18 @@ public class WifiConfigController2 implements TextWatcher, // } /** * Start the install page for user to install the existing certificate. */ private void startActivityForInstallCerts() { Intent intent = new Intent(ACTION_INSTALL_CERTS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(new ComponentName(PACKAGE_INSTALL_CERTS, CLASS_INSTALL_CERTS)); intent.putExtra(KEY_INSTALL_CERTIFICATE, INSTALL_CERTIFICATE_VALUE); mContext.startActivity(intent); } /** * Make the characters of the password visible if show_password is checked. */ Loading tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java +39 −2 Original line number Diff line number Diff line Loading @@ -18,11 +18,17 @@ package com.android.settings.wifi; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.IpConfiguration; import android.net.wifi.WifiConfiguration; Loading @@ -30,12 +36,14 @@ import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiManager; import android.os.UserHandle; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.LinearLayout; Loading @@ -54,6 +62,7 @@ import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; Loading Loading @@ -81,6 +90,7 @@ public class WifiConfigController2Test { private Spinner mHiddenSettingsSpinner; private Spinner mEapCaCertSpinner; private Spinner mEapUserCertSpinner; private String mUnspecifiedCertString; private String mUseSystemCertsString; private String mDoNotProvideEapUserCertString; private ShadowSubscriptionManager mShadowSubscriptionManager; Loading @@ -107,10 +117,16 @@ public class WifiConfigController2Test { private static final String SAVED_CA_CERT = "saved CA cert"; private static final String SAVED_USER_CERT = "saved user cert"; private static final int POSITION_SYSTEM_CERT = 1; private static final int POSITION_INSTALL_CERT = 2; private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage"; private static final String INSTALL_CERTIFICATE_VALUE = "wifi"; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application); when(mConfigUiBase.getContext()).thenReturn(mContext); when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_PSK); mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); Loading @@ -119,6 +135,7 @@ public class WifiConfigController2Test { mEapCaCertSpinner = mView.findViewById(R.id.ca_cert); mEapUserCertSpinner = mView.findViewById(R.id.user_cert); mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); mUnspecifiedCertString = mContext.getString(R.string.wifi_unspecified); mDoNotProvideEapUserCertString = mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); ipSettingsSpinner.setSelection(DHCP); Loading Loading @@ -709,7 +726,6 @@ public class WifiConfigController2Test { Phase2.AKA_PRIME); } @Test public void getEapConfig_withPeapPhase2Unknown_shouldContainNoneMethod() { setUpModifyingSavedPeapConfigController(); Loading Loading @@ -835,9 +851,30 @@ public class WifiConfigController2Test { public void loadCaCertificateValue_shouldPersistentAsDefault() { setUpModifyingSavedCertificateConfigController(null, null); mEapCaCertSpinner.setSelection(POSITION_SYSTEM_CERT); assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(mUseSystemCertsString); } @Test public void onItemSelected_shouldPersistentInstallCertsAndStartInstallActivity() { String installCertsString = "install_certs"; Spinner eapCaCertSpinner = mock(Spinner.class); AdapterView view = mock(AdapterView.class); when(eapCaCertSpinner.getItemAtPosition(anyInt())).thenReturn(view); when(view.toString()).thenReturn(installCertsString); mController.mInstallCertsString = installCertsString; mController.mEapCaCertSpinner = eapCaCertSpinner; mController.onItemSelected(eapCaCertSpinner, null, POSITION_INSTALL_CERT, 0); final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).startActivity(argumentCaptor.capture()); final Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(ACTION_INSTALL_CERTS); assertThat(intent.getExtra(KEY_INSTALL_CERTIFICATE, "")) .isEqualTo(INSTALL_CERTIFICATE_VALUE); } @Test public void loadSavedCaCertificateValue_shouldBeCorrectValue() { setUpModifyingSavedCertificateConfigController(SAVED_CA_CERT, null); Loading Loading
src/com/android/settings/wifi/AddNetworkFragment.java +7 −1 Original line number Diff line number Diff line Loading @@ -85,6 +85,13 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf return rootView; } @Override public void onResume() { super.onResume(); mUIController.showSecurityFields( /* refreshEapMethods */ false, /* refreshCertificates */ true); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); Loading @@ -110,7 +117,6 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER) { if (resultCode != Activity.RESULT_OK) { return; Loading
src/com/android/settings/wifi/ConfigureWifiEntryFragment.java +7 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,13 @@ public class ConfigureWifiEntryFragment extends InstrumentedFragment implements return rootView; } @Override public void onResume() { super.onResume(); mUiController.showSecurityFields( /* refreshEapMethods */ false, /* refreshCertificates */ true); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); Loading
src/com/android/settings/wifi/WifiConfigController2.java +37 −8 Original line number Diff line number Diff line Loading @@ -16,7 +16,10 @@ package com.android.settings.wifi; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.InetAddresses; import android.net.IpConfiguration; Loading @@ -32,6 +35,7 @@ import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiManager; import android.os.IBinder; import android.os.UserHandle; import android.security.keystore.KeyProperties; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; Loading Loading @@ -144,6 +148,15 @@ public class WifiConfigController2 implements TextWatcher, UNDESIRED_CERTIFICATE_MACRANDSAPSECRET }; /* These values are for install certificate */ private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller"; private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain"; private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage"; private static final String INSTALL_CERTIFICATE_VALUE = "wifi"; protected int REQUEST_INSTALL_CERTS = 1; /* Phase2 methods supported by PEAP are limited */ private ArrayAdapter<CharSequence> mPhase2PeapAdapter; /* Phase2 methods supported by TTLS are limited */ Loading @@ -159,12 +172,13 @@ public class WifiConfigController2 implements TextWatcher, private String mMultipleCertSetString; private String mUseSystemCertsString; private String mDoNotProvideEapUserCertString; @VisibleForTesting String mInstallCertsString; private Spinner mSecuritySpinner; @VisibleForTesting Spinner mEapMethodSpinner; private int mLastShownEapMethod; @VisibleForTesting Spinner mEapSimSpinner; // For EAP-SIM, EAP-AKA and EAP-AKA-PRIME. private Spinner mEapCaCertSpinner; @VisibleForTesting Spinner mEapCaCertSpinner; private Spinner mEapOcspSpinner; private TextView mEapDomainView; private Spinner mPhase2Spinner; Loading Loading @@ -258,6 +272,7 @@ public class WifiConfigController2 implements TextWatcher, mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); mDoNotProvideEapUserCertString = mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); mInstallCertsString = mContext.getString(R.string.wifi_install_credentials); mSsidScanButton = (ImageButton) mView.findViewById(R.id.ssid_scanner_button); mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); Loading Loading @@ -942,7 +957,7 @@ public class WifiConfigController2 implements TextWatcher, } } private void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) { protected void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) { if (mWifiEntrySecurity == WifiEntry.SECURITY_NONE || mWifiEntrySecurity == WifiEntry.SECURITY_OWE) { mView.findViewById(R.id.security_fields).setVisibility(View.GONE); Loading Loading @@ -1031,11 +1046,8 @@ public class WifiConfigController2 implements TextWatcher, mDoNotProvideEapUserCertString, false /* showMultipleCerts */, false /* showUsePreinstalledCertOption */); // To avoid the user connects to a non-secure network unexpectedly, // request using system trusted certificates by default // unless the user explicitly chooses "Do not validate" or other // CA certificates. setSelection(mEapCaCertSpinner, mUseSystemCertsString); setSelection(mEapCaCertSpinner, mUnspecifiedCertString); } // Modifying an existing network Loading Loading @@ -1494,6 +1506,7 @@ public class WifiConfigController2 implements TextWatcher, } if (showUsePreinstalledCertOption) { certs.add(mUseSystemCertsString); certs.add(mInstallCertsString); } if (choices != null && choices.size() != 0) { Loading Loading @@ -1661,6 +1674,10 @@ public class WifiConfigController2 implements TextWatcher, showSecurityFields(/* refreshEapMethods */false, /* refreshCertificates */ true); } } else if (parent == mEapCaCertSpinner) { String selectedItem = parent.getItemAtPosition(position).toString(); if (selectedItem.equals(mInstallCertsString)) { startActivityForInstallCerts(); } showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false); } else if (parent == mPhase2Spinner && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) { Loading @@ -1682,6 +1699,18 @@ public class WifiConfigController2 implements TextWatcher, // } /** * Start the install page for user to install the existing certificate. */ private void startActivityForInstallCerts() { Intent intent = new Intent(ACTION_INSTALL_CERTS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(new ComponentName(PACKAGE_INSTALL_CERTS, CLASS_INSTALL_CERTS)); intent.putExtra(KEY_INSTALL_CERTIFICATE, INSTALL_CERTIFICATE_VALUE); mContext.startActivity(intent); } /** * Make the characters of the password visible if show_password is checked. */ Loading
tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java +39 −2 Original line number Diff line number Diff line Loading @@ -18,11 +18,17 @@ package com.android.settings.wifi; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.IpConfiguration; import android.net.wifi.WifiConfiguration; Loading @@ -30,12 +36,14 @@ import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiManager; import android.os.UserHandle; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.LinearLayout; Loading @@ -54,6 +62,7 @@ import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; Loading Loading @@ -81,6 +90,7 @@ public class WifiConfigController2Test { private Spinner mHiddenSettingsSpinner; private Spinner mEapCaCertSpinner; private Spinner mEapUserCertSpinner; private String mUnspecifiedCertString; private String mUseSystemCertsString; private String mDoNotProvideEapUserCertString; private ShadowSubscriptionManager mShadowSubscriptionManager; Loading @@ -107,10 +117,16 @@ public class WifiConfigController2Test { private static final String SAVED_CA_CERT = "saved CA cert"; private static final String SAVED_USER_CERT = "saved user cert"; private static final int POSITION_SYSTEM_CERT = 1; private static final int POSITION_INSTALL_CERT = 2; private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage"; private static final String INSTALL_CERTIFICATE_VALUE = "wifi"; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application); when(mConfigUiBase.getContext()).thenReturn(mContext); when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_PSK); mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); Loading @@ -119,6 +135,7 @@ public class WifiConfigController2Test { mEapCaCertSpinner = mView.findViewById(R.id.ca_cert); mEapUserCertSpinner = mView.findViewById(R.id.user_cert); mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); mUnspecifiedCertString = mContext.getString(R.string.wifi_unspecified); mDoNotProvideEapUserCertString = mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); ipSettingsSpinner.setSelection(DHCP); Loading Loading @@ -709,7 +726,6 @@ public class WifiConfigController2Test { Phase2.AKA_PRIME); } @Test public void getEapConfig_withPeapPhase2Unknown_shouldContainNoneMethod() { setUpModifyingSavedPeapConfigController(); Loading Loading @@ -835,9 +851,30 @@ public class WifiConfigController2Test { public void loadCaCertificateValue_shouldPersistentAsDefault() { setUpModifyingSavedCertificateConfigController(null, null); mEapCaCertSpinner.setSelection(POSITION_SYSTEM_CERT); assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(mUseSystemCertsString); } @Test public void onItemSelected_shouldPersistentInstallCertsAndStartInstallActivity() { String installCertsString = "install_certs"; Spinner eapCaCertSpinner = mock(Spinner.class); AdapterView view = mock(AdapterView.class); when(eapCaCertSpinner.getItemAtPosition(anyInt())).thenReturn(view); when(view.toString()).thenReturn(installCertsString); mController.mInstallCertsString = installCertsString; mController.mEapCaCertSpinner = eapCaCertSpinner; mController.onItemSelected(eapCaCertSpinner, null, POSITION_INSTALL_CERT, 0); final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).startActivity(argumentCaptor.capture()); final Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(ACTION_INSTALL_CERTS); assertThat(intent.getExtra(KEY_INSTALL_CERTIFICATE, "")) .isEqualTo(INSTALL_CERTIFICATE_VALUE); } @Test public void loadSavedCaCertificateValue_shouldBeCorrectValue() { setUpModifyingSavedCertificateConfigController(SAVED_CA_CERT, null); Loading