Merge "Place the work profile badge in the correct bottom right (left for RTL) location" into ub-launcher3-burnaby
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b5acfbd..5e1f3de 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -118,4 +118,5 @@
 <!-- Sizes for managed profile badges -->
     <dimen name="profile_badge_size">24dp</dimen>
     <dimen name="profile_badge_margin">4dp</dimen>
+    <dimen name="profile_badge_minimum_top">2dp</dimen>
 </resources>
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index 93bfeaf..fe09fb6 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -444,7 +444,7 @@
             } catch (Resources.NotFoundException e) { }
             c.setBitmap(null);
         }
-        return mManager.getBadgeBitmap(info, preview);
+        return mManager.getBadgeBitmap(info, preview, Math.min(preview.getHeight(), previewHeight));
     }
 
     private Bitmap generateShortcutPreview(
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
index e41a66f..7aa36d4 100644
--- a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
+++ b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
@@ -78,6 +78,7 @@
 
     public abstract Drawable loadIcon(LauncherAppWidgetProviderInfo info, IconCache cache);
 
-    public abstract Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap);
+    public abstract Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap,
+            int imageHeight);
 
 }
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java
index 8cecb96..a64c705 100644
--- a/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java
+++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatV16.java
@@ -87,7 +87,7 @@
     }
 
     @Override
-    public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap) {
+    public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap, int imageHeight) {
         return bitmap;
     }
 }
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java
index 6c3e092..96ace84 100644
--- a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java
+++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java
@@ -108,7 +108,7 @@
     }
 
     @Override
-    public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap) {
+    public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap, int imageHeight) {
         if (info.isCustomWidget || info.getProfile().equals(android.os.Process.myUserHandle())) {
             return bitmap;
         }
@@ -117,9 +117,10 @@
         final Resources res = mContext.getResources();
         final int badgeSize = res.getDimensionPixelSize(R.dimen.profile_badge_size);
         final int badgeMargin = res.getDimensionPixelSize(R.dimen.profile_badge_margin);
+        final int badgeMinTop = res.getDimensionPixelSize(R.dimen.profile_badge_minimum_top);
         final Rect badgeLocation = new Rect(0, 0, badgeSize, badgeSize);
 
-        final int top = bitmap.getHeight() - badgeSize - badgeMargin;
+        final int top = Math.max(imageHeight - badgeSize - badgeMargin, badgeMinTop);
         if (res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
             badgeLocation.offset(badgeMargin, top);
         } else {
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index 7ca4df9..aade85f 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -62,7 +62,7 @@
     private ImageView mWidgetImage;
     private TextView mWidgetName;
     private TextView mWidgetDims;
-    private final Rect mOriginalImagePadding = new Rect();
+    private final Rect mOrigImgPadding = new Rect();
 
     private String mDimensionsFormatString;
     private boolean mIsAppWidget;
@@ -102,10 +102,10 @@
         super.onFinishInflate();
 
         mWidgetImage = (ImageView) findViewById(R.id.widget_preview);
-        mOriginalImagePadding.left = mWidgetImage.getPaddingLeft();
-        mOriginalImagePadding.top = mWidgetImage.getPaddingTop();
-        mOriginalImagePadding.right = mWidgetImage.getPaddingRight();
-        mOriginalImagePadding.bottom = mWidgetImage.getPaddingBottom();
+        mOrigImgPadding.left = mWidgetImage.getPaddingLeft();
+        mOrigImgPadding.top = mWidgetImage.getPaddingTop();
+        mOrigImgPadding.right = mWidgetImage.getPaddingRight();
+        mOrigImgPadding.bottom = mWidgetImage.getPaddingBottom();
 
         mWidgetName = ((TextView) findViewById(R.id.widget_name));
         mWidgetDims = ((TextView) findViewById(R.id.widget_dims));
@@ -164,6 +164,7 @@
 
     public int[] getPreviewSize() {
         int[] maxSize = new int[2];
+
         maxSize[0] = mPresetPreviewSize;
         maxSize[1] = mPresetPreviewSize;
         return maxSize;
@@ -171,25 +172,21 @@
 
     public void applyPreview(Bitmap bitmap) {
         FastBitmapDrawable preview = new FastBitmapDrawable(bitmap);
-        if (DEBUG) {
-            Log.d(TAG, String.format("[tag=%s] applyPreview preview: %s",
-                    getTagToString(), preview));
-        }
+
         if (preview != null) {
             mWidgetImage.setImageDrawable(preview);
+
             if (mIsAppWidget) {
                 // center horizontally
                 int[] imageSize = getPreviewSize();
                 int centerAmount = (imageSize[0] - preview.getIntrinsicWidth()) / 2;
-                mWidgetImage.setPadding(mOriginalImagePadding.left + centerAmount,
-                        mOriginalImagePadding.top,
-                        mOriginalImagePadding.right,
-                        mOriginalImagePadding.bottom);
+                mWidgetImage.setPadding(mOrigImgPadding.left + centerAmount,
+                        mOrigImgPadding.top,
+                        mOrigImgPadding.right,
+                        mOrigImgPadding.bottom);
             }
             mWidgetImage.setAlpha(0f);
             mWidgetImage.animate().alpha(1.0f).setDuration(FADE_IN_DURATION_MS);
-            // TODO(hyunyoungs): figure out why this has to be called explicitly.
-            mWidgetImage.requestLayout();
         }
     }
 
@@ -202,11 +199,6 @@
             Log.d(TAG, String.format("[tag=%s] ensurePreview (%d, %d):",
                     getTagToString(), size[0], size[1]));
         }
-
-        if (size[0] <= 0 || size[1] <= 0) {
-            addOnLayoutChangeListener(this);
-            return;
-        }
         Bitmap[] immediateResult = new Bitmap[1];
         mActiveRequest = mWidgetPreviewLoader.getPreview(mInfo, size[0], size[1], this,
                 immediateResult);
diff --git a/src/com/android/launcher3/widget/WidgetImageView.java b/src/com/android/launcher3/widget/WidgetImageView.java
index 75167bc..f1eaf64 100644
--- a/src/com/android/launcher3/widget/WidgetImageView.java
+++ b/src/com/android/launcher3/widget/WidgetImageView.java
@@ -22,18 +22,11 @@
 import android.widget.ImageView;
 
 public class WidgetImageView extends ImageView {
-    public boolean mAllowRequestLayout = true;
 
     public WidgetImageView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
-    public void requestLayout() {
-        if (mAllowRequestLayout) {
-            super.requestLayout();
-        }
-    }
-
     @Override
     protected void onDraw(Canvas canvas) {
         canvas.save();
diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java
index 84884c4..2dbe7a5 100644
--- a/src/com/android/launcher3/widget/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java
@@ -151,8 +151,8 @@
                 widget.setTag(pasi);
                 widget.applyFromResolveInfo(mLauncher.getPackageManager(), info, mWidgetPreviewLoader);
             }
-            widget.setVisibility(View.VISIBLE);
             widget.ensurePreview();
+            widget.setVisibility(View.VISIBLE);
         }
     }