Merge "PIP: Implement auto-rotate with gesture nav for Shell transitions." into sc-v2-dev am: 1800f916ad

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15331679

Change-Id: Ia320c6992d13619f1ff957cb70a6452b658705c3
This commit is contained in:
Ben Lin
2021-07-22 21:34:02 +00:00
committed by Automerger Merge Worker
2 changed files with 41 additions and 12 deletions

View File

@@ -1254,12 +1254,23 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
}
}
private int calculateWindowRotation(RemoteAnimationTargetCompat runningTaskTarget,
RecentsOrientedState orientationState) {
if (runningTaskTarget.rotationChange != 0
&& TaskAnimationManager.ENABLE_SHELL_TRANSITIONS) {
return Math.abs(runningTaskTarget.rotationChange) == ROTATION_90
? ROTATION_270 : ROTATION_90;
} else {
return orientationState.getDisplayRotation();
}
}
private SwipePipToHomeAnimator createWindowAnimationToPip(HomeAnimationFactory homeAnimFactory,
RemoteAnimationTargetCompat runningTaskTarget, float startProgress) {
// Directly animate the app to PiP (picture-in-picture) mode
final ActivityManager.RunningTaskInfo taskInfo = mGestureState.getRunningTask();
final RecentsOrientedState orientationState = mTaskViewSimulator.getOrientationState();
final int windowRotation = orientationState.getDisplayRotation();
final int windowRotation = calculateWindowRotation(runningTaskTarget, orientationState);
final int homeRotation = orientationState.getRecentsActivityRotation();
final Matrix homeToWindowPositionMap = new Matrix();

View File

@@ -40,6 +40,7 @@ import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.util.Themes;
import com.android.quickstep.TaskAnimationManager;
import com.android.systemui.shared.pip.PipSurfaceTransactionHelper;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
@@ -278,19 +279,36 @@ public class SwipePipToHomeAnimator extends RectFSpringAnim {
private RotatedPosition getRotatedPosition(float progress) {
final float degree, positionX, positionY;
if (mFromRotation == Surface.ROTATION_90) {
degree = -90 * progress;
positionX = progress * (mDestinationBoundsTransformed.left - mStartBounds.left)
+ mStartBounds.left;
positionY = progress * (mDestinationBoundsTransformed.bottom - mStartBounds.top)
+ mStartBounds.top;
if (TaskAnimationManager.ENABLE_SHELL_TRANSITIONS) {
if (mFromRotation == Surface.ROTATION_90) {
degree = -90 * (1 - progress);
positionX = progress * (mDestinationBoundsTransformed.left - mStartBounds.left)
+ mStartBounds.left;
positionY = progress * (mDestinationBoundsTransformed.top - mStartBounds.top)
+ mStartBounds.top + mStartBounds.bottom * (1 - progress);
} else {
degree = 90 * (1 - progress);
positionX = progress * (mDestinationBoundsTransformed.left - mStartBounds.left)
+ mStartBounds.left + mStartBounds.right * (1 - progress);
positionY = progress * (mDestinationBoundsTransformed.top - mStartBounds.top)
+ mStartBounds.top;
}
} else {
degree = 90 * progress;
positionX = progress * (mDestinationBoundsTransformed.right - mStartBounds.left)
+ mStartBounds.left;
positionY = progress * (mDestinationBoundsTransformed.top - mStartBounds.top)
+ mStartBounds.top;
if (mFromRotation == Surface.ROTATION_90) {
degree = -90 * progress;
positionX = progress * (mDestinationBoundsTransformed.left - mStartBounds.left)
+ mStartBounds.left;
positionY = progress * (mDestinationBoundsTransformed.bottom - mStartBounds.top)
+ mStartBounds.top;
} else {
degree = 90 * progress;
positionX = progress * (mDestinationBoundsTransformed.right - mStartBounds.left)
+ mStartBounds.left;
positionY = progress * (mDestinationBoundsTransformed.top - mStartBounds.top)
+ mStartBounds.top;
}
}
return new RotatedPosition(degree, positionX, positionY);
}