Fixed Shade freezing when tapped while collapsing
Shade collapse animation would freeze if the shade was tapped quickly enough to not exceed touchSlop, as the code that starts the animation again would not be run in this case. Added an extra condition that allows these taps when the shade is in a partially expanded/collapsed state. Test: manual Bug: 233309355 Change-Id: I321fef348128880fa9057496f97fa9b2a96f4804
This commit is contained in:
@@ -1440,6 +1440,16 @@ public final class NotificationPanelViewController {
|
||||
mMaxAllowedKeyguardNotifications = maxAllowed;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean getClosing() {
|
||||
return mClosing;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean getIsFlinging() {
|
||||
return mIsFlinging;
|
||||
}
|
||||
|
||||
private void updateMaxDisplayedNotifications(boolean recompute) {
|
||||
if (recompute) {
|
||||
setMaxDisplayedNotifications(Math.max(computeMaxKeyguardNotifications(), 1));
|
||||
@@ -3684,6 +3694,11 @@ public final class NotificationPanelViewController {
|
||||
setListening(true);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setTouchSlopExceeded(boolean isTouchSlopExceeded) {
|
||||
mTouchSlopExceeded = isTouchSlopExceeded;
|
||||
}
|
||||
|
||||
public void setOverExpansion(float overExpansion) {
|
||||
if (overExpansion == mOverExpansion) {
|
||||
return;
|
||||
@@ -4742,6 +4757,7 @@ public final class NotificationPanelViewController {
|
||||
mAmbientState.setSwipingUp(false);
|
||||
if ((mTracking && mTouchSlopExceeded) || Math.abs(x - mInitialExpandX) > mTouchSlop
|
||||
|| Math.abs(y - mInitialExpandY) > mTouchSlop
|
||||
|| (!isFullyExpanded() && !isFullyCollapsed())
|
||||
|| event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
|
||||
mVelocityTracker.computeCurrentVelocity(1000);
|
||||
float vel = mVelocityTracker.getYVelocity();
|
||||
|
||||
@@ -756,6 +756,38 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
assertThat(mNotificationPanelViewController.isTracking()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnTouchEvent_expansionResumesAfterBriefTouch() {
|
||||
// Start shade collapse with swipe up
|
||||
onTouchEvent(MotionEvent.obtain(0L /* downTime */,
|
||||
0L /* eventTime */, MotionEvent.ACTION_DOWN, 0f /* x */, 0f /* y */,
|
||||
0 /* metaState */));
|
||||
onTouchEvent(MotionEvent.obtain(0L /* downTime */,
|
||||
0L /* eventTime */, MotionEvent.ACTION_MOVE, 0f /* x */, 300f /* y */,
|
||||
0 /* metaState */));
|
||||
onTouchEvent(MotionEvent.obtain(0L /* downTime */,
|
||||
0L /* eventTime */, MotionEvent.ACTION_UP, 0f /* x */, 300f /* y */,
|
||||
0 /* metaState */));
|
||||
|
||||
assertThat(mNotificationPanelViewController.getClosing()).isTrue();
|
||||
assertThat(mNotificationPanelViewController.getIsFlinging()).isTrue();
|
||||
|
||||
// simulate touch that does not exceed touch slop
|
||||
onTouchEvent(MotionEvent.obtain(2L /* downTime */,
|
||||
2L /* eventTime */, MotionEvent.ACTION_DOWN, 0f /* x */, 300f /* y */,
|
||||
0 /* metaState */));
|
||||
|
||||
mNotificationPanelViewController.setTouchSlopExceeded(false);
|
||||
|
||||
onTouchEvent(MotionEvent.obtain(2L /* downTime */,
|
||||
2L /* eventTime */, MotionEvent.ACTION_UP, 0f /* x */, 300f /* y */,
|
||||
0 /* metaState */));
|
||||
|
||||
// fling should still be called after a touch that does not exceed touch slop
|
||||
assertThat(mNotificationPanelViewController.getClosing()).isTrue();
|
||||
assertThat(mNotificationPanelViewController.getIsFlinging()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouchEventFromStatusBar_panelsNotEnabled_returnsFalseAndNoViewEvent() {
|
||||
when(mCommandQueue.panelsEnabled()).thenReturn(false);
|
||||
|
||||
Reference in New Issue
Block a user