Prevent work profile widget DnD crash
b/26079469

Change-Id: I3d49ac498bbaaef8ca8a3051f5ab4b35ef771410
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index b27fa60..314dd8a 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -65,7 +65,7 @@
     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 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 @@
         // 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 @@
                 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 @@
         }
     }
 
+    /**
+     * 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 @@
 
         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 @@
 
         int previewWidth;
         int previewHeight;
+
         Bitmap tileBitmap = null;
 
         if (widgetPreviewExists) {
@@ -398,7 +410,7 @@
             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 @@
                             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(