Allow Launcher class to hide activities from All Apps

There are a few questions for the launcher team
embedded in comments.

Bug: 10645210
Bug: 10551568
Change-Id: I67ad10da0d0f0f0885f8b14d329231c37aa6779b
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index ec84a9a..bdd9add 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -45,6 +45,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.ContentObserver;
@@ -3907,6 +3908,11 @@
         }
     }
 
+    @Override
+    public boolean shouldShowApp(ResolveInfo app) {
+        return true;
+    }
+
     /**
      * A package was updated.
      *
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index a76378e..18e1c85 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -156,6 +156,7 @@
         public void bindFolders(HashMap<Long,FolderInfo> folders);
         public void finishBindingItems(boolean upgradePath);
         public void bindAppWidget(LauncherAppWidgetInfo info);
+        public boolean shouldShowApp(ResolveInfo app);
         public void bindAllApplications(ArrayList<AppInfo> apps);
         public void bindAppsAdded(ArrayList<Long> newScreens,
                                   ArrayList<ItemInfo> addNotAnimated,
@@ -2427,6 +2428,7 @@
         private void loadAllApps() {
             final long loadTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;
 
+            // "two variables"?
             // Don't use these two variables in any of the callback runnables.
             // Otherwise we hold a reference to them.
             final Callbacks oldCallbacks = mCallbacks.get();
@@ -2466,11 +2468,15 @@
 
             // Create the ApplicationInfos
             for (int i = 0; i < apps.size(); i++) {
-                // This builds the icon bitmaps.
-                mBgAllAppsList.add(new AppInfo(packageManager, apps.get(i),
-                        mIconCache, mLabelCache));
+                ResolveInfo app = apps.get(i);
+                if (oldCallbacks.shouldShowApp(app)) {
+                    // This builds the icon bitmaps.
+                    mBgAllAppsList.add(new AppInfo(packageManager, app,
+                            mIconCache, mLabelCache));
+                }
             }
 
+            // Huh? Shouldn't this be inside the Runnable below?
             final Callbacks callbacks = tryGetCallbacks(oldCallbacks);
             final ArrayList<AppInfo> added = mBgAllAppsList.added;
             mBgAllAppsList.added = new ArrayList<AppInfo>();