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
This commit is contained in:
Weng Su
2024-08-09 21:50:06 +08:00
parent 22677304c9
commit 675b817c49
2 changed files with 127 additions and 78 deletions

View File

@@ -371,12 +371,20 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|| !mWifiRestriction.isHotspotAvailable(context)) { || !mWifiRestriction.isHotspotAvailable(context)) {
keys.add(KEY_WIFI_TETHER_NETWORK_NAME); keys.add(KEY_WIFI_TETHER_NETWORK_NAME);
keys.add(KEY_WIFI_TETHER_SECURITY); keys.add(KEY_WIFI_TETHER_SECURITY);
keys.add(KEY_WIFI_HOTSPOT_SECURITY);
keys.add(KEY_WIFI_TETHER_NETWORK_PASSWORD); keys.add(KEY_WIFI_TETHER_NETWORK_PASSWORD);
keys.add(KEY_WIFI_TETHER_AUTO_OFF); keys.add(KEY_WIFI_TETHER_AUTO_OFF);
keys.add(KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); keys.add(KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY);
keys.add(KEY_WIFI_HOTSPOT_SPEED);
keys.add(KEY_INSTANT_HOTSPOT); keys.add(KEY_INSTANT_HOTSPOT);
} else if (!mIsInstantHotspotEnabled) { } else {
keys.add(KEY_INSTANT_HOTSPOT); if (!isSpeedFeatureAvailable()) {
keys.add(KEY_WIFI_HOTSPOT_SECURITY);
keys.add(KEY_WIFI_HOTSPOT_SPEED);
}
if (!mIsInstantHotspotEnabled) {
keys.add(KEY_INSTANT_HOTSPOT);
}
} }
// Remove duplicate // Remove duplicate
@@ -400,6 +408,12 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
public List<AbstractPreferenceController> createPreferenceControllers(Context context) { public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
return buildPreferenceControllers(context, null /* listener */); return buildPreferenceControllers(context, null /* listener */);
} }
@VisibleForTesting
boolean isSpeedFeatureAvailable() {
return FeatureFactory.getFeatureFactory().getWifiFeatureProvider()
.getWifiHotspotRepository().isSpeedFeatureAvailable();
}
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -263,91 +263,114 @@ public class WifiTetherSettingsTest {
@Test @Test
public void getNonIndexableKeys_tetherAvailable_keysNotReturned() { public void getNonIndexableKeys_tetherAvailable_keysNotReturned() {
when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); WifiTetherSettings.SearchIndexProvider searchIndexProvider = createSearchIndexProvider(
when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); true /* isTetherAvailable */, true /* isHotspotAvailable */,
WifiTetherSettings.SearchIndexProvider searchIndexProvider = true /* isInstantHotspotEnabled */, true /* isSpeedFeatureAvailable */);
new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction,
true /* isInstantHotspotEnabled */);
final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext); 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_NETWORK_NAME);
assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY);
assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); 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_AUTO_OFF);
assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY);
assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT);
} // contains
assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY);
@Test assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED);
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);
} }
@Test @Test
@@ -506,6 +529,18 @@ public class WifiTetherSettingsTest {
mSettings.onCreate(Bundle.EMPTY); 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) @Implements(RestrictedDashboardFragment.class)
public static final class ShadowRestrictedDashboardFragment { public static final class ShadowRestrictedDashboardFragment {