summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/Workspace.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2/Workspace.java')
-rw-r--r--src/com/android/launcher2/Workspace.java44
1 files changed, 36 insertions, 8 deletions
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index a0391d33e..a14a11f20 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -543,6 +543,14 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
if (restore) {
canvas.restoreToCount(restoreCount);
}
+
+ onDrawScrollBars(canvas);
+ }
+
+ @Override
+ protected int computeHorizontalScrollRange() {
+ final int count = getChildCount();
+ return count == 0 ? getWidth() : (getChildAt(count - 1)).getRight();
}
private float mScale = 1.0f;
@@ -577,8 +585,11 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
}
+
if (mFirstLayout) {
+ setHorizontalScrollBarEnabled(false);
scrollTo(mCurrentScreen * width, 0);
+ setHorizontalScrollBarEnabled(true);
updateWallpaperOffset(width * (getChildCount() - 1));
mFirstLayout = false;
}
@@ -725,7 +736,7 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
if (xMoved) {
// Scroll if the user moved far enough along the X axis
mTouchState = TOUCH_STATE_SCROLLING;
- enableChildrenCache();
+ enableChildrenCache(mCurrentScreen - 1, mCurrentScreen + 1);
}
// Either way, cancel any pending longpress
if (mAllowLongPress) {
@@ -781,9 +792,20 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
return mTouchState != TOUCH_STATE_REST;
}
- void enableChildrenCache() {
+ void enableChildrenCache(int fromScreen, int toScreen) {
+ if (fromScreen > toScreen) {
+ int temp = fromScreen;
+ fromScreen = toScreen;
+ toScreen = fromScreen;
+ }
+
final int count = getChildCount();
- for (int i = 0; i < count; i++) {
+
+ fromScreen = Math.max(fromScreen, 0);
+ toScreen = Math.min(toScreen, count - 1);
+
+ for (int i = fromScreen; i <= toScreen; i++) {
+ // Log.d("TAG", "enablingChildrenCache: " + i);
final CellLayout layout = (CellLayout) getChildAt(i);
layout.setChildrenDrawnWithCacheEnabled(true);
layout.setChildrenDrawingCacheEnabled(true);
@@ -852,6 +874,8 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
scrollBy(Math.min(availableToScroll, deltaX), 0);
updateWallpaperOffset();
}
+ } else {
+ awakenScrollBars();
}
}
break;
@@ -895,22 +919,26 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
void snapToScreen(int whichScreen) {
if (!mScroller.isFinished()) return;
+ whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
+
clearVacantCache();
- enableChildrenCache();
+ enableChildrenCache(mCurrentScreen, whichScreen);
- whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
- boolean changingScreens = whichScreen != mCurrentScreen;
+
+ final int screenDelta = Math.abs(whichScreen - mCurrentScreen);
mNextScreen = whichScreen;
View focusedChild = getFocusedChild();
- if (focusedChild != null && changingScreens && focusedChild == getChildAt(mCurrentScreen)) {
+ if (focusedChild != null && screenDelta != 0 && focusedChild == getChildAt(mCurrentScreen)) {
focusedChild.clearFocus();
}
final int newX = whichScreen * getWidth();
final int delta = newX - mScrollX;
- mScroller.startScroll(mScrollX, 0, delta, 0, Math.abs(delta) * 2);
+ final int duration = screenDelta * 300;
+ awakenScrollBars(duration);
+ mScroller.startScroll(mScrollX, 0, delta, 0, duration);
invalidate();
}