diff options
Diffstat (limited to 'src/com/android/launcher2/Workspace.java')
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 83 |
1 files changed, 63 insertions, 20 deletions
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index 59e061b5c..7ce7ea999 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -138,7 +138,10 @@ public class Workspace extends SmoothPagedView public Workspace(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContentIsRefreshable = false; - mFadeInAdjacentScreens = false; + + if (!LauncherApplication.isScreenXLarge()) { + mFadeInAdjacentScreens = false; + } mWallpaperManager = WallpaperManager.getInstance(context); @@ -383,19 +386,46 @@ public class Workspace extends SmoothPagedView return false; } + @Override + public boolean dispatchUnhandledMove(View focused, int direction) { + if (mIsSmall) { + // when the home screens are shrunken, shouldn't allow side-scrolling + return false; + } + return super.dispatchUnhandledMove(focused, direction); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (mIsSmall) { + // when the home screens are shrunken, shouldn't allow side-scrolling + return false; + } + return super.onInterceptTouchEvent(ev); + } + protected void pageBeginMoving() { if (mNextPage != INVALID_PAGE) { // we're snapping to a particular screen - enableChildrenCache(mCurrentPage, mNextPage); + // there's an issue where the alpha of neighboring pages doesn't get updated + // if drawing cache is enabled on children-- we only use that on xlarge devices, + // so disable drawing cache in those cases + if (!LauncherApplication.isScreenXLarge()) { + enableChildrenCache(mCurrentPage, mNextPage); + } } else { // this is when user is actively dragging a particular screen, they might // swipe it either left or right (but we won't advance by more than one screen) - enableChildrenCache(mCurrentPage - 1, mCurrentPage + 1); + if (!LauncherApplication.isScreenXLarge()) { + enableChildrenCache(mCurrentPage - 1, mCurrentPage + 1); + } } } protected void pageEndMoving() { - clearChildrenCache(); + if (!LauncherApplication.isScreenXLarge()) { + clearChildrenCache(); + } } @Override @@ -465,9 +495,6 @@ public class Workspace extends SmoothPagedView for (int i = 0; i < pageCount; i++) { final View page = (View) getChildAt(i); - if (page.getAlpha() != 1.0f) { - page.setAlpha(1.0f); - } drawChild(canvas, page, drawingTime); } } else { @@ -596,6 +623,10 @@ public class Workspace extends SmoothPagedView // we use this to shrink the workspace for the all apps view and the customize view private void shrink(ShrinkPosition shrinkPosition, boolean animated) { mIsSmall = true; + // we intercept and reject all touch events when we're small, so be sure to reset the state + mTouchState = TOUCH_STATE_REST; + mActivePointerId = INVALID_POINTER; + final Resources res = getResources(); final int screenWidth = getWidth(); final int screenHeight = getHeight(); @@ -637,19 +668,21 @@ public class Workspace extends SmoothPagedView if (animated) { final int duration = res.getInteger(R.integer.config_workspaceShrinkTime); - new ObjectAnimator(duration, cl, - new PropertyValuesHolder("x", newX), - new PropertyValuesHolder("y", newY), - new PropertyValuesHolder("scaleX", SHRINK_FACTOR * rotationScaleX), - new PropertyValuesHolder("scaleY", SHRINK_FACTOR * rotationScaleY), - new PropertyValuesHolder("dimmedBitmapAlpha", 1.0f), - new PropertyValuesHolder("rotationY", rotation)).start(); + new ObjectAnimator<Float>(duration, cl, + new PropertyValuesHolder<Float>("x", newX), + new PropertyValuesHolder<Float>("y", newY), + new PropertyValuesHolder<Float>("scaleX", SHRINK_FACTOR), + new PropertyValuesHolder<Float>("scaleY", SHRINK_FACTOR), + new PropertyValuesHolder<Float>("backgroundAlpha", 1.0f), + new PropertyValuesHolder<Float>("alpha", 0.0f), + new PropertyValuesHolder<Float>("rotationY", rotation)).start(); } else { cl.setX((int)newX); cl.setY((int)newY); cl.setScaleX(SHRINK_FACTOR); cl.setScaleY(SHRINK_FACTOR); - cl.setDimmedBitmapAlpha(1.0f); + cl.setBackgroundAlpha(1.0f); + cl.setAlpha(0.0f); cl.setRotationY(rotation); } // increment newX for the next screen @@ -673,7 +706,8 @@ public class Workspace extends SmoothPagedView private void unshrink(int newCurrentPage) { if (mIsSmall) { - int delta = (newCurrentPage - mCurrentPage)*getWidth(); + int newX = getChildOffset(newCurrentPage) - getRelativeChildOffset(newCurrentPage); + int delta = newX - mScrollX; final int screenCount = getChildCount(); for (int i = 0; i < screenCount; i++) { @@ -699,20 +733,23 @@ public class Workspace extends SmoothPagedView final int duration = getResources().getInteger(R.integer.config_workspaceUnshrinkTime); for (int i = 0; i < screenCount; i++) { final CellLayout cl = (CellLayout)getChildAt(i); + float finalAlphaValue = (i == mCurrentPage) ? 1.0f : 0.0f; if (animated) { s.playTogether( new ObjectAnimator<Float>(duration, cl, "translationX", 0.0f), new ObjectAnimator<Float>(duration, cl, "translationY", 0.0f), new ObjectAnimator<Float>(duration, cl, "scaleX", 1.0f), new ObjectAnimator<Float>(duration, cl, "scaleY", 1.0f), - new ObjectAnimator<Float>(duration, cl, "dimmedBitmapAlpha", 0.0f), + new ObjectAnimator<Float>(duration, cl, "backgroundAlpha", 0.0f), + new ObjectAnimator<Float>(duration, cl, "alpha", finalAlphaValue), new ObjectAnimator<Float>(duration, cl, "rotationY", 0.0f)); } else { cl.setTranslationX(0.0f); cl.setTranslationY(0.0f); cl.setScaleX(1.0f); cl.setScaleY(1.0f); - cl.setDimmedBitmapAlpha(0.0f); + cl.setBackgroundAlpha(0.0f); + cl.setAlpha(1.0f); cl.setRotationY(0.0f); } } @@ -838,6 +875,8 @@ public class Workspace extends SmoothPagedView // If we are dragging over a cell that contains a DropTarget that will // accept the drop, delegate to that DropTarget. final int[] cellXY = mTempCell; + int localDragPointX = dragPointX - (currentLayout.getLeft() - mScrollX); + int localDragPointY = dragPointY - (currentLayout.getTop() - mScrollY); currentLayout.estimateDropCell(dragPointX, dragPointY, item.spanX, item.spanY, cellXY); View child = currentLayout.getChildAt(cellXY[0], cellXY[1]); if (child instanceof DropTarget) { @@ -986,8 +1025,10 @@ public class Workspace extends SmoothPagedView if ((!LauncherApplication.isScreenXLarge() || source == this) && mDragTargetLayout != null) { final View child = (mDragInfo == null) ? null : mDragInfo.cell; + int localOriginX = originX - (mDragTargetLayout.getLeft() - mScrollX); + int localOriginY = originY - (mDragTargetLayout.getTop() - mScrollY); mDragTargetLayout.visualizeDropLocation( - child, originX, originY, item.spanX, item.spanY); + child, localOriginX, localOriginY, item.spanX, item.spanY); } } @@ -1143,7 +1184,9 @@ public class Workspace extends SmoothPagedView int spanX, int spanY, View ignoreView, CellLayout layout, int[] recycle) { final int[] cellXY = mTempCell; - layout.estimateDropCell(pixelX, pixelY, spanX, spanY, cellXY); + int localPixelX = pixelX - (layout.getLeft() - mScrollX); + int localPixelY = pixelY - (layout.getTop() - mScrollY); + layout.estimateDropCell(localPixelX, localPixelY, spanX, spanY, cellXY); layout.cellToPoint(cellXY[0], cellXY[1], mTempEstimate); final CellLayout.CellInfo cellInfo = layout.updateOccupiedCells(null, ignoreView); |