Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java +3 −4 Original line number Diff line number Diff line Loading @@ -368,12 +368,11 @@ public class PipMotionHelper implements PipAppOpsListener.Callback, } /** * Stash PiP to the closest edge. * Stash PiP to the closest edge. We set velocityY to 0 to limit pure horizontal motion. */ void stashToEdge( float velocityX, float velocityY, @Nullable Runnable postBoundsUpdateCallback) { void stashToEdge(float velocityX, @Nullable Runnable postBoundsUpdateCallback) { mPipBoundsState.setStashed(velocityX < 0 ? STASH_TYPE_LEFT : STASH_TYPE_RIGHT); movetoTarget(velocityX, velocityY, postBoundsUpdateCallback, true /* isStash */); movetoTarget(velocityX, 0 /* velocityY */, postBoundsUpdateCallback, true /* isStash */); } private void movetoTarget( Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java +13 −12 Original line number Diff line number Diff line Loading @@ -64,11 +64,7 @@ import java.util.function.Consumer; public class PipTouchHandler { private static final String TAG = "PipTouchHandler"; /** Duration of the dismiss scrim fading in/out. */ private static final int DISMISS_TRANSITION_DURATION_MS = 200; /* The multiplier to apply scale the target size by when applying the magnetic field radius */ private static final float MAGNETIC_FIELD_RADIUS_MULTIPLIER = 1.25f; private static final float STASH_MINIMUM_VELOCITY_X = 3000.f; // Allow PIP to resize to a slightly bigger state upon touch private final boolean mEnableResize; Loading Loading @@ -710,6 +706,7 @@ public class PipTouchHandler { private final Point mStartPosition = new Point(); private final PointF mDelta = new PointF(); private boolean mShouldHideMenuAfterFling; private float mDownSavedFraction = -1f; @Override public void onDown(PipTouchState touchState) { Loading @@ -722,6 +719,7 @@ public class PipTouchHandler { mStartPosition.set(bounds.left, bounds.top); mMovementWithinDismiss = touchState.getDownTouchPosition().y >= mMovementBounds.bottom; mMotionHelper.setSpringingToTouch(false); mDownSavedFraction = mPipBoundsHandler.getSnapFraction(mPipBoundsState.getBounds()); // If the menu is still visible then just poke the menu // so that it will timeout after the user stops touching it Loading Loading @@ -790,13 +788,15 @@ public class PipTouchHandler { // Reset the touch state on up before the fling settles mTouchState.reset(); final Rect animatingBounds = getPossiblyAnimatingBounds(); // If User releases the PIP window while it's out of the display bounds, put // PIP into stashed mode. if (mEnableStash && (animatingBounds.right > mPipBoundsState.getDisplayBounds().right || animatingBounds.left < mPipBoundsState.getDisplayBounds().left)) { mMotionHelper.stashToEdge(vel.x, vel.y, this::stashEndAction /* endAction */); // If user flings the PIP window above the minimum velocity, stash PIP. // Only allow stashing to the edge if the user starts dragging the PIP from that // edge. if (mEnableStash && !mPipBoundsState.isStashed() && ((vel.x > STASH_MINIMUM_VELOCITY_X && mDownSavedFraction > 1f && mDownSavedFraction < 2f) || (vel.x < -STASH_MINIMUM_VELOCITY_X && mDownSavedFraction > 3f && mDownSavedFraction < 4f))) { mMotionHelper.stashToEdge(vel.x, this::stashEndAction /* endAction */); } else { mMotionHelper.flingToSnapTarget(vel.x, vel.y, this::flingEndAction /* endAction */); Loading Loading @@ -834,6 +834,7 @@ public class PipTouchHandler { mTouchState.scheduleDoubleTapTimeoutCallback(); } } mDownSavedFraction = -1f; return true; } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMotionHelper.java +3 −4 Original line number Diff line number Diff line Loading @@ -368,12 +368,11 @@ public class PipMotionHelper implements PipAppOpsListener.Callback, } /** * Stash PiP to the closest edge. * Stash PiP to the closest edge. We set velocityY to 0 to limit pure horizontal motion. */ void stashToEdge( float velocityX, float velocityY, @Nullable Runnable postBoundsUpdateCallback) { void stashToEdge(float velocityX, @Nullable Runnable postBoundsUpdateCallback) { mPipBoundsState.setStashed(velocityX < 0 ? STASH_TYPE_LEFT : STASH_TYPE_RIGHT); movetoTarget(velocityX, velocityY, postBoundsUpdateCallback, true /* isStash */); movetoTarget(velocityX, 0 /* velocityY */, postBoundsUpdateCallback, true /* isStash */); } private void movetoTarget( Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java +13 −12 Original line number Diff line number Diff line Loading @@ -64,11 +64,7 @@ import java.util.function.Consumer; public class PipTouchHandler { private static final String TAG = "PipTouchHandler"; /** Duration of the dismiss scrim fading in/out. */ private static final int DISMISS_TRANSITION_DURATION_MS = 200; /* The multiplier to apply scale the target size by when applying the magnetic field radius */ private static final float MAGNETIC_FIELD_RADIUS_MULTIPLIER = 1.25f; private static final float STASH_MINIMUM_VELOCITY_X = 3000.f; // Allow PIP to resize to a slightly bigger state upon touch private final boolean mEnableResize; Loading Loading @@ -710,6 +706,7 @@ public class PipTouchHandler { private final Point mStartPosition = new Point(); private final PointF mDelta = new PointF(); private boolean mShouldHideMenuAfterFling; private float mDownSavedFraction = -1f; @Override public void onDown(PipTouchState touchState) { Loading @@ -722,6 +719,7 @@ public class PipTouchHandler { mStartPosition.set(bounds.left, bounds.top); mMovementWithinDismiss = touchState.getDownTouchPosition().y >= mMovementBounds.bottom; mMotionHelper.setSpringingToTouch(false); mDownSavedFraction = mPipBoundsHandler.getSnapFraction(mPipBoundsState.getBounds()); // If the menu is still visible then just poke the menu // so that it will timeout after the user stops touching it Loading Loading @@ -790,13 +788,15 @@ public class PipTouchHandler { // Reset the touch state on up before the fling settles mTouchState.reset(); final Rect animatingBounds = getPossiblyAnimatingBounds(); // If User releases the PIP window while it's out of the display bounds, put // PIP into stashed mode. if (mEnableStash && (animatingBounds.right > mPipBoundsState.getDisplayBounds().right || animatingBounds.left < mPipBoundsState.getDisplayBounds().left)) { mMotionHelper.stashToEdge(vel.x, vel.y, this::stashEndAction /* endAction */); // If user flings the PIP window above the minimum velocity, stash PIP. // Only allow stashing to the edge if the user starts dragging the PIP from that // edge. if (mEnableStash && !mPipBoundsState.isStashed() && ((vel.x > STASH_MINIMUM_VELOCITY_X && mDownSavedFraction > 1f && mDownSavedFraction < 2f) || (vel.x < -STASH_MINIMUM_VELOCITY_X && mDownSavedFraction > 3f && mDownSavedFraction < 4f))) { mMotionHelper.stashToEdge(vel.x, this::stashEndAction /* endAction */); } else { mMotionHelper.flingToSnapTarget(vel.x, vel.y, this::flingEndAction /* endAction */); Loading Loading @@ -834,6 +834,7 @@ public class PipTouchHandler { mTouchState.scheduleDoubleTapTimeoutCallback(); } } mDownSavedFraction = -1f; return true; } Loading