Don't show tether settings in shortcut picker

On devices that don't have tethering options, don't allow user
to create a shortcut to the tether settings.

Bug: 6865610
Change-Id: I2ebbd6ef98391ef3fe74130570bd9b70108a2aa9
diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java
index 0312a4b..f71df1d 100644
--- a/src/com/android/settings/CreateShortcut.java
+++ b/src/com/android/settings/CreateShortcut.java
@@ -18,10 +18,15 @@
 
 import android.app.LauncherActivity;
 import android.content.Intent;
+import android.content.pm.ResolveInfo;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.ListView;
 
+import com.android.settings.Settings.TetherSettingsActivity;
+
+import java.util.List;
+
 public class CreateShortcut extends LauncherActivity {
 
     @Override
@@ -49,4 +54,22 @@
     protected boolean onEvaluateShowIcons() {
         return false;
     }
+
+    /**
+     * Perform query on package manager for list items.  The default
+     * implementation queries for activities.
+     */
+    protected List<ResolveInfo> onQueryPackageManager(Intent queryIntent) {
+        List<ResolveInfo> activities = super.onQueryPackageManager(queryIntent);
+        if (activities == null) return null;
+        for (int i = activities.size() - 1; i >= 0; i--) {
+            ResolveInfo info = activities.get(i);
+            if (info.activityInfo.name.endsWith(TetherSettingsActivity.class.getSimpleName())) {
+                if (!TetherSettings.showInShortcuts(this)) {
+                    activities.remove(i);
+                }
+            }
+        }
+        return activities;
+    }
 }
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index d2c99dc..f0b6b44 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -38,6 +38,8 @@
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
@@ -590,4 +592,17 @@
     public int getHelpResource() {
         return R.string.help_url_tether;
     }
+
+    /**
+     * Checks whether this screen will have anything to show on this device. This is called by
+     * the shortcut picker for Settings shortcuts (home screen widget).
+     * @param context a context object for getting a system service.
+     * @return whether Tether & portable hotspot should be shown in the shortcuts picker.
+     */
+    public static boolean showInShortcuts(Context context) {
+        final ConnectivityManager cm =
+                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
+        return !isSecondaryUser && cm.isTetheringSupported();
+    }
 }