diff options
| author | 2023-05-25 07:07:48 +0000 | |
|---|---|---|
| committer | 2023-05-25 07:07:48 +0000 | |
| commit | e1121582b9b18b305ff28bfa6904755ac7b355c7 (patch) | |
| tree | a0fec6ce948bf6364ca8ba44f607081d11245510 | |
| parent | 62bca082a892574bcf16af8b51d66d9f7e703365 (diff) | |
| parent | 61f4503d08d106370e7c885ad3a0f62c7df4b875 (diff) | |
Merge "Skip screen animation if it is off" into udc-dev am: 61f4503d08
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23358306
Change-Id: Ib50853f61ec4e0298da4c896a8c3c49ac29df0f9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
4 files changed, 17 insertions, 3 deletions
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index e95ba797a985..e40f8e78dafc 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -555,6 +555,13 @@ public interface WindowManager extends ViewManager { int TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT = (1 << 9); // 0x200 /** + * Transition flag: The transition is prepared when nothing is visible on screen, e.g. screen + * is off. The animation handlers can decide whether to skip animations. + * @hide + */ + int TRANSIT_FLAG_INVISIBLE = (1 << 10); // 0x400 + + /** * @hide */ @IntDef(flag = true, prefix = { "TRANSIT_FLAG_" }, value = { @@ -567,7 +574,8 @@ public interface WindowManager extends ViewManager { TRANSIT_FLAG_KEYGUARD_LOCKED, TRANSIT_FLAG_IS_RECENTS, TRANSIT_FLAG_KEYGUARD_GOING_AWAY, - TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT + TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT, + TRANSIT_FLAG_INVISIBLE, }) @Retention(RetentionPolicy.SOURCE) @interface TransitionFlags {} diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java index 6a2468a7eaa2..dc8a25842969 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java @@ -299,7 +299,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { } // Early check if the transition doesn't warrant an animation. - if (Transitions.isAllNoAnimation(info) || Transitions.isAllOrderOnly(info)) { + if (Transitions.isAllNoAnimation(info) || Transitions.isAllOrderOnly(info) + || (info.getFlags() & WindowManager.TRANSIT_FLAG_INVISIBLE) != 0) { startTransaction.apply(); finishTransaction.apply(); finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */); diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index 87de0f6e4aa0..bc1ddf8f66bc 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -513,6 +513,7 @@ public class DisplayRotation { } if (mDisplayContent.inTransition() + && mDisplayContent.getDisplayPolicy().isScreenOnFully() && !mDisplayContent.mTransitionController.useShellTransitionsRotation()) { // Rotation updates cannot be performed while the previous rotation change animation // is still in progress. Skip this update. We will try updating again after the diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 663db861b79e..d5a7ff582a58 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -687,7 +687,11 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { // All windows are synced already. return; } - if (!isInTransition(wc)) return; + if (wc.mDisplayContent == null || !isInTransition(wc)) return; + if (!wc.mDisplayContent.getDisplayPolicy().isScreenOnFully() + || wc.mDisplayContent.getDisplayInfo().state == Display.STATE_OFF) { + mFlags |= WindowManager.TRANSIT_FLAG_INVISIBLE; + } if (mContainerFreezer == null) { mContainerFreezer = new ScreenshotFreezer(); |