summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/WidgetPreviewLoader.java
diff options
context:
space:
mode:
authorHyunyoung Song <hyunyoungs@google.com>2016-03-01 11:57:44 -0800
committerHyunyoung Song <hyunyoungs@google.com>2016-03-01 11:57:44 -0800
commit3e840f4343086ed78a8ae44fd543a9863d868dc9 (patch)
tree3defaae7a71a3e6ecede428de464ffbf2660066b /src/com/android/launcher3/WidgetPreviewLoader.java
parent2cb92eb2bbfbd6ae4331657d3446f3f771aabd4b (diff)
downloadandroid_packages_apps_Trebuchet-3e840f4343086ed78a8ae44fd543a9863d868dc9.tar.gz
android_packages_apps_Trebuchet-3e840f4343086ed78a8ae44fd543a9863d868dc9.tar.bz2
android_packages_apps_Trebuchet-3e840f4343086ed78a8ae44fd543a9863d868dc9.zip
Prevent work profile widget DnD crash
b/26079469 Change-Id: I3d49ac498bbaaef8ca8a3051f5ab4b35ef771410
Diffstat (limited to 'src/com/android/launcher3/WidgetPreviewLoader.java')
-rw-r--r--src/com/android/launcher3/WidgetPreviewLoader.java30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index b27fa60b7..314dd8a60 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -65,7 +65,7 @@ public class WidgetPreviewLoader {
private final Context mContext;
private final IconCache mIconCache;
private final UserManagerCompat mUserManager;
- private final AppWidgetManagerCompat mManager;
+ private final AppWidgetManagerCompat mWidgetManager;
private final CacheDb mDb;
private final int mProfileBadgeMargin;
@@ -75,7 +75,7 @@ public class WidgetPreviewLoader {
public WidgetPreviewLoader(Context context, IconCache iconCache) {
mContext = context;
mIconCache = iconCache;
- mManager = AppWidgetManagerCompat.getInstance(context);
+ mWidgetManager = AppWidgetManagerCompat.getInstance(context);
mUserManager = UserManagerCompat.getInstance(context);
mDb = new CacheDb(context);
mWorkerHandler = new Handler(LauncherModel.getWorkerLooper());
@@ -139,7 +139,7 @@ public class WidgetPreviewLoader {
// should cache the string builder
if (o instanceof LauncherAppWidgetProviderInfo) {
LauncherAppWidgetProviderInfo info = (LauncherAppWidgetProviderInfo) o;
- return new WidgetCacheKey(info.provider, mManager.getUser(info), size);
+ return new WidgetCacheKey(info.provider, mWidgetManager.getUser(info), size);
} else {
ResolveInfo info = (ResolveInfo) o;
return new WidgetCacheKey(
@@ -193,7 +193,7 @@ public class WidgetPreviewLoader {
pkg = ((ResolveInfo) obj).activityInfo.packageName;
} else {
LauncherAppWidgetProviderInfo info = (LauncherAppWidgetProviderInfo) obj;
- user = mManager.getUser(info);
+ user = mWidgetManager.getUser(info);
pkg = info.provider.getPackageName();
}
@@ -305,6 +305,17 @@ public class WidgetPreviewLoader {
}
}
+ /**
+ * Generates the widget preview from either the {@link AppWidgetManagerCompat} or cache
+ * and add badge at the bottom right corner.
+ *
+ * @param launcher
+ * @param info information about the widget
+ * @param maxPreviewWidth width of the preview on either workspace or tray
+ * @param preview bitmap that can be recycled
+ * @param preScaledWidthOut return the width of the returned bitmap
+ * @return
+ */
public Bitmap generateWidgetPreview(Launcher launcher, LauncherAppWidgetProviderInfo info,
int maxPreviewWidth, Bitmap preview, int[] preScaledWidthOut) {
// Load the preview image if possible
@@ -312,7 +323,7 @@ public class WidgetPreviewLoader {
Drawable drawable = null;
if (info.previewImage != 0) {
- drawable = mManager.loadPreview(info);
+ drawable = mWidgetManager.loadPreview(info);
if (drawable != null) {
drawable = mutateOnMainThread(drawable);
} else {
@@ -327,6 +338,7 @@ public class WidgetPreviewLoader {
int previewWidth;
int previewHeight;
+
Bitmap tileBitmap = null;
if (widgetPreviewExists) {
@@ -398,7 +410,7 @@ public class WidgetPreviewLoader {
float iconScale = Math.min((float) smallestSide / (appIconSize + 2 * minOffset), scale);
try {
- Drawable icon = mManager.loadIcon(info, mIconCache);
+ Drawable icon = mWidgetManager.loadIcon(info, mIconCache);
if (icon != null) {
icon = mutateOnMainThread(icon);
int hoffset = (int) ((tileW - appIconSize * iconScale) / 2) + x;
@@ -408,11 +420,13 @@ public class WidgetPreviewLoader {
yoffset + (int) (appIconSize * iconScale));
icon.draw(c);
}
- } catch (Resources.NotFoundException e) { }
+ } catch (Resources.NotFoundException e) {
+ }
c.setBitmap(null);
}
+ int imageWidth = Math.min(preview.getWidth(), previewWidth + mProfileBadgeMargin);
int imageHeight = Math.min(preview.getHeight(), previewHeight + mProfileBadgeMargin);
- return mManager.getBadgeBitmap(info, preview, imageHeight);
+ return mWidgetManager.getBadgeBitmap(info, preview, imageWidth, imageHeight);
}
private Bitmap generateShortcutPreview(