Fixing homescreen getting blank when returning from the overlay

Change-Id: Ie11b92cd59c90e71b9b58eeede742ef0c5b28380
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index b3a714b..ef89192 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -1042,24 +1042,25 @@
     }
 
     protected void getVisiblePages(int[] range) {
-        final int pageCount = getChildCount();
+        final int count = getChildCount();
         range[0] = -1;
         range[1] = -1;
 
-        if (pageCount > 0) {
-            int lastVisiblePageIndex = 0;
+        if (count > 0) {
             final int visibleLeft = -getLeft();
             final int visibleRight = visibleLeft + getViewportWidth();
+            final Matrix pageShiftMatrix = getPageShiftMatrix();
+            int curScreen = 0;
 
-            for (int currPageIndex = 0; currPageIndex < pageCount; currPageIndex++) {
-                View currPage = getPageAt(currPageIndex);
+            for (int i = 0; i < count; i++) {
+                View currPage = getPageAt(i);
 
                 // Verify if the page bounds are within the visible range.
                 sTmpRectF.left = 0;
                 sTmpRectF.right = currPage.getMeasuredWidth();
                 currPage.getMatrix().mapRect(sTmpRectF);
                 sTmpRectF.offset(currPage.getLeft() - getScrollX(), 0);
-                getMatrix().mapRect(sTmpRectF);
+                pageShiftMatrix.mapRect(sTmpRectF);
 
                 if (sTmpRectF.left > visibleRight || sTmpRectF.right < visibleLeft) {
                     if (range[0] == -1) {
@@ -1068,19 +1069,23 @@
                         break;
                     }
                 }
+                curScreen = i;
                 if (range[0] < 0) {
-                    range[0] = currPageIndex;
+                    range[0] = curScreen;
                 }
-                lastVisiblePageIndex = currPageIndex;
             }
 
-            range[1] = lastVisiblePageIndex;
+            range[1] = curScreen;
         } else {
             range[0] = -1;
             range[1] = -1;
         }
     }
 
+    protected Matrix getPageShiftMatrix() {
+        return getMatrix();
+    }
+
     protected boolean shouldDrawChild(View child) {
         return child.getVisibility() == VISIBLE;
     }
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index e983e79..7fa71f2 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -170,6 +170,7 @@
     @Thunk float[] mDragViewVisualCenter = new float[2];
     private float[] mTempCellLayoutCenterCoordinates = new float[2];
     private int[] mTempVisiblePagesRange = new int[2];
+    private Matrix mTempMatrix = new Matrix();
 
     private SpringLoadedDragController mSpringLoadedDragController;
     private float mSpringLoadedShrinkFactor;
@@ -1297,6 +1298,7 @@
         if (mIsRtl) {
             transX = -transX;
         }
+        mOverlayTranslation = transX;
 
         // TODO(adamcohen): figure out a final effect here. We may need to recommend
         // different effects based on device performance. On at least one relatively high-end
@@ -1314,6 +1316,18 @@
         }
     }
 
+    @Override
+    protected Matrix getPageShiftMatrix() {
+        if (Float.compare(mOverlayTranslation, 0) != 0) {
+            // The pages are translated by mOverlayTranslation. incorporate that in the
+            // visible page calculation by shifting everything back by that same amount.
+            mTempMatrix.set(getMatrix());
+            mTempMatrix.postTranslate(-mOverlayTranslation, 0);
+            return mTempMatrix;
+        }
+        return super.getPageShiftMatrix();
+    }
+
     private void setTranslationAndAlpha(View v, float transX, float alpha) {
         if (v != null) {
             v.setTranslationX(transX);