From 675b817c49d57d9ec2980d8a359c3827f328ae5c Mon Sep 17 00:00:00 2001 From: Weng Su Date: Fri, 9 Aug 2024 21:50:06 +0800 Subject: [PATCH] Hide new Hotspot preferences if feature is disabled - Hide new "Security" preference - Hide new "Speed and compatibility" preference Bug: 356898105 Flag: EXEMPT bugfix Test: Manual testing atest -c WifiTetherSettingsTest Change-Id: I734959ed511929bfcc9a314770a4acdf9a7e0b99 --- .../wifi/tether/WifiTetherSettings.java | 18 +- .../wifi/tether/WifiTetherSettingsTest.java | 187 +++++++++++------- 2 files changed, 127 insertions(+), 78 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java index 74671b5f4af..980dee57753 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java @@ -371,12 +371,20 @@ public class WifiTetherSettings extends RestrictedDashboardFragment || !mWifiRestriction.isHotspotAvailable(context)) { keys.add(KEY_WIFI_TETHER_NETWORK_NAME); keys.add(KEY_WIFI_TETHER_SECURITY); + keys.add(KEY_WIFI_HOTSPOT_SECURITY); keys.add(KEY_WIFI_TETHER_NETWORK_PASSWORD); keys.add(KEY_WIFI_TETHER_AUTO_OFF); keys.add(KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + keys.add(KEY_WIFI_HOTSPOT_SPEED); keys.add(KEY_INSTANT_HOTSPOT); - } else if (!mIsInstantHotspotEnabled) { - keys.add(KEY_INSTANT_HOTSPOT); + } else { + if (!isSpeedFeatureAvailable()) { + keys.add(KEY_WIFI_HOTSPOT_SECURITY); + keys.add(KEY_WIFI_HOTSPOT_SPEED); + } + if (!mIsInstantHotspotEnabled) { + keys.add(KEY_INSTANT_HOTSPOT); + } } // Remove duplicate @@ -400,6 +408,12 @@ public class WifiTetherSettings extends RestrictedDashboardFragment public List createPreferenceControllers(Context context) { return buildPreferenceControllers(context, null /* listener */); } + + @VisibleForTesting + boolean isSpeedFeatureAvailable() { + return FeatureFactory.getFeatureFactory().getWifiFeatureProvider() + .getWifiHotspotRepository().isSpeedFeatureAvailable(); + } } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java index 299d545c49b..0bc0a32daa6 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java @@ -263,91 +263,114 @@ public class WifiTetherSettingsTest { @Test public void getNonIndexableKeys_tetherAvailable_keysNotReturned() { - when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); - when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); - WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, - true /* isInstantHotspotEnabled */); + WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider( + true /* isTetherAvailable */, true /* isHotspotAvailable */, + true /* isInstantHotspotEnabled */, true /* isSpeedFeatureAvailable */); final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + } + + @Test + public void getNonIndexableKeys_tetherNotAvailable_keysReturned() { + WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider( + false /* isTetherAvailable */, true /* isHotspotAvailable */, + true /* isInstantHotspotEnabled */, true /* isSpeedFeatureAvailable */); + + final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + } + + @Test + public void getNonIndexableKeys_hotspotNotAvailable_keysReturned() { + WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider( + true /* isTetherAvailable */, false /* isHotspotAvailable */, + true /* isInstantHotspotEnabled */, true /* isSpeedFeatureAvailable */); + + final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + } + + @Test + public void getNonIndexableKeys_tetherAndHotspotNotAvailable_keysReturned() { + WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider( + false /* isTetherAvailable */, false /* isHotspotAvailable */, + true /* isInstantHotspotEnabled */, true /* isSpeedFeatureAvailable */); + + final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + } + + @Test + public void getNonIndexableKeys_instantHotspotNotAvailableOnly_keysContainInstantHotspotOnly() { + WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider( + true /* isTetherAvailable */, true /* isHotspotAvailable */, + false /* isInstantHotspotEnabled */, true /* isSpeedFeatureAvailable */); + + final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + + // doesNotContain + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); + // contains + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + } + + @Test + public void getNonIndexableKeys_speedFeatureNotAvailableOnly_keysContainInstantHotspotOnly() { + WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider( + true /* isTetherAvailable */, true /* isHotspotAvailable */, + true /* isInstantHotspotEnabled */, false /* isSpeedFeatureAvailable */); + + final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + + // doesNotContain assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT); - } - - @Test - public void getNonIndexableKeys_tetherNotAvailable_keysReturned() { - when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(false); - when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); - WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, - true /* isInstantHotspotEnabled */); - - final List keys = searchIndexProvider.getNonIndexableKeys(mContext); - - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); - assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); - } - - @Test - public void getNonIndexableKeys_hotspotNotAvailable_keysReturned() { - when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); - when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(false); - WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, - true /* isInstantHotspotEnabled */); - - final List keys = searchIndexProvider.getNonIndexableKeys(mContext); - - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); - assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); - } - - @Test - public void getNonIndexableKeys_tetherAndHotspotNotAvailable_keysReturned() { - when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(false); - when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(false); - WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, - true /* isInstantHotspotEnabled */); - - final List keys = searchIndexProvider.getNonIndexableKeys(mContext); - - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); - } - - @Test - public void getNonIndexableKeys_instantHotspotNotAvailableOnly_keysContainInstantHotspotOnly() { - when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); - when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); - WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, - false /* isInstantHotspotEnabled */); - - final List keys = searchIndexProvider.getNonIndexableKeys(mContext); - - assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); - assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + // contains + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); } @Test @@ -506,6 +529,18 @@ public class WifiTetherSettingsTest { mSettings.onCreate(Bundle.EMPTY); } + private WifiTetherSettings.SearchIndexProvider createSearchIndexProvider( + boolean isTetherAvailable, boolean isHotspotAvailable, boolean isInstantHotspotEnabled, + boolean isSpeedFeatureAvailable) { + when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(isTetherAvailable); + when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(isHotspotAvailable); + WifiTetherSettings.SearchIndexProvider provider = + spy(new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, + isInstantHotspotEnabled)); + when(provider.isSpeedFeatureAvailable()).thenReturn(isSpeedFeatureAvailable); + return provider; + } + @Implements(RestrictedDashboardFragment.class) public static final class ShadowRestrictedDashboardFragment {