Merge "Implement animation for TRANSIT_MINIMIZE" into main
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
index 58337ec..e848b88 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
@@ -27,6 +27,7 @@
import android.graphics.Rect;
import android.os.IBinder;
import android.util.ArrayMap;
+import android.util.DisplayMetrics;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.TransitionInfo;
@@ -38,6 +39,7 @@
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.shared.animation.MinimizeAnimator;
import com.android.wm.shell.transition.Transitions;
import java.util.ArrayList;
@@ -137,7 +139,7 @@
break;
case WindowManager.TRANSIT_TO_BACK:
transitionHandled |= startMinimizeTransition(
- transition, info.getType(), change);
+ transition, info.getType(), change, finishT, animations, onAnimFinish);
break;
case WindowManager.TRANSIT_CLOSE:
if (change.getTaskInfo().getWindowingMode() == WINDOWING_MODE_FREEFORM) {
@@ -206,7 +208,10 @@
private boolean startMinimizeTransition(
IBinder transition,
int type,
- TransitionInfo.Change change) {
+ TransitionInfo.Change change,
+ SurfaceControl.Transaction finishT,
+ ArrayList<Animator> animations,
+ Runnable onAnimFinish) {
if (!mPendingTransitionTokens.contains(transition)) {
return false;
}
@@ -215,7 +220,23 @@
if (type != Transitions.TRANSIT_MINIMIZE) {
return false;
}
- // TODO(b/361524575): Add minimize animations
+
+ SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+ SurfaceControl sc = change.getLeash();
+ finishT.hide(sc);
+ final DisplayMetrics displayMetrics =
+ mDisplayController
+ .getDisplayContext(taskInfo.displayId).getResources().getDisplayMetrics();
+ final Animator animator = MinimizeAnimator.create(
+ displayMetrics,
+ change,
+ t,
+ (anim) -> {
+ animations.remove(anim);
+ onAnimFinish.run();
+ return null;
+ });
+ animations.add(animator);
return true;
}