Merge "Fix 3237665: Home screen should scroll on tap, not touch down" into honeycomb
This commit is contained in:
committed by
Android (Google) Code Review
commit
8d60f2c204
@@ -696,6 +696,20 @@ public abstract class PagedView extends ViewGroup {
|
|||||||
super.requestDisallowInterceptTouchEvent(disallowIntercept);
|
super.requestDisallowInterceptTouchEvent(disallowIntercept);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if a tap at (x, y) should trigger a flip to the previous page.
|
||||||
|
*/
|
||||||
|
protected boolean hitsPreviousPage(float x, float y) {
|
||||||
|
return (x < getRelativeChildOffset(mCurrentPage) - mPageSpacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if a tap at (x, y) should trigger a flip to the next page.
|
||||||
|
*/
|
||||||
|
protected boolean hitsNextPage(float x, float y) {
|
||||||
|
return (x > (getMeasuredWidth() - getRelativeChildOffset(mCurrentPage) + mPageSpacing));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
||||||
/*
|
/*
|
||||||
@@ -761,14 +775,11 @@ public abstract class PagedView extends ViewGroup {
|
|||||||
|
|
||||||
// check if this can be the beginning of a tap on the side of the pages
|
// check if this can be the beginning of a tap on the side of the pages
|
||||||
// to scroll the current page
|
// to scroll the current page
|
||||||
if ((mTouchState != TOUCH_STATE_PREV_PAGE) && !handlePagingClicks() &&
|
if (mTouchState != TOUCH_STATE_PREV_PAGE && mTouchState != TOUCH_STATE_NEXT_PAGE) {
|
||||||
(mTouchState != TOUCH_STATE_NEXT_PAGE)) {
|
|
||||||
if (getChildCount() > 0) {
|
if (getChildCount() > 0) {
|
||||||
int width = getMeasuredWidth();
|
if (hitsPreviousPage(x, y)) {
|
||||||
int offset = getRelativeChildOffset(mCurrentPage);
|
|
||||||
if (x < offset - mPageSpacing) {
|
|
||||||
mTouchState = TOUCH_STATE_PREV_PAGE;
|
mTouchState = TOUCH_STATE_PREV_PAGE;
|
||||||
} else if (x > (width - offset + mPageSpacing)) {
|
} else if (hitsNextPage(x, y)) {
|
||||||
mTouchState = TOUCH_STATE_NEXT_PAGE;
|
mTouchState = TOUCH_STATE_NEXT_PAGE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -856,10 +867,6 @@ public abstract class PagedView extends ViewGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean handlePagingClicks() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This curve determines how the effect of scrolling over the limits of the page dimishes
|
// This curve determines how the effect of scrolling over the limits of the page dimishes
|
||||||
// as the user pulls further and further from the bounds
|
// as the user pulls further and further from the bounds
|
||||||
private float overScrollInfluenceCurve(float f) {
|
private float overScrollInfluenceCurve(float f) {
|
||||||
@@ -966,7 +973,7 @@ public abstract class PagedView extends ViewGroup {
|
|||||||
} else {
|
} else {
|
||||||
snapToDestination();
|
snapToDestination();
|
||||||
}
|
}
|
||||||
} else if (mTouchState == TOUCH_STATE_PREV_PAGE && !handlePagingClicks()) {
|
} else if (mTouchState == TOUCH_STATE_PREV_PAGE) {
|
||||||
// at this point we have not moved beyond the touch slop
|
// at this point we have not moved beyond the touch slop
|
||||||
// (otherwise mTouchState would be TOUCH_STATE_SCROLLING), so
|
// (otherwise mTouchState would be TOUCH_STATE_SCROLLING), so
|
||||||
// we can just page
|
// we can just page
|
||||||
@@ -976,7 +983,7 @@ public abstract class PagedView extends ViewGroup {
|
|||||||
} else {
|
} else {
|
||||||
snapToDestination();
|
snapToDestination();
|
||||||
}
|
}
|
||||||
} else if (mTouchState == TOUCH_STATE_NEXT_PAGE && !handlePagingClicks()) {
|
} else if (mTouchState == TOUCH_STATE_NEXT_PAGE) {
|
||||||
// at this point we have not moved beyond the touch slop
|
// at this point we have not moved beyond the touch slop
|
||||||
// (otherwise mTouchState would be TOUCH_STATE_SCROLLING), so
|
// (otherwise mTouchState would be TOUCH_STATE_SCROLLING), so
|
||||||
// we can just page
|
// we can just page
|
||||||
|
|||||||
@@ -465,6 +465,36 @@ public class Workspace extends SmoothPagedView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the point (x, y) hits a given page.
|
||||||
|
*/
|
||||||
|
private boolean hitsPage(int index, float x, float y) {
|
||||||
|
final View page = getChildAt(index);
|
||||||
|
if (page != null) {
|
||||||
|
float[] localXY = { x, y };
|
||||||
|
mapPointFromSelfToChild(page, localXY);
|
||||||
|
return (localXY[0] >= 0 && localXY[0] < page.getWidth()
|
||||||
|
&& localXY[1] >= 0 && localXY[1] < page.getHeight());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hitsPreviousPage(float x, float y) {
|
||||||
|
// mNextPage is set to INVALID_PAGE whenever we are stationary.
|
||||||
|
// Calculating "next page" this way ensures that you scroll to whatever page you tap on
|
||||||
|
final int current = (mNextPage == INVALID_PAGE) ? mCurrentPage : mNextPage;
|
||||||
|
return hitsPage(current - 1, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hitsNextPage(float x, float y) {
|
||||||
|
// mNextPage is set to INVALID_PAGE whenever we are stationary.
|
||||||
|
// Calculating "next page" this way ensures that you scroll to whatever page you tap on
|
||||||
|
final int current = (mNextPage == INVALID_PAGE) ? mCurrentPage : mNextPage;
|
||||||
|
return hitsPage(current + 1, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
// this is an intercepted event being forwarded from a cell layout
|
// this is an intercepted event being forwarded from a cell layout
|
||||||
if (mIsSmall || mIsInUnshrinkAnimation) {
|
if (mIsSmall || mIsInUnshrinkAnimation) {
|
||||||
@@ -473,14 +503,6 @@ public class Workspace extends SmoothPagedView
|
|||||||
mLauncher.onWorkspaceClick((CellLayout) v);
|
mLauncher.onWorkspaceClick((CellLayout) v);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if (!mPageMoving) {
|
|
||||||
if (v == getChildAt(mCurrentPage - 1)) {
|
|
||||||
snapToPage(mCurrentPage - 1);
|
|
||||||
return true;
|
|
||||||
} else if (v == getChildAt(mCurrentPage + 1)) {
|
|
||||||
snapToPage(mCurrentPage + 1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1482,11 +1504,6 @@ public class Workspace extends SmoothPagedView
|
|||||||
updateWhichPagesAcceptDrops(mShrinkState);
|
updateWhichPagesAcceptDrops(mShrinkState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean handlePagingClicks() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We call this when we trigger an unshrink by clicking on the CellLayout cl
|
// We call this when we trigger an unshrink by clicking on the CellLayout cl
|
||||||
public void unshrink(CellLayout clThatWasClicked) {
|
public void unshrink(CellLayout clThatWasClicked) {
|
||||||
unshrink(clThatWasClicked, false);
|
unshrink(clThatWasClicked, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user