From b1d19a8b35597afcdceca47ead5c059fea7f2c9a Mon Sep 17 00:00:00 2001 From: Zhen Zhang Date: Wed, 25 Mar 2020 13:33:45 -0700 Subject: [PATCH] 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 --- .../settings/AllInOneTetherSettings.java | 20 ++++------- .../settings/AllInOneTetherSettingsTest.java | 35 +++++++++++++++++++ 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/AllInOneTetherSettings.java b/src/com/android/settings/AllInOneTetherSettings.java index c562faee1d7..22453a39725 100644 --- a/src/com/android/settings/AllInOneTetherSettings.java +++ b/src/com/android/settings/AllInOneTetherSettings.java @@ -91,8 +91,12 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment 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 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment mUsbTethering = TetherEnabler.isUsbTethering(state); mWifiTethering = TetherEnabler.isWifiTethering(state); mWifiTetherGroup.setVisible(shouldShowWifiConfig()); - reConfigInitialExpandedChildCount(); }; private final BroadcastReceiver mTetherChangeReceiver = new BroadcastReceiver() { @@ -354,10 +357,6 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment mRestartWifiApAfterConfigChange = true; mTetherEnabler.stopTethering(TETHERING_WIFI); } - - if (controller instanceof WifiTetherSecurityPreferenceController) { - reConfigInitialExpandedChildCount(); - } } private SoftApConfiguration buildNewConfig() { @@ -384,15 +383,10 @@ public class AllInOneTetherSettings extends RestrictedDashboardFragment 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 55486d26a15..f966e3c5e75 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 static org.mockito.Mockito.when; 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 android.util.FeatureFlagUtils; 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 @@ public class AllInOneTetherSettingsTest { private ConnectivityManager mConnectivityManager; @Mock private UserManager mUserManager; + @Mock + private WifiTetherSecurityPreferenceController mSecurityPreferenceController; @Before public void setUp() { @@ -82,6 +89,8 @@ public class AllInOneTetherSettingsTest { mAllInOneTetherSettings = new AllInOneTetherSettings(); ReflectionHelpers.setField(mAllInOneTetherSettings, "mLifecycle", mock(Lifecycle.class)); + ReflectionHelpers.setField(mAllInOneTetherSettings, "mSecurityPreferenceController", + mSecurityPreferenceController); } @Test @@ -157,6 +166,32 @@ public class AllInOneTetherSettingsTest { .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);