Fixing overscroll with single page (issue 10937081)

-> Also fixing asymmetrical assets (10951956)
-> Also fixing camera distance to improve overscroll effect

Change-Id: If229c7b8a0c80073f6dea89d5fb009a0e2f5845f
diff --git a/res/drawable-hdpi/overscroll_glow_left.9.png b/res/drawable-hdpi/overscroll_glow_left.9.png
index 782ecf1..aaf43c7 100644
--- a/res/drawable-hdpi/overscroll_glow_left.9.png
+++ b/res/drawable-hdpi/overscroll_glow_left.9.png
Binary files differ
diff --git a/res/drawable-mdpi/overscroll_glow_left.9.png b/res/drawable-mdpi/overscroll_glow_left.9.png
index 147e6a6..b79cdcd 100644
--- a/res/drawable-mdpi/overscroll_glow_left.9.png
+++ b/res/drawable-mdpi/overscroll_glow_left.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/overscroll_glow_left.9.png b/res/drawable-xhdpi/overscroll_glow_left.9.png
index 8ece7f2..4f248f7 100644
--- a/res/drawable-xhdpi/overscroll_glow_left.9.png
+++ b/res/drawable-xhdpi/overscroll_glow_left.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/overscroll_glow_left.9.png b/res/drawable-xxhdpi/overscroll_glow_left.9.png
index e188ce8..1a895cd 100644
--- a/res/drawable-xxhdpi/overscroll_glow_left.9.png
+++ b/res/drawable-xxhdpi/overscroll_glow_left.9.png
Binary files differ
diff --git a/res/values/config.xml b/res/values/config.xml
index fa84b9b..97408cc 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -71,7 +71,7 @@
     <integer name="config_dragFadeOutDuration">250</integer>
 
     <!-- Camera distance for the overscroll effect -->
-    <integer name="config_cameraDistance">6500</integer>
+    <integer name="config_cameraDistance">8000</integer>
 
     <!-- Whether or not to use custom clings if a custom workspace layout is passed in -->
     <bool name="config_useCustomClings">false</bool>
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index dcf1069..1425f7f 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -194,6 +194,7 @@
     private final int[] mTempXY = new int[2];
     private int[] mTempVisiblePagesRange = new int[2];
     private boolean mOverscrollTransformsSet;
+    private float mLastOverscrollPivotX;
     public static final int DRAG_BITMAP_PADDING = 2;
     private boolean mWorkspaceFadeInAdjacentScreens;
 
@@ -1413,22 +1414,20 @@
             final float rightBiasedPivot = 0.75f;
             final int lowerIndex = 0;
             final int upperIndex = getChildCount() - 1;
-            if (isRtl) {
-                index = mOverScrollX < 0 ? upperIndex : lowerIndex;
-                pivotX = (index == 0 ? leftBiasedPivot : rightBiasedPivot);
-            } else {
-                index = mOverScrollX < 0 ? lowerIndex : upperIndex;
-                pivotX = (index == 0 ? rightBiasedPivot : leftBiasedPivot);
-            }
+
+            final boolean isLeftPage = mOverScrollX < 0;
+            index = (!isRtl && isLeftPage) || (isRtl && !isLeftPage) ? lowerIndex : upperIndex;
+            pivotX = isLeftPage ? rightBiasedPivot : leftBiasedPivot;
 
             CellLayout cl = (CellLayout) getChildAt(index);
             float scrollProgress = getScrollProgress(screenCenter, cl, index);
-            final boolean isLeftPage = (isRtl ? index > 0 : index == 0);
             cl.setOverScrollAmount(Math.abs(scrollProgress), isLeftPage);
             float rotation = -WORKSPACE_OVERSCROLL_ROTATION * scrollProgress;
             cl.setRotationY(rotation);
-            if (!mOverscrollTransformsSet) {
+
+            if (!mOverscrollTransformsSet || Float.compare(mLastOverscrollPivotX, pivotX) != 0) {
                 mOverscrollTransformsSet = true;
+                mLastOverscrollPivotX = pivotX;
                 cl.setCameraDistance(mDensity * mCameraDistance);
                 cl.setPivotX(cl.getMeasuredWidth() * pivotX);
                 cl.setPivotY(cl.getMeasuredHeight() * 0.5f);