mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 16:26:47 +00:00
Fix all apps tab fling detection
It is a regression when we changed from ViewPager to PagedView. Unlike ViewPager, PagedView does not take "yDiff" into account when determining should it intercept its child MotionEvent. Override determineScrollingStart, just like what we did in Workspace Change-Id: I25f7415c45c370629558d944f59bf95c741b9319 FIX: 73878167
This commit is contained in:
@@ -18,12 +18,17 @@ package com.android.launcher3.allapps;
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import android.view.MotionEvent;
|
||||
import com.android.launcher3.PagedView;
|
||||
import com.android.launcher3.R;
|
||||
|
||||
public class AllAppsPagedView extends PagedView<PersonalWorkSlidingTabStrip> {
|
||||
|
||||
public AllAppsPagedView(Context context) {
|
||||
final static float START_DAMPING_TOUCH_SLOP_ANGLE = (float) Math.PI / 6;
|
||||
final static float MAX_SWIPE_ANGLE = (float) Math.PI / 3;
|
||||
final static float TOUCH_SLOP_DAMPING_FACTOR = 4;
|
||||
|
||||
public AllAppsPagedView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
@@ -46,4 +51,30 @@ public class AllAppsPagedView extends PagedView<PersonalWorkSlidingTabStrip> {
|
||||
super.onScrollChanged(l, t, oldl, oldt);
|
||||
mPageIndicator.setScroll(l, mMaxScrollX);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void determineScrollingStart(MotionEvent ev) {
|
||||
float absDeltaX = Math.abs(ev.getX() - getDownMotionX());
|
||||
float absDeltaY = Math.abs(ev.getY() - getDownMotionY());
|
||||
|
||||
if (Float.compare(absDeltaX, 0f) == 0) return;
|
||||
|
||||
float slope = absDeltaY / absDeltaX;
|
||||
float theta = (float) Math.atan(slope);
|
||||
|
||||
if (absDeltaX > mTouchSlop || absDeltaY > mTouchSlop) {
|
||||
cancelCurrentPageLongPress();
|
||||
}
|
||||
|
||||
if (theta > MAX_SWIPE_ANGLE) {
|
||||
return;
|
||||
} else if (theta > START_DAMPING_TOUCH_SLOP_ANGLE) {
|
||||
theta -= START_DAMPING_TOUCH_SLOP_ANGLE;
|
||||
float extraRatio = (float)
|
||||
Math.sqrt((theta / (MAX_SWIPE_ANGLE - START_DAMPING_TOUCH_SLOP_ANGLE)));
|
||||
super.determineScrollingStart(ev, 1 + TOUCH_SLOP_DAMPING_FACTOR * extraRatio);
|
||||
} else {
|
||||
super.determineScrollingStart(ev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user