1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.wifi; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.ArgumentMatchers.anyInt; 22 import static org.mockito.ArgumentMatchers.nullable; 23 import static org.mockito.Mockito.doNothing; 24 import static org.mockito.Mockito.mock; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.verify; 27 import static org.mockito.Mockito.when; 28 import static org.robolectric.Shadows.shadowOf; 29 30 import android.content.Context; 31 import android.content.Intent; 32 import android.content.res.Resources; 33 import android.net.IpConfiguration; 34 import android.net.wifi.WifiConfiguration; 35 import android.net.wifi.WifiEnterpriseConfig; 36 import android.net.wifi.WifiEnterpriseConfig.Eap; 37 import android.net.wifi.WifiEnterpriseConfig.Phase2; 38 import android.net.wifi.WifiManager; 39 import android.os.UserHandle; 40 import android.telephony.SubscriptionInfo; 41 import android.telephony.SubscriptionManager; 42 import android.telephony.TelephonyManager; 43 import android.view.LayoutInflater; 44 import android.view.View; 45 import android.view.inputmethod.InputMethodManager; 46 import android.widget.AdapterView; 47 import android.widget.ArrayAdapter; 48 import android.widget.CheckBox; 49 import android.widget.LinearLayout; 50 import android.widget.Spinner; 51 import android.widget.TextView; 52 53 import com.android.settings.R; 54 import com.android.settings.network.SubscriptionUtil; 55 import com.android.settings.testutils.shadow.ShadowConnectivityManager; 56 import com.android.settings.utils.AndroidKeystoreAliasLoader; 57 import com.android.settings.wifi.details2.WifiPrivacyPreferenceController2; 58 import com.android.wifitrackerlib.WifiEntry; 59 60 import com.google.common.collect.ImmutableList; 61 62 import org.junit.Before; 63 import org.junit.Test; 64 import org.junit.runner.RunWith; 65 import org.mockito.ArgumentCaptor; 66 import org.mockito.Mock; 67 import org.mockito.MockitoAnnotations; 68 import org.robolectric.RobolectricTestRunner; 69 import org.robolectric.RuntimeEnvironment; 70 import org.robolectric.Shadows; 71 import org.robolectric.annotation.Config; 72 import org.robolectric.shadows.ShadowInputMethodManager; 73 import org.robolectric.shadows.ShadowSubscriptionManager; 74 75 import java.util.Arrays; 76 77 @RunWith(RobolectricTestRunner.class) 78 @Config(shadows = ShadowConnectivityManager.class) 79 public class WifiConfigController2Test { 80 81 @Mock 82 private WifiConfigUiBase2 mConfigUiBase; 83 @Mock 84 private Context mContext; 85 @Mock 86 private WifiEntry mWifiEntry; 87 @Mock 88 private AndroidKeystoreAliasLoader mAndroidKeystoreAliasLoader; 89 private View mView; 90 private Spinner mHiddenSettingsSpinner; 91 private Spinner mEapCaCertSpinner; 92 private Spinner mEapUserCertSpinner; 93 private String mUnspecifiedCertString; 94 private String mUseSystemCertsString; 95 private String mDoNotProvideEapUserCertString; 96 private ShadowSubscriptionManager mShadowSubscriptionManager; 97 98 public WifiConfigController2 mController; 99 private static final String HEX_PSK = "01234567012345670123456701234567012345670123456701234567" 100 + "01abcdef"; 101 // An invalid ASCII PSK pass phrase. It is 64 characters long, must not be greater than 63 102 private static final String LONG_PSK = 103 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl"; 104 // An invalid PSK pass phrase. It is 7 characters long, must be at least 8 105 private static final String SHORT_PSK = "abcdefg"; 106 // Valid PSK pass phrase 107 private static final String GOOD_PSK = "abcdefghijklmnopqrstuvwxyz"; 108 private static final String GOOD_SSID = "abc"; 109 private static final String VALID_HEX_PSK = 110 "123456789012345678901234567890123456789012345678901234567890abcd"; 111 private static final String INVALID_HEX_PSK = 112 "123456789012345678901234567890123456789012345678901234567890ghij"; 113 private static final String NUMBER_AND_CHARACTER_KEY = "123456abcd"; 114 private static final String PARTIAL_NUMBER_AND_CHARACTER_KEY = "123456abc?"; 115 private static final int DHCP = 0; 116 // Saved certificates 117 private static final String SAVED_CA_CERT = "saved CA cert"; 118 private static final String SAVED_USER_CERT = "saved user cert"; 119 120 private static final int POSITION_SYSTEM_CERT = 1; 121 private static final int POSITION_INSTALL_CERT = 2; 122 private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL"; 123 private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage"; 124 private static final String INSTALL_CERTIFICATE_VALUE = "wifi"; 125 126 @Before setUp()127 public void setUp() { 128 MockitoAnnotations.initMocks(this); 129 mContext = spy(RuntimeEnvironment.application); 130 when(mConfigUiBase.getContext()).thenReturn(mContext); 131 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_PSK); 132 mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); 133 final Spinner ipSettingsSpinner = mView.findViewById(R.id.ip_settings); 134 mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings); 135 mEapCaCertSpinner = mView.findViewById(R.id.ca_cert); 136 mEapUserCertSpinner = mView.findViewById(R.id.user_cert); 137 mUseSystemCertsString = mContext.getString(R.string.wifi_use_system_certs); 138 mUnspecifiedCertString = mContext.getString(R.string.wifi_unspecified); 139 mDoNotProvideEapUserCertString = 140 mContext.getString(R.string.wifi_do_not_provide_eap_user_cert); 141 ipSettingsSpinner.setSelection(DHCP); 142 mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class)); 143 144 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 145 WifiConfigUiBase2.MODE_CONNECT); 146 } 147 148 @Test ssidExceeds32Bytes_shouldShowSsidTooLongWarning()149 public void ssidExceeds32Bytes_shouldShowSsidTooLongWarning() { 150 mController = new TestWifiConfigController2(mConfigUiBase, mView, null /* wifiEntry */, 151 WifiConfigUiBase2.MODE_CONNECT); 152 final TextView ssid = mView.findViewById(R.id.ssid); 153 assertThat(ssid).isNotNull(); 154 ssid.setText("☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎"); 155 mController.showWarningMessagesIfAppropriate(); 156 157 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 158 .isEqualTo(View.VISIBLE); 159 } 160 161 @Test ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning()162 public void ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning() { 163 mController = new TestWifiConfigController2(mConfigUiBase, mView, null /* wifiEntry */, 164 WifiConfigUiBase2.MODE_CONNECT); 165 166 final TextView ssid = mView.findViewById(R.id.ssid); 167 assertThat(ssid).isNotNull(); 168 ssid.setText("123456789012345678901234567890"); 169 mController.showWarningMessagesIfAppropriate(); 170 171 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 172 .isEqualTo(View.GONE); 173 174 ssid.setText("123"); 175 mController.showWarningMessagesIfAppropriate(); 176 177 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 178 .isEqualTo(View.GONE); 179 } 180 181 @Test isSubmittable_noSSID_shouldReturnFalse()182 public void isSubmittable_noSSID_shouldReturnFalse() { 183 final TextView ssid = mView.findViewById(R.id.ssid); 184 assertThat(ssid).isNotNull(); 185 ssid.setText(""); 186 assertThat(mController.isSubmittable()).isFalse(); 187 } 188 189 @Test isSubmittable_longPsk_shouldReturnFalse()190 public void isSubmittable_longPsk_shouldReturnFalse() { 191 final TextView password = mView.findViewById(R.id.password); 192 assertThat(password).isNotNull(); 193 password.setText(LONG_PSK); 194 assertThat(mController.isSubmittable()).isFalse(); 195 } 196 197 @Test isSubmittable_shortPsk_shouldReturnFalse()198 public void isSubmittable_shortPsk_shouldReturnFalse() { 199 final TextView password = mView.findViewById(R.id.password); 200 assertThat(password).isNotNull(); 201 password.setText(SHORT_PSK); 202 assertThat(mController.isSubmittable()).isFalse(); 203 } 204 205 @Test isSubmittable_goodPsk_shouldReturnTrue()206 public void isSubmittable_goodPsk_shouldReturnTrue() { 207 final TextView password = mView.findViewById(R.id.password); 208 assertThat(password).isNotNull(); 209 password.setText(GOOD_PSK); 210 assertThat(mController.isSubmittable()).isTrue(); 211 } 212 213 @Test isSubmittable_hexPsk_shouldReturnTrue()214 public void isSubmittable_hexPsk_shouldReturnTrue() { 215 final TextView password = mView.findViewById(R.id.password); 216 assertThat(password).isNotNull(); 217 password.setText(HEX_PSK); 218 assertThat(mController.isSubmittable()).isTrue(); 219 } 220 221 @Test isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue()222 public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() { 223 final TextView password = mView.findViewById(R.id.password); 224 assertThat(password).isNotNull(); 225 password.setText(""); 226 when(mWifiEntry.isSaved()).thenReturn(true); 227 assertThat(mController.isSubmittable()).isTrue(); 228 } 229 230 @Test isSubmittable_nullWifiEntry_noException()231 public void isSubmittable_nullWifiEntry_noException() { 232 mController = new TestWifiConfigController2(mConfigUiBase, mView, null, 233 WifiConfigUiBase2.MODE_CONNECT); 234 mController.isSubmittable(); 235 } 236 237 @Test isSubmittable_EapToPskWithValidPassword_shouldReturnTrue()238 public void isSubmittable_EapToPskWithValidPassword_shouldReturnTrue() { 239 mController = new TestWifiConfigController2(mConfigUiBase, mView, null, 240 WifiConfigUiBase2.MODE_CONNECT); 241 final TextView ssid = mView.findViewById(R.id.ssid); 242 final TextView password = mView.findViewById(R.id.password); 243 final Spinner securitySpinner = mView.findViewById(R.id.security); 244 assertThat(password).isNotNull(); 245 assertThat(securitySpinner).isNotNull(); 246 when(mWifiEntry.isSaved()).thenReturn(true); 247 248 // Change it from EAP to PSK 249 mController.onItemSelected(securitySpinner, null, WifiEntry.SECURITY_EAP, 0); 250 mController.onItemSelected(securitySpinner, null, WifiEntry.SECURITY_PSK, 0); 251 password.setText(GOOD_PSK); 252 ssid.setText(GOOD_SSID); 253 254 assertThat(mController.isSubmittable()).isTrue(); 255 } 256 257 @Test isSubmittable_EapWithAkaMethod_shouldReturnTrue()258 public void isSubmittable_EapWithAkaMethod_shouldReturnTrue() { 259 when(mWifiEntry.isSaved()).thenReturn(true); 260 mController.mWifiEntrySecurity = WifiEntry.SECURITY_EAP; 261 mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE); 262 263 assertThat(mController.isSubmittable()).isTrue(); 264 } 265 266 @Test isSubmittable_caCertWithoutDomain_shouldReturnFalse()267 public void isSubmittable_caCertWithoutDomain_shouldReturnFalse() { 268 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); 269 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 270 WifiConfigUiBase2.MODE_CONNECT); 271 mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); 272 final Spinner eapCaCertSpinner = mView.findViewById(R.id.ca_cert); 273 eapCaCertSpinner.setAdapter(mController.getSpinnerAdapter(new String[]{"certificate"})); 274 eapCaCertSpinner.setSelection(0); 275 mView.findViewById(R.id.l_domain).setVisibility(View.VISIBLE); 276 277 assertThat(mController.isSubmittable()).isFalse(); 278 } 279 280 @Test isSubmittable_caCertWithDomain_shouldReturnTrue()281 public void isSubmittable_caCertWithDomain_shouldReturnTrue() { 282 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); 283 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 284 WifiConfigUiBase2.MODE_CONNECT); 285 mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); 286 final Spinner eapCaCertSpinner = mView.findViewById(R.id.ca_cert); 287 eapCaCertSpinner.setAdapter(mController.getSpinnerAdapter(new String[]{"certificate"})); 288 eapCaCertSpinner.setSelection(0); 289 mView.findViewById(R.id.l_domain).setVisibility(View.VISIBLE); 290 ((TextView) mView.findViewById(R.id.domain)).setText("fakeDomain"); 291 292 assertThat(mController.isSubmittable()).isTrue(); 293 } 294 295 @Test getSignalString_notReachable_shouldHaveNoSignalString()296 public void getSignalString_notReachable_shouldHaveNoSignalString() { 297 when(mWifiEntry.getLevel()).thenReturn(WifiEntry.WIFI_LEVEL_UNREACHABLE); 298 299 assertThat(mController.getSignalString()).isNull(); 300 } 301 302 @Test loadCertificates_undesiredCertificates_shouldNotLoadUndesiredCertificates()303 public void loadCertificates_undesiredCertificates_shouldNotLoadUndesiredCertificates() { 304 final Spinner spinner = new Spinner(mContext); 305 306 mController.loadCertificates(spinner, 307 Arrays.asList(WifiConfigController.UNDESIRED_CERTIFICATES), 308 "doNotProvideEapUserCertString", 309 false /* showMultipleCerts */, 310 false /* showUsePreinstalledCertOption */); 311 312 assertThat(spinner.getAdapter().getCount()).isEqualTo(1); // doNotProvideEapUserCertString 313 } 314 315 @Test ssidGetFocus_addNewNetwork_shouldReturnTrue()316 public void ssidGetFocus_addNewNetwork_shouldReturnTrue() { 317 mController = new TestWifiConfigController2(mConfigUiBase, mView, null /* wifiEntry */, 318 WifiConfigUiBase2.MODE_CONNECT); 319 final TextView ssid = mView.findViewById(R.id.ssid); 320 // Verify ssid text get focus when add new network (wifiEntry is null) 321 assertThat(ssid.isFocused()).isTrue(); 322 } 323 324 @Test passwordGetFocus_connectSecureWifi_shouldReturnTrue()325 public void passwordGetFocus_connectSecureWifi_shouldReturnTrue() { 326 final TextView password = mView.findViewById(R.id.password); 327 // Verify password get focus when connect to secure wifi without eap type 328 assertThat(password.isFocused()).isTrue(); 329 } 330 331 @Test hiddenWarning_warningVisibilityProperlyUpdated()332 public void hiddenWarning_warningVisibilityProperlyUpdated() { 333 View warningView = mView.findViewById(R.id.hidden_settings_warning); 334 mController.onItemSelected(mHiddenSettingsSpinner, null, mController.HIDDEN_NETWORK, 0); 335 assertThat(warningView.getVisibility()).isEqualTo(View.VISIBLE); 336 337 mController.onItemSelected(mHiddenSettingsSpinner, null, mController.NOT_HIDDEN_NETWORK, 0); 338 assertThat(warningView.getVisibility()).isEqualTo(View.GONE); 339 } 340 341 @Test hiddenField_visibilityUpdatesCorrectly()342 public void hiddenField_visibilityUpdatesCorrectly() { 343 View hiddenField = mView.findViewById(R.id.hidden_settings_field); 344 assertThat(hiddenField.getVisibility()).isEqualTo(View.GONE); 345 346 mController = new TestWifiConfigController2(mConfigUiBase, mView, null /* wifiEntry */, 347 WifiConfigUiBase2.MODE_CONNECT); 348 assertThat(hiddenField.getVisibility()).isEqualTo(View.VISIBLE); 349 } 350 351 @Test securitySpinner_saeSuitebAndOweNotVisible()352 public void securitySpinner_saeSuitebAndOweNotVisible() { 353 securitySpinnerTestHelper(false, false, false); 354 } 355 356 @Test securitySpinner_saeSuitebAndOweVisible()357 public void securitySpinner_saeSuitebAndOweVisible() { 358 securitySpinnerTestHelper(true, true, true); 359 } 360 361 @Test securitySpinner_saeVisible_suitebAndOweNotVisible()362 public void securitySpinner_saeVisible_suitebAndOweNotVisible() { 363 securitySpinnerTestHelper(true, false, false); 364 } 365 366 @Test securitySpinner_oweVisible_suitebAndSaeNotVisible()367 public void securitySpinner_oweVisible_suitebAndSaeNotVisible() { 368 securitySpinnerTestHelper(false, false, true); 369 } 370 securitySpinnerTestHelper(boolean saeVisible, boolean suitebVisible, boolean oweVisible)371 private void securitySpinnerTestHelper(boolean saeVisible, boolean suitebVisible, 372 boolean oweVisible) { 373 WifiManager wifiManager = mock(WifiManager.class); 374 when(wifiManager.isWpa3SaeSupported()).thenReturn(saeVisible); 375 when(wifiManager.isWpa3SuiteBSupported()).thenReturn(suitebVisible); 376 when(wifiManager.isEnhancedOpenSupported()).thenReturn(oweVisible); 377 378 mController = new TestWifiConfigController2(mConfigUiBase, mView, null /* wifiEntry */, 379 WifiConfigUiBase2.MODE_MODIFY, wifiManager); 380 381 final Spinner securitySpinner = mView.findViewById(R.id.security); 382 final ArrayAdapter<String> adapter = (ArrayAdapter) securitySpinner.getAdapter(); 383 boolean saeFound = false; 384 boolean suitebFound = false; 385 boolean oweFound = false; 386 for (int i = 0; i < adapter.getCount(); i++) { 387 String val = adapter.getItem(i); 388 389 if (val.compareTo(mContext.getString(R.string.wifi_security_sae)) == 0) { 390 saeFound = true; 391 } 392 393 if (val.compareTo(mContext.getString(R.string.wifi_security_eap_suiteb)) == 0) { 394 suitebFound = true; 395 } 396 397 if (val.compareTo(mContext.getString(R.string.wifi_security_owe)) == 0) { 398 oweFound = true; 399 } 400 } 401 402 if (saeVisible) { 403 assertThat(saeFound).isTrue(); 404 } else { 405 assertThat(saeFound).isFalse(); 406 } 407 if (suitebVisible) { 408 assertThat(suitebFound).isTrue(); 409 } else { 410 assertThat(suitebFound).isFalse(); 411 } 412 if (oweVisible) { 413 assertThat(oweFound).isTrue(); 414 } else { 415 assertThat(oweFound).isFalse(); 416 } 417 } 418 419 public class TestWifiConfigController2 extends WifiConfigController2 { 420 TestWifiConfigController2( WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry, int mode)421 private TestWifiConfigController2( 422 WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry, int mode) { 423 super(parent, view, wifiEntry, mode); 424 } 425 TestWifiConfigController2( WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry, int mode, WifiManager wifiManager)426 private TestWifiConfigController2( 427 WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry, int mode, 428 WifiManager wifiManager) { 429 super(parent, view, wifiEntry, mode, wifiManager); 430 } 431 432 @Override getAndroidKeystoreAliasLoader()433 AndroidKeystoreAliasLoader getAndroidKeystoreAliasLoader() { 434 return mAndroidKeystoreAliasLoader; 435 } 436 } 437 438 @Test loadMacRandomizedValue_shouldPersistentAsDefault()439 public void loadMacRandomizedValue_shouldPersistentAsDefault() { 440 final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); 441 final int prefPersist = 442 WifiPrivacyPreferenceController2.translateMacRandomizedValueToPrefValue( 443 WifiConfiguration.RANDOMIZATION_PERSISTENT); 444 445 assertThat(privacySetting.getVisibility()).isEqualTo(View.VISIBLE); 446 assertThat(privacySetting.getSelectedItemPosition()).isEqualTo(prefPersist); 447 } 448 449 @Test loadSavedMacRandomizedPersistentValue_shouldCorrectMacValue()450 public void loadSavedMacRandomizedPersistentValue_shouldCorrectMacValue() { 451 checkSavedMacRandomizedValue(WifiConfiguration.RANDOMIZATION_PERSISTENT); 452 } 453 454 @Test loadSavedMacRandomizedNoneValue_shouldCorrectMacValue()455 public void loadSavedMacRandomizedNoneValue_shouldCorrectMacValue() { 456 checkSavedMacRandomizedValue(WifiConfiguration.RANDOMIZATION_NONE); 457 } 458 checkSavedMacRandomizedValue(int macRandomizedValue)459 private void checkSavedMacRandomizedValue(int macRandomizedValue) { 460 when(mWifiEntry.isSaved()).thenReturn(true); 461 final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); 462 when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); 463 when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig); 464 mockWifiConfig.macRandomizationSetting = macRandomizedValue; 465 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 466 WifiConfigUiBase2.MODE_CONNECT); 467 468 final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); 469 final int expectedPrefValue = 470 WifiPrivacyPreferenceController2.translateMacRandomizedValueToPrefValue( 471 macRandomizedValue); 472 473 assertThat(privacySetting.getVisibility()).isEqualTo(View.VISIBLE); 474 assertThat(privacySetting.getSelectedItemPosition()).isEqualTo(expectedPrefValue); 475 } 476 477 @Test saveMacRandomizedValue_noChanged_shouldPersistentAsDefault()478 public void saveMacRandomizedValue_noChanged_shouldPersistentAsDefault() { 479 WifiConfiguration config = mController.getConfig(); 480 assertThat(config.macRandomizationSetting).isEqualTo( 481 WifiConfiguration.RANDOMIZATION_PERSISTENT); 482 } 483 484 @Test saveMacRandomizedValue_ChangedToNone_shouldGetNone()485 public void saveMacRandomizedValue_ChangedToNone_shouldGetNone() { 486 final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); 487 final int prefMacNone = 488 WifiPrivacyPreferenceController2.translateMacRandomizedValueToPrefValue( 489 WifiConfiguration.RANDOMIZATION_NONE); 490 privacySetting.setSelection(prefMacNone); 491 492 WifiConfiguration config = mController.getConfig(); 493 assertThat(config.macRandomizationSetting).isEqualTo(WifiConfiguration.RANDOMIZATION_NONE); 494 } 495 496 @Test replaceTtsString_whenTargetMatched_shouldSuccess()497 public void replaceTtsString_whenTargetMatched_shouldSuccess() { 498 final CharSequence[] display = {"PEAP", "AKA1", "AKA2'"}; 499 final CharSequence[] target = {"AKA1", "AKA2'"}; 500 final CharSequence[] ttsString = {"AKA1_TTS", "AKA2_TTS"}; 501 502 final CharSequence[] resultTts = mController.findAndReplaceTargetStrings(display, target, 503 ttsString); 504 505 assertThat(resultTts[0]).isEqualTo("PEAP"); 506 assertThat(resultTts[1]).isEqualTo("AKA1_TTS"); 507 assertThat(resultTts[2]).isEqualTo("AKA2_TTS"); 508 } 509 510 @Test replaceTtsString_whenNoTargetStringMatched_originalStringShouldNotChanged()511 public void replaceTtsString_whenNoTargetStringMatched_originalStringShouldNotChanged() { 512 final CharSequence[] display = {"PEAP", "AKA1", "AKA2"}; 513 final CharSequence[] target = {"WEP1", "WEP2'"}; 514 final CharSequence[] ttsString = {"WEP1_TTS", "WEP2_TTS"}; 515 516 final CharSequence[] resultTts = mController.findAndReplaceTargetStrings(display, target, 517 ttsString); 518 519 assertThat(resultTts[0]).isEqualTo("PEAP"); 520 assertThat(resultTts[1]).isEqualTo("AKA1"); 521 assertThat(resultTts[2]).isEqualTo("AKA2"); 522 } 523 524 @Test checktEapMethodTargetAndTtsArraylength_shouldHaveSameCount()525 public void checktEapMethodTargetAndTtsArraylength_shouldHaveSameCount() { 526 final Resources resources = mContext.getResources(); 527 final String[] targetStringArray = resources.getStringArray( 528 R.array.wifi_eap_method_target_strings); 529 final String[] ttsStringArray = resources.getStringArray( 530 R.array.wifi_eap_method_tts_strings); 531 532 assertThat(targetStringArray.length).isEqualTo(ttsStringArray.length); 533 } 534 535 @Test selectSecurity_wpa3Eap192bit_eapMethodTls()536 public void selectSecurity_wpa3Eap192bit_eapMethodTls() { 537 final WifiManager wifiManager = mock(WifiManager.class); 538 when(wifiManager.isWpa3SuiteBSupported()).thenReturn(true); 539 mController = new TestWifiConfigController2(mConfigUiBase, mView, null /* wifiEntry */, 540 WifiConfigUiBase2.MODE_MODIFY, wifiManager); 541 final Spinner securitySpinner = mView.findViewById(R.id.security); 542 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 543 int wpa3Eap192bitPosition = -1; 544 final int securityCount = mController.mSecurityInPosition.length; 545 for (int i = 0; i < securityCount; i++) { 546 if (mController.mSecurityInPosition[i] != null 547 && mController.mSecurityInPosition[i] == WifiEntry.SECURITY_EAP_SUITE_B) { 548 wpa3Eap192bitPosition = i; 549 } 550 } 551 552 mController.onItemSelected(securitySpinner, /* view */ null, wpa3Eap192bitPosition, 553 /* id */ 0); 554 555 final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition(); 556 assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS"); 557 } 558 559 @Test checkImeStatus_whenAdvancedToggled_shouldBeHide()560 public void checkImeStatus_whenAdvancedToggled_shouldBeHide() { 561 final InputMethodManager inputMethodManager = mContext 562 .getSystemService(InputMethodManager.class); 563 final ShadowInputMethodManager shadowImm = Shadows.shadowOf(inputMethodManager); 564 final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); 565 566 inputMethodManager.showSoftInput(null /* view */, 0 /* flags */); 567 advButton.performClick(); 568 569 assertThat(shadowImm.isSoftInputVisible()).isFalse(); 570 } 571 572 @Test selectEapMethod_savedWifiEntry_shouldGetCorrectPosition()573 public void selectEapMethod_savedWifiEntry_shouldGetCorrectPosition() { 574 setUpModifyingSavedPeapConfigController(); 575 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 576 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 577 WifiConfiguration wifiConfiguration; 578 579 // Test EAP method PEAP 580 eapMethodSpinner.setSelection(Eap.PEAP); 581 phase2Spinner.setSelection(WifiConfigController2.WIFI_PEAP_PHASE2_MSCHAPV2); 582 wifiConfiguration = mController.getConfig(); 583 584 assertThat(wifiConfiguration.enterpriseConfig.getEapMethod()).isEqualTo(Eap.PEAP); 585 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo( 586 Phase2.MSCHAPV2); 587 588 // Test EAP method TTLS 589 eapMethodSpinner.setSelection(Eap.TTLS); 590 phase2Spinner.setSelection(WifiConfigController2.WIFI_TTLS_PHASE2_MSCHAPV2); 591 wifiConfiguration = mController.getConfig(); 592 593 assertThat(wifiConfiguration.enterpriseConfig.getEapMethod()).isEqualTo(Eap.TTLS); 594 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo( 595 Phase2.MSCHAPV2); 596 } 597 598 @Test getHiddenSettingsPosition_whenAdvancedToggled_shouldBeFirst()599 public void getHiddenSettingsPosition_whenAdvancedToggled_shouldBeFirst() { 600 final LinearLayout advancedFieldsLayout = mView.findViewById(R.id.wifi_advanced_fields); 601 final LinearLayout hiddenSettingLayout = mView.findViewById(R.id.hidden_settings_field); 602 603 final LinearLayout firstChild = (LinearLayout) advancedFieldsLayout.getChildAt(0); 604 605 assertThat(firstChild).isEqualTo(hiddenSettingLayout); 606 } 607 608 @Test getAdvancedOptionContentDescription_whenViewInitialed_shouldBeCorrect()609 public void getAdvancedOptionContentDescription_whenViewInitialed_shouldBeCorrect() { 610 final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); 611 612 assertThat(advButton.getContentDescription()).isEqualTo( 613 mContext.getString(R.string.wifi_advanced_toggle_description)); 614 } 615 616 @Test getWepConfig_withNumberAndCharacterKey_shouldContainTheSameKey()617 public void getWepConfig_withNumberAndCharacterKey_shouldContainTheSameKey() { 618 final TextView password = mView.findViewById(R.id.password); 619 password.setText(NUMBER_AND_CHARACTER_KEY); 620 mController.mWifiEntrySecurity = WifiEntry.SECURITY_WEP; 621 622 WifiConfiguration wifiConfiguration = mController.getConfig(); 623 624 assertThat(wifiConfiguration.wepKeys[0]).isEqualTo(NUMBER_AND_CHARACTER_KEY); 625 } 626 627 @Test getWepConfig_withPartialNumberAndCharacterKey_shouldContainDifferentKey()628 public void getWepConfig_withPartialNumberAndCharacterKey_shouldContainDifferentKey() { 629 final TextView password = mView.findViewById(R.id.password); 630 password.setText(PARTIAL_NUMBER_AND_CHARACTER_KEY); 631 mController.mWifiEntrySecurity = WifiEntry.SECURITY_WEP; 632 633 WifiConfiguration wifiConfiguration = mController.getConfig(); 634 635 assertThat(wifiConfiguration.wepKeys[0]).isNotEqualTo(PARTIAL_NUMBER_AND_CHARACTER_KEY); 636 } 637 638 @Test getPskConfig_withValidHexKey_shouldContainTheSameKey()639 public void getPskConfig_withValidHexKey_shouldContainTheSameKey() { 640 final TextView password = mView.findViewById(R.id.password); 641 password.setText(VALID_HEX_PSK); 642 mController.mWifiEntrySecurity = WifiEntry.SECURITY_PSK; 643 644 WifiConfiguration wifiConfiguration = mController.getConfig(); 645 646 assertThat(wifiConfiguration.preSharedKey).isEqualTo(VALID_HEX_PSK); 647 } 648 649 @Test getPskConfig_withInvalidHexKey_shouldContainDifferentKey()650 public void getPskConfig_withInvalidHexKey_shouldContainDifferentKey() { 651 final TextView password = mView.findViewById(R.id.password); 652 password.setText(INVALID_HEX_PSK); 653 mController.mWifiEntrySecurity = WifiEntry.SECURITY_PSK; 654 655 WifiConfiguration wifiConfiguration = mController.getConfig(); 656 657 assertThat(wifiConfiguration.preSharedKey).isNotEqualTo(INVALID_HEX_PSK); 658 } 659 660 @Test getEapConfig_withPhase2Gtc_shouldContainGtcMethod()661 public void getEapConfig_withPhase2Gtc_shouldContainGtcMethod() { 662 setUpModifyingSavedPeapConfigController(); 663 664 // Test EAP method PEAP 665 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 666 eapMethodSpinner.setSelection(Eap.PEAP); 667 668 // Test phase2 GTC 669 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 670 phase2Spinner.setSelection(WifiConfigController2.WIFI_PEAP_PHASE2_GTC); 671 672 WifiConfiguration wifiConfiguration = mController.getConfig(); 673 674 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.GTC); 675 } 676 677 @Test getEapConfig_withPhase2Sim_shouldContainSimMethod()678 public void getEapConfig_withPhase2Sim_shouldContainSimMethod() { 679 setUpModifyingSavedPeapConfigController(); 680 681 // Test EAP method PEAP 682 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 683 eapMethodSpinner.setSelection(Eap.PEAP); 684 685 // Test phase2 SIM 686 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 687 phase2Spinner.setSelection(WifiConfigController2.WIFI_PEAP_PHASE2_SIM); 688 689 WifiConfiguration wifiConfiguration = mController.getConfig(); 690 691 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.SIM); 692 } 693 694 @Test getEapConfig_withPhase2Aka_shouldContainAkaMethod()695 public void getEapConfig_withPhase2Aka_shouldContainAkaMethod() { 696 setUpModifyingSavedPeapConfigController(); 697 698 // Test EAP method PEAP 699 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 700 eapMethodSpinner.setSelection(Eap.PEAP); 701 702 // Test phase2 AKA 703 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 704 phase2Spinner.setSelection(WifiConfigController2.WIFI_PEAP_PHASE2_AKA); 705 706 WifiConfiguration wifiConfiguration = mController.getConfig(); 707 708 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.AKA); 709 } 710 711 @Test getEapConfig_withPhase2AkaPrime_shouldContainAkaPrimeMethod()712 public void getEapConfig_withPhase2AkaPrime_shouldContainAkaPrimeMethod() { 713 setUpModifyingSavedPeapConfigController(); 714 715 // Test EAP method PEAP 716 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 717 eapMethodSpinner.setSelection(Eap.PEAP); 718 719 // Test phase2 AKA PRIME 720 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 721 phase2Spinner.setSelection(WifiConfigController2.WIFI_PEAP_PHASE2_AKA_PRIME); 722 723 WifiConfiguration wifiConfiguration = mController.getConfig(); 724 725 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo( 726 Phase2.AKA_PRIME); 727 } 728 729 @Test getEapConfig_withPeapPhase2Unknown_shouldContainNoneMethod()730 public void getEapConfig_withPeapPhase2Unknown_shouldContainNoneMethod() { 731 setUpModifyingSavedPeapConfigController(); 732 733 // Test EAP method PEAP 734 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 735 eapMethodSpinner.setSelection(Eap.PEAP); 736 737 // Test phase2 Unknown 738 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 739 phase2Spinner.setSelection(-1); 740 741 WifiConfiguration wifiConfiguration = mController.getConfig(); 742 743 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.NONE); 744 } 745 746 @Test getEapConfig_withTTLSPhase2Pap_shouldContainPapMethod()747 public void getEapConfig_withTTLSPhase2Pap_shouldContainPapMethod() { 748 setUpModifyingSavedPeapConfigController(); 749 750 // Test EAP method TTLS 751 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 752 eapMethodSpinner.setSelection(Eap.TTLS); 753 754 // Test phase2 PAP 755 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 756 phase2Spinner.setSelection(WifiConfigController2.WIFI_TTLS_PHASE2_PAP); 757 758 WifiConfiguration wifiConfiguration = mController.getConfig(); 759 760 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.PAP); 761 } 762 763 @Test getEapConfig_withTTLSPhase2Mschap_shouldContainMschapMethod()764 public void getEapConfig_withTTLSPhase2Mschap_shouldContainMschapMethod() { 765 setUpModifyingSavedPeapConfigController(); 766 767 // Test EAP method TTLS 768 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 769 eapMethodSpinner.setSelection(Eap.TTLS); 770 771 // Test phase2 MSCHAP 772 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 773 phase2Spinner.setSelection(WifiConfigController2.WIFI_TTLS_PHASE2_MSCHAP); 774 775 WifiConfiguration wifiConfiguration = mController.getConfig(); 776 777 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.MSCHAP); 778 } 779 780 @Test getEapConfig_withTTLSPhase2Gtc_shouldContainGtcMethod()781 public void getEapConfig_withTTLSPhase2Gtc_shouldContainGtcMethod() { 782 setUpModifyingSavedPeapConfigController(); 783 784 // Test EAP method TTLS 785 final Spinner eapMethodSpinner = mView.findViewById(R.id.method); 786 eapMethodSpinner.setSelection(Eap.TTLS); 787 788 // Test phase2 GTC 789 final Spinner phase2Spinner = mView.findViewById(R.id.phase2); 790 phase2Spinner.setSelection(WifiConfigController2.WIFI_TTLS_PHASE2_GTC); 791 792 WifiConfiguration wifiConfiguration = mController.getConfig(); 793 794 assertThat(wifiConfiguration.enterpriseConfig.getPhase2Method()).isEqualTo(Phase2.GTC); 795 } 796 setUpModifyingSavedPeapConfigController()797 private void setUpModifyingSavedPeapConfigController() { 798 when(mWifiEntry.isSaved()).thenReturn(true); 799 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); 800 final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); 801 when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); 802 final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class); 803 when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.PEAP); 804 mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig; 805 when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig); 806 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 807 WifiConfigUiBase2.MODE_MODIFY); 808 } 809 810 @Test loadSims_noSim_simSpinnerDefaultNoSim()811 public void loadSims_noSim_simSpinnerDefaultNoSim() { 812 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); 813 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 814 WifiConfigUiBase2.MODE_CONNECT); 815 final Spinner eapMethodSpinner = mock(Spinner.class); 816 when(eapMethodSpinner.getSelectedItemPosition()).thenReturn( 817 WifiConfigController2.WIFI_EAP_METHOD_SIM); 818 mController.mEapMethodSpinner = eapMethodSpinner; 819 820 mController.loadSims(); 821 822 final WifiConfiguration wifiConfiguration = mController.getConfig(); 823 assertThat(wifiConfiguration.carrierId).isEqualTo(TelephonyManager.UNKNOWN_CARRIER_ID); 824 } 825 826 @Test loadSims_oneSim_simSpinnerDefaultSubscription()827 public void loadSims_oneSim_simSpinnerDefaultSubscription() { 828 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); 829 final SubscriptionInfo subscriptionInfo = mock(SubscriptionInfo.class); 830 final int carrierId = 6; 831 when(subscriptionInfo.getSubscriptionId()).thenReturn(carrierId); 832 when(subscriptionInfo.getDisplayName()).thenReturn("FAKE-CARRIER"); 833 when(subscriptionInfo.getCarrierId()).thenReturn(carrierId); 834 when(subscriptionInfo.getCarrierName()).thenReturn("FAKE-CARRIER"); 835 SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(subscriptionInfo)); 836 mShadowSubscriptionManager.setActiveSubscriptionInfoList(Arrays.asList(subscriptionInfo)); 837 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 838 WifiConfigUiBase2.MODE_CONNECT); 839 final Spinner eapMethodSpinner = mock(Spinner.class); 840 when(eapMethodSpinner.getSelectedItemPosition()).thenReturn( 841 WifiConfigController2.WIFI_EAP_METHOD_SIM); 842 mController.mEapMethodSpinner = eapMethodSpinner; 843 844 mController.loadSims(); 845 846 final WifiConfiguration wifiConfiguration = mController.getConfig(); 847 assertThat(wifiConfiguration.carrierId).isEqualTo(carrierId); 848 } 849 850 @Test loadCaCertificateValue_shouldPersistentAsDefault()851 public void loadCaCertificateValue_shouldPersistentAsDefault() { 852 setUpModifyingSavedCertificateConfigController(null, null); 853 854 mEapCaCertSpinner.setSelection(POSITION_SYSTEM_CERT); 855 assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(mUseSystemCertsString); 856 } 857 858 @Test onItemSelected_shouldPersistentInstallCertsAndStartInstallActivity()859 public void onItemSelected_shouldPersistentInstallCertsAndStartInstallActivity() { 860 String installCertsString = "install_certs"; 861 Spinner eapCaCertSpinner = mock(Spinner.class); 862 AdapterView view = mock(AdapterView.class); 863 when(eapCaCertSpinner.getItemAtPosition(anyInt())).thenReturn(view); 864 when(view.toString()).thenReturn(installCertsString); 865 mController.mInstallCertsString = installCertsString; 866 mController.mEapCaCertSpinner = eapCaCertSpinner; 867 868 mController.onItemSelected(eapCaCertSpinner, null, POSITION_INSTALL_CERT, 0); 869 870 final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 871 verify(mContext).startActivity(argumentCaptor.capture()); 872 final Intent intent = argumentCaptor.getValue(); 873 assertThat(intent.getAction()).isEqualTo(ACTION_INSTALL_CERTS); 874 assertThat(intent.getExtra(KEY_INSTALL_CERTIFICATE, "")) 875 .isEqualTo(INSTALL_CERTIFICATE_VALUE); 876 } 877 878 @Test loadSavedCaCertificateValue_shouldBeCorrectValue()879 public void loadSavedCaCertificateValue_shouldBeCorrectValue() { 880 setUpModifyingSavedCertificateConfigController(SAVED_CA_CERT, null); 881 882 assertThat(mEapCaCertSpinner.getSelectedItem()).isEqualTo(SAVED_CA_CERT); 883 } 884 885 @Test loadUserCertificateValue_shouldPersistentAsDefault()886 public void loadUserCertificateValue_shouldPersistentAsDefault() { 887 setUpModifyingSavedCertificateConfigController(null, null); 888 889 assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(mDoNotProvideEapUserCertString); 890 } 891 892 @Test loadSavedUserCertificateValue_shouldBeCorrectValue()893 public void loadSavedUserCertificateValue_shouldBeCorrectValue() { 894 setUpModifyingSavedCertificateConfigController(null, SAVED_USER_CERT); 895 896 assertThat(mEapUserCertSpinner.getSelectedItem()).isEqualTo(SAVED_USER_CERT); 897 } 898 setUpModifyingSavedCertificateConfigController(String savedCaCertificate, String savedUserCertificate)899 private void setUpModifyingSavedCertificateConfigController(String savedCaCertificate, 900 String savedUserCertificate) { 901 final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); 902 final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class); 903 904 mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig; 905 when(mWifiEntry.isSaved()).thenReturn(true); 906 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP); 907 when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig); 908 when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class)); 909 when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.TLS); 910 if (savedCaCertificate != null) { 911 String[] savedCaCertificates = new String[]{savedCaCertificate}; 912 when(mockWifiEnterpriseConfig.getCaCertificateAliases()) 913 .thenReturn(savedCaCertificates); 914 when(mAndroidKeystoreAliasLoader.getCaCertAliases()) 915 .thenReturn(ImmutableList.of(savedCaCertificate)); 916 } 917 if (savedUserCertificate != null) { 918 String[] savedUserCertificates = new String[]{savedUserCertificate}; 919 when(mockWifiEnterpriseConfig.getClientCertificateAlias()) 920 .thenReturn(savedUserCertificate); 921 when(mAndroidKeystoreAliasLoader.getKeyCertAliases()) 922 .thenReturn(ImmutableList.of(savedUserCertificate)); 923 } 924 925 mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry, 926 WifiConfigUiBase2.MODE_MODIFY); 927 928 // Because Robolectric has a different behavior from normal flow. 929 // 930 // Normal flow: 931 // showSecurityFields start -> mEapMethodSpinner.setSelection 932 // -> showSecurityFields end -> mController.onItemSelected 933 // 934 // Robolectric flow: 935 // showSecurityFields start -> mEapMethodSpinner.setSelection 936 // -> mController.onItemSelected -> showSecurityFields end 937 // 938 // We need to add a redundant mEapMethodSpinner.setSelection here to verify whether the 939 // certificates are covered by mController.onItemSelected after showSecurityFields end. 940 mController.mEapMethodSpinner.setSelection(Eap.TLS); 941 } 942 } 943