Merge "Fix the bug of losing Wi-Fi certificate when editing" into rvc-qpr-dev
This commit is contained in:
@@ -164,6 +164,7 @@ public class WifiConfigController2 implements TextWatcher,
|
||||
private ScrollView mDialogContainer;
|
||||
private Spinner mSecuritySpinner;
|
||||
@VisibleForTesting Spinner mEapMethodSpinner;
|
||||
private int mLastShownEapMethod;
|
||||
@VisibleForTesting Spinner mEapSimSpinner; // For EAP-SIM, EAP-AKA and EAP-AKA-PRIME.
|
||||
private Spinner mEapCaCertSpinner;
|
||||
private Spinner mEapOcspSpinner;
|
||||
@@ -1057,6 +1058,7 @@ public class WifiConfigController2 implements TextWatcher,
|
||||
final int eapMethod = enterpriseConfig.getEapMethod();
|
||||
final int phase2Method = enterpriseConfig.getPhase2Method();
|
||||
mEapMethodSpinner.setSelection(eapMethod);
|
||||
mLastShownEapMethod = eapMethod;
|
||||
showEapFieldsByMethod(eapMethod);
|
||||
switch (eapMethod) {
|
||||
case Eap.PEAP:
|
||||
@@ -1627,7 +1629,11 @@ public class WifiConfigController2 implements TextWatcher,
|
||||
mSsidScanButton.setVisibility(View.GONE);
|
||||
}
|
||||
} else if (parent == mEapMethodSpinner) {
|
||||
showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ true);
|
||||
final int selectedItemPosition = mEapMethodSpinner.getSelectedItemPosition();
|
||||
if (mLastShownEapMethod != selectedItemPosition) {
|
||||
mLastShownEapMethod = selectedItemPosition;
|
||||
showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ true);
|
||||
}
|
||||
} else if (parent == mEapCaCertSpinner) {
|
||||
showSecurityFields(/* refreshEapMethods */ false, /* refreshCertificates */ false);
|
||||
} else if (parent == mPhase2Spinner
|
||||
|
@@ -18,7 +18,9 @@ package com.android.settings.wifi;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.anyInt;
|
||||
import static org.mockito.Mockito.anyString;
|
||||
import static org.mockito.Mockito.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
@@ -32,6 +34,7 @@ import android.net.wifi.WifiEnterpriseConfig.Eap;
|
||||
import android.net.wifi.WifiEnterpriseConfig.Phase2;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.ServiceSpecificException;
|
||||
import android.security.Credentials;
|
||||
import android.security.KeyStore;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
@@ -78,6 +81,10 @@ public class WifiConfigController2Test {
|
||||
private KeyStore mKeyStore;
|
||||
private View mView;
|
||||
private Spinner mHiddenSettingsSpinner;
|
||||
private Spinner mEapCaCertSpinner;
|
||||
private Spinner mEapUserCertSpinner;
|
||||
private String mUseSystemCertsString;
|
||||
private String mDoNotProvideEapUserCertString;
|
||||
private ShadowSubscriptionManager mShadowSubscriptionManager;
|
||||
|
||||
public WifiConfigController2 mController;
|
||||
@@ -98,6 +105,9 @@ public class WifiConfigController2Test {
|
||||
private static final String NUMBER_AND_CHARACTER_KEY = "123456abcd";
|
||||
private static final String PARTIAL_NUMBER_AND_CHARACTER_KEY = "123456abc?";
|
||||
private static final int DHCP = 0;
|
||||
// Saved certificates
|
||||
private static final String SAVED_CA_CERT = "saved CA cert";
|
||||
private static final String SAVED_USER_CERT = "saved user cert";
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -108,6 +118,11 @@ public class WifiConfigController2Test {
|
||||
mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null);
|
||||
final Spinner ipSettingsSpinner = mView.findViewById(R.id.ip_settings);
|
||||
mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings);
|
||||
mEapCaCertSpinner = mView.findViewById(R.id.ca_cert);
|
||||
mEapUserCertSpinner = mView.findViewById(R.id.user_cert);
|
||||
mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs);
|
||||
mDoNotProvideEapUserCertString =
|
||||
mContext.getString(R.string.wifi_do_not_provide_eap_user_cert);
|
||||
ipSettingsSpinner.setSelection(DHCP);
|
||||
mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
|
||||
|
||||
@@ -835,4 +850,75 @@ public class WifiConfigController2Test {
|
||||
final WifiConfiguration wifiConfiguration = mController.getConfig();
|
||||
assertThat(wifiConfiguration.carrierId).isEqualTo(carrierId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadCaCertificateValue_shouldPersistentAsDefault() {
|
||||
setUpModifyingSavedCertificateConfigController(null, null);
|
||||
|
||||
assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(mUseSystemCertsString);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadSavedCaCertificateValue_shouldBeCorrectValue() {
|
||||
setUpModifyingSavedCertificateConfigController(SAVED_CA_CERT, null);
|
||||
|
||||
assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(SAVED_CA_CERT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadUserCertificateValue_shouldPersistentAsDefault() {
|
||||
setUpModifyingSavedCertificateConfigController(null, null);
|
||||
|
||||
assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(mDoNotProvideEapUserCertString);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadSavedUserCertificateValue_shouldBeCorrectValue() {
|
||||
setUpModifyingSavedCertificateConfigController(null, SAVED_USER_CERT);
|
||||
|
||||
assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(SAVED_USER_CERT);
|
||||
}
|
||||
|
||||
private void setUpModifyingSavedCertificateConfigController(String savedCaCertificate,
|
||||
String savedUserCertificate) {
|
||||
final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
|
||||
final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
|
||||
mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig;
|
||||
when(mWifiEntry.isSaved()).thenReturn(true);
|
||||
when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP);
|
||||
when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
|
||||
when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
|
||||
when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.TLS);
|
||||
if (savedCaCertificate != null) {
|
||||
String[] savedCaCertificates = new String[]{savedCaCertificate};
|
||||
when(mockWifiEnterpriseConfig.getCaCertificateAliases())
|
||||
.thenReturn(savedCaCertificates);
|
||||
when(mKeyStore.list(eq(Credentials.CA_CERTIFICATE), anyInt()))
|
||||
.thenReturn(savedCaCertificates);
|
||||
}
|
||||
if (savedUserCertificate != null) {
|
||||
String[] savedUserCertificates = new String[]{savedUserCertificate};
|
||||
when(mockWifiEnterpriseConfig.getClientCertificateAlias())
|
||||
.thenReturn(savedUserCertificate);
|
||||
when(mKeyStore.list(eq(Credentials.USER_PRIVATE_KEY), anyInt()))
|
||||
.thenReturn(savedUserCertificates);
|
||||
}
|
||||
|
||||
mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry,
|
||||
WifiConfigUiBase2.MODE_MODIFY);
|
||||
|
||||
// Because Robolectric has a different behavior from normal flow.
|
||||
//
|
||||
// Normal flow:
|
||||
// showSecurityFields start -> mEapMethodSpinner.setSelection
|
||||
// -> showSecurityFields end -> mController.onItemSelected
|
||||
//
|
||||
// Robolectric flow:
|
||||
// showSecurityFields start -> mEapMethodSpinner.setSelection
|
||||
// -> mController.onItemSelected -> showSecurityFields end
|
||||
//
|
||||
// We need to add a redundant mEapMethodSpinner.setSelection here to verify whether the
|
||||
// certificates are covered by mController.onItemSelected after showSecurityFields end.
|
||||
mController.mEapMethodSpinner.setSelection(Eap.TLS);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user