Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +34 −4 Original line number Original line Diff line number Diff line Loading @@ -434,6 +434,11 @@ public class NotificationPanelViewController extends PanelViewController { private boolean mAllowExpandForSmallExpansion; private boolean mAllowExpandForSmallExpansion; private Runnable mExpandAfterLayoutRunnable; private Runnable mExpandAfterLayoutRunnable; /** * Is this a collapse that started on the panel where we should allow the panel to intercept */ private boolean mIsPanelCollapseOnQQS; /** /** * If face auth with bypass is running for the first time after you turn on the screen. * If face auth with bypass is running for the first time after you turn on the screen. * (From aod or screen off) * (From aod or screen off) Loading Loading @@ -1064,7 +1069,11 @@ public class NotificationPanelViewController extends PanelViewController { mInitialTouchX = x; mInitialTouchX = x; initVelocityTracker(); initVelocityTracker(); trackMovement(event); trackMovement(event); if (shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, 0)) { if (mKeyguardShowing && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, 0)) { // Dragging down on the lockscreen statusbar should prohibit other interactions // immediately, otherwise we'll wait on the touchslop. This is to allow // dragging down to expanded quick settings directly on the lockscreen. mView.getParent().requestDisallowInterceptTouchEvent(true); mView.getParent().requestDisallowInterceptTouchEvent(true); } } if (mQsExpansionAnimator != null) { if (mQsExpansionAnimator != null) { Loading Loading @@ -1097,9 +1106,10 @@ public class NotificationPanelViewController extends PanelViewController { trackMovement(event); trackMovement(event); return true; return true; } } if (Math.abs(h) > getTouchSlop(event) if ((h > getTouchSlop(event) || (h < -getTouchSlop(event) && mQsExpanded)) && Math.abs(h) > Math.abs(x - mInitialTouchX) && Math.abs(h) > Math.abs(x - mInitialTouchX) && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { mView.getParent().requestDisallowInterceptTouchEvent(true); mQsTracking = true; mQsTracking = true; onQsExpansionStarted(); onQsExpansionStarted(); notifyExpandingFinished(); notifyExpandingFinished(); Loading Loading @@ -1139,6 +1149,7 @@ public class NotificationPanelViewController extends PanelViewController { mDownX = event.getX(); mDownX = event.getX(); mDownY = event.getY(); mDownY = event.getY(); mCollapsedOnDown = isFullyCollapsed(); mCollapsedOnDown = isFullyCollapsed(); mIsPanelCollapseOnQQS = canPanelCollapseOnQQS(mDownX, mDownY); mListenForHeadsUp = mCollapsedOnDown && mHeadsUpManager.hasPinnedHeadsUp(); mListenForHeadsUp = mCollapsedOnDown && mHeadsUpManager.hasPinnedHeadsUp(); mAllowExpandForSmallExpansion = mExpectingSynthesizedDown; mAllowExpandForSmallExpansion = mExpectingSynthesizedDown; mTouchSlopExceededBeforeDown = mExpectingSynthesizedDown; mTouchSlopExceededBeforeDown = mExpectingSynthesizedDown; Loading @@ -1154,6 +1165,24 @@ public class NotificationPanelViewController extends PanelViewController { } } } } /** * Can the panel collapse in this motion because it was started on QQS? * * @param downX the x location where the touch started * @param downY the y location where the touch started * * @return true if the panel could be collapsed because it stared on QQS */ private boolean canPanelCollapseOnQQS(float downX, float downY) { if (mCollapsedOnDown || mKeyguardShowing || mQsExpanded) { return false; } View header = mQs == null ? mKeyguardStatusBar : mQs.getHeader(); return downX >= mQsFrame.getX() && downX <= mQsFrame.getX() + mQsFrame.getWidth() && downY <= header.getBottom(); } private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) { private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) { float vel = getCurrentQSVelocity(); float vel = getCurrentQSVelocity(); final boolean expandsQs = flingExpandsQs(vel); final boolean expandsQs = flingExpandsQs(vel); Loading Loading @@ -1903,10 +1932,11 @@ public class NotificationPanelViewController extends PanelViewController { } } @Override @Override protected boolean isScrolledToBottom() { protected boolean canCollapsePanelOnTouch() { if (!isInSettings()) { if (!isInSettings()) { return mBarState == StatusBarState.KEYGUARD return mBarState == StatusBarState.KEYGUARD || mNotificationStackScroller.isScrolledToBottom(); || mNotificationStackScroller.isScrolledToBottom() || mIsPanelCollapseOnQQS; } else { } else { return true; return true; } } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -460,7 +460,7 @@ public abstract class PanelViewController { } } } } protected boolean isScrolledToBottom() { protected boolean canCollapsePanelOnTouch() { return true; return true; } } Loading Loading @@ -1081,7 +1081,7 @@ public abstract class PanelViewController { * upwards. This allows closing the shade from anywhere inside the panel. * upwards. This allows closing the shade from anywhere inside the panel. * * * We only do this if the current content is scrolled to the bottom, * We only do this if the current content is scrolled to the bottom, * i.e isScrolledToBottom() is true and therefore there is no conflicting scrolling * i.e canCollapsePanelOnTouch() is true and therefore there is no conflicting scrolling * gesture * gesture * possible. * possible. */ */ Loading @@ -1092,7 +1092,7 @@ public abstract class PanelViewController { } } final float x = event.getX(pointerIndex); final float x = event.getX(pointerIndex); final float y = event.getY(pointerIndex); final float y = event.getY(pointerIndex); boolean scrolledToBottom = isScrolledToBottom(); boolean canCollapsePanel = canCollapsePanelOnTouch(); switch (event.getActionMasked()) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN: Loading Loading @@ -1139,7 +1139,7 @@ public abstract class PanelViewController { case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE: final float h = y - mInitialTouchY; final float h = y - mInitialTouchY; addMovement(event); addMovement(event); if (scrolledToBottom || mTouchStartedInEmptyArea || mAnimatingOnDown) { if (canCollapsePanel || mTouchStartedInEmptyArea || mAnimatingOnDown) { float hAbs = Math.abs(h); float hAbs = Math.abs(h); float touchSlop = getTouchSlop(event); float touchSlop = getTouchSlop(event); if ((h < -touchSlop || (mAnimatingOnDown && hAbs > touchSlop)) if ((h < -touchSlop || (mAnimatingOnDown && hAbs > touchSlop)) Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +34 −4 Original line number Original line Diff line number Diff line Loading @@ -434,6 +434,11 @@ public class NotificationPanelViewController extends PanelViewController { private boolean mAllowExpandForSmallExpansion; private boolean mAllowExpandForSmallExpansion; private Runnable mExpandAfterLayoutRunnable; private Runnable mExpandAfterLayoutRunnable; /** * Is this a collapse that started on the panel where we should allow the panel to intercept */ private boolean mIsPanelCollapseOnQQS; /** /** * If face auth with bypass is running for the first time after you turn on the screen. * If face auth with bypass is running for the first time after you turn on the screen. * (From aod or screen off) * (From aod or screen off) Loading Loading @@ -1064,7 +1069,11 @@ public class NotificationPanelViewController extends PanelViewController { mInitialTouchX = x; mInitialTouchX = x; initVelocityTracker(); initVelocityTracker(); trackMovement(event); trackMovement(event); if (shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, 0)) { if (mKeyguardShowing && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, 0)) { // Dragging down on the lockscreen statusbar should prohibit other interactions // immediately, otherwise we'll wait on the touchslop. This is to allow // dragging down to expanded quick settings directly on the lockscreen. mView.getParent().requestDisallowInterceptTouchEvent(true); mView.getParent().requestDisallowInterceptTouchEvent(true); } } if (mQsExpansionAnimator != null) { if (mQsExpansionAnimator != null) { Loading Loading @@ -1097,9 +1106,10 @@ public class NotificationPanelViewController extends PanelViewController { trackMovement(event); trackMovement(event); return true; return true; } } if (Math.abs(h) > getTouchSlop(event) if ((h > getTouchSlop(event) || (h < -getTouchSlop(event) && mQsExpanded)) && Math.abs(h) > Math.abs(x - mInitialTouchX) && Math.abs(h) > Math.abs(x - mInitialTouchX) && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) { mView.getParent().requestDisallowInterceptTouchEvent(true); mQsTracking = true; mQsTracking = true; onQsExpansionStarted(); onQsExpansionStarted(); notifyExpandingFinished(); notifyExpandingFinished(); Loading Loading @@ -1139,6 +1149,7 @@ public class NotificationPanelViewController extends PanelViewController { mDownX = event.getX(); mDownX = event.getX(); mDownY = event.getY(); mDownY = event.getY(); mCollapsedOnDown = isFullyCollapsed(); mCollapsedOnDown = isFullyCollapsed(); mIsPanelCollapseOnQQS = canPanelCollapseOnQQS(mDownX, mDownY); mListenForHeadsUp = mCollapsedOnDown && mHeadsUpManager.hasPinnedHeadsUp(); mListenForHeadsUp = mCollapsedOnDown && mHeadsUpManager.hasPinnedHeadsUp(); mAllowExpandForSmallExpansion = mExpectingSynthesizedDown; mAllowExpandForSmallExpansion = mExpectingSynthesizedDown; mTouchSlopExceededBeforeDown = mExpectingSynthesizedDown; mTouchSlopExceededBeforeDown = mExpectingSynthesizedDown; Loading @@ -1154,6 +1165,24 @@ public class NotificationPanelViewController extends PanelViewController { } } } } /** * Can the panel collapse in this motion because it was started on QQS? * * @param downX the x location where the touch started * @param downY the y location where the touch started * * @return true if the panel could be collapsed because it stared on QQS */ private boolean canPanelCollapseOnQQS(float downX, float downY) { if (mCollapsedOnDown || mKeyguardShowing || mQsExpanded) { return false; } View header = mQs == null ? mKeyguardStatusBar : mQs.getHeader(); return downX >= mQsFrame.getX() && downX <= mQsFrame.getX() + mQsFrame.getWidth() && downY <= header.getBottom(); } private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) { private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) { float vel = getCurrentQSVelocity(); float vel = getCurrentQSVelocity(); final boolean expandsQs = flingExpandsQs(vel); final boolean expandsQs = flingExpandsQs(vel); Loading Loading @@ -1903,10 +1932,11 @@ public class NotificationPanelViewController extends PanelViewController { } } @Override @Override protected boolean isScrolledToBottom() { protected boolean canCollapsePanelOnTouch() { if (!isInSettings()) { if (!isInSettings()) { return mBarState == StatusBarState.KEYGUARD return mBarState == StatusBarState.KEYGUARD || mNotificationStackScroller.isScrolledToBottom(); || mNotificationStackScroller.isScrolledToBottom() || mIsPanelCollapseOnQQS; } else { } else { return true; return true; } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -460,7 +460,7 @@ public abstract class PanelViewController { } } } } protected boolean isScrolledToBottom() { protected boolean canCollapsePanelOnTouch() { return true; return true; } } Loading Loading @@ -1081,7 +1081,7 @@ public abstract class PanelViewController { * upwards. This allows closing the shade from anywhere inside the panel. * upwards. This allows closing the shade from anywhere inside the panel. * * * We only do this if the current content is scrolled to the bottom, * We only do this if the current content is scrolled to the bottom, * i.e isScrolledToBottom() is true and therefore there is no conflicting scrolling * i.e canCollapsePanelOnTouch() is true and therefore there is no conflicting scrolling * gesture * gesture * possible. * possible. */ */ Loading @@ -1092,7 +1092,7 @@ public abstract class PanelViewController { } } final float x = event.getX(pointerIndex); final float x = event.getX(pointerIndex); final float y = event.getY(pointerIndex); final float y = event.getY(pointerIndex); boolean scrolledToBottom = isScrolledToBottom(); boolean canCollapsePanel = canCollapsePanelOnTouch(); switch (event.getActionMasked()) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN: Loading Loading @@ -1139,7 +1139,7 @@ public abstract class PanelViewController { case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE: final float h = y - mInitialTouchY; final float h = y - mInitialTouchY; addMovement(event); addMovement(event); if (scrolledToBottom || mTouchStartedInEmptyArea || mAnimatingOnDown) { if (canCollapsePanel || mTouchStartedInEmptyArea || mAnimatingOnDown) { float hAbs = Math.abs(h); float hAbs = Math.abs(h); float touchSlop = getTouchSlop(event); float touchSlop = getTouchSlop(event); if ((h < -touchSlop || (mAnimatingOnDown && hAbs > touchSlop)) if ((h < -touchSlop || (mAnimatingOnDown && hAbs > touchSlop)) Loading