From a553340beb1694b236356fce449a643768899c7b Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Tue, 15 Feb 2022 23:21:49 +0800 Subject: [PATCH] Dispatch transition cancelled callback at the end of abort Otherwise the transition listeners can still see the collecting transition (mCollectingTransition is non-null and STATE_ABORT is not set yet). Also skip onAppTransitionCancelledLocked for fixed rotation transition listener because it was used for legacy frozen display. Otherwise it will request another unnecessary display change transition to disturb animation. Bug: 219063830 Test: adb shell setprop persist.debug.shell_transit 1; reboot Launch a landscape app and press home key twice quickly. The device should not crash by a ghost startRemoteRotation. Change-Id: I6f79754ff82c16055869d624e6a0c8ae3a24f076 --- services/core/java/com/android/server/wm/DisplayContent.java | 2 ++ services/core/java/com/android/server/wm/Transition.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e845034adc3d8..2a06d8b8653d1 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -6441,6 +6441,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp @Override public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { + // It is only needed when freezing display in legacy transition. + if (mTransitionController.isShellTransitionsEnabled()) return; continueUpdateOrientationForDiffOrienLaunchingApp(); } diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 9f2188b72730d..cbef60c459a6a 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -550,10 +550,10 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe throw new IllegalStateException("Too late to abort."); } ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Aborting Transition: %d", mSyncId); - mController.dispatchLegacyAppTransitionCancelled(); mState = STATE_ABORT; // Syncengine abort will call through to onTransactionReady() mSyncEngine.abort(mSyncId); + mController.dispatchLegacyAppTransitionCancelled(); } void setRemoteTransition(RemoteTransition remoteTransition) {