Fixed a bug that the panel was not closable in the locked shade

This happened when draging on the active lock icon.

Bug: 18185875
Change-Id: I27917fad000bc89f37b82fc8be978d867356904e
This commit is contained in:
Selim Cinek
2014-10-30 20:20:29 +01:00
parent 1b7f51ebc6
commit ab1dc954b2
3 changed files with 24 additions and 2 deletions

View File

@@ -536,6 +536,14 @@ public class NotificationPanelView extends PanelView implements
}
}
@Override
protected boolean isInContentBounds(float x, float y) {
float yTransformed = y - mNotificationStackScroller.getY();
float stackScrollerX = mNotificationStackScroller.getX();
return mNotificationStackScroller.isInContentBounds(yTransformed) && stackScrollerX < x
&& x < stackScrollerX + mNotificationStackScroller.getWidth();
}
private void resetDownStates(MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
mOnlyAffordanceInThisMotion = false;

View File

@@ -70,6 +70,7 @@ public abstract class PanelView extends FrameLayout {
private boolean mOverExpandedBeforeFling;
private boolean mTouchAboveFalsingThreshold;
private int mUnlockFalsingThreshold;
private boolean mTouchStartedInEmptyArea;
private ValueAnimator mHeightAnimator;
private ObjectAnimator mPeekAnimator;
@@ -409,6 +410,7 @@ public abstract class PanelView extends FrameLayout {
}
mInitialTouchY = y;
mInitialTouchX = x;
mTouchStartedInEmptyArea = !isInContentBounds(x, y);
mTouchSlopExceeded = false;
mJustPeeked = false;
mPanelClosedOnDown = mExpandedHeight == 0.0f;
@@ -432,7 +434,7 @@ public abstract class PanelView extends FrameLayout {
case MotionEvent.ACTION_MOVE:
final float h = y - mInitialTouchY;
trackMovement(event);
if (scrolledToBottom) {
if (scrolledToBottom || mTouchStartedInEmptyArea) {
if (h < -mTouchSlop && h < -Math.abs(x - mInitialTouchX)) {
cancelHeightAnimator();
mInitialOffsetOnTouch = mExpandedHeight;
@@ -452,6 +454,11 @@ public abstract class PanelView extends FrameLayout {
return false;
}
/**
* @return Whether a pair of coordinates are inside the visible view content bounds.
*/
protected abstract boolean isInContentBounds(float x, float y);
private void cancelHeightAnimator() {
if (mHeightAnimator != null) {
mHeightAnimator.cancel();

View File

@@ -1915,7 +1915,14 @@ public class NotificationStackScrollLayout extends ViewGroup
* @return Whether the specified motion event is actually happening over the content.
*/
private boolean isInContentBounds(MotionEvent event) {
return event.getY() < getHeight() - getEmptyBottomMargin();
return isInContentBounds(event.getY());
}
/**
* @return Whether a y coordinate is inside the content.
*/
public boolean isInContentBounds(float y) {
return y < getHeight() - getEmptyBottomMargin();
}
private void setIsBeingDragged(boolean isDragged) {