From 1bdd32657968cf407b680b0aa8fa5c214594f0d0 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Fri, 17 Mar 2023 01:24:47 +0800 Subject: [PATCH] Fix swipe up show-when-locked activity The change of mFlags after calculateTransitionInfo won't be assigned to TransitionInfo. Bug: 261418859 Test: Swipe up a show-when-locked activity on keyguard. Change-Id: I0fd851c3c80d12528eee0bf1d5bb89dc2bc2f55a --- .../java/com/android/server/wm/Transition.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 97f48b7d03097..cc35bee147efc 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1106,12 +1106,13 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { // needs to be updated for STATE_ABORT. commitVisibleActivities(transaction); + // Fall-back to the default display if there isn't one participating. + final DisplayContent primaryDisplay = !mTargetDisplays.isEmpty() ? mTargetDisplays.get(0) + : mController.mAtm.mRootWindowContainer.getDefaultDisplay(); + if (mState == STATE_ABORT) { mController.abort(this); - // Fall-back to the default display if there isn't one participating. - final DisplayContent dc = !mTargetDisplays.isEmpty() ? mTargetDisplays.get(0) - : mController.mAtm.mRootWindowContainer.getDefaultDisplay(); - dc.getPendingTransaction().merge(transaction); + primaryDisplay.getPendingTransaction().merge(transaction); mSyncId = -1; mOverrideOptions = null; cleanUpInternal(); @@ -1123,6 +1124,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get(); mController.moveToPlaying(this); + // Flags must be assigned before calculateTransitionInfo. Otherwise it won't take effect. + if (primaryDisplay.isKeyguardLocked()) { + mFlags |= TRANSIT_FLAG_KEYGUARD_LOCKED; + } // Check whether the participants were animated from back navigation. final boolean markBackAnimated = mController.mAtm.mBackNavigationController .containsBackAnimationTargets(this); @@ -1136,9 +1141,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { final DisplayContent dc = mController.mAtm.mRootWindowContainer.getDisplayContent( info.getRoot(i).getDisplayId()); mTargetDisplays.add(dc); - if (dc.isKeyguardLocked()) { - mFlags |= TRANSIT_FLAG_KEYGUARD_LOCKED; - } } if (markBackAnimated) {