From 89e15ec9fbdbf7cd43736e3009ae31ec81a02623 Mon Sep 17 00:00:00 2001 From: Mady Mellor Date: Wed, 28 Jun 2017 17:08:21 -0700 Subject: [PATCH] Fixes issue where notification jumps when user is dragging and its updated Also fixes an issue where onTouchEvent wasn't being called plumbed through for the down event. Test: manual - have a notification, get an update to it while dragging Change-Id: I681d4333a60616a7b4b1800fb01504c792e343fc Fixes: 63094338 --- .../statusbar/NotificationMenuRow.java | 29 +++++++++++++------ .../stack/NotificationStackScrollLayout.java | 3 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java index f8591247f1d0d..fddc446f61112 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java @@ -100,6 +100,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl private boolean mShouldShowMenu; private NotificationSwipeActionHelper mSwipeHelper; + private boolean mIsUserTouching; public NotificationMenuRow(Context context) { mContext = context; @@ -202,8 +203,11 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } else { mIconsPlaced = false; setMenuLocation(); - // If the # of items showing changed we need to update the snap position - showMenu(mParent, mOnLeft ? getSpaceForMenu() : -getSpaceForMenu(), 0 /* velocity */); + if (!mIsUserTouching) { + // If the # of items showing changed we need to update the snap position + showMenu(mParent, mOnLeft ? getSpaceForMenu() : -getSpaceForMenu(), + 0 /* velocity */); + } } } @@ -233,6 +237,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl mHandler.removeCallbacks(mCheckForDrag); mCheckForDrag = null; mPrevX = ev.getRawX(); + mIsUserTouching = true; break; case MotionEvent.ACTION_MOVE: @@ -265,7 +270,12 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl break; case MotionEvent.ACTION_UP: + mIsUserTouching = false; return handleUpEvent(ev, view, velocity); + case MotionEvent.ACTION_CANCEL: + mIsUserTouching = false; + cancelDrag(); + return false; } return false; } @@ -354,23 +364,24 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } private void snapBack(View animView, float velocity) { - if (mFadeAnimator != null) { - mFadeAnimator.cancel(); - } - mHandler.removeCallbacks(mCheckForDrag); + cancelDrag(); mMenuSnappedTo = false; mSnapping = true; mSwipeHelper.snap(animView, 0 /* leftTarget */, velocity); } private void dismiss(View animView, float velocity) { + cancelDrag(); + mMenuSnappedTo = false; + mDismissing = true; + mSwipeHelper.dismiss(animView, velocity); + } + + private void cancelDrag() { if (mFadeAnimator != null) { mFadeAnimator.cancel(); } mHandler.removeCallbacks(mCheckForDrag); - mMenuSnappedTo = false; - mDismissing = true; - mSwipeHelper.dismiss(animView, velocity); } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 00973911ac0d0..86f45049320ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -4344,10 +4344,10 @@ public class NotificationStackScrollLayout extends ViewGroup @Override public void onDownUpdate(View currView, MotionEvent ev) { mTranslatingParentView = currView; - mCurrMenuRow = null; if (mCurrMenuRow != null) { mCurrMenuRow.onTouchEvent(currView, ev, 0 /* velocity */); } + mCurrMenuRow = null; mHandler.removeCallbacks(mFalsingCheck); // Slide back any notifications that might be showing a menu @@ -4358,6 +4358,7 @@ public class NotificationStackScrollLayout extends ViewGroup mCurrMenuRow = row.createMenu(); mCurrMenuRow.setSwipeActionHelper(NotificationSwipeHelper.this); mCurrMenuRow.setMenuClickListener(NotificationStackScrollLayout.this); + mCurrMenuRow.onTouchEvent(currView, ev, 0 /* velocity */); } }