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/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>();