From f0b5fb17fbdd5ba1ef1bf314fe49c8f8ccd3e642 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Thu, 25 Jul 2019 15:14:47 -0700 Subject: [PATCH] Ensure bounds animination for expanding PiP window The internal animation type maybe reset at the end of RecentsAnimation following the repro path in bug comments. Ensure BOUNDS animation type if we know for certain that we're expanding / collpasing the PiP window Added also last reported multi-window and PiP mode in dumpsys. This is for internal debug purpose only. Bug: 137849660 Test: Manually, see b/137849660#comment9 Test: dumpsys activity -v all Change-Id: I0b7d102ccb4bc27dd0e432d1022bc12a42a0c36d Merged-In: I0b7d102ccb4bc27dd0e432d1022bc12a42a0c36d (cherry picked from commit 2cebfd5e5f39f7b09231562e84252f388bec3c89) --- core/java/android/app/Activity.java | 10 ++++++++++ .../core/java/com/android/server/wm/TaskStack.java | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index a0d0b30e65f79..5bc0647159a3b 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -944,6 +944,10 @@ public class Activity extends ContextThemeWrapper /** @hide */ boolean mEnterAnimationComplete; + /** Track last dispatched multi-window and PiP mode to client, internal debug purpose **/ + private Boolean mLastDispatchedIsInMultiWindowMode; + private Boolean mLastDispatchedIsInPictureInPictureMode; + private static native String getDlWarning(); /** Return the intent that started this activity. */ @@ -6999,6 +7003,10 @@ public class Activity extends ContextThemeWrapper writer.print(mResumed); writer.print(" mStopped="); writer.print(mStopped); writer.print(" mFinished="); writer.println(mFinished); + writer.print(innerPrefix); writer.print("mLastDispatchedIsInMultiWindowMode="); + writer.print(mLastDispatchedIsInMultiWindowMode); + writer.print(" mLastDispatchedIsInPictureInPictureMode="); + writer.println(mLastDispatchedIsInPictureInPictureMode); writer.print(innerPrefix); writer.print("mChangingConfigurations="); writer.println(mChangingConfigurations); writer.print(innerPrefix); writer.print("mCurrentConfig="); @@ -8078,6 +8086,7 @@ public class Activity extends ContextThemeWrapper if (mWindow != null) { mWindow.onMultiWindowModeChanged(); } + mLastDispatchedIsInMultiWindowMode = isInMultiWindowMode; onMultiWindowModeChanged(isInMultiWindowMode, newConfig); } @@ -8090,6 +8099,7 @@ public class Activity extends ContextThemeWrapper if (mWindow != null) { mWindow.onPictureInPictureModeChanged(isInPictureInPictureMode); } + mLastDispatchedIsInPictureInPictureMode = isInPictureInPictureMode; onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 114a56feaf73e..858d198ccd5f0 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1747,6 +1747,11 @@ public class TaskStack extends WindowContainer implements if (toBounds.width() == fromBounds.width() && toBounds.height() == fromBounds.height()) { intendedAnimationType = BoundsAnimationController.BOUNDS; + } else if (!fromFullscreen && !toBounds.equals(fromBounds)) { + // intendedAnimationType may have been reset at the end of RecentsAnimation, + // force it to BOUNDS type if we know for certain we're animating to + // a different bounds, especially for expand and collapse of PiP window. + intendedAnimationType = BoundsAnimationController.BOUNDS; } }