Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fe66e3e authored by Tony Wickham's avatar Tony Wickham
Browse files

Use last saved icon if pinned shortcut is unpublished

Bug: 62814533
Change-Id: I683bd6abdf17defc55c0f17d8688951d4841c066
parent 6f7f4bb9
Loading
Loading
Loading
Loading
+19 −3
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import android.graphics.drawable.PaintDrawable;
import android.os.Build;
import android.os.Build;
import android.os.Process;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserHandle;
import android.support.annotation.Nullable;


import com.android.launcher3.AppInfo;
import com.android.launcher3.AppInfo;
import com.android.launcher3.IconCache;
import com.android.launcher3.IconCache;
@@ -45,6 +46,7 @@ import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.PackageItemInfo;
import com.android.launcher3.model.PackageItemInfo;
import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.util.Provider;


/**
/**
 * Helper methods for generating various launcher icons
 * Helper methods for generating various launcher icons
@@ -315,14 +317,28 @@ public class LauncherIcons {


    public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context,
    public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context,
            boolean badged) {
            boolean badged) {
        return createShortcutIcon(shortcutInfo, context, badged, null);
    }

    public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context,
            boolean badged, @Nullable Provider<Bitmap> fallbackIconProvider) {
        LauncherAppState app = LauncherAppState.getInstance(context);
        LauncherAppState app = LauncherAppState.getInstance(context);
        Drawable unbadgedDrawable = DeepShortcutManager.getInstance(context)
        Drawable unbadgedDrawable = DeepShortcutManager.getInstance(context)
                .getShortcutIconDrawable(shortcutInfo,
                .getShortcutIconDrawable(shortcutInfo,
                        app.getInvariantDeviceProfile().fillResIconDpi);
                        app.getInvariantDeviceProfile().fillResIconDpi);
        IconCache cache = app.getIconCache();
        IconCache cache = app.getIconCache();
        Bitmap unbadgedBitmap = unbadgedDrawable == null
        Bitmap unbadgedBitmap = null;
                ? cache.getDefaultIcon(Process.myUserHandle())
        if (unbadgedDrawable != null) {
                : LauncherIcons.createScaledBitmapWithoutShadow(unbadgedDrawable, context, 0);
            unbadgedBitmap = LauncherIcons.createScaledBitmapWithoutShadow(
                    unbadgedDrawable, context, 0);
        } else {
            if (fallbackIconProvider != null) {
                unbadgedBitmap = fallbackIconProvider.get();
            }
            if (unbadgedBitmap == null) {
                unbadgedBitmap = cache.getDefaultIcon(Process.myUserHandle());
            }
        }


        if (!badged) {
        if (!badged) {
            return unbadgedBitmap;
            return unbadgedBitmap;
+13 −2
Original line number Original line Diff line number Diff line
@@ -24,8 +24,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Handler;
import android.os.Looper;
import android.os.Process;
import android.os.Process;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.Trace;
import android.os.Trace;
@@ -66,6 +66,7 @@ import com.android.launcher3.util.LooperIdleLock;
import com.android.launcher3.util.ManagedProfileHeuristic;
import com.android.launcher3.util.ManagedProfileHeuristic;
import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.Provider;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
@@ -459,8 +460,18 @@ public class LoaderTask implements Runnable {
                                        continue;
                                        continue;
                                    }
                                    }
                                    info = new ShortcutInfo(pinnedShortcut, context);
                                    info = new ShortcutInfo(pinnedShortcut, context);
                                    final ShortcutInfo finalInfo = info;
                                    Provider<Bitmap> fallbackIconProvider = new Provider<Bitmap>() {
                                        @Override
                                        public Bitmap get() {
                                            // If the pinned deep shortcut is no longer published,
                                            // use the last saved icon instead of the default.
                                            return c.loadIcon(finalInfo);
                                        }
                                    };
                                    info.iconBitmap = LauncherIcons
                                    info.iconBitmap = LauncherIcons
                                            .createShortcutIcon(pinnedShortcut, context);
                                            .createShortcutIcon(pinnedShortcut, context,
                                                    true /* badged */, fallbackIconProvider);
                                    if (pmHelper.isAppSuspended(
                                    if (pmHelper.isAppSuspended(
                                            pinnedShortcut.getPackage(), info.user)) {
                                            pinnedShortcut.getPackage(), info.user)) {
                                        info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED;
                                        info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED;