Fix advanced preferences behavior in AllInOneTetherSettings

In AllInOneTetherSettings, advanced preferences should not be hidden
again after user have expanded them.

Bug: 151954343
Test: CodeInspectionTest; AllInOneTetherSettingsTest; manually test oberved advanced preferences won't be hidden.
Change-Id: If2c7d99b7dcac4149f065eca73022a582924c90b
diff --git a/src/com/android/settings/AllInOneTetherSettings.java b/src/com/android/settings/AllInOneTetherSettings.java
index c562fae..22453a3 100644
--- a/src/com/android/settings/AllInOneTetherSettings.java
+++ b/src/com/android/settings/AllInOneTetherSettings.java
@@ -91,8 +91,12 @@
 
     private static final String KEY_DATA_SAVER_FOOTER = "disabled_on_data_saver" + DEDUP_POSTFIX;
     private static final String KEY_WIFI_TETHER_GROUP = "wifi_tether_settings_group";
-    private static final int EXPANDED_CHILD_COUNT_WITH_SECURITY_NON = 2;
-    private static final int EXPANDED_CHILD_COUNT_DEFAULT = 3;
+    @VisibleForTesting
+    static final int EXPANDED_CHILD_COUNT_DEFAULT = 3;
+    @VisibleForTesting
+    static final int EXPANDED_CHILD_COUNT_WITH_SECURITY_NON = 2;
+    @VisibleForTesting
+    static final int EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG = 3;
     private static final String TAG = "AllInOneTetherSettings";
 
     private boolean mUnavailable;
@@ -120,7 +124,6 @@
                 mUsbTethering = TetherEnabler.isUsbTethering(state);
                 mWifiTethering = TetherEnabler.isWifiTethering(state);
                 mWifiTetherGroup.setVisible(shouldShowWifiConfig());
-                reConfigInitialExpandedChildCount();
             };
 
     private final BroadcastReceiver mTetherChangeReceiver = new BroadcastReceiver() {
@@ -354,10 +357,6 @@
             mRestartWifiApAfterConfigChange = true;
             mTetherEnabler.stopTethering(TETHERING_WIFI);
         }
-
-        if (controller instanceof WifiTetherSecurityPreferenceController) {
-            reConfigInitialExpandedChildCount();
-        }
     }
 
     private SoftApConfiguration buildNewConfig() {
@@ -384,15 +383,10 @@
         return mWifiTethering || (!mBluetoothTethering && !mUsbTethering);
     }
 
-    private void reConfigInitialExpandedChildCount() {
-        getPreferenceScreen().setInitialExpandedChildrenCount(getInitialExpandedChildCount());
-    }
-
     @Override
     public int getInitialExpandedChildCount() {
         if (!shouldShowWifiConfig()) {
-            // Expand all preferences in the screen.
-            return getPreferenceScreen().getPreferenceCount();
+            return EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG;
         }
 
         if (mSecurityPreferenceController == null) {
diff --git a/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java b/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java
index 55486d2..f966e3c 100644
--- a/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/AllInOneTetherSettingsTest.java
@@ -16,6 +16,9 @@
 
 package com.android.settings;
 
+import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_DEFAULT;
+import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG;
+import static com.android.settings.AllInOneTetherSettings.EXPANDED_CHILD_COUNT_WITH_SECURITY_NON;
 import static com.android.settings.network.TetherEnabler.BLUETOOTH_TETHER_KEY;
 import static com.android.settings.network.TetherEnabler.USB_TETHER_KEY;
 import static com.android.settings.network.TetherEnabler.WIFI_TETHER_DISABLE_KEY;
@@ -29,6 +32,7 @@
 
 import android.content.Context;
 import android.net.ConnectivityManager;
+import android.net.wifi.SoftApConfiguration;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.util.FeatureFlagUtils;
@@ -36,6 +40,7 @@
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.testutils.shadow.ShadowWifiManager;
 import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController;
+import com.android.settings.wifi.tether.WifiTetherSecurityPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
@@ -65,6 +70,8 @@
     private ConnectivityManager mConnectivityManager;
     @Mock
     private UserManager mUserManager;
+    @Mock
+    private WifiTetherSecurityPreferenceController mSecurityPreferenceController;
 
     @Before
     public void setUp() {
@@ -82,6 +89,8 @@
 
         mAllInOneTetherSettings = new AllInOneTetherSettings();
         ReflectionHelpers.setField(mAllInOneTetherSettings, "mLifecycle", mock(Lifecycle.class));
+        ReflectionHelpers.setField(mAllInOneTetherSettings, "mSecurityPreferenceController",
+                mSecurityPreferenceController);
     }
 
     @Test
@@ -157,6 +166,32 @@
                 .isEqualTo(1);
     }
 
+    @Test
+    public void getInitialExpandedChildCount_shouldShowWifiConfigWithSecurity() {
+        ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTethering", true);
+        when(mSecurityPreferenceController.getSecurityType())
+                .thenReturn(SoftApConfiguration.SECURITY_TYPE_WPA2_PSK);
+        assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount())
+                .isEqualTo(EXPANDED_CHILD_COUNT_DEFAULT);
+    }
+
+    @Test
+    public void getInitialExpandedChildCount_shouldShowWifiConfigWithoutSecurity() {
+        ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTethering", true);
+        when(mSecurityPreferenceController.getSecurityType())
+                .thenReturn(SoftApConfiguration.SECURITY_TYPE_OPEN);
+        assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount())
+                .isEqualTo(EXPANDED_CHILD_COUNT_WITH_SECURITY_NON);
+    }
+
+    @Test
+    public void getInitialExpandedChildCount_shouldNotShowWifiConfig() {
+        ReflectionHelpers.setField(mAllInOneTetherSettings, "mWifiTethering", false);
+        ReflectionHelpers.setField(mAllInOneTetherSettings, "mBluetoothTethering", true);
+        assertThat(mAllInOneTetherSettings.getInitialExpandedChildCount())
+                .isEqualTo(EXPANDED_CHILD_COUNT_WITHOUT_WIFI_CONFIG);
+    }
+
     private void setupIsTetherAvailable(boolean returnValue) {
         when(mConnectivityManager.isTetheringSupported()).thenReturn(true);