diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java index 42ba191c23..d3a7955b2f 100644 --- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java +++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java @@ -77,7 +77,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { private final Matrix mTmpMatrix = new Matrix(); private final PathMeasure mPathMeasure = new PathMeasure(); - private final Context mContext; + private final ItemInfoWithIcon mItem; // Path in [0, 100] bounds. private final Path mProgressPath; @@ -106,7 +106,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { */ public PreloadIconDrawable(ItemInfoWithIcon info, Path progressPath, Context context) { super(info); - mContext = context; + mItem = info; mProgressPath = progressPath; mScaledTrackPath = new Path(); mScaledProgressPath = new Path(); @@ -274,7 +274,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mTrackAlpha = MAX_PAINT_ALPHA; setIsDisabled(true); } else if (progress >= 1) { - setIsDisabled(false); + setIsDisabled(mItem.isDisabled()); mScaledTrackPath.set(mScaledProgressPath); float fraction = (progress - 1) / COMPLETE_ANIM_FRACTION; diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index 089303ecea..977dcd7d53 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -18,7 +18,6 @@ package com.android.launcher3.model; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.graphics.Bitmap; import android.os.Process; import android.os.UserHandle; import android.util.ArrayMap; @@ -42,6 +41,9 @@ import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.BitmapInfo; import com.android.launcher3.graphics.LauncherIcons; +import com.android.launcher3.logging.FileLog; +import com.android.launcher3.shortcuts.DeepShortcutManager; +import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.ItemInfoMatcher; import com.android.launcher3.util.LongArrayMap; @@ -52,6 +54,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.List; /** * Handles updates due to changes in package manager (app installed/updated/removed) @@ -162,12 +165,7 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { final ArrayMap addedOrUpdatedApps = new ArrayMap<>(); if (!addedOrModified.isEmpty()) { - scheduleCallbackTask(new CallbackTask() { - @Override - public void execute(Callbacks callbacks) { - callbacks.bindAppsAddedOrUpdated(addedOrModified); - } - }); + scheduleCallbackTask((callbacks) -> callbacks.bindAppsAddedOrUpdated(addedOrModified)); for (AppInfo ai : addedOrModified) { addedOrUpdatedApps.put(ai.componentName, ai); } @@ -213,11 +211,26 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { } if (si.isPromise() && isNewApkAvailable) { + boolean isTargetValid = true; + if (si.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT) { + List shortcut = DeepShortcutManager + .getInstance(context).queryForPinnedShortcuts( + cn.getPackageName(), + Arrays.asList(si.getDeepShortcutId()), mUser); + if (shortcut.isEmpty()) { + isTargetValid = false; + } else { + si.updateFromDeepShortcutInfo(shortcut.get(0), context); + infoUpdated = true; + } + } else if (!cn.getClassName().equals(IconCache.EMPTY_CLASS_NAME)) { + isTargetValid = LauncherAppsCompat.getInstance(context) + .isActivityEnabledForProfile(cn, mUser); + } + if (si.hasStatusFlag(ShortcutInfo.FLAG_AUTOINSTALL_ICON)) { // Auto install icon - LauncherAppsCompat launcherApps - = LauncherAppsCompat.getInstance(context); - if (!launcherApps.isActivityEnabledForProfile(cn, mUser)) { + if (!isTargetValid) { // Try to find the best match activity. Intent intent = new PackageManagerHelper(context) .getAppLaunchIntent(cn.getPackageName(), mUser); @@ -235,6 +248,11 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { continue; } } + } else if (!isTargetValid) { + removedShortcuts.put(si.id, true); + FileLog.e(TAG, "Restored shortcut no longer valid " + + si.intent); + continue; } else { si.status = ShortcutInfo.DEFAULT; infoUpdated = true; diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java index f44f5c8d91..24e2e2f81f 100644 --- a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java +++ b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java @@ -181,7 +181,12 @@ public class DeepShortcutManager { * If packageName is null, returns all pinned shortcuts regardless of package. */ public List queryForPinnedShortcuts(String packageName, UserHandle user) { - return query(ShortcutQuery.FLAG_MATCH_PINNED, packageName, null, null, user); + return queryForPinnedShortcuts(packageName, null, user); + } + + public List queryForPinnedShortcuts(String packageName, + List shortcutIds, UserHandle user) { + return query(ShortcutQuery.FLAG_MATCH_PINNED, packageName, null, shortcutIds, user); } public List queryForAllShortcuts(UserHandle user) {