summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/launcher3/InstallShortcutReceiver.java4
-rw-r--r--src/com/android/launcher3/LauncherModel.java14
-rw-r--r--src/com/android/launcher3/ShortcutInfo.java44
-rw-r--r--src/com/android/launcher3/graphics/LauncherIcons.java47
-rw-r--r--src/com/android/launcher3/model/ShortcutsChangedTask.java3
-rw-r--r--src/com/android/launcher3/model/UserLockStateChangedTask.java2
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutView.java23
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java40
8 files changed, 92 insertions, 85 deletions
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index ad10523ef..a35469e0c 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -457,7 +457,9 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
}
return si;
} else if (shortcutInfo != null) {
- return new ShortcutInfo(shortcutInfo, mContext);
+ ShortcutInfo si = new ShortcutInfo(shortcutInfo, mContext);
+ si.iconBitmap = LauncherIcons.createShortcutIcon(shortcutInfo, mContext);
+ return si;
} else if (providerInfo != null) {
LauncherAppWidgetProviderInfo info = LauncherAppWidgetProviderInfo
.fromProviderInfo(mContext, providerInfo);
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 2fc150219..247a295d6 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -49,6 +49,7 @@ import com.android.launcher3.config.ProviderConfig;
import com.android.launcher3.dynamicui.ExtractionUtils;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
+import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.logging.FileLog;
import com.android.launcher3.model.AddWorkspaceItemsTask;
import com.android.launcher3.model.BgDataModel;
@@ -1330,6 +1331,8 @@ public class LauncherModel extends BroadcastReceiver
continue;
}
info = new ShortcutInfo(pinnedShortcut, context);
+ info.iconBitmap = LauncherIcons
+ .createShortcutIcon(pinnedShortcut, context);
intent = info.intent;
} else {
// Create a shortcut info in disabled mode for now.
@@ -2201,6 +2204,17 @@ public class LauncherModel extends BroadcastReceiver
}
}
+ public void updateAndBindShortcutInfo(final ShortcutInfo si, final ShortcutInfoCompat info) {
+ updateAndBindShortcutInfo(new Provider<ShortcutInfo>() {
+ @Override
+ public ShortcutInfo get() {
+ si.updateFromDeepShortcutInfo(info, mApp.getContext());
+ si.iconBitmap = LauncherIcons.createShortcutIcon(info, mApp.getContext());
+ return si;
+ }
+ });
+ }
+
/**
* Utility method to update a shortcut on the background thread.
*/
diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java
index 976d73344..1a423957a 100644
--- a/src/com/android/launcher3/ShortcutInfo.java
+++ b/src/com/android/launcher3/ShortcutInfo.java
@@ -17,21 +17,13 @@
package com.android.launcher3;
import android.annotation.TargetApi;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.os.Process;
-import android.os.UserHandle;
import android.text.TextUtils;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.compat.UserManagerCompat;
-import com.android.launcher3.graphics.LauncherIcons;
-import com.android.launcher3.model.PackageItemInfo;
-import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.util.ContentWriter;
@@ -225,42 +217,6 @@ public class ShortcutInfo extends ItemInfoWithIcon {
isDisabled |= FLAG_DISABLED_BY_PUBLISHER;
}
disabledMessage = shortcutInfo.getDisabledMessage();
-
- // TODO: Use cache for this
- LauncherAppState launcherAppState = LauncherAppState.getInstance(context);
- Drawable unbadgedDrawable = DeepShortcutManager.getInstance(context)
- .getShortcutIconDrawable(shortcutInfo,
- launcherAppState.getInvariantDeviceProfile().fillResIconDpi);
-
- IconCache cache = launcherAppState.getIconCache();
- Bitmap unbadgedBitmap = unbadgedDrawable == null
- ? cache.getDefaultIcon(Process.myUserHandle())
- : LauncherIcons.createScaledBitmapWithoutShadow(unbadgedDrawable, context);
- iconBitmap = getBadgedIcon(unbadgedBitmap, shortcutInfo, cache, context);
- }
-
- protected Bitmap getBadgedIcon(Bitmap unbadgedBitmap, ShortcutInfoCompat shortcutInfo,
- IconCache cache, Context context) {
- unbadgedBitmap = LauncherIcons.addShadowToIcon(unbadgedBitmap, context);
-
- final Bitmap badgeBitmap;
- ComponentName cn = shortcutInfo.getActivity();
- if (cn != null) {
- // Get the app info for the source activity.
- AppInfo appInfo = new AppInfo();
- appInfo.user = user;
- appInfo.componentName = cn;
- appInfo.intent = new Intent(Intent.ACTION_MAIN)
- .addCategory(Intent.CATEGORY_LAUNCHER)
- .setComponent(cn);
- cache.getTitleAndIcon(appInfo, false);
- badgeBitmap = appInfo.iconBitmap;
- } else {
- PackageItemInfo pkgInfo = new PackageItemInfo(shortcutInfo.getPackage());
- cache.getTitleAndIconForApp(pkgInfo, false);
- badgeBitmap = pkgInfo.iconBitmap;
- }
- return LauncherIcons.badgeWithBitmap(unbadgedBitmap, badgeBitmap, context);
}
/** Returns the ShortcutInfo id associated with the deep shortcut. */
diff --git a/src/com/android/launcher3/graphics/LauncherIcons.java b/src/com/android/launcher3/graphics/LauncherIcons.java
index 8d8f3d914..2ae7a4af4 100644
--- a/src/com/android/launcher3/graphics/LauncherIcons.java
+++ b/src/com/android/launcher3/graphics/LauncherIcons.java
@@ -16,7 +16,9 @@
package com.android.launcher3.graphics;
+import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.content.Intent.ShortcutIconResource;
import android.content.pm.PackageManager;
import android.content.res.Resources;
@@ -32,11 +34,16 @@ import android.graphics.drawable.PaintDrawable;
import android.os.Process;
import android.os.UserHandle;
+import com.android.launcher3.AppInfo;
+import com.android.launcher3.IconCache;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.config.ProviderConfig;
+import com.android.launcher3.model.PackageItemInfo;
+import com.android.launcher3.shortcuts.DeepShortcutManager;
+import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import java.lang.reflect.Method;
@@ -230,6 +237,46 @@ public class LauncherIcons {
}
}
+ public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context) {
+ return createShortcutIcon(shortcutInfo, context, true /* badged */);
+ }
+
+ public static Bitmap createShortcutIcon(ShortcutInfoCompat shortcutInfo, Context context,
+ boolean badged) {
+ LauncherAppState app = LauncherAppState.getInstance(context);
+ Drawable unbadgedDrawable = DeepShortcutManager.getInstance(context)
+ .getShortcutIconDrawable(shortcutInfo,
+ app.getInvariantDeviceProfile().fillResIconDpi);
+ IconCache cache = app.getIconCache();
+ Bitmap unbadgedBitmap = unbadgedDrawable == null
+ ? cache.getDefaultIcon(Process.myUserHandle())
+ : LauncherIcons.createScaledBitmapWithoutShadow(unbadgedDrawable, context);
+
+ if (!badged) {
+ return unbadgedBitmap;
+ }
+ unbadgedBitmap = LauncherIcons.addShadowToIcon(unbadgedBitmap, context);
+
+ final Bitmap badgeBitmap;
+ ComponentName cn = shortcutInfo.getActivity();
+ if (cn != null) {
+ // Get the app info for the source activity.
+ AppInfo appInfo = new AppInfo();
+ appInfo.user = shortcutInfo.getUserHandle();
+ appInfo.componentName = cn;
+ appInfo.intent = new Intent(Intent.ACTION_MAIN)
+ .addCategory(Intent.CATEGORY_LAUNCHER)
+ .setComponent(cn);
+ cache.getTitleAndIcon(appInfo, false);
+ badgeBitmap = appInfo.iconBitmap;
+ } else {
+ PackageItemInfo pkgInfo = new PackageItemInfo(shortcutInfo.getPackage());
+ cache.getTitleAndIconForApp(pkgInfo, false);
+ badgeBitmap = pkgInfo.iconBitmap;
+ }
+ return badgeWithBitmap(unbadgedBitmap, badgeBitmap, context);
+ }
+
/**
* An extension of {@link BitmapDrawable} which returns the bitmap pixel size as intrinsic size.
* This allows the badging to be done based on the action bitmap size rather than
diff --git a/src/com/android/launcher3/model/ShortcutsChangedTask.java b/src/com/android/launcher3/model/ShortcutsChangedTask.java
index 67bec6437..ba7112fd9 100644
--- a/src/com/android/launcher3/model/ShortcutsChangedTask.java
+++ b/src/com/android/launcher3/model/ShortcutsChangedTask.java
@@ -24,6 +24,7 @@ import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.ShortcutInfo;
+import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.util.MultiHashMap;
@@ -87,6 +88,8 @@ public class ShortcutsChangedTask extends ExtendedModelTask {
}
for (ShortcutInfo shortcutInfo : shortcutInfos) {
shortcutInfo.updateFromDeepShortcutInfo(fullDetails, context);
+ shortcutInfo.iconBitmap =
+ LauncherIcons.createShortcutIcon(fullDetails, context);
updatedShortcutInfos.add(shortcutInfo);
}
}
diff --git a/src/com/android/launcher3/model/UserLockStateChangedTask.java b/src/com/android/launcher3/model/UserLockStateChangedTask.java
index a214a2915..25f2f9d50 100644
--- a/src/com/android/launcher3/model/UserLockStateChangedTask.java
+++ b/src/com/android/launcher3/model/UserLockStateChangedTask.java
@@ -25,6 +25,7 @@ import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.compat.UserManagerCompat;
+import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.shortcuts.ShortcutKey;
@@ -85,6 +86,7 @@ public class UserLockStateChangedTask extends ExtendedModelTask {
}
si.isDisabled &= ~ShortcutInfo.FLAG_DISABLED_LOCKED_USER;
si.updateFromDeepShortcutInfo(shortcut, context);
+ si.iconBitmap = LauncherIcons.createShortcutIcon(shortcut, context);
} else {
si.isDisabled |= ShortcutInfo.FLAG_DISABLED_LOCKED_USER;
}
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutView.java b/src/com/android/launcher3/shortcuts/DeepShortcutView.java
index 04c71ecd2..6e9810007 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutView.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutView.java
@@ -31,10 +31,8 @@ import com.android.launcher3.LogAccelerateInterpolator;
import com.android.launcher3.R;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
-import com.android.launcher3.shortcuts.DeepShortcutsContainer.UnbadgedShortcutInfo;
import com.android.launcher3.util.PillRevealOutlineProvider;
import com.android.launcher3.util.PillWidthRevealOutlineProvider;
-import com.android.launcher3.util.Provider;
/**
* A {@link android.widget.FrameLayout} that contains a {@link DeepShortcutView}.
@@ -50,7 +48,8 @@ public class DeepShortcutView extends FrameLayout implements ValueAnimator.Anima
private View mIconView;
private float mOpenAnimationProgress;
- private UnbadgedShortcutInfo mInfo;
+ private ShortcutInfo mInfo;
+ private ShortcutInfoCompat mDetail;
public DeepShortcutView(Context context) {
this(context, null, 0);
@@ -92,18 +91,20 @@ public class DeepShortcutView extends FrameLayout implements ValueAnimator.Anima
}
/** package private **/
- void applyShortcutInfo(UnbadgedShortcutInfo info, DeepShortcutsContainer container) {
+ void applyShortcutInfo(ShortcutInfo info, ShortcutInfoCompat detail,
+ DeepShortcutsContainer container) {
mInfo = info;
+ mDetail = detail;
mBubbleText.applyFromShortcutInfo(info);
mIconView.setBackground(mBubbleText.getIcon());
// Use the long label as long as it exists and fits.
- CharSequence longLabel = info.mDetail.getLongLabel();
+ CharSequence longLabel = mDetail.getLongLabel();
int availableWidth = mBubbleText.getWidth() - mBubbleText.getTotalPaddingLeft()
- mBubbleText.getTotalPaddingRight();
boolean usingLongLabel = !TextUtils.isEmpty(longLabel)
&& mBubbleText.getPaint().measureText(longLabel.toString()) <= availableWidth;
- mBubbleText.setText(usingLongLabel ? longLabel : info.mDetail.getShortLabel());
+ mBubbleText.setText(usingLongLabel ? longLabel : mDetail.getShortLabel());
// TODO: Add the click handler to this view directly and not the child view.
mBubbleText.setOnClickListener(Launcher.getLauncher(getContext()));
@@ -118,14 +119,8 @@ public class DeepShortcutView extends FrameLayout implements ValueAnimator.Anima
final ShortcutInfo badged = new ShortcutInfo(mInfo);
// Queue an update task on the worker thread. This ensures that the badged
// shortcut eventually gets its icon updated.
- Launcher.getLauncher(getContext()).getModel().updateAndBindShortcutInfo(
- new Provider<ShortcutInfo>() {
- @Override
- public ShortcutInfo get() {
- badged.updateFromDeepShortcutInfo(mInfo.mDetail, getContext());
- return badged;
- }
- });
+ Launcher.getLauncher(getContext()).getModel()
+ .updateAndBindShortcutInfo(badged, mDetail);
return badged;
}
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
index e547f4468..172954e53 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
@@ -25,7 +25,6 @@ import android.annotation.TargetApi;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.Resources;
-import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.PointF;
@@ -49,7 +48,6 @@ import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DragSource;
import com.android.launcher3.DropTarget;
-import com.android.launcher3.IconCache;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAnimUtils;
@@ -65,6 +63,7 @@ import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.dragndrop.DragView;
+import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.graphics.TriangleShape;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
import com.android.launcher3.userevent.nano.LauncherLogProto.ItemType;
@@ -174,8 +173,11 @@ public class DeepShortcutsContainer extends AbstractFloatingView
}
for (int i = 0; i < shortcuts.size(); i++) {
final ShortcutInfoCompat shortcut = shortcuts.get(i);
- uiHandler.post(new UpdateShortcutChild(
- i, new UnbadgedShortcutInfo(shortcut, mLauncher)));
+ ShortcutInfo si = new ShortcutInfo(shortcut, mLauncher);
+ // Use unbadged icon for the menu.
+ si.iconBitmap = LauncherIcons.createShortcutIcon(
+ shortcut, mLauncher, false /* badged */);
+ uiHandler.post(new UpdateShortcutChild(i, si, shortcut));
}
}
});
@@ -183,18 +185,22 @@ public class DeepShortcutsContainer extends AbstractFloatingView
/** Updates the child of this container at the given index based on the given shortcut info. */
private class UpdateShortcutChild implements Runnable {
- private int mShortcutChildIndex;
- private UnbadgedShortcutInfo mShortcutChildInfo;
+ private final int mShortcutChildIndex;
+ private final ShortcutInfo mShortcutChildInfo;
+ private final ShortcutInfoCompat mDetail;
- public UpdateShortcutChild(int shortcutChildIndex, UnbadgedShortcutInfo shortcutChildInfo) {
+
+ public UpdateShortcutChild(int shortcutChildIndex, ShortcutInfo shortcutChildInfo,
+ ShortcutInfoCompat detail) {
mShortcutChildIndex = shortcutChildIndex;
mShortcutChildInfo = shortcutChildInfo;
+ mDetail = detail;
}
@Override
public void run() {
getShortcutAt(mShortcutChildIndex)
- .applyShortcutInfo(mShortcutChildInfo, DeepShortcutsContainer.this);
+ .applyShortcutInfo(mShortcutChildInfo, mDetail, DeepShortcutsContainer.this);
}
}
@@ -677,24 +683,6 @@ public class DeepShortcutsContainer extends AbstractFloatingView
}
/**
- * Extension of {@link ShortcutInfo} which does not badge the icons.
- */
- static class UnbadgedShortcutInfo extends ShortcutInfo {
- public final ShortcutInfoCompat mDetail;
-
- public UnbadgedShortcutInfo(ShortcutInfoCompat shortcutInfo, Context context) {
- super(shortcutInfo, context);
- mDetail = shortcutInfo;
- }
-
- @Override
- protected Bitmap getBadgedIcon(Bitmap unbadgedBitmap, ShortcutInfoCompat shortcutInfo,
- IconCache cache, Context context) {
- return unbadgedBitmap;
- }
- }
-
- /**
* Returns a DeepShortcutsContainer which is already open or null
*/
public static DeepShortcutsContainer getOpen(Launcher launcher) {