Use less HW layers in All Apps

(saves memory)

Change-Id: Ib2beda7549662a787437c7aa043e7858357c051f
This commit is contained in:
Michael Jurka
2013-01-14 12:42:27 +01:00
parent ffc9f488a3
commit 47639b9c1d
4 changed files with 50 additions and 26 deletions
@@ -1099,7 +1099,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
images.add(info.iconBitmap);
}
layout.createHardwareLayers();
enableHwLayersOnVisiblePages();
}
/**
@@ -1552,8 +1552,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
}
}
layout.createHardwareLayer();
invalidate();
enableHwLayersOnVisiblePages();
// Update all thread priorities
Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator();
@@ -1676,6 +1675,50 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
}
}
}
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) {