Disable header gesture detector on swiping

master
M66B 3 weeks ago
parent 1b263cc319
commit c092096a46

@ -389,6 +389,8 @@ public class FragmentMessages extends FragmentBase
private boolean scrolling = false; private boolean scrolling = false;
private boolean navigating = false; private boolean navigating = false;
private GestureDetector gestureDetector;
private AdapterMessage adapter; private AdapterMessage adapter;
private AdapterMessage.ViewType viewType; private AdapterMessage.ViewType viewType;
@ -1196,15 +1198,11 @@ public class FragmentMessages extends FragmentBase
}; };
rvMessage.addItemDecoration(dateDecorator); rvMessage.addItemDecoration(dateDecorator);
rvMessage.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
private final GestureDetector gestureDetector =
new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
@Override @Override
public void onLongPress(@NonNull MotionEvent e) { public void onLongPress(@NonNull MotionEvent e) {
if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
return; return;
if (swiping)
return;
int x = Math.round(e.getX()); int x = Math.round(e.getX());
int y = Math.round(e.getY()); int y = Math.round(e.getY());
@ -1257,9 +1255,15 @@ public class FragmentMessages extends FragmentBase
} }
}); });
rvMessage.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override @Override
public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
if (!swiping)
try {
gestureDetector.onTouchEvent(e); gestureDetector.onTouchEvent(e);
} catch (Throwable ex) {
Log.e(ex);
}
return false; return false;
} }
@ -3290,9 +3294,18 @@ public class FragmentMessages extends FragmentBase
public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState) { public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState); super.onSelectedChanged(viewHolder, actionState);
getMainHandler().removeCallbacks(disableSwiping); getMainHandler().removeCallbacks(disableSwiping);
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
swiping = true; swiping = true;
Log.i("Swiping started"); Log.i("Swiping started");
try {
MotionEvent cancel = MotionEvent.obtain(
SystemClock.uptimeMillis(), SystemClock.uptimeMillis(),
MotionEvent.ACTION_CANCEL, 0, 0, 0);
gestureDetector.onTouchEvent(cancel);
} catch (Throwable ex) {
Log.e(ex);
}
} else } else
getMainHandler().postDelayed(disableSwiping, ViewConfiguration.getLongPressTimeout() + 100); getMainHandler().postDelayed(disableSwiping, ViewConfiguration.getLongPressTimeout() + 100);
} }

Loading…
Cancel
Save