Merge "Update the KQS app launch animation to match the spec exactly" into main
diff --git a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
index 9dac89d..2421c94 100644
--- a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
@@ -23,6 +23,7 @@
import android.app.ActivityOptions;
import android.view.KeyEvent;
import android.view.View;
+import android.view.animation.AnimationUtils;
import android.window.RemoteTransition;
import androidx.annotation.NonNull;
@@ -38,6 +39,7 @@
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.ActivityManagerWrapper;
+import com.android.systemui.shared.system.QuickStepContract;
import java.io.PrintWriter;
import java.util.List;
@@ -148,8 +150,13 @@
return -1;
}
+ TaskbarActivityContext context = mControllers.taskbarActivityContext;
RemoteTransition remoteTransition = new RemoteTransition(new SlideInRemoteTransition(
- Utilities.isRtl(mControllers.taskbarActivityContext.getResources())));
+ Utilities.isRtl(mControllers.taskbarActivityContext.getResources()),
+ context.getDeviceProfile().overviewPageSpacing,
+ QuickStepContract.getWindowCornerRadius(context),
+ AnimationUtils.loadInterpolator(
+ context, android.R.interpolator.fast_out_extra_slow_in)));
if (mOnDesktop) {
UI_HELPER_EXECUTOR.execute(() ->
SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext())
diff --git a/quickstep/src/com/android/quickstep/util/SlideInRemoteTransition.kt b/quickstep/src/com/android/quickstep/util/SlideInRemoteTransition.kt
index c1fa2f3..6544ba7 100644
--- a/quickstep/src/com/android/quickstep/util/SlideInRemoteTransition.kt
+++ b/quickstep/src/com/android/quickstep/util/SlideInRemoteTransition.kt
@@ -15,6 +15,7 @@
*/
package com.android.quickstep.util
+import android.animation.TimeInterpolator
import android.animation.ValueAnimator
import android.app.WindowConfiguration.ACTIVITY_TYPE_HOME
import android.graphics.Rect
@@ -30,7 +31,13 @@
import com.android.wm.shell.util.TransitionUtil
/** Remote animation which slides the opening targets in and the closing targets out */
-class SlideInRemoteTransition(val isRtl: Boolean) : IRemoteTransition.Stub() {
+class SlideInRemoteTransition(
+ private val isRtl: Boolean,
+ private val pageSpacing: Int,
+ private val cornerRadius: Float,
+ private val interpolator: TimeInterpolator,
+) : IRemoteTransition.Stub() {
+ private val animationDurationMs = 500L
override fun mergeAnimation(
iBinder: IBinder,
@@ -54,6 +61,8 @@
finishCB: IRemoteTransitionFinishedCallback
) {
val anim = ValueAnimator.ofFloat(0f, 1f)
+ anim.interpolator = interpolator
+ anim.duration = animationDurationMs
val closingStartBounds: HashMap<SurfaceControl, Rect> = HashMap()
val openingEndBounds: HashMap<SurfaceControl, Rect> = HashMap()
@@ -67,9 +76,11 @@
}
if (TransitionUtil.isClosingType(chg.mode)) {
closingStartBounds[leash] = chg.startAbsBounds
+ startT.setCrop(leash, chg.startAbsBounds).setCornerRadius(leash, cornerRadius)
}
if (TransitionUtil.isOpeningType(chg.mode)) {
openingEndBounds[leash] = chg.endAbsBounds
+ startT.setCrop(leash, chg.endAbsBounds).setCornerRadius(leash, cornerRadius)
}
}
startT.apply()
@@ -80,7 +91,7 @@
// Translate the surface from its original position on-screen to off-screen on the
// right (or left in RTL)
val startBounds = closingStartBounds[it]
- val targetX = (if (isRtl) -1 else 1) * startBounds!!.right
+ val targetX = (if (isRtl) -1 else 1) * (startBounds!!.right + pageSpacing)
t.setPosition(it, anim.animatedValue as Float * targetX, 0f)
}
openingEndBounds.keys.forEach {
@@ -90,7 +101,7 @@
// Translate the surface from off-screen on the left (or left in RTL) to its final
// position on-screen
val endBounds = openingEndBounds[it]
- val targetX = (if (isRtl) -1 else 1) * endBounds!!.right
+ val targetX = (if (isRtl) -1 else 1) * (endBounds!!.right + pageSpacing)
t.setPosition(it, (1f - anim.animatedValue as Float) * -targetX, 0f)
}
t.apply()