Use screen-based coordinates to calculate divier bar dragging velocity

Fix: 199468325
Test: atest WMShellUnitTests
Test: manual check the snapping behavior of divider bar.
Change-Id: I1256dbe8cb6fbfefdfdaa15c884c2ade4029e256
This commit is contained in:
Jerry Chang
2021-09-16 14:36:50 +08:00
parent d0b1d557e9
commit a2267025b5

View File

@@ -24,7 +24,6 @@ import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Property;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.InsetsSource;
import android.view.InsetsState;
@@ -178,10 +177,12 @@ public class DividerView extends FrameLayout implements View.OnTouchListener {
return true;
}
// Convert to use screen-based coordinates to prevent lost track of motion events while
// moving divider bar and calculating dragging velocity.
event.setLocation(event.getRawX(), event.getRawY());
final int action = event.getAction() & MotionEvent.ACTION_MASK;
final boolean isLandscape = isLandscape();
// Using raw xy to prevent lost track of motion events while moving divider bar.
final int touchPos = isLandscape ? (int) event.getRawX() : (int) event.getRawY();
final int touchPos = (int) (isLandscape ? event.getX() : event.getY());
switch (action) {
case MotionEvent.ACTION_DOWN:
mVelocityTracker = VelocityTracker.obtain();