17
17
18
18
import android .content .Context ;
19
19
import android .graphics .Canvas ;
20
+ import android .os .SystemClock ;
21
+ import android .view .MotionEvent ;
20
22
import android .widget .EdgeEffect ;
21
23
24
+ import com .android .launcher3 .BuildConfig ;
22
25
import com .android .launcher3 .Utilities ;
23
- import com .android .systemui .plugins .shared .LauncherOverlayManager .LauncherOverlay ;
26
+ import com .android .systemui .plugins .shared .LauncherOverlayManager .LauncherOverlayTouchProxy ;
24
27
25
28
/**
26
29
* Extension of {@link EdgeEffect} which shows the Launcher overlay
27
30
*/
28
31
public class OverlayEdgeEffect extends EdgeEffectCompat {
29
32
30
33
protected float mDistance ;
31
- protected final LauncherOverlay mOverlay ;
34
+ protected final LauncherOverlayTouchProxy mOverlay ;
32
35
protected boolean mIsScrolling ;
33
36
protected final boolean mIsRtl ;
34
37
35
- public OverlayEdgeEffect (Context context , LauncherOverlay overlay ) {
38
+ public OverlayEdgeEffect (Context context , LauncherOverlayTouchProxy overlay ) {
36
39
super (context );
37
40
mOverlay = overlay ;
38
41
mIsRtl = Utilities .isRtl (context .getResources ());
@@ -44,12 +47,30 @@ public float getDistance() {
44
47
}
45
48
46
49
public float onPullDistance (float deltaDistance , float displacement ) {
50
+ // Fallback implementation, will never actually get called
51
+ if (BuildConfig .IS_DEBUG_DEVICE ) {
52
+ throw new RuntimeException ("Wrong method called" );
53
+ }
54
+ MotionEvent mv = MotionEvent .obtain (SystemClock .uptimeMillis (), SystemClock .uptimeMillis (),
55
+ MotionEvent .ACTION_MOVE , displacement , 0 , 0 );
56
+ try {
57
+ return onPullDistance (deltaDistance , displacement , mv );
58
+ } finally {
59
+ mv .recycle ();
60
+ }
61
+ }
62
+
63
+ @ Override
64
+ public float onPullDistance (float deltaDistance , float displacement , MotionEvent ev ) {
47
65
mDistance = Math .max (0f , deltaDistance + mDistance );
48
66
if (!mIsScrolling ) {
49
- mOverlay .onScrollInteractionBegin ();
67
+ int originalAction = ev .getAction ();
68
+ ev .setAction (MotionEvent .ACTION_DOWN );
69
+ mOverlay .onOverlayMotionEvent (ev , 0 );
70
+ ev .setAction (originalAction );
50
71
mIsScrolling = true ;
51
72
}
52
- mOverlay .onScrollChange ( mDistance , mIsRtl );
73
+ mOverlay .onOverlayMotionEvent ( ev , mDistance );
53
74
return mDistance > 0 ? deltaDistance : 0 ;
54
75
}
55
76
@@ -63,9 +84,30 @@ public boolean isFinished() {
63
84
64
85
@ Override
65
86
public void onRelease () {
87
+ // Fallback implementation, will never actually get called
88
+ if (BuildConfig .IS_DEBUG_DEVICE ) {
89
+ throw new RuntimeException ("Wrong method called" );
90
+ }
91
+ MotionEvent mv = MotionEvent .obtain (SystemClock .uptimeMillis (), SystemClock .uptimeMillis (),
92
+ MotionEvent .ACTION_UP , mDistance , 0 , 0 );
93
+ onRelease (mv );
94
+ mv .recycle ();
95
+ }
96
+
97
+ @ Override
98
+ public void onFlingVelocity (int velocity ) {
99
+ mOverlay .onFlingVelocity (velocity );
100
+ }
101
+
102
+ @ Override
103
+ public void onRelease (MotionEvent ev ) {
66
104
if (mIsScrolling ) {
105
+ int originalAction = ev .getAction ();
106
+ ev .setAction (MotionEvent .ACTION_UP );
107
+ mOverlay .onOverlayMotionEvent (ev , mDistance );
108
+ ev .setAction (originalAction );
109
+
67
110
mDistance = 0 ;
68
- mOverlay .onScrollInteractionEnd ();
69
111
mIsScrolling = false ;
70
112
}
71
113
}
0 commit comments