diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java index 89ee19bc8a7..bf953489be9 100644 --- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java +++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java @@ -46,10 +46,12 @@ import androidx.preference.PreferenceGroup; import com.android.settings.R; import com.android.settings.Settings; import com.android.settings.Settings.TetherSettingsActivity; +import com.android.settings.Settings.WifiTetherSettingsActivity; import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.core.BasePreferenceController; import com.android.settings.gestures.OneHandedSettingsUtils; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.wifi.WifiUtils; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.ArrayList; @@ -192,6 +194,12 @@ public class CreateShortcutPreferenceController extends BasePreferenceController continue; } } + if (info.activityInfo.name.endsWith(WifiTetherSettingsActivity.class.getSimpleName())) { + if (!canShowWifiHotspot()) { + Log.d(TAG, "Skipping Wi-Fi hotspot settings:" + info.activityInfo); + continue; + } + } if (!info.activityInfo.applicationInfo.isSystemApp()) { Log.d(TAG, "Skipping non-system app: " + info.activityInfo); continue; @@ -202,6 +210,11 @@ public class CreateShortcutPreferenceController extends BasePreferenceController return shortcuts; } + @VisibleForTesting + boolean canShowWifiHotspot() { + return WifiUtils.canShowWifiHotspot(mContext); + } + private void logCreateShortcut(ResolveInfo info) { if (info == null || info.activityInfo == null) { return; diff --git a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java index 49c1551c5d3..df1fec38b56 100644 --- a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java @@ -84,7 +84,7 @@ public class CreateShortcutPreferenceControllerTest { mShadowConnectivityManager = ShadowConnectivityManager.getShadow(); mShadowConnectivityManager.setTetheringSupported(true); - mController = new CreateShortcutPreferenceController(mContext, "key"); + mController = spy(new CreateShortcutPreferenceController(mContext, "key")); mController.setActivity(mHost); } @@ -159,27 +159,39 @@ public class CreateShortcutPreferenceControllerTest { @Test public void queryShortcuts_setSupportOneHandedMode_ShouldEnableShortcuts() { SystemProperties.set(SUPPORT_ONE_HANDED_MODE, "true"); + setupActivityInfo(Settings.OneHandedSettingsActivity.class.getSimpleName()); - setupOneHandedModeActivityInfo(); - final List info = mController.queryShortcuts(); - - assertThat(info).hasSize(1); + assertThat(mController.queryShortcuts()).hasSize(1); } @Test public void queryShortcuts_setUnsupportOneHandedMode_ShouldDisableShortcuts() { SystemProperties.set(SUPPORT_ONE_HANDED_MODE, "false"); + setupActivityInfo(Settings.OneHandedSettingsActivity.class.getSimpleName()); - setupOneHandedModeActivityInfo(); - final List info = mController.queryShortcuts(); - - assertThat(info).hasSize(0); + assertThat(mController.queryShortcuts()).hasSize(0); } - private void setupOneHandedModeActivityInfo() { - final ResolveInfo ri = new ResolveInfo(); + @Test + public void queryShortcuts_configShowWifiHotspot_ShouldEnableShortcuts() { + when(mController.canShowWifiHotspot()).thenReturn(true); + setupActivityInfo(Settings.WifiTetherSettingsActivity.class.getSimpleName()); + + assertThat(mController.queryShortcuts()).hasSize(1); + } + + @Test + public void queryShortcuts_configNotShowWifiHotspot_ShouldDisableShortcuts() { + when(mController.canShowWifiHotspot()).thenReturn(false); + setupActivityInfo(Settings.WifiTetherSettingsActivity.class.getSimpleName()); + + assertThat(mController.queryShortcuts()).hasSize(0); + } + + private void setupActivityInfo(String name) { + ResolveInfo ri = new ResolveInfo(); ri.activityInfo = new ActivityInfo(); - ri.activityInfo.name = Settings.OneHandedSettingsActivity.class.getSimpleName(); + ri.activityInfo.name = name; ri.activityInfo.applicationInfo = new ApplicationInfo(); ri.activityInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;