diff options
| author | 2020-05-27 21:36:09 -0700 | |
|---|---|---|
| committer | 2020-05-28 04:58:17 +0000 | |
| commit | c46cbae3a63c55598fa41f6e7a93f269284ee62c (patch) | |
| tree | 14f9f297e3ef80cd41539dea73660ed148bf9663 | |
| parent | d34b4e8d278386b85a00018c502bd21d00f8813b (diff) | |
Disallow multiple calls to dismiss/exit pip
- When exitPip or removePip is called we don't set mInPip=false
until the actual changes are commited (either animation is started
or task actually vanishes) so if there are multiple subsequent calls,
it could fall into the same code twice (haven't actually been able
to reproduce the bug but this is one case it could happen)
Change-Id: Ica2836827114fdd5affb983ab4444e9eb0c00283
Bug: 157532238
Test: Not actually able to repro
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index c2f8cb9800d0..3a8476729645 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -204,6 +204,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements private WindowContainerToken mToken; private SurfaceControl mLeash; private boolean mInPip; + private boolean mExitingPip; private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS; private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory mSurfaceControlTransactionFactory; @@ -270,9 +271,9 @@ public class PipTaskOrganizer extends TaskOrganizer implements * @param animationDurationMs duration in millisecond for the exiting PiP transition */ public void exitPip(int animationDurationMs) { - if (!mInPip || mToken == null) { + if (!mInPip || mExitingPip || mToken == null) { Log.wtf(TAG, "Not allowed to exitPip in current state" - + " mInPip=" + mInPip + " mToken=" + mToken); + + " mInPip=" + mInPip + " mExitingPip=" + mExitingPip + " mToken=" + mToken); return; } @@ -312,15 +313,16 @@ public class PipTaskOrganizer extends TaskOrganizer implements } }); } + mExitingPip = true; } /** * Removes PiP immediately. */ public void removePip() { - if (!mInPip || mToken == null) { + if (!mInPip || mExitingPip || mToken == null) { Log.wtf(TAG, "Not allowed to removePip in current state" - + " mInPip=" + mInPip + " mToken=" + mToken); + + " mInPip=" + mInPip + " mExitingPip=" + mExitingPip + " mToken=" + mToken); return; } getUpdateHandler().post(() -> { @@ -332,6 +334,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements } }); mInitialState.remove(mToken.asBinder()); + mExitingPip = true; } @Override @@ -340,6 +343,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements mTaskInfo = info; mToken = mTaskInfo.token; mInPip = true; + mExitingPip = false; mLeash = leash; mInitialState.put(mToken.asBinder(), new Configuration(mTaskInfo.configuration)); mPictureInPictureParams = mTaskInfo.pictureInPictureParams; @@ -420,6 +424,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements mShouldDeferEnteringPip = false; mPictureInPictureParams = null; mInPip = false; + mExitingPip = false; } @Override |