Fix horizontal drag on stories scrolls tabs instead of stories
This commit is contained in:
parent
c293e9baff
commit
81baeb1b33
@ -27,7 +27,9 @@ import awais.instagrabber.R;
|
|||||||
public final class RemixDrawerLayout extends MouseDrawer implements MouseDrawer.DrawerListener {
|
public final class RemixDrawerLayout extends MouseDrawer implements MouseDrawer.DrawerListener {
|
||||||
private final FrameLayout frameLayout;
|
private final FrameLayout frameLayout;
|
||||||
private View drawerView;
|
private View drawerView;
|
||||||
private RecyclerView scroll, feedPosts;
|
private RecyclerView highlightsList;
|
||||||
|
private RecyclerView feedPosts;
|
||||||
|
private RecyclerView feedStories;
|
||||||
private float startX;
|
private float startX;
|
||||||
|
|
||||||
public RemixDrawerLayout(@NonNull final Context context) {
|
public RemixDrawerLayout(@NonNull final Context context) {
|
||||||
@ -91,37 +93,54 @@ public final class RemixDrawerLayout extends MouseDrawer implements MouseDrawer.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// thanks to Fede @ https://stackoverflow.com/questions/6920137/android-viewpager-and-horizontalscrollview/7258579#7258579
|
// thanks to Fede @ https://stackoverflow.com/questions/6920137/android-viewpager-and-horizontalscrollview/7258579#7258579
|
||||||
if (scroll == null) scroll = findViewById(R.id.highlightsList);
|
if (highlightsList == null) highlightsList = findViewById(R.id.highlightsList);
|
||||||
if (scroll != null) {
|
if (highlightsList != null) {
|
||||||
final boolean touchIsInRecycler = x >= scroll.getLeft() && x < scroll.getRight()
|
final Boolean result = handleHorizontalRecyclerView(ev, highlightsList);
|
||||||
&& y >= scroll.getTop() && scroll.getBottom() > y;
|
if (result != null) {
|
||||||
|
return result;
|
||||||
if (touchIsInRecycler) {
|
}
|
||||||
final int action = ev.getActionMasked();
|
}
|
||||||
|
if (feedStories == null) feedStories = findViewById(R.id.feedStories);
|
||||||
if (action == MotionEvent.ACTION_CANCEL) return super.onInterceptTouchEvent(ev);
|
if (feedStories != null) {
|
||||||
|
final Boolean result = handleHorizontalRecyclerView(ev, feedStories);
|
||||||
if (action == MotionEvent.ACTION_DOWN) startX = x;
|
if (result != null) {
|
||||||
else if (action == MotionEvent.ACTION_MOVE) {
|
return result;
|
||||||
final int scrollRange = scroll.computeHorizontalScrollRange();
|
|
||||||
final int scrollOffset = scroll.computeHorizontalScrollOffset();
|
|
||||||
final boolean scrollable = scrollRange > scroll.getWidth();
|
|
||||||
final boolean draggingFromRight = startX > x;
|
|
||||||
|
|
||||||
if (scrollOffset < 1) {
|
|
||||||
if (!scrollable) return super.onInterceptTouchEvent(ev);
|
|
||||||
else if (!draggingFromRight) return super.onInterceptTouchEvent(ev);
|
|
||||||
} else if (scrollable && draggingFromRight && scrollRange - scrollOffset == scroll.computeHorizontalScrollExtent()) {
|
|
||||||
return super.onInterceptTouchEvent(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.onInterceptTouchEvent(ev);
|
return super.onInterceptTouchEvent(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Boolean handleHorizontalRecyclerView(@NonNull final MotionEvent ev, final RecyclerView view) {
|
||||||
|
final float x = ev.getX();
|
||||||
|
final float y = ev.getY();
|
||||||
|
final boolean touchIsInRecycler = x >= view.getLeft() && x < view.getRight()
|
||||||
|
&& y >= view.getTop() && view.getBottom() > y;
|
||||||
|
|
||||||
|
if (touchIsInRecycler) {
|
||||||
|
final int action = ev.getActionMasked();
|
||||||
|
|
||||||
|
if (action == MotionEvent.ACTION_CANCEL) return super.onInterceptTouchEvent(ev);
|
||||||
|
|
||||||
|
if (action == MotionEvent.ACTION_DOWN) startX = x;
|
||||||
|
else if (action == MotionEvent.ACTION_MOVE) {
|
||||||
|
final int scrollRange = view.computeHorizontalScrollRange();
|
||||||
|
final int scrollOffset = view.computeHorizontalScrollOffset();
|
||||||
|
final boolean scrollable = scrollRange > view.getWidth();
|
||||||
|
final boolean draggingFromRight = startX > x;
|
||||||
|
|
||||||
|
if (scrollOffset < 1) {
|
||||||
|
if (!scrollable) return super.onInterceptTouchEvent(ev);
|
||||||
|
else if (!draggingFromRight) return super.onInterceptTouchEvent(ev);
|
||||||
|
} else if (scrollable && draggingFromRight && scrollRange - scrollOffset == view.computeHorizontalScrollExtent()) {
|
||||||
|
return super.onInterceptTouchEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDrawerSlide(@NonNull final View view, @EdgeGravity final int gravity, final float slideOffset) {
|
public void onDrawerSlide(@NonNull final View view, @EdgeGravity final int gravity, final float slideOffset) {
|
||||||
drawerView = view;
|
drawerView = view;
|
||||||
|
Loading…
Reference in New Issue
Block a user