diff options
Diffstat (limited to 'src/com/android/launcher3/model')
6 files changed, 62 insertions, 31 deletions
diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java index be93be4dc..d9c5143f2 100644 --- a/src/com/android/launcher3/model/BgDataModel.java +++ b/src/com/android/launcher3/model/BgDataModel.java @@ -91,11 +91,21 @@ public class BgDataModel { public final Map<ShortcutKey, MutableInt> pinnedShortcutCounts = new HashMap<>(); /** + * True if the launcher has permission to access deep shortcuts. + */ + public boolean hasShortcutHostPermission; + + /** * Maps all launcher activities to the id's of their shortcuts (if they have any). */ public final MultiHashMap<ComponentKey, String> deepShortcutMap = new MultiHashMap<>(); /** + * Entire list of widgets. + */ + public final WidgetsModel widgetsModel = new WidgetsModel(); + + /** * Clears all the data */ public synchronized void clear() { diff --git a/src/com/android/launcher3/model/ExtendedModelTask.java b/src/com/android/launcher3/model/ExtendedModelTask.java index 05419662b..080aaf54b 100644 --- a/src/com/android/launcher3/model/ExtendedModelTask.java +++ b/src/com/android/launcher3/model/ExtendedModelTask.java @@ -59,4 +59,15 @@ public abstract class ExtendedModelTask extends BaseModelUpdateTask { } }); } + + public void bindUpdatedWidgets(BgDataModel dataModel) { + final MultiHashMap<PackageItemInfo, WidgetItem> widgets + = dataModel.widgetsModel.getWidgetsMap(); + scheduleCallbackTask(new CallbackTask() { + @Override + public void execute(Callbacks callbacks) { + callbacks.bindAllWidgets(widgets); + } + }); + } } diff --git a/src/com/android/launcher3/model/LoaderResults.java b/src/com/android/launcher3/model/LoaderResults.java index 61fd356b8..28df64d39 100644 --- a/src/com/android/launcher3/model/LoaderResults.java +++ b/src/com/android/launcher3/model/LoaderResults.java @@ -24,6 +24,7 @@ import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.ItemInfo; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetInfo; +import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherModel.Callbacks; import com.android.launcher3.LauncherSettings; import com.android.launcher3.MainThreadExecutor; @@ -58,6 +59,7 @@ public class LoaderResults { private final BgDataModel mBgDataModel; private final AllAppsList mBgAllAppsList; private final int mPageToBindFirst; + private final WeakReference<Callbacks> mCallbacks; public LoaderResults(LauncherAppState app, BgDataModel dataModel, @@ -358,7 +360,6 @@ public class LoaderResults { mUiExecutor.execute(r); } - public void bindAllApps() { // shallow copy @SuppressWarnings("unchecked") @@ -374,4 +375,18 @@ public class LoaderResults { }; mUiExecutor.execute(r); } + + public void bindWidgets() { + final MultiHashMap<PackageItemInfo, WidgetItem> widgets + = mBgDataModel.widgetsModel.getWidgetsMap(); + Runnable r = new Runnable() { + public void run() { + Callbacks callbacks = mCallbacks.get(); + if (callbacks != null) { + callbacks.bindAllWidgets(widgets); + } + } + }; + mUiExecutor.execute(r); + } } diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index 8380f0136..46fea218f 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -44,6 +44,7 @@ import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.LauncherIcons; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.ItemInfoMatcher; +import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.PackageUserKey; @@ -373,11 +374,9 @@ public class PackageUpdatedTask extends ExtendedModelTask { } else if (Utilities.isAtLeastO() && mOp == OP_ADD) { // Load widgets for the new package. for (int i = 0; i < N; i++) { - LauncherModel model = app.getModel(); - model.refreshAndBindWidgetsAndShortcuts( - model.getCallback(), false /* bindFirst */, - new PackageUserKey(packages[i], mUser) /* packageUser */); + dataModel.widgetsModel.update(app, new PackageUserKey(packages[i], mUser)); } + bindUpdatedWidgets(dataModel); } } } diff --git a/src/com/android/launcher3/model/SdCardAvailableReceiver.java b/src/com/android/launcher3/model/SdCardAvailableReceiver.java index bae5c73c1..3aedae69a 100644 --- a/src/com/android/launcher3/model/SdCardAvailableReceiver.java +++ b/src/com/android/launcher3/model/SdCardAvailableReceiver.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.os.UserHandle; +import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherModel; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.util.MultiHashMap; @@ -43,10 +44,10 @@ public class SdCardAvailableReceiver extends BroadcastReceiver { private final Context mContext; private final MultiHashMap<UserHandle, String> mPackages; - public SdCardAvailableReceiver(LauncherModel model, Context context, + public SdCardAvailableReceiver(LauncherAppState app, MultiHashMap<UserHandle, String> packages) { - mModel = model; - mContext = context; + mModel = app.getModel(); + mContext = app.getContext(); mPackages = packages; } diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index 827675a83..ed900bf35 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -38,36 +38,26 @@ public class WidgetsModel { private static final boolean DEBUG = false; /* Map of widgets and shortcuts that are tracked per package. */ - private final MultiHashMap<PackageItemInfo, WidgetItem> mWidgetsList; + private final MultiHashMap<PackageItemInfo, WidgetItem> mWidgetsList = new MultiHashMap<>(); - private final IconCache mIconCache; - private final AppFilter mAppFilter; + private AppFilter mAppFilter; - public WidgetsModel(IconCache iconCache, AppFilter appFilter) { - mIconCache = iconCache; - mAppFilter = appFilter; - mWidgetsList = new MultiHashMap<>(); - } - - public MultiHashMap<PackageItemInfo, WidgetItem> getWidgetsMap() { - return mWidgetsList; - } - - public boolean isEmpty() { - return mWidgetsList.isEmpty(); + public synchronized MultiHashMap<PackageItemInfo, WidgetItem> getWidgetsMap() { + return mWidgetsList.clone(); } /** * @param packageUser If null, all widgets and shortcuts are updated and returned, otherwise * only widgets and shortcuts associated with the package/user are. */ - public ArrayList<WidgetItem> update(Context context, @Nullable PackageUserKey packageUser) { + public void update(LauncherAppState app, @Nullable PackageUserKey packageUser) { Preconditions.assertWorkerThread(); + Context context = app.getContext(); final ArrayList<WidgetItem> widgetsAndShortcuts = new ArrayList<>(); try { PackageManager pm = context.getPackageManager(); - InvariantDeviceProfile idp = LauncherAppState.getIDP(context); + InvariantDeviceProfile idp = app.getInvariantDeviceProfile(); // Widgets AppWidgetManagerCompat widgetManager = AppWidgetManagerCompat.getInstance(context); @@ -81,7 +71,7 @@ public class WidgetsModel { .getCustomShortcutActivityList(packageUser)) { widgetsAndShortcuts.add(new WidgetItem(info)); } - setWidgetsAndShortcuts(widgetsAndShortcuts, context, packageUser); + setWidgetsAndShortcuts(widgetsAndShortcuts, app, packageUser); } catch (Exception e) { if (!FeatureFlags.IS_DOGFOOD_BUILD && Utilities.isBinderSizeError(e)) { // the returned value may be incomplete and will not be refreshed until the next @@ -92,11 +82,12 @@ public class WidgetsModel { throw e; } } - return widgetsAndShortcuts; + + app.getWidgetCache().removeObsoletePreviews(widgetsAndShortcuts, packageUser); } - private void setWidgetsAndShortcuts(ArrayList<WidgetItem> rawWidgetsShortcuts, - Context context, @Nullable PackageUserKey packageUser) { + private synchronized void setWidgetsAndShortcuts(ArrayList<WidgetItem> rawWidgetsShortcuts, + LauncherAppState app, @Nullable PackageUserKey packageUser) { if (DEBUG) { Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + rawWidgetsShortcuts.size()); } @@ -133,7 +124,7 @@ public class WidgetsModel { } } - InvariantDeviceProfile idp = LauncherAppState.getIDP(context); + InvariantDeviceProfile idp = app.getInvariantDeviceProfile(); UserHandle myUser = Process.myUserHandle(); // add and update. @@ -152,6 +143,9 @@ public class WidgetsModel { } } + if (mAppFilter == null) { + mAppFilter = AppFilter.newInstance(app.getContext()); + } if (!mAppFilter.shouldShowApp(item.componentName)) { if (DEBUG) { Log.d(TAG, String.format("%s is filtered and not added to the widget tray.", @@ -174,8 +168,9 @@ public class WidgetsModel { } // Update each package entry + IconCache iconCache = app.getIconCache(); for (PackageItemInfo p : tmpPackageItemInfos.values()) { - mIconCache.getTitleAndIconForApp(p, true /* userLowResIcon */); + iconCache.getTitleAndIconForApp(p, true /* userLowResIcon */); } } }
\ No newline at end of file |