From 0c6c517de28b8a8c100e18d3916e62e3b9bc2588 Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Mon, 22 May 2023 16:30:59 +0200 Subject: [PATCH] Play over-keyguard transitions in default handler If we're not showing the keyguard at all in the transition, we don't need to inform KeyguardViewMediator about it and can play the normal inter-app animation. This restores some behaviour from the original RemoteAnimation code that set up remote transition filters. Test: atest ShellTransitionTests Bug: 282672298 Change-Id: Ib544627a69c7102f41b390475095dfe9ecef45ea --- .../keyguard/KeyguardTransitionHandler.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java index 4d8075a9b56c4..658359ed31d06 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java @@ -121,21 +121,21 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler } boolean hasOpeningOcclude = false; + boolean hasClosingOcclude = false; boolean hasOpeningDream = false; boolean hasClosingApp = false; // Check for occluding/dream/closing apps for (int i = info.getChanges().size() - 1; i >= 0; i--) { final TransitionInfo.Change change = info.getChanges().get(i); - if (isOpeningType(change.getMode())) { - if (change.hasFlags(FLAG_OCCLUDES_KEYGUARD)) { - hasOpeningOcclude = true; - } - if (change.getTaskInfo() != null - && change.getTaskInfo().getActivityType() == ACTIVITY_TYPE_DREAM) { - hasOpeningDream = true; - } + if ((change.getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0) { + continue; + } else if (isOpeningType(change.getMode())) { + hasOpeningOcclude |= change.hasFlags(FLAG_OCCLUDES_KEYGUARD); + hasOpeningDream |= (change.getTaskInfo() != null + && change.getTaskInfo().getActivityType() == ACTIVITY_TYPE_DREAM); } else if (isClosingType(change.getMode())) { + hasClosingOcclude |= change.hasFlags(FLAG_OCCLUDES_KEYGUARD); hasClosingApp = true; } } @@ -147,6 +147,11 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler transition, info, startTransaction, finishTransaction, finishCallback); } if (hasOpeningOcclude || info.getType() == TRANSIT_KEYGUARD_OCCLUDE) { + if (hasClosingOcclude) { + // Transitions between apps on top of the keyguard can use the default handler. + // WM sends a final occlude status update after the transition is finished. + return false; + } if (hasOpeningDream) { return startAnimation(mOccludeByDreamTransition, "occlude-by-dream",