Merge "Add first RTL support to Launcher"
diff --git a/Android.mk b/Android.mk
index 3519541..8d50bd6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -22,7 +22,7 @@
 LOCAL_STATIC_JAVA_LIBRARIES := android-common android-support-v13
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := 17
 
 LOCAL_PACKAGE_NAME := Launcher2
 LOCAL_CERTIFICATE := shared
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index bd78396..1817c82 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -1099,7 +1099,7 @@
             images.add(info.iconBitmap);
         }
 
-        layout.createHardwareLayers();
+        enableHwLayersOnVisiblePages();
     }
 
     /**
@@ -1552,8 +1552,7 @@
                 }
             }
 
-            layout.createHardwareLayer();
-            invalidate();
+            enableHwLayersOnVisiblePages();
 
             // Update all thread priorities
             Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator();
@@ -1676,6 +1675,50 @@
                 }
             }
         }
+
+        enableHwLayersOnVisiblePages();
+    }
+
+    private void enableHwLayersOnVisiblePages() {
+        final int screenCount = getChildCount();
+
+        getVisiblePages(mTempVisiblePagesRange);
+        int leftScreen = mTempVisiblePagesRange[0];
+        int rightScreen = mTempVisiblePagesRange[1];
+        int forceDrawScreen = -1;
+        if (leftScreen == rightScreen) {
+            // make sure we're caching at least two pages always
+            if (rightScreen < screenCount - 1) {
+                rightScreen++;
+                forceDrawScreen = rightScreen;
+            } else if (leftScreen > 0) {
+                leftScreen--;
+                forceDrawScreen = leftScreen;
+            }
+        } else {
+            forceDrawScreen = leftScreen + 1;
+        }
+
+        for (int i = 0; i < screenCount; i++) {
+            final View layout = (View) getPageAt(i);
+            if (!(leftScreen <= i && i <= rightScreen &&
+                    (i == forceDrawScreen || shouldDrawChild(layout)))) {
+                layout.setLayerType(LAYER_TYPE_NONE, null);
+            }
+        }
+
+        int newLeft = -1;
+        int newRight = -1;
+        for (int i = 0; i < screenCount; i++) {
+            final View layout = (View) getPageAt(i);
+
+            if (leftScreen <= i && i <= rightScreen &&
+                    (i == forceDrawScreen || shouldDrawChild(layout))) {
+                if (layout.getLayerType() != LAYER_TYPE_HARDWARE) {
+                    layout.setLayerType(LAYER_TYPE_HARDWARE, null);
+                }
+            }
+        }
     }
 
     protected void overScroll(float amount) {
diff --git a/src/com/android/launcher2/PagedViewCellLayout.java b/src/com/android/launcher2/PagedViewCellLayout.java
index 6f73e63..9ce177b 100644
--- a/src/com/android/launcher2/PagedViewCellLayout.java
+++ b/src/com/android/launcher2/PagedViewCellLayout.java
@@ -86,17 +86,6 @@
         return mCellHeight;
     }
 
-    void destroyHardwareLayers() {
-        // called when a page is no longer visible (triggered by loadAssociatedPages ->
-        // removeAllViewsOnPage)
-        setLayerType(LAYER_TYPE_NONE, null);
-    }
-
-    void createHardwareLayers() {
-        // called when a page is visible (triggered by loadAssociatedPages -> syncPageItems)
-        setLayerType(LAYER_TYPE_HARDWARE, null);
-    }
-
     @Override
     public void cancelLongPress() {
         super.cancelLongPress();
@@ -133,7 +122,7 @@
     @Override
     public void removeAllViewsOnPage() {
         mChildren.removeAllViews();
-        destroyHardwareLayers();
+        setLayerType(LAYER_TYPE_NONE, null);
     }
 
     @Override
diff --git a/src/com/android/launcher2/PagedViewGridLayout.java b/src/com/android/launcher2/PagedViewGridLayout.java
index 90bfe88..aa9adc0 100644
--- a/src/com/android/launcher2/PagedViewGridLayout.java
+++ b/src/com/android/launcher2/PagedViewGridLayout.java
@@ -98,19 +98,11 @@
         return result;
     }
 
-    void destroyHardwareLayer() {
-        setLayerType(LAYER_TYPE_NONE, null);
-    }
-
-    void createHardwareLayer() {
-        setLayerType(LAYER_TYPE_HARDWARE, null);
-    }
-
     @Override
     public void removeAllViewsOnPage() {
         removeAllViews();
         mOnLayoutListener = null;
-        destroyHardwareLayer();
+        setLayerType(LAYER_TYPE_NONE, null);
     }
 
     @Override
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 2c44aca..9d8845b 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1406,13 +1406,13 @@
                 }
             }
             for (int i = 0; i < screenCount; i++) {
-                final CellLayout layout = (CellLayout) getChildAt(i);
+                final CellLayout layout = (CellLayout) getPageAt(i);
                 if (!(leftScreen <= i && i <= rightScreen && shouldDrawChild(layout))) {
                     layout.disableHardwareLayers();
                 }
             }
             for (int i = 0; i < screenCount; i++) {
-                final CellLayout layout = (CellLayout) getChildAt(i);
+                final CellLayout layout = (CellLayout) getPageAt(i);
                 if (leftScreen <= i && i <= rightScreen && shouldDrawChild(layout)) {
                     layout.enableHardwareLayers();
                 }