summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Bringert <bringert@google.com>2013-10-03 23:22:56 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-10-03 23:22:57 +0000
commited60ba1e24512bef0bb2b749b6297e8c7e5330cf (patch)
tree089e54d756f1672e29a7e92fca51133e7b8caa5d
parentf2e1ace17541a4f373a04dd0db9292b23c08a9fd (diff)
parent1307f63f8a93541bf6e2d29c11fab69778a25e42 (diff)
downloadandroid_packages_apps_Trebuchet-ed60ba1e24512bef0bb2b749b6297e8c7e5330cf.tar.gz
android_packages_apps_Trebuchet-ed60ba1e24512bef0bb2b749b6297e8c7e5330cf.tar.bz2
android_packages_apps_Trebuchet-ed60ba1e24512bef0bb2b749b6297e8c7e5330cf.zip
Merge "Add a better app filtering mechanism and filter widgets" into jb-ub-now-indigo-rose
-rw-r--r--res/values/config.xml5
-rw-r--r--src/com/android/launcher3/AllAppsList.java10
-rw-r--r--src/com/android/launcher3/AppFilter.java35
-rw-r--r--src/com/android/launcher3/AppsCustomizePagedView.java3
-rw-r--r--src/com/android/launcher3/Launcher.java5
-rw-r--r--src/com/android/launcher3/LauncherAppState.java9
-rw-r--r--src/com/android/launcher3/LauncherModel.java13
7 files changed, 64 insertions, 16 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 8718f1562..0766d7624 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -81,4 +81,9 @@
<!-- Memory debugging, including a memory dump icon -->
<bool name="debug_memory_enabled">false</bool>
+
+ <!-- Name of a subclass of com.android.launcher3.AppFilter used to
+ filter the activities shown in the launcher. Can be empty. -->
+ <string name="app_filter_class" translatable="false"></string>
+
</resources>
diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java
index 5d3aa3ab7..d955e4eae 100644
--- a/src/com/android/launcher3/AllAppsList.java
+++ b/src/com/android/launcher3/AllAppsList.java
@@ -46,11 +46,14 @@ class AllAppsList {
private IconCache mIconCache;
+ private AppFilter mAppFilter;
+
/**
* Boring constructor.
*/
- public AllAppsList(IconCache iconCache) {
+ public AllAppsList(IconCache iconCache, AppFilter appFilter) {
mIconCache = iconCache;
+ mAppFilter = appFilter;
}
/**
@@ -60,13 +63,16 @@ class AllAppsList {
* If the app is already in the list, doesn't add it.
*/
public void add(AppInfo info) {
+ if (mAppFilter != null && !mAppFilter.shouldShowApp(info.componentName)) {
+ return;
+ }
if (findActivity(data, info.componentName)) {
return;
}
data.add(info);
added.add(info);
}
-
+
public void clear() {
data.clear();
// TODO: do we clear these too?
diff --git a/src/com/android/launcher3/AppFilter.java b/src/com/android/launcher3/AppFilter.java
new file mode 100644
index 000000000..e01436d7a
--- /dev/null
+++ b/src/com/android/launcher3/AppFilter.java
@@ -0,0 +1,35 @@
+package com.android.launcher3;
+
+import android.content.ComponentName;
+import android.text.TextUtils;
+import android.util.Log;
+
+public abstract class AppFilter {
+
+ private static final boolean DBG = false;
+ private static final String TAG = "AppFilter";
+
+ public abstract boolean shouldShowApp(ComponentName app);
+
+ public static AppFilter loadByName(String className) {
+ if (TextUtils.isEmpty(className)) return null;
+ if (DBG) Log.d(TAG, "Loading AppFilter: " + className);
+ try {
+ Class<?> cls = Class.forName(className);
+ return (AppFilter) cls.newInstance();
+ } catch (ClassNotFoundException e) {
+ Log.e(TAG, "Bad AppFilter class", e);
+ return null;
+ } catch (InstantiationException e) {
+ Log.e(TAG, "Bad AppFilter class", e);
+ return null;
+ } catch (IllegalAccessException e) {
+ Log.e(TAG, "Bad AppFilter class", e);
+ return null;
+ } catch (ClassCastException e) {
+ Log.e(TAG, "Bad AppFilter class", e);
+ return null;
+ }
+ }
+
+}
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java
index 4e9d68b50..9b35bb5ea 100644
--- a/src/com/android/launcher3/AppsCustomizePagedView.java
+++ b/src/com/android/launcher3/AppsCustomizePagedView.java
@@ -438,6 +438,9 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
for (Object o : widgetsAndShortcuts) {
if (o instanceof AppWidgetProviderInfo) {
AppWidgetProviderInfo widget = (AppWidgetProviderInfo) o;
+ if (!app.shouldShowAppOrWidgetProvider(widget.provider)) {
+ continue;
+ }
widget.label = widget.label.trim();
if (widget.minWidth > 0 && widget.minHeight > 0) {
// Ensure that all widgets we show can be added on a workspace of this size
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 681ed24a0..f3a02b3c2 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -3937,11 +3937,6 @@ public class Launcher extends Activity
}
}
- @Override
- public boolean shouldShowApp(ResolveInfo app) {
- return true;
- }
-
/**
* A package was updated.
*
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index ed96310ac..7da1c2af7 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -34,6 +34,7 @@ public class LauncherAppState {
private LauncherModel mModel;
private IconCache mIconCache;
+ private AppFilter mAppFilter;
private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb;
private boolean mIsScreenLarge;
private float mScreenDensity;
@@ -81,7 +82,9 @@ public class LauncherAppState {
mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext);
mIconCache = new IconCache(sContext);
- mModel = new LauncherModel(this, mIconCache);
+
+ mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class));
+ mModel = new LauncherModel(this, mIconCache, mAppFilter);
// Register intent receivers
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
@@ -147,6 +150,10 @@ public class LauncherAppState {
return mModel;
}
+ boolean shouldShowAppOrWidgetProvider(ComponentName componentName) {
+ return mAppFilter == null || mAppFilter.shouldShowApp(componentName);
+ }
+
WidgetPreviewLoader.CacheDb getWidgetPreviewCacheDb() {
return mWidgetPreviewCacheDb;
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index cc89d01ac..edfc07059 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -158,7 +158,6 @@ public class LauncherModel extends BroadcastReceiver {
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,
@@ -179,12 +178,12 @@ public class LauncherModel extends BroadcastReceiver {
public boolean filterItem(ItemInfo parent, ItemInfo info, ComponentName cn);
}
- LauncherModel(LauncherAppState app, IconCache iconCache) {
+ LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) {
final Context context = app.getContext();
mAppsCanBeOnRemoveableStorage = Environment.isExternalStorageRemovable();
mApp = app;
- mBgAllAppsList = new AllAppsList(iconCache);
+ mBgAllAppsList = new AllAppsList(iconCache, appFilter);
mIconCache = iconCache;
mDefaultIcon = Utilities.createIconBitmap(
@@ -2397,11 +2396,9 @@ public class LauncherModel extends BroadcastReceiver {
// Create the ApplicationInfos
for (int i = 0; i < apps.size(); i++) {
ResolveInfo app = apps.get(i);
- if (oldCallbacks.shouldShowApp(app)) {
- // This builds the icon bitmaps.
- mBgAllAppsList.add(new AppInfo(packageManager, app,
- mIconCache, mLabelCache));
- }
+ // This builds the icon bitmaps.
+ mBgAllAppsList.add(new AppInfo(packageManager, app,
+ mIconCache, mLabelCache));
}
// Huh? Shouldn't this be inside the Runnable below?