[Wi-Fi] Can't change EAP method for a saved enterprise Wi-Fi network

Should only allow saved network UI initialization for once.

Bug: 140362368
Test: WifiConfigControllerTest
      manual:
      Manually change EAP method and other security fields for a saved
      Wi-Fi neterprise network.

Change-Id: Iddc1dae53849760f43b41b75262358dff6ba09af
Merged-In: Iddc1dae53849760f43b41b75262358dff6ba09af
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 8e0da6b..12d5a90 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -987,7 +987,9 @@
         }
         mView.findViewById(R.id.eap).setVisibility(View.VISIBLE);
 
+        boolean initiateEnterpriseNetworkUi = false;
         if (mEapMethodSpinner == null) {
+            initiateEnterpriseNetworkUi = true;
             mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method);
             mEapMethodSpinner.setOnItemSelectedListener(this);
             mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
@@ -1045,7 +1047,7 @@
         }
 
         // Modifying an existing network
-        if (mAccessPoint != null && mAccessPoint.isSaved()) {
+        if (initiateEnterpriseNetworkUi && mAccessPoint != null && mAccessPoint.isSaved()) {
             final WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig;
             final int eapMethod = enterpriseConfig.getEapMethod();
             final int phase2Method = enterpriseConfig.getPhase2Method();
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index dd7ecde..669a2e6 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -28,6 +28,8 @@
 
 import android.content.Context;
 import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiEnterpriseConfig;
+import android.net.wifi.WifiEnterpriseConfig.Eap;
 import android.net.wifi.WifiManager;
 import android.os.ServiceSpecificException;
 import android.security.KeyStore;
@@ -469,4 +471,22 @@
         final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition();
         assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS");
     }
+
+    @Test
+    public void selectEapMethod_savedAccessPoint_shouldGetCorrectPosition() {
+        when(mAccessPoint.isSaved()).thenReturn(true);
+        when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_EAP);
+        final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
+        final WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
+        when(mockWifiEnterpriseConfig.getEapMethod()).thenReturn(Eap.PEAP);
+        mockWifiConfig.enterpriseConfig = mockWifiEnterpriseConfig ;
+        when(mAccessPoint.getConfig()).thenReturn(mockWifiConfig);
+        mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint,
+                WifiConfigUiBase.MODE_MODIFY);
+        final Spinner eapMethodSpinner = mView.findViewById(R.id.method);
+
+        eapMethodSpinner.setSelection(Eap.TLS);
+
+        assertThat(eapMethodSpinner.getSelectedItemPosition()).isEqualTo(Eap.TLS);
+    }
 }