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
This commit is contained in:
Mady Mellor
2017-06-28 17:08:21 -07:00
parent ac77186d34
commit 89e15ec9fb
2 changed files with 22 additions and 10 deletions

View File

@@ -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);
}
/**

View File

@@ -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 */);
}
}