From eaf291b9feba4e332d258b6d53ff119c88dc0d39 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Wed, 17 Jun 2015 21:12:44 -0700 Subject: Widgets model should respect AppFilter. > This pattern is already used in AllAppsList > mBgWidgetsModel variable cleanup inside LauncherModel. b/21739736 Change-Id: I03a05064ce3c3e5effb09055af9f4d4de2811c95 --- src/com/android/launcher3/LauncherModel.java | 14 +++++----- src/com/android/launcher3/model/WidgetsModel.java | 32 ++++++++++++++++++----- 2 files changed, 33 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index a132e919a..b148b06e0 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -242,6 +242,7 @@ public class LauncherModel extends BroadcastReceiver mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); + mBgWidgetsModel = new WidgetsModel(context, iconCache, appFilter); mIconCache = iconCache; final Resources res = context.getResources(); @@ -3346,10 +3347,12 @@ public class LauncherModel extends BroadcastReceiver public void loadAndBindWidgetsAndShortcuts(final Context context, final Callbacks callbacks, final boolean refresh) { - runOnWorkerThread(new Runnable(){ + runOnWorkerThread(new Runnable() { @Override public void run() { - final WidgetsModel model = createWidgetsModel(context, refresh); + updateWidgetsModel(context, refresh); + final WidgetsModel model = mBgWidgetsModel.clone(); + mHandler.post(new Runnable() { @Override public void run() { @@ -3359,7 +3362,6 @@ public class LauncherModel extends BroadcastReceiver } } }); - mBgWidgetsModel = model; // update the Widget entries inside DB on the worker thread. LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews( model.getRawList()); @@ -3372,15 +3374,13 @@ public class LauncherModel extends BroadcastReceiver * * @see #loadAndBindWidgetsAndShortcuts */ - @Thunk WidgetsModel createWidgetsModel(Context context, boolean refresh) { + @Thunk void updateWidgetsModel(Context context, boolean refresh) { PackageManager packageManager = context.getPackageManager(); final ArrayList widgetsAndShortcuts = new ArrayList(); widgetsAndShortcuts.addAll(getWidgetProviders(context, refresh)); Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT); widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0)); - WidgetsModel model = new WidgetsModel(context); - model.addWidgetsAndShortcuts(widgetsAndShortcuts); - return model; + mBgWidgetsModel.setWidgetsAndShortcuts(widgetsAndShortcuts); } @Thunk static boolean isPackageDisabled(Context context, String packageName, diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index 625d4d696..09a3242b5 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -1,10 +1,12 @@ package com.android.launcher3.model; +import android.content.ComponentName; import android.content.Context; import android.content.pm.ResolveInfo; import android.util.Log; +import com.android.launcher3.AppFilter; import com.android.launcher3.IconCache; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetProviderInfo; @@ -39,26 +41,32 @@ public class WidgetsModel { private final Comparator mWidgetAndShortcutNameComparator; private final Comparator mAppNameComparator; private final IconCache mIconCache; + private final AppFilter mAppFilter; private AlphabeticIndexCompat mIndexer; - public WidgetsModel(Context context) { + public WidgetsModel(Context context, IconCache iconCache, AppFilter appFilter) { mWidgetAndShortcutNameComparator = new WidgetsAndShortcutNameComparator(context); mAppNameComparator = (new AppNameComparator(context)).getAppInfoComparator(); - mIconCache = LauncherAppState.getInstance().getIconCache(); + mIconCache = iconCache; + mAppFilter = appFilter; mIndexer = new AlphabeticIndexCompat(context); } private WidgetsModel(WidgetsModel model) { mPackageItemInfos = (ArrayList) model.mPackageItemInfos.clone(); mWidgetsList = (HashMap>) model.mWidgetsList.clone(); - // mRawList is not copied as should not be needed. + mRawList = (ArrayList) model.mRawList.clone(); mWidgetAndShortcutNameComparator = model.mWidgetAndShortcutNameComparator; mAppNameComparator = model.mAppNameComparator; mIconCache = model.mIconCache; + mAppFilter = model.mAppFilter; } // Access methods that may be deleted if the private fields are made package-private. public int getPackageSize() { + if (mPackageItemInfos == null) { + return 0; + } return mPackageItemInfos.size(); } @@ -78,7 +86,7 @@ public class WidgetsModel { return mRawList; } - public void addWidgetsAndShortcuts(ArrayList rawWidgetsShortcuts) { + public void setWidgetsAndShortcuts(ArrayList rawWidgetsShortcuts) { Utilities.assertWorkerThread(); mRawList = rawWidgetsShortcuts; if (DEBUG) { @@ -96,15 +104,27 @@ public class WidgetsModel { // add and update. for (Object o: rawWidgetsShortcuts) { String packageName = ""; + ComponentName componentName = null; if (o instanceof LauncherAppWidgetProviderInfo) { LauncherAppWidgetProviderInfo widgetInfo = (LauncherAppWidgetProviderInfo) o; + componentName = widgetInfo.provider; packageName = widgetInfo.provider.getPackageName(); } else if (o instanceof ResolveInfo) { ResolveInfo resolveInfo = (ResolveInfo) o; + componentName = new ComponentName(resolveInfo.activityInfo.packageName, + resolveInfo.activityInfo.name); packageName = resolveInfo.activityInfo.packageName; - } else { - Log.e(TAG, String.format("addWidgetsAndShortcuts, nothing added for class=%s", + } + + if (componentName == null) { + Log.e(TAG, String.format("Widget cannot be set for class=%s", o.getClass().toString())); + continue; + } + if (mAppFilter != null && !mAppFilter.shouldShowApp(componentName)) { + Log.d(TAG, String.format("%s is filtered and not added to the widget tray.", + packageName)); + continue; } PackageItemInfo pInfo = tmpPackageItemInfos.get(packageName); -- cgit v1.2.3