Merge "Only handle resize touches if starting gesture within resize area" into rvc-dev

This commit is contained in:
Winson Chung
2020-06-30 07:29:29 +00:00
committed by Android (Google) Code Review
2 changed files with 33 additions and 10 deletions

View File

@@ -55,7 +55,9 @@ import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipTaskOrganizer; import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxy;
import java.io.PrintWriter;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
/** /**
@@ -94,7 +96,7 @@ public class PipResizeGestureHandler {
private final Rect mTmpBottomLeftCorner = new Rect(); private final Rect mTmpBottomLeftCorner = new Rect();
private final Rect mTmpBottomRightCorner = new Rect(); private final Rect mTmpBottomRightCorner = new Rect();
private final Rect mDisplayBounds = new Rect(); private final Rect mDisplayBounds = new Rect();
private final Supplier<Rect> mMovementBoundsSupplier; private final Function<Rect, Rect> mMovementBoundsSupplier;
private final Runnable mUpdateMovementBoundsRunnable; private final Runnable mUpdateMovementBoundsRunnable;
private int mDelta; private int mDelta;
@@ -113,7 +115,7 @@ public class PipResizeGestureHandler {
public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler, public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler,
PipMotionHelper motionHelper, DeviceConfigProxy deviceConfig, PipMotionHelper motionHelper, DeviceConfigProxy deviceConfig,
PipTaskOrganizer pipTaskOrganizer, Supplier<Rect> movementBoundsSupplier, PipTaskOrganizer pipTaskOrganizer, Function<Rect, Rect> movementBoundsSupplier,
Runnable updateMovementBoundsRunnable, SysUiState sysUiState) { Runnable updateMovementBoundsRunnable, SysUiState sysUiState) {
mContext = context; mContext = context;
mDisplayId = context.getDisplayId(); mDisplayId = context.getDisplayId();
@@ -244,10 +246,15 @@ public class PipResizeGestureHandler {
return mTmpRegion.contains(x, y); return mTmpRegion.contains(x, y);
} }
public boolean willStartResizeGesture(MotionEvent ev) {
return mEnableUserResize && isInValidSysUiState()
&& isWithinTouchRegion((int) ev.getRawX(), (int) ev.getRawY());
}
private void setCtrlType(int x, int y) { private void setCtrlType(int x, int y) {
final Rect currentPipBounds = mMotionHelper.getBounds(); final Rect currentPipBounds = mMotionHelper.getBounds();
Rect movementBounds = mMovementBoundsSupplier.get(); Rect movementBounds = mMovementBoundsSupplier.apply(currentPipBounds);
mDisplayBounds.set(movementBounds.left, mDisplayBounds.set(movementBounds.left,
movementBounds.top, movementBounds.top,
movementBounds.right + currentPipBounds.width(), movementBounds.right + currentPipBounds.width(),
@@ -353,6 +360,16 @@ public class PipResizeGestureHandler {
mMinSize.set(minX, minY); mMinSize.set(minX, minY);
} }
public void dump(PrintWriter pw, String prefix) {
final String innerPrefix = prefix + " ";
pw.println(prefix + TAG);
pw.println(innerPrefix + "mAllowGesture=" + mAllowGesture);
pw.println(innerPrefix + "mIsAttached=" + mIsAttached);
pw.println(innerPrefix + "mIsEnabled=" + mIsEnabled);
pw.println(innerPrefix + "mEnableUserResize=" + mEnableUserResize);
pw.println(innerPrefix + "mThresholdCrossed=" + mThresholdCrossed);
}
class SysUiInputEventReceiver extends BatchedInputEventReceiver { class SysUiInputEventReceiver extends BatchedInputEventReceiver {
SysUiInputEventReceiver(InputChannel channel, Looper looper) { SysUiInputEventReceiver(InputChannel channel, Looper looper) {
super(channel, looper, Choreographer.getSfInstance()); super(channel, looper, Choreographer.getSfInstance());

View File

@@ -644,12 +644,12 @@ public class PipTouchHandler {
} }
MotionEvent ev = (MotionEvent) inputEvent; MotionEvent ev = (MotionEvent) inputEvent;
if (!mTouchState.isDragging() if (ev.getActionMasked() == MotionEvent.ACTION_DOWN
&& !mMagnetizedPip.getObjectStuckToTarget() && mPipResizeGestureHandler.willStartResizeGesture(ev)) {
&& !mMotionHelper.isAnimating() // Initialize the touch state for the gesture, but immediately reset to invalidate the
&& mPipResizeGestureHandler.isWithinTouchRegion( // gesture
(int) ev.getRawX(), (int) ev.getRawY())) {
mTouchState.onTouchEvent(ev); mTouchState.onTouchEvent(ev);
mTouchState.reset();
return true; return true;
} }
@@ -1032,8 +1032,11 @@ public class PipTouchHandler {
isMenuExpanded && willResizeMenu() ? mExpandedShortestEdgeSize : 0); isMenuExpanded && willResizeMenu() ? mExpandedShortestEdgeSize : 0);
} }
private Rect getMovementBounds() { private Rect getMovementBounds(Rect curBounds) {
return mMovementBounds; Rect movementBounds = new Rect();
mSnapAlgorithm.getMovementBounds(curBounds, mInsetBounds,
movementBounds, mIsImeShowing ? mImeHeight : 0);
return movementBounds;
} }
/** /**
@@ -1065,6 +1068,9 @@ public class PipTouchHandler {
pw.println(innerPrefix + "mMovementBoundsExtraOffsets=" + mMovementBoundsExtraOffsets); pw.println(innerPrefix + "mMovementBoundsExtraOffsets=" + mMovementBoundsExtraOffsets);
mTouchState.dump(pw, innerPrefix); mTouchState.dump(pw, innerPrefix);
mMotionHelper.dump(pw, innerPrefix); mMotionHelper.dump(pw, innerPrefix);
if (mPipResizeGestureHandler != null) {
mPipResizeGestureHandler.dump(pw, innerPrefix);
}
} }
} }