diff options
author | Michael Jurka <mikejurka@google.com> | 2012-06-28 15:35:26 -0700 |
---|---|---|
committer | Michael Jurka <mikejurka@google.com> | 2012-06-28 17:32:24 -0700 |
commit | d51f33a6316c34fc69b8040946ed9a62519bb225 (patch) | |
tree | 05de98e89204849bda7ecaa8a1c2504af41f3f24 | |
parent | 1e96390f51630f6b277b6ccf31e090c134891f95 (diff) | |
download | android_packages_apps_Trebuchet-d51f33a6316c34fc69b8040946ed9a62519bb225.tar.gz android_packages_apps_Trebuchet-d51f33a6316c34fc69b8040946ed9a62519bb225.tar.bz2 android_packages_apps_Trebuchet-d51f33a6316c34fc69b8040946ed9a62519bb225.zip |
Only enable hardware layers on visible workspace pages
Change-Id: Id82fc76d00a188556460d1a78388d46be56c9c4e
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 10 | ||||
-rw-r--r-- | src/com/android/launcher2/ShortcutAndWidgetContainer.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 45 |
3 files changed, 48 insertions, 11 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index ccc842e5e..284db1bdb 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -302,7 +302,15 @@ public class CellLayout extends ViewGroup { } public void enableHardwareLayers() { - mShortcutsAndWidgets.enableHardwareLayers(); + mShortcutsAndWidgets.setLayerType(LAYER_TYPE_HARDWARE, null); + } + + public void disableHardwareLayers() { + mShortcutsAndWidgets.setLayerType(LAYER_TYPE_NONE, null); + } + + public void buildHardwareLayer() { + mShortcutsAndWidgets.buildLayer(); } public void setGridSize(int x, int y) { diff --git a/src/com/android/launcher2/ShortcutAndWidgetContainer.java b/src/com/android/launcher2/ShortcutAndWidgetContainer.java index 8bebdcd45..8daf3954d 100644 --- a/src/com/android/launcher2/ShortcutAndWidgetContainer.java +++ b/src/com/android/launcher2/ShortcutAndWidgetContainer.java @@ -44,10 +44,6 @@ public class ShortcutAndWidgetContainer extends ViewGroup { mWallpaperManager = WallpaperManager.getInstance(context); } - public void enableHardwareLayers() { - setLayerType(LAYER_TYPE_HARDWARE, null); - } - public void setCellDimensions(int cellWidth, int cellHeight, int widthGap, int heightGap ) { mCellWidth = cellWidth; mCellHeight = cellHeight; diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index feb4ed077..829ac20d7 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -170,6 +170,7 @@ public class Workspace extends SmoothPagedView private Bitmap mDragOutline = null; private final Rect mTempRect = new Rect(); private final int[] mTempXY = new int[2]; + private int[] mTempVisiblePagesRange = new int[2]; private float mOverscrollFade = 0; private boolean mOverscrollTransformsSet; public static final int DRAG_BITMAP_PADDING = 2; @@ -427,7 +428,6 @@ public class Workspace extends SmoothPagedView CellLayout cl = ((CellLayout) child); cl.setOnInterceptTouchListener(this); cl.setClickable(true); - cl.enableHardwareLayers(); cl.setContentDescription(getContext().getString( R.string.workspace_description_format, getChildCount())); } @@ -1221,6 +1221,7 @@ public class Workspace extends SmoothPagedView super.screenScrolled(screenCenter); updatePageAlphaValues(screenCenter); + enableHwLayersOnVisiblePages(); if (mOverScrollX < 0 || mOverScrollX > mMaxScrollX) { int index = mOverScrollX < 0 ? 0 : getChildCount() - 1; @@ -1368,10 +1369,42 @@ public class Workspace extends SmoothPagedView if (enableChildrenLayers != mChildrenLayersEnabled) { mChildrenLayersEnabled = enableChildrenLayers; - for (int i = 0; i < getPageCount(); i++) { - CellLayout cl = (CellLayout) getChildAt(i); - cl.getShortcutsAndWidgets().setLayerType( - mChildrenLayersEnabled ? LAYER_TYPE_HARDWARE : LAYER_TYPE_NONE, null); + if (mChildrenLayersEnabled) { + enableHwLayersOnVisiblePages(); + } else { + for (int i = 0; i < getPageCount(); i++) { + final CellLayout cl = (CellLayout) getChildAt(i); + cl.disableHardwareLayers(); + } + } + } + } + + private void enableHwLayersOnVisiblePages() { + if (mChildrenLayersEnabled) { + final int screenCount = getChildCount(); + getVisiblePages(mTempVisiblePagesRange); + int leftScreen = mTempVisiblePagesRange[0]; + int rightScreen = mTempVisiblePagesRange[1]; + if (leftScreen == rightScreen) { + // make sure we're caching at least two pages always + if (rightScreen < screenCount - 1) { + rightScreen++; + } else if (leftScreen > 0) { + leftScreen--; + } + } + for (int i = 0; i < screenCount; i++) { + final CellLayout layout = (CellLayout) getChildAt(i); + if (!(leftScreen <= i && i <= rightScreen && shouldDrawChild(layout))) { + layout.disableHardwareLayers(); + } + } + for (int i = 0; i < screenCount; i++) { + final CellLayout layout = (CellLayout) getChildAt(i); + if (leftScreen <= i && i <= rightScreen && shouldDrawChild(layout)) { + layout.enableHardwareLayers(); + } } } } @@ -1383,7 +1416,7 @@ public class Workspace extends SmoothPagedView final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { CellLayout cl = (CellLayout) getChildAt(i); - cl.getShortcutsAndWidgets().buildLayer(); + cl.buildHardwareLayer(); } } updateChildrenLayersEnabled(false); |