summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/SwipeHelper.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java14
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java28
3 files changed, 51 insertions, 9 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index 2503520ba1d9..aa94ad98f3e6 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -374,11 +374,10 @@ public class SwipeHelper implements Gefingerpoken {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
final boolean captured = (mIsSwiping || mLongPressSent || mMenuRowIntercepting);
- mIsSwiping = false;
- mTouchedView = null;
mLongPressSent = false;
mCallback.onLongPressSent(null);
mMenuRowIntercepting = false;
+ resetSwipeState();
cancelLongPress();
if (captured) return true;
break;
@@ -491,7 +490,7 @@ public class SwipeHelper implements Gefingerpoken {
}
if (!mCancelled || wasRemoved) {
mCallback.onChildDismissed(animView);
- resetSwipeState();
+ resetSwipeOfView(animView);
}
if (endAction != null) {
endAction.accept(mCancelled);
@@ -546,7 +545,7 @@ public class SwipeHelper implements Gefingerpoken {
if (!cancelled) {
updateSwipeProgressFromOffset(animView, canBeDismissed);
- resetSwipeState();
+ resetSwipeOfView(animView);
}
onChildSnappedBack(animView, targetLeft);
});
@@ -806,9 +805,20 @@ public class SwipeHelper implements Gefingerpoken {
return mIsSwiping ? mTouchedView : null;
}
+ protected void resetSwipeOfView(View view) {
+ if (getSwipedView() == view) {
+ resetSwipeState();
+ }
+ }
+
public void resetSwipeState() {
+ View swipedView = getSwipedView();
mTouchedView = null;
mIsSwiping = false;
+ if (swipedView != null) {
+ snapChildIfNeeded(swipedView, false, 0);
+ onChildSnappedBack(swipedView, 0);
+ }
}
private float getTouchSlop(MotionEvent event) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 555d5027c7b6..75efc88ed4df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -4184,10 +4184,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
mCentralSurfaces.resetUserExpandedStates();
clearTemporaryViews();
clearUserLockedViews();
- if (mSwipeHelper.isSwiping()) {
- mSwipeHelper.resetSwipeState();
- updateContinuousShadowDrawing();
- }
+ cancelActiveSwipe();
}
}
@@ -4259,6 +4256,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
if (!mIsExpanded) {
mGroupExpansionManager.collapseGroups();
mExpandHelper.cancelImmediately();
+ if (!mIsExpansionChanging) {
+ cancelActiveSwipe();
+ }
}
updateNotificationAnimationStates();
updateChronometers();
@@ -6114,7 +6114,11 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
}
}
- @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
+ private void cancelActiveSwipe() {
+ mSwipeHelper.resetSwipeState();
+ updateContinuousShadowDrawing();
+ }
+
void updateContinuousShadowDrawing() {
boolean continuousShadowUpdate = mAnimationRunning
|| mSwipeHelper.isSwiping();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index 7153e59fff37..f77160601f4d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -801,6 +801,34 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
}
@Test
+ public void onShadeClosesWithAnimationWillResetSwipeState() {
+ // GIVEN shade is expanded
+ mStackScroller.setIsExpanded(true);
+ clearInvocations(mNotificationSwipeHelper);
+
+ // WHEN closing the shade with the animations
+ mStackScroller.onExpansionStarted();
+ mStackScroller.setIsExpanded(false);
+ mStackScroller.onExpansionStopped();
+
+ // VERIFY swipe is reset
+ verify(mNotificationSwipeHelper).resetSwipeState();
+ }
+
+ @Test
+ public void onShadeClosesWithoutAnimationWillResetSwipeState() {
+ // GIVEN shade is expanded
+ mStackScroller.setIsExpanded(true);
+ clearInvocations(mNotificationSwipeHelper);
+
+ // WHEN closing the shade without the animation
+ mStackScroller.setIsExpanded(false);
+
+ // VERIFY swipe is reset
+ verify(mNotificationSwipeHelper).resetSwipeState();
+ }
+
+ @Test
public void testSplitShade_hasTopOverscroll() {
mTestableResources
.addOverride(R.bool.config_use_split_notification_shade, /* value= */ true);