Merge "Allow customization of touch handler."

This commit is contained in:
TreeHugger Robot
2020-01-28 02:24:47 +00:00
committed by Android (Google) Code Review
3 changed files with 23 additions and 21 deletions

View File

@@ -296,6 +296,13 @@ public class PipManager implements BasePipManager {
mTouchHandler.showPictureInPictureMenu();
}
/**
* Sets a customized touch gesture that replaces the default one.
*/
public void setTouchGesture(PipTouchGesture gesture) {
mTouchHandler.setTouchGesture(gesture);
}
/**
* Sets both shelf visibility and its height.
*/

View File

@@ -24,19 +24,19 @@ public abstract class PipTouchGesture {
/**
* Handle the touch down.
*/
void onDown(PipTouchState touchState) {}
public void onDown(PipTouchState touchState) {}
/**
* Handle the touch move, and return whether the event was consumed.
*/
boolean onMove(PipTouchState touchState) {
public boolean onMove(PipTouchState touchState) {
return false;
}
/**
* Handle the touch up, and return whether the gesture was consumed.
*/
boolean onUp(PipTouchState touchState) {
public boolean onUp(PipTouchState touchState) {
return false;
}
}

View File

@@ -126,8 +126,8 @@ public class PipTouchHandler {
// Touch state
private final PipTouchState mTouchState;
private final FlingAnimationUtils mFlingAnimationUtils;
private final PipTouchGesture[] mGestures;
private final PipMotionHelper mMotionHelper;
private PipTouchGesture mGesture;
// Temp vars
private final Rect mTmpBounds = new Rect();
@@ -185,9 +185,7 @@ public class PipTouchHandler {
mSnapAlgorithm = new PipSnapAlgorithm(mContext);
mFlingAnimationUtils = new FlingAnimationUtils(context.getResources().getDisplayMetrics(),
2.5f);
mGestures = new PipTouchGesture[] {
mDefaultMovementGesture
};
mGesture = new DefaultPipTouchGesture();
mMotionHelper = new PipMotionHelper(mContext, mActivityManager, mActivityTaskManager,
mMenuController, mSnapAlgorithm, mFlingAnimationUtils);
mTouchState = new PipTouchState(mViewConfig, mHandler,
@@ -210,6 +208,10 @@ public class PipTouchHandler {
this::onAccessibilityShowMenu, mHandler);
}
public void setTouchGesture(PipTouchGesture gesture) {
mGesture = gesture;
}
public void setTouchEnabled(boolean enabled) {
mTouchState.setAllowTouches(enabled);
}
@@ -363,17 +365,12 @@ public class PipTouchHandler {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN: {
mMotionHelper.synchronizePinnedStackBounds();
for (PipTouchGesture gesture : mGestures) {
gesture.onDown(mTouchState);
}
mGesture.onDown(mTouchState);
break;
}
case MotionEvent.ACTION_MOVE: {
for (PipTouchGesture gesture : mGestures) {
if (gesture.onMove(mTouchState)) {
break;
}
if (mGesture.onMove(mTouchState)) {
break;
}
shouldDeliverToMenu = !mTouchState.isDragging();
@@ -384,10 +381,8 @@ public class PipTouchHandler {
// dragging (ie. when the IME shows)
updateMovementBounds(mMenuState);
for (PipTouchGesture gesture : mGestures) {
if (gesture.onUp(mTouchState)) {
break;
}
if (mGesture.onUp(mTouchState)) {
break;
}
// Fall through to clean up
@@ -591,7 +586,7 @@ public class PipTouchHandler {
/**
* Gesture controlling normal movement of the PIP.
*/
private PipTouchGesture mDefaultMovementGesture = new PipTouchGesture() {
private class DefaultPipTouchGesture extends PipTouchGesture {
// Whether the PiP was on the left side of the screen at the start of the gesture
private boolean mStartedOnLeft;
private final Point mStartPosition = new Point();
@@ -623,7 +618,7 @@ public class PipTouchHandler {
}
@Override
boolean onMove(PipTouchState touchState) {
public boolean onMove(PipTouchState touchState) {
if (!touchState.isUserInteracting()) {
return false;
}