From 0c6f8065c2846dd7d0a3bfcc1ea1e8549896a521 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Thu, 13 Sep 2018 13:46:16 -0700 Subject: [PATCH] Fix bug in Add network fragment After we switch secutiry from EAP to WPA, add button will become disabled forever. Main reason is that we use view visibility to decide which security type it is. In this case target view is visible while its parent view is gone. So even though UI shows correctly however we still think it is in EAP mode. This CL check the mAccessPointSecurity directly instead of depending on fragile view. Fixes: 114689178 Test: RunSettingsRoboTests Change-Id: I4284d25e6bf86ee7c5e7c0e17f0834c719d8d587 --- .../settings/wifi/WifiConfigController.java | 9 +++------ .../settings/wifi/WifiConfigControllerTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index de67c10baac..2e6611fc185 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -465,8 +465,7 @@ public class WifiConfigController implements TextWatcher, } else { enabled = ipAndProxyFieldsAreValid(); } - if (mEapCaCertSpinner != null - && mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) { + if (mAccessPointSecurity == AccessPoint.SECURITY_EAP) { String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem(); if (caCertSelection.equals(mUnspecifiedCertString)) { // Disallow submit if the user has not selected a CA certificate for an EAP network @@ -482,10 +481,8 @@ public class WifiConfigController implements TextWatcher, enabled = false; } } - if (mEapUserCertSpinner != null - && mView.findViewById(R.id.l_user_cert).getVisibility() != View.GONE - && ((String) mEapUserCertSpinner.getSelectedItem()) - .equals(mUnspecifiedCertString)) { + if (mAccessPointSecurity == AccessPoint.SECURITY_EAP + && mEapUserCertSpinner.getSelectedItem().equals(mUnspecifiedCertString)) { // Disallow submit if the user has not selected a user certificate for an EAP network // configuration. enabled = false; diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java index 5e8dd28ba1f..54be773d75e 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java @@ -183,6 +183,22 @@ public class WifiConfigControllerTest { mController.isSubmittable(); } + @Test + public void isSubmittable_EapToPskWithValidPassword_shouldReturnTrue() { + final TextView password = mView.findViewById(R.id.password); + final Spinner securitySpinner = mView.findViewById(R.id.security); + assertThat(password).isNotNull(); + assertThat(securitySpinner).isNotNull(); + when(mAccessPoint.isSaved()).thenReturn(true); + + // Change it from EAP to PSK + mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_EAP, 0); + mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_PSK, 0); + password.setText(GOOD_PSK); + + assertThat(mController.isSubmittable()).isTrue(); + } + @Test public void getSignalString_notReachable_shouldHaveNoSignalString() { when(mAccessPoint.isReachable()).thenReturn(false);