From f7e5a2310651a20603fd0e57f87890b893b26ba9 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Wed, 6 May 2020 15:49:44 -0700 Subject: [PATCH] Set mIsInMultiWindowMode in activity creation When an Activity is launched directly into split-screen mode, there won't be any onMultiWindowModeChanged callback. Upon activity creation, the current windowing mode should be part of the configuration, use the windowing mode from that as initial values for both isInPictureInPictureMode and isInMultiWindowMode. Bug: 155811896 Bug: 156204380 Test: launch activity to split-screen secondary and verify isInMultiWindowMode in dumpsys Change-Id: I6061a2d5687b68a981abcf8b184bfb007cdcf501 --- core/java/android/app/Activity.java | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index bfae632593fbb..b2976eca95908 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -17,6 +17,8 @@ package android.app; import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.app.WindowConfiguration.inMultiWindowMode; import static android.os.Process.myUid; import static java.lang.Character.MIN_VALUE; @@ -947,9 +949,8 @@ 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 boolean mIsInMultiWindowMode; + private boolean mIsInPictureInPictureMode; private final WindowControllerCallback mWindowControllerCallback = new WindowControllerCallback() { @@ -2748,7 +2749,7 @@ public class Activity extends ContextThemeWrapper * @return True if the activity is in multi-window mode. */ public boolean isInMultiWindowMode() { - return mLastDispatchedIsInMultiWindowMode == Boolean.TRUE; + return mIsInMultiWindowMode; } /** @@ -2791,7 +2792,7 @@ public class Activity extends ContextThemeWrapper * @return True if the activity is in picture-in-picture mode. */ public boolean isInPictureInPictureMode() { - return mLastDispatchedIsInPictureInPictureMode == Boolean.TRUE; + return mIsInPictureInPictureMode; } /** @@ -7142,10 +7143,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("mIsInMultiWindowMode="); + writer.print(mIsInMultiWindowMode); + writer.print(" mIsInPictureInPictureMode="); + writer.println(mIsInPictureInPictureMode); writer.print(innerPrefix); writer.print("mChangingConfigurations="); writer.println(mChangingConfigurations); writer.print(innerPrefix); writer.print("mCurrentConfig="); @@ -7977,6 +7978,11 @@ public class Activity extends ContextThemeWrapper final void performCreate(Bundle icicle, PersistableBundle persistentState) { dispatchActivityPreCreated(icicle); mCanEnterPictureInPicture = true; + // initialize mIsInMultiWindowMode and mIsInPictureInPictureMode before onCreate + final int windowingMode = getResources().getConfiguration().windowConfiguration + .getWindowingMode(); + mIsInMultiWindowMode = inMultiWindowMode(windowingMode); + mIsInPictureInPictureMode = windowingMode == WINDOWING_MODE_PINNED; restoreHasCurrentPermissionRequest(icicle); if (persistentState != null) { onCreate(icicle, persistentState); @@ -8245,7 +8251,7 @@ public class Activity extends ContextThemeWrapper if (mWindow != null) { mWindow.onMultiWindowModeChanged(); } - mLastDispatchedIsInMultiWindowMode = isInMultiWindowMode; + mIsInMultiWindowMode = isInMultiWindowMode; onMultiWindowModeChanged(isInMultiWindowMode, newConfig); } @@ -8258,7 +8264,7 @@ public class Activity extends ContextThemeWrapper if (mWindow != null) { mWindow.onPictureInPictureModeChanged(isInPictureInPictureMode); } - mLastDispatchedIsInPictureInPictureMode = isInPictureInPictureMode; + mIsInPictureInPictureMode = isInPictureInPictureMode; onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); }