Merge "Fix issue with lagging pip movement after entering/exiting dismiss" into sc-dev
This commit is contained in:
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package com.android.wm.shell.pip.phone;
|
package com.android.wm.shell.pip.phone;
|
||||||
|
|
||||||
|
import static androidx.dynamicanimation.animation.SpringForce.DAMPING_RATIO_NO_BOUNCY;
|
||||||
|
import static androidx.dynamicanimation.animation.SpringForce.STIFFNESS_LOW;
|
||||||
|
import static androidx.dynamicanimation.animation.SpringForce.STIFFNESS_MEDIUM;
|
||||||
|
|
||||||
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_EXPAND_OR_UNEXPAND;
|
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_EXPAND_OR_UNEXPAND;
|
||||||
import static com.android.wm.shell.pip.PipBoundsState.STASH_TYPE_NONE;
|
import static com.android.wm.shell.pip.PipBoundsState.STASH_TYPE_NONE;
|
||||||
|
|
||||||
@@ -31,7 +35,6 @@ import android.view.Choreographer;
|
|||||||
|
|
||||||
import androidx.dynamicanimation.animation.AnimationHandler;
|
import androidx.dynamicanimation.animation.AnimationHandler;
|
||||||
import androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackScheduler;
|
import androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackScheduler;
|
||||||
import androidx.dynamicanimation.animation.SpringForce;
|
|
||||||
|
|
||||||
import com.android.wm.shell.animation.FloatProperties;
|
import com.android.wm.shell.animation.FloatProperties;
|
||||||
import com.android.wm.shell.animation.PhysicsAnimator;
|
import com.android.wm.shell.animation.PhysicsAnimator;
|
||||||
@@ -62,9 +65,6 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
|
|||||||
private static final int LEAVE_PIP_DURATION = 300;
|
private static final int LEAVE_PIP_DURATION = 300;
|
||||||
private static final int SHIFT_DURATION = 300;
|
private static final int SHIFT_DURATION = 300;
|
||||||
|
|
||||||
private static final float PIP_STIFFNESS = 700f;
|
|
||||||
private static final float PIP_DAMPING_RATIO = SpringForce.DAMPING_RATIO_NO_BOUNCY;
|
|
||||||
|
|
||||||
/** Friction to use for PIP when it moves via physics fling animations. */
|
/** Friction to use for PIP when it moves via physics fling animations. */
|
||||||
private static final float DEFAULT_FRICTION = 1.9f;
|
private static final float DEFAULT_FRICTION = 1.9f;
|
||||||
|
|
||||||
@@ -120,13 +120,27 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
|
|||||||
|
|
||||||
/** SpringConfig to use for fling-then-spring animations. */
|
/** SpringConfig to use for fling-then-spring animations. */
|
||||||
private final PhysicsAnimator.SpringConfig mSpringConfig =
|
private final PhysicsAnimator.SpringConfig mSpringConfig =
|
||||||
new PhysicsAnimator.SpringConfig(PIP_STIFFNESS, PIP_DAMPING_RATIO);
|
new PhysicsAnimator.SpringConfig(700f, DAMPING_RATIO_NO_BOUNCY);
|
||||||
|
|
||||||
|
/** SpringConfig used for animating into the dismiss region, matches the one in
|
||||||
|
* {@link MagnetizedObject}. */
|
||||||
|
private final PhysicsAnimator.SpringConfig mAnimateToDismissSpringConfig =
|
||||||
|
new PhysicsAnimator.SpringConfig(STIFFNESS_MEDIUM, DAMPING_RATIO_NO_BOUNCY);
|
||||||
|
|
||||||
|
/** SpringConfig used for animating the pip to catch up to the finger once it leaves the dismiss
|
||||||
|
* drag region. */
|
||||||
|
private final PhysicsAnimator.SpringConfig mCatchUpSpringConfig =
|
||||||
|
new PhysicsAnimator.SpringConfig(5000f, DAMPING_RATIO_NO_BOUNCY);
|
||||||
|
|
||||||
/** SpringConfig to use for springing PIP away from conflicting floating content. */
|
/** SpringConfig to use for springing PIP away from conflicting floating content. */
|
||||||
private final PhysicsAnimator.SpringConfig mConflictResolutionSpringConfig =
|
private final PhysicsAnimator.SpringConfig mConflictResolutionSpringConfig =
|
||||||
new PhysicsAnimator.SpringConfig(SpringForce.STIFFNESS_LOW, PIP_DAMPING_RATIO);
|
new PhysicsAnimator.SpringConfig(STIFFNESS_LOW, DAMPING_RATIO_NO_BOUNCY);
|
||||||
|
|
||||||
private final Consumer<Rect> mUpdateBoundsCallback = (Rect newBounds) -> {
|
private final Consumer<Rect> mUpdateBoundsCallback = (Rect newBounds) -> {
|
||||||
|
if (mPipBoundsState.getBounds().equals(newBounds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mMenuController.updateMenuLayout(newBounds);
|
mMenuController.updateMenuLayout(newBounds);
|
||||||
mPipBoundsState.setBounds(newBounds);
|
mPipBoundsState.setBounds(newBounds);
|
||||||
};
|
};
|
||||||
@@ -262,10 +276,10 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
|
|||||||
// If PIP is 'catching up' after being stuck in the dismiss target, update the animation
|
// If PIP is 'catching up' after being stuck in the dismiss target, update the animation
|
||||||
// to spring towards the new touch location.
|
// to spring towards the new touch location.
|
||||||
mTemporaryBoundsPhysicsAnimator
|
mTemporaryBoundsPhysicsAnimator
|
||||||
.spring(FloatProperties.RECT_WIDTH, getBounds().width(), mSpringConfig)
|
.spring(FloatProperties.RECT_WIDTH, getBounds().width(), mCatchUpSpringConfig)
|
||||||
.spring(FloatProperties.RECT_HEIGHT, getBounds().height(), mSpringConfig)
|
.spring(FloatProperties.RECT_HEIGHT, getBounds().height(), mCatchUpSpringConfig)
|
||||||
.spring(FloatProperties.RECT_X, toBounds.left, mSpringConfig)
|
.spring(FloatProperties.RECT_X, toBounds.left, mCatchUpSpringConfig)
|
||||||
.spring(FloatProperties.RECT_Y, toBounds.top, mSpringConfig);
|
.spring(FloatProperties.RECT_Y, toBounds.top, mCatchUpSpringConfig);
|
||||||
|
|
||||||
startBoundsAnimator(toBounds.left /* toX */, toBounds.top /* toY */);
|
startBoundsAnimator(toBounds.left /* toX */, toBounds.top /* toY */);
|
||||||
}
|
}
|
||||||
@@ -290,10 +304,10 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
|
|||||||
mPipBoundsState.getMotionBoundsState().setBoundsInMotion(getBounds());
|
mPipBoundsState.getMotionBoundsState().setBoundsInMotion(getBounds());
|
||||||
}
|
}
|
||||||
mTemporaryBoundsPhysicsAnimator
|
mTemporaryBoundsPhysicsAnimator
|
||||||
.spring(FloatProperties.RECT_X, destinationX, velX, mSpringConfig)
|
.spring(FloatProperties.RECT_X, destinationX, velX, mAnimateToDismissSpringConfig)
|
||||||
.spring(FloatProperties.RECT_Y, destinationY, velY, mSpringConfig)
|
.spring(FloatProperties.RECT_Y, destinationY, velY, mAnimateToDismissSpringConfig)
|
||||||
.spring(FloatProperties.RECT_WIDTH, desiredWidth, mSpringConfig)
|
.spring(FloatProperties.RECT_WIDTH, desiredWidth, mAnimateToDismissSpringConfig)
|
||||||
.spring(FloatProperties.RECT_HEIGHT, desiredHeight, mSpringConfig)
|
.spring(FloatProperties.RECT_HEIGHT, desiredHeight, mAnimateToDismissSpringConfig)
|
||||||
.withEndActions(after);
|
.withEndActions(after);
|
||||||
|
|
||||||
startBoundsAnimator(destinationX, destinationY);
|
startBoundsAnimator(destinationX, destinationY);
|
||||||
|
|||||||
Reference in New Issue
Block a user