Merge "Revert "fetch and update shortcut icons in background thread"" into ub-launcher3-master
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index 0b79dd2..8ebf464 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -17,7 +17,6 @@
package com.android.launcher3;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
-import static com.android.launcher3.util.ShortcutUtil.fetchAndUpdateShortcutIconAsync;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
@@ -483,7 +482,9 @@
return Pair.create(si, null);
} else if (shortcutInfo != null) {
WorkspaceItemInfo itemInfo = new WorkspaceItemInfo(shortcutInfo, mContext);
- fetchAndUpdateShortcutIconAsync(mContext, itemInfo, shortcutInfo, true);
+ LauncherIcons li = LauncherIcons.obtain(mContext);
+ itemInfo.applyFrom(li.createShortcutIcon(shortcutInfo));
+ li.recycle();
return Pair.create(itemInfo, shortcutInfo);
} else if (providerInfo != null) {
LauncherAppWidgetProviderInfo info = LauncherAppWidgetProviderInfo
diff --git a/src/com/android/launcher3/icons/LauncherIcons.java b/src/com/android/launcher3/icons/LauncherIcons.java
index 0f5d290..c6949af 100644
--- a/src/com/android/launcher3/icons/LauncherIcons.java
+++ b/src/com/android/launcher3/icons/LauncherIcons.java
@@ -24,7 +24,6 @@
import android.os.Process;
import androidx.annotation.Nullable;
-import androidx.annotation.WorkerThread;
import com.android.launcher3.AppInfo;
import com.android.launcher3.FastBitmapDrawable;
@@ -33,6 +32,7 @@
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.graphics.IconShape;
+import com.android.launcher3.icons.cache.BaseIconCache;
import com.android.launcher3.model.PackageItemInfo;
import com.android.launcher3.util.Themes;
@@ -114,37 +114,23 @@
}
// below methods should also migrate to BaseIconFactory
- @WorkerThread
+
public BitmapInfo createShortcutIcon(ShortcutInfo shortcutInfo) {
return createShortcutIcon(shortcutInfo, true /* badged */);
}
- @WorkerThread
public BitmapInfo createShortcutIcon(ShortcutInfo shortcutInfo, boolean badged) {
return createShortcutIcon(shortcutInfo, badged, null);
}
- @WorkerThread
- public BitmapInfo createShortcutIcon(ShortcutInfo shortcutInfo, boolean badged,
- @Nullable Supplier<ItemInfoWithIcon> fallbackIconProvider) {
- return createShortcutIcon(shortcutInfo, badged, true, fallbackIconProvider);
- }
-
- @WorkerThread
- public BitmapInfo createShortcutIcon(ShortcutInfo shortcutInfo, boolean badged,
- boolean useCache, @Nullable Supplier<ItemInfoWithIcon> fallbackIconProvider) {
+ public BitmapInfo createShortcutIcon(ShortcutInfo shortcutInfo,
+ boolean badged, @Nullable Supplier<ItemInfoWithIcon> fallbackIconProvider) {
IconCache cache = LauncherAppState.getInstance(mContext).getIconCache();
- final BitmapInfo bitmapInfo;
- if (useCache) {
- bitmapInfo = cache.getDeepShortcutTitleAndIcon(shortcutInfo);
- } else {
- bitmapInfo = new BitmapInfo();
- new ShortcutCachingLogic().loadIcon(mContext, shortcutInfo, bitmapInfo);
- }
+ BaseIconCache.CacheEntry entry = cache.getDeepShortcutTitleAndIcon(shortcutInfo);
final Bitmap unbadgedBitmap;
- if (bitmapInfo.icon != null) {
- unbadgedBitmap = bitmapInfo.icon;
+ if (entry.icon != null) {
+ unbadgedBitmap = entry.icon;
} else {
if (fallbackIconProvider != null) {
// Fallback icons are already badged and with appropriate shadow
diff --git a/src/com/android/launcher3/pm/PinRequestHelper.java b/src/com/android/launcher3/pm/PinRequestHelper.java
index 5b6b56d..68ea6c4 100644
--- a/src/com/android/launcher3/pm/PinRequestHelper.java
+++ b/src/com/android/launcher3/pm/PinRequestHelper.java
@@ -17,7 +17,6 @@
package com.android.launcher3.pm;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
-import static com.android.launcher3.util.ShortcutUtil.fetchAndUpdateShortcutIconAsync;
import android.annotation.TargetApi;
import android.content.Context;
@@ -30,7 +29,9 @@
import androidx.annotation.Nullable;
+import com.android.launcher3.LauncherAppState;
import com.android.launcher3.WorkspaceItemInfo;
+import com.android.launcher3.icons.LauncherIcons;
public class PinRequestHelper {
@@ -80,7 +81,11 @@
ShortcutInfo si = request.getShortcutInfo();
WorkspaceItemInfo info = new WorkspaceItemInfo(si, context);
// Apply the unbadged icon and fetch the actual icon asynchronously.
- fetchAndUpdateShortcutIconAsync(context, info, si, false);
+ LauncherIcons li = LauncherIcons.obtain(context);
+ info.applyFrom(li.createShortcutIcon(si, false /* badged */));
+ li.recycle();
+ LauncherAppState.getInstance(context).getModel()
+ .updateAndBindWorkspaceItem(info, si);
return info;
} else {
return null;
diff --git a/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
index 408ced2..ee97641 100644
--- a/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
+++ b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
@@ -26,7 +26,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.Utilities;
import com.android.launcher3.graphics.DragPreviewProvider;
-import com.android.launcher3.icons.BitmapRenderer;
/**
* Extension of {@link DragPreviewProvider} which generates bitmaps scaled to the default icon size.
@@ -40,22 +39,22 @@
mPositionShift = shift;
}
- @Override
public Bitmap createDragBitmap() {
- int size = Launcher.getLauncher(mView.getContext()).getDeviceProfile().iconSizePx;
- return BitmapRenderer.createHardwareBitmap(
- size + blurSizeOutline,
- size + blurSizeOutline,
- (c) -> drawDragViewOnBackground(c, size));
- }
-
- private void drawDragViewOnBackground(Canvas canvas, float size) {
Drawable d = mView.getBackground();
Rect bounds = getDrawableBounds(d);
+
+ int size = Launcher.getLauncher(mView.getContext()).getDeviceProfile().iconSizePx;
+ final Bitmap b = Bitmap.createBitmap(
+ size + blurSizeOutline,
+ size + blurSizeOutline,
+ Bitmap.Config.ARGB_8888);
+
+ Canvas canvas = new Canvas(b);
canvas.translate(blurSizeOutline / 2, blurSizeOutline / 2);
- canvas.scale(size / bounds.width(), size / bounds.height(), 0, 0);
+ canvas.scale(((float) size) / bounds.width(), ((float) size) / bounds.height(), 0, 0);
canvas.translate(bounds.left, bounds.top);
d.draw(canvas);
+ return b;
}
@Override
diff --git a/src/com/android/launcher3/util/ShortcutUtil.java b/src/com/android/launcher3/util/ShortcutUtil.java
index a69cd6c..49c97da 100644
--- a/src/com/android/launcher3/util/ShortcutUtil.java
+++ b/src/com/android/launcher3/util/ShortcutUtil.java
@@ -15,20 +15,10 @@
*/
package com.android.launcher3.util;
-import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
-
-import android.content.Context;
-import android.content.pm.ShortcutInfo;
-
-import androidx.annotation.NonNull;
-
import com.android.launcher3.ItemInfo;
-import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.Utilities;
import com.android.launcher3.WorkspaceItemInfo;
-import com.android.launcher3.icons.BitmapInfo;
-import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.shortcuts.ShortcutKey;
@@ -71,26 +61,6 @@
&& info instanceof WorkspaceItemInfo;
}
- /**
- * Fetch the shortcut icon in background, then update the UI.
- */
- public static void fetchAndUpdateShortcutIconAsync(
- @NonNull Context context, @NonNull WorkspaceItemInfo info, @NonNull ShortcutInfo si,
- boolean badged) {
- if (info.iconBitmap == null) {
- // use low res icon as placeholder while the actual icon is being fetched.
- info.iconBitmap = BitmapInfo.LOW_RES_ICON;
- info.iconColor = Themes.getColorAccent(context);
- }
- MODEL_EXECUTOR.execute(() -> {
- LauncherIcons li = LauncherIcons.obtain(context);
- BitmapInfo bitmapInfo = li.createShortcutIcon(si, badged, true, null);
- info.applyFrom(bitmapInfo);
- li.recycle();
- LauncherAppState.getInstance(context).getModel().updateAndBindWorkspaceItem(info, si);
- });
- }
-
private static boolean isActive(ItemInfo info) {
boolean isLoading = info instanceof WorkspaceItemInfo
&& ((WorkspaceItemInfo) info).hasPromiseIconUi();