Merge "Fixing missing user check when updating shortcuts for an app" into ub-launcher3-calgary
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 15d4f52..21d9d5c 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -37,6 +37,7 @@
     <color name="outline_color">#FFFFFFFF</color>
     <color name="all_apps_divider_color">#1E000000</color>
     <color name="all_apps_caret_color">#FFFFFFFF</color>
+    <color name="all_apps_caret_shadow_color">#22000000</color>
     <color name="all_apps_container_color">#FFF2F2F2</color>
 
     <color name="spring_loaded_panel_color">#40FFFFFF</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index cbbafac..54b3d09 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -75,6 +75,7 @@
     <dimen name="all_apps_background_canvas_width">700dp</dimen>
     <dimen name="all_apps_background_canvas_height">475dp</dimen>
     <dimen name="all_apps_caret_stroke_width">2dp</dimen>
+    <dimen name="all_apps_caret_shadow_spread">1dp</dimen>
     <dimen name="all_apps_caret_size">13dp</dimen>
     <dimen name="all_apps_caret_workspace_offset">4dp</dimen>
 
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index ac86f0b7..5828dfc 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -392,7 +392,7 @@
             // In portrait, we want the pages spaced such that there is no
             // overhang of the previous / next page into the current page viewport.
             // We assume symmetrical padding in portrait mode.
-            return Math.max(defaultPageSpacingPx, 2 * getWorkspacePadding(null).left);
+            return Math.max(defaultPageSpacingPx, getWorkspacePadding(null).left + 1);
         }
     }
 
diff --git a/src/com/android/launcher3/pageindicators/CaretDrawable.java b/src/com/android/launcher3/pageindicators/CaretDrawable.java
index e5d128e..fcf3d23 100644
--- a/src/com/android/launcher3/pageindicators/CaretDrawable.java
+++ b/src/com/android/launcher3/pageindicators/CaretDrawable.java
@@ -34,30 +34,43 @@
 
     private float mCaretProgress;
 
-    private Paint mPaint = new Paint();
+    private Paint mShadowPaint = new Paint();
+    private Paint mCaretPaint = new Paint();
     private Path mPath = new Path();
 
     public CaretDrawable(Context context) {
         final Resources res = context.getResources();
 
-        mPaint.setColor(res.getColor(R.color.all_apps_caret_color));
-        mPaint.setAntiAlias(true);
-        mPaint.setStrokeWidth(res.getDimensionPixelSize(R.dimen.all_apps_caret_stroke_width));
-        mPaint.setStyle(Paint.Style.STROKE);
-        mPaint.setStrokeCap(Paint.Cap.SQUARE);
-        mPaint.setStrokeJoin(Paint.Join.MITER);
+        final int strokeWidth = res.getDimensionPixelSize(R.dimen.all_apps_caret_stroke_width);
+        final int shadowSpread = res.getDimensionPixelSize(R.dimen.all_apps_caret_shadow_spread);
+
+        mCaretPaint.setColor(res.getColor(R.color.all_apps_caret_color));
+        mCaretPaint.setAntiAlias(true);
+        mCaretPaint.setStrokeWidth(strokeWidth);
+        mCaretPaint.setStyle(Paint.Style.STROKE);
+        mCaretPaint.setStrokeCap(Paint.Cap.SQUARE);
+        mCaretPaint.setStrokeJoin(Paint.Join.MITER);
+
+        mShadowPaint.setColor(res.getColor(R.color.all_apps_caret_shadow_color));
+        mShadowPaint.setAntiAlias(true);
+        mShadowPaint.setStrokeWidth(strokeWidth + (shadowSpread * 2));
+        mShadowPaint.setStyle(Paint.Style.STROKE);
+        mShadowPaint.setStrokeCap(Paint.Cap.ROUND);
+        mShadowPaint.setStrokeJoin(Paint.Join.ROUND);
     }
 
     @Override
     public void draw(Canvas canvas) {
-        if (Float.compare(mPaint.getAlpha(), 0f) == 0) {
+        // Assumes caret paint is more important than shadow paint
+        if (Float.compare(mCaretPaint.getAlpha(), 0f) == 0) {
             return;
         }
 
-        final float width = getBounds().width() - mPaint.getStrokeWidth();
-        final float height = getBounds().height() - mPaint.getStrokeWidth();
-        final float left = getBounds().left + (mPaint.getStrokeWidth() / 2);
-        final float top = getBounds().top + (mPaint.getStrokeWidth() / 2);
+        // Assumes shadow stroke width is larger
+        final float width = getBounds().width() - mShadowPaint.getStrokeWidth();
+        final float height = getBounds().height() - mShadowPaint.getStrokeWidth();
+        final float left = getBounds().left + (mShadowPaint.getStrokeWidth() / 2);
+        final float top = getBounds().top + (mShadowPaint.getStrokeWidth() / 2);
 
         final float verticalInset = (height / 4);
         final float caretHeight = (height - (verticalInset * 2));
@@ -67,7 +80,8 @@
         mPath.lineTo(left + (width / 2), top + caretHeight * mCaretProgress);
         mPath.lineTo(left + width, top + caretHeight * (1 - mCaretProgress));
 
-        canvas.drawPath(mPath, mPaint);
+        canvas.drawPath(mPath, mShadowPaint);
+        canvas.drawPath(mPath, mCaretPaint);
     }
 
     @Override
@@ -84,7 +98,8 @@
 
     @Override
     public void setAlpha(int alpha) {
-        mPaint.setAlpha(alpha);
+        mCaretPaint.setAlpha(alpha);
+        mShadowPaint.setAlpha(alpha);
         invalidateSelf();
     }
 
diff --git a/src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java b/src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java
index 45df369..fbfb61b 100644
--- a/src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java
+++ b/src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java
@@ -148,7 +148,8 @@
         super.onLayout(changed, left, top, right, bottom);
         // Top/center align the caret in the page indicator space
         int l = (right - left) / 2 - mCaretSizePx / 2;
-        getCaretDrawable().setBounds(l, mCaretWorkspaceOffsetPx, l + mCaretSizePx, mCaretSizePx);
+        getCaretDrawable().setBounds(l, mCaretWorkspaceOffsetPx, l + mCaretSizePx,
+                mCaretWorkspaceOffsetPx + mCaretSizePx);
 
         // The touch area is expanded below this view by #mTouchExtensionHeight
         // which extends to the top of the hotseat.