summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java27
1 files changed, 24 insertions, 3 deletions
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 58337ece0991..e848b889b314 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.app.WindowConfiguration;
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 androidx.annotation.Nullable;
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 @@ public class FreeformTaskTransitionHandler
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 @@ public class FreeformTaskTransitionHandler
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 @@ public class FreeformTaskTransitionHandler
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;
}