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
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 74671b5..980dee5 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -371,12 +371,20 @@
                     || !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 List<AbstractPreferenceController> 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 299d545..0bc0a32 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 @@
 
     @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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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 @@
         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 {