diff --git a/src/com/android/launcher3/graphics/LauncherIcons.java b/src/com/android/launcher3/graphics/LauncherIcons.java index 739eb04bd5..d955674926 100644 --- a/src/com/android/launcher3/graphics/LauncherIcons.java +++ b/src/com/android/launcher3/graphics/LauncherIcons.java @@ -320,6 +320,19 @@ public class LauncherIcons { return createShortcutIcon(shortcutInfo, context, badged, null); } + public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context, + final Bitmap fallbackIcon) { + Provider fallbackIconProvider = new Provider() { + @Override + public Bitmap get() { + // If the shortcut is pinned but no longer has an icon in the system, + // keep the current icon instead of reverting to the default icon. + return fallbackIcon; + } + }; + return createShortcutIcon(shortcutInfo, context, true, fallbackIconProvider); + } + public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context, boolean badged, @Nullable Provider fallbackIconProvider) { LauncherAppState app = LauncherAppState.getInstance(context); diff --git a/src/com/android/launcher3/model/ShortcutsChangedTask.java b/src/com/android/launcher3/model/ShortcutsChangedTask.java index 6f325858d7..17cc238d42 100644 --- a/src/com/android/launcher3/model/ShortcutsChangedTask.java +++ b/src/com/android/launcher3/model/ShortcutsChangedTask.java @@ -85,10 +85,10 @@ public class ShortcutsChangedTask extends BaseModelUpdateTask { removedShortcutInfos.addAll(shortcutInfos); continue; } - for (ShortcutInfo shortcutInfo : shortcutInfos) { + for (final ShortcutInfo shortcutInfo : shortcutInfos) { shortcutInfo.updateFromDeepShortcutInfo(fullDetails, context); - shortcutInfo.iconBitmap = - LauncherIcons.createShortcutIcon(fullDetails, context); + shortcutInfo.iconBitmap = LauncherIcons.createShortcutIcon(fullDetails, context, + shortcutInfo.iconBitmap); updatedShortcutInfos.add(shortcutInfo); } } diff --git a/src/com/android/launcher3/model/UserLockStateChangedTask.java b/src/com/android/launcher3/model/UserLockStateChangedTask.java index 5682006461..802771f048 100644 --- a/src/com/android/launcher3/model/UserLockStateChangedTask.java +++ b/src/com/android/launcher3/model/UserLockStateChangedTask.java @@ -85,7 +85,8 @@ public class UserLockStateChangedTask extends BaseModelUpdateTask { } si.isDisabled &= ~ShortcutInfo.FLAG_DISABLED_LOCKED_USER; si.updateFromDeepShortcutInfo(shortcut, context); - si.iconBitmap = LauncherIcons.createShortcutIcon(shortcut, context); + si.iconBitmap = LauncherIcons.createShortcutIcon(shortcut, context, + si.iconBitmap); } else { si.isDisabled |= ShortcutInfo.FLAG_DISABLED_LOCKED_USER; }