Merge "Skip Wi-Fi hotspot in Settings Widgets" into udc-dev am: 47d3cfe635

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23517077

Change-Id: Id0a855210c55cc92571aef6cd3522116403d1aa5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index 89ee19b..bf95348 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -46,10 +46,12 @@
 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 @@
                     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 @@
         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 49c1551..df1fec3 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 @@
         mShadowConnectivityManager = ShadowConnectivityManager.getShadow();
         mShadowConnectivityManager.setTetheringSupported(true);
 
-        mController = new CreateShortcutPreferenceController(mContext, "key");
+        mController = spy(new CreateShortcutPreferenceController(mContext, "key"));
         mController.setActivity(mHost);
     }
 
@@ -159,27 +159,39 @@
     @Test
     public void queryShortcuts_setSupportOneHandedMode_ShouldEnableShortcuts() {
         SystemProperties.set(SUPPORT_ONE_HANDED_MODE, "true");
+        setupActivityInfo(Settings.OneHandedSettingsActivity.class.getSimpleName());
 
-        setupOneHandedModeActivityInfo();
-        final List<ResolveInfo> 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<ResolveInfo> 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;