diff options
| author | 2024-10-28 16:01:58 +0900 | |
|---|---|---|
| committer | 2024-10-30 17:13:40 +0900 | |
| commit | ec965a8a801a948f397c2092fe1d754c0a24f95f (patch) | |
| tree | ce8dce66ca3fc4ee590ac3f7a6a24f1816c2eb7e | |
| parent | c8d759b827acffaae9aaeaa479b1a75ab9093e7d (diff) | |
Implement animation for TRANSIT_MINIMIZE
With this CL, the minimize button plays the same animation
as that played when the window limit minimizes a window.
Flag: com.android.window.flags.enable_minimize_button
Bug: 369349585
Test: manual
Test: WMShellUnitTests
Change-Id: Ie43161f8b85d1ca01972a470eb51f750b8bdb94b
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java | 27 |
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; } |