OSDN Git Service

Don't show market links if market app is protected
authorGabriele M <moto.falcon.git@gmail.com>
Sun, 2 Apr 2017 17:22:40 +0000 (19:22 +0200)
committerDan Pasanen <dan.pasanen@gmail.com>
Tue, 25 Apr 2017 14:53:55 +0000 (14:53 +0000)
Trebuchet is a protected component manager, therefore it can start
protected apps without asking for a password. When a user looks for
an app that isn't installed using the search box in the app drawer,
Trebuchet shows a link to start the default market app. This allows
any user to start the market app without inserting the password, even
when protected, so hide the link in this case.

BUGBASH-358

Change-Id: Ic42355cfc1b689818c5d6682a61cf1c98d37bc80

src/com/android/launcher3/AppInfo.java
src/com/android/launcher3/allapps/AllAppsGridAdapter.java

index ca8ae25..515f8b5 100644 (file)
@@ -102,7 +102,10 @@ public class AppInfo extends ItemInfo {
     }
 
     public static int initFlags(LauncherActivityInfoCompat info) {
-        int appFlags = info.getApplicationInfo().flags;
+        return initFlags(info.getApplicationInfo().flags);
+    }
+
+    public static int initFlags(int appFlags) {
         int flags = 0;
         if ((appFlags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) {
             flags |= DOWNLOADED_FLAG;
index 6431825..12cda25 100644 (file)
@@ -41,6 +41,7 @@ import com.android.launcher3.BaseRecyclerViewFastScrollBar.FastScrollFocusApplic
 import com.android.launcher3.BaseRecyclerViewFastScrollBar.FastScrollFocusable;
 import com.android.launcher3.BubbleTextView;
 import com.android.launcher3.Launcher;
+import com.android.launcher3.ProtectedComponentsHelper;
 import com.android.launcher3.R;
 import com.android.launcher3.RemoteFolderManager;
 import com.android.launcher3.Utilities;
@@ -350,6 +351,12 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
     // The name of the market app which handles searches, to be used in the format str
     // below when updating the search-market view.  Only needs to be loaded once.
     private String mMarketAppName;
+    // The package name of the market app which handles searches, to be used to
+    // check if the app is protected or not.  Only needs to be loaded once.
+    private String mMarketAppPackageName;
+    // The flags of the market app which handles searches, to be used to check if the
+    // market app is protected or not.  Only needs to be loaded once.
+    private int mMarketAppFlags;
     // The text to show when there is a market app which can handle a specific query, updated
     // each time the search query changes.
     private String mMarketSearchMessage;
@@ -417,7 +424,15 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
         ResolveInfo marketInfo = pm.resolveActivity(createMarketSearchIntent(""),
                 PackageManager.MATCH_DEFAULT_ONLY);
         if (marketInfo != null) {
-            mMarketAppName = marketInfo.loadLabel(pm).toString();
+            try {
+                String packageName = marketInfo.activityInfo.packageName;
+                int flags = pm.getApplicationInfo(packageName, 0).flags;
+                mMarketAppFlags = AppInfo.initFlags(flags);
+                mMarketAppPackageName = packageName;
+                mMarketAppName = marketInfo.loadLabel(pm).toString();
+            } catch (PackageManager.NameNotFoundException e) {
+                // Don't do anything
+            }
         }
 
         mRemoteFolderManager = launcher.getRemoteFolderManager();
@@ -614,7 +629,7 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
                 break;
             case SEARCH_MARKET_VIEW_TYPE:
                 TextView searchView = (TextView) holder.mContent;
-                if (mMarketSearchIntent != null) {
+                if (showMarketLink()) {
                     searchView.setVisibility(View.VISIBLE);
                     searchView.setContentDescription(mMarketSearchMessage);
                     searchView.setGravity(mApps.hasNoFilteredResults() ? Gravity.CENTER :
@@ -713,4 +728,10 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
         marketSearchIntent.setData(marketSearchUri);
         return marketSearchIntent;
     }
+
+    private boolean showMarketLink() {
+        return mMarketAppPackageName != null &&
+                !ProtectedComponentsHelper.isProtectedPackage(mMarketAppFlags,
+                        mMarketAppPackageName);
+    }
 }