Merge changes I53d8e217,Iff38e372 into udc-dev
* changes: Aggressively reset SwipeHelper state Clear mTouchedView when a snap-back animation ends
This commit is contained in:
@@ -548,6 +548,10 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
|
|||||||
if (!cancelled) {
|
if (!cancelled) {
|
||||||
updateSwipeProgressFromOffset(animView, canBeDismissed);
|
updateSwipeProgressFromOffset(animView, canBeDismissed);
|
||||||
resetSwipeOfView(animView);
|
resetSwipeOfView(animView);
|
||||||
|
// Clear the snapped view after success, assuming it's not being swiped now
|
||||||
|
if (animView == mTouchedView && !mIsSwiping) {
|
||||||
|
mTouchedView = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
onChildSnappedBack(animView, targetLeft);
|
onChildSnappedBack(animView, targetLeft);
|
||||||
});
|
});
|
||||||
@@ -813,13 +817,39 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetSwipeState() {
|
private void resetSwipeState() {
|
||||||
View swipedView = getSwipedView();
|
resetSwipeStates(/* resetAll= */ false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetTouchState() {
|
||||||
|
resetSwipeStates(/* resetAll= */ true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method resets the swipe state, and if `resetAll` is true, also resets the snap state */
|
||||||
|
private void resetSwipeStates(boolean resetAll) {
|
||||||
|
final View touchedView = mTouchedView;
|
||||||
|
final boolean wasSnapping = mSnappingChild;
|
||||||
|
final boolean wasSwiping = mIsSwiping;
|
||||||
mTouchedView = null;
|
mTouchedView = null;
|
||||||
mIsSwiping = false;
|
mIsSwiping = false;
|
||||||
if (swipedView != null) {
|
// If we were swiping, then we resetting swipe requires resetting everything.
|
||||||
snapChildIfNeeded(swipedView, false, 0);
|
resetAll |= wasSwiping;
|
||||||
onChildSnappedBack(swipedView, 0);
|
if (resetAll) {
|
||||||
|
mSnappingChild = false;
|
||||||
|
}
|
||||||
|
if (touchedView == null) return; // No view to reset visually
|
||||||
|
// When snap needs to be reset, first thing is to cancel any translation animation
|
||||||
|
final boolean snapNeedsReset = resetAll && wasSnapping;
|
||||||
|
if (snapNeedsReset) {
|
||||||
|
cancelTranslateAnimation(touchedView);
|
||||||
|
}
|
||||||
|
// actually reset the view to default state
|
||||||
|
if (resetAll) {
|
||||||
|
snapChildIfNeeded(touchedView, false, 0);
|
||||||
|
}
|
||||||
|
// report if a swipe or snap was reset.
|
||||||
|
if (wasSwiping || snapNeedsReset) {
|
||||||
|
onChildSnappedBack(touchedView, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4406,6 +4406,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
boolean nowHiddenAtAll = mAmbientState.isHiddenAtAll();
|
boolean nowHiddenAtAll = mAmbientState.isHiddenAtAll();
|
||||||
if (nowFullyHidden != wasFullyHidden) {
|
if (nowFullyHidden != wasFullyHidden) {
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
|
mSwipeHelper.resetTouchState();
|
||||||
}
|
}
|
||||||
if (!wasHiddenAtAll && nowHiddenAtAll) {
|
if (!wasHiddenAtAll && nowHiddenAtAll) {
|
||||||
resetExposedMenuView(true /* animate */, true /* animate */);
|
resetExposedMenuView(true /* animate */, true /* animate */);
|
||||||
@@ -5866,7 +5867,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void cancelActiveSwipe() {
|
private void cancelActiveSwipe() {
|
||||||
mSwipeHelper.resetSwipeState();
|
mSwipeHelper.resetTouchState();
|
||||||
updateContinuousShadowDrawing();
|
updateContinuousShadowDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -836,7 +836,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onShadeClosesWithAnimationWillResetSwipeState() {
|
public void onShadeClosesWithAnimationWillResetTouchState() {
|
||||||
// GIVEN shade is expanded
|
// GIVEN shade is expanded
|
||||||
mStackScroller.setIsExpanded(true);
|
mStackScroller.setIsExpanded(true);
|
||||||
clearInvocations(mNotificationSwipeHelper);
|
clearInvocations(mNotificationSwipeHelper);
|
||||||
@@ -846,12 +846,12 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
|||||||
mStackScroller.setIsExpanded(false);
|
mStackScroller.setIsExpanded(false);
|
||||||
mStackScroller.onExpansionStopped();
|
mStackScroller.onExpansionStopped();
|
||||||
|
|
||||||
// VERIFY swipe is reset
|
// VERIFY touch is reset
|
||||||
verify(mNotificationSwipeHelper).resetSwipeState();
|
verify(mNotificationSwipeHelper).resetTouchState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onShadeClosesWithoutAnimationWillResetSwipeState() {
|
public void onShadeClosesWithoutAnimationWillResetTouchState() {
|
||||||
// GIVEN shade is expanded
|
// GIVEN shade is expanded
|
||||||
mStackScroller.setIsExpanded(true);
|
mStackScroller.setIsExpanded(true);
|
||||||
clearInvocations(mNotificationSwipeHelper);
|
clearInvocations(mNotificationSwipeHelper);
|
||||||
@@ -859,8 +859,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
|||||||
// WHEN closing the shade without the animation
|
// WHEN closing the shade without the animation
|
||||||
mStackScroller.setIsExpanded(false);
|
mStackScroller.setIsExpanded(false);
|
||||||
|
|
||||||
// VERIFY swipe is reset
|
// VERIFY touch is reset
|
||||||
verify(mNotificationSwipeHelper).resetSwipeState();
|
verify(mNotificationSwipeHelper).resetTouchState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user