diff options
| author | 2023-09-25 11:53:34 +0000 | |
|---|---|---|
| committer | 2023-09-25 11:53:34 +0000 | |
| commit | 361a649d07244bd0f5331eb58f23281148479ad3 (patch) | |
| tree | 8137d669b58d3aaf2838a458aad42ae241e45f77 | |
| parent | 06e54eb15598bbb3df3a16d6c507de027b5d2a5b (diff) | |
| parent | 163bf49104d539b63d000a1539014d1e916ca232 (diff) | |
Notify launch app over lockscreen to keyguard transition handler. am: 5b7daf45d5 am: 163bf49104
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24811629
Change-Id: I00e6dbe48d5a1deef0b5f1ae6c23c8d5b37cc901
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
5 files changed, 39 insertions, 6 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 13c0ac4bbaa7..b71c48e16acb 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 @@ -76,6 +76,10 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler private IRemoteTransition mOccludeByDreamTransition = null; private IRemoteTransition mUnoccludeTransition = null; + // While set true, Keyguard has created a remote animation runner to handle the open app + // transition. + private boolean mIsLaunchingActivityOverLockscreen; + private final class StartedTransition { final TransitionInfo mInfo; final SurfaceControl.Transaction mFinishT; @@ -120,7 +124,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull TransitionFinishCallback finishCallback) { - if (!handles(info)) { + if (!handles(info) || mIsLaunchingActivityOverLockscreen) { return false; } @@ -313,5 +317,11 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler mUnoccludeTransition = unoccludeTransition; }); } + + @Override + public void setLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) { + mMainExecutor.execute(() -> + mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen); + } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java index b4b327f0eff2..33c299f0b161 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitions.java @@ -38,4 +38,9 @@ public interface KeyguardTransitions { @NonNull IRemoteTransition occludeTransition, @NonNull IRemoteTransition occludeByDreamTransition, @NonNull IRemoteTransition unoccludeTransition) {} + + /** + * Notify whether keyguard has created a remote animation runner for next app launch. + */ + default void setLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {} } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java index ad3ce214b27e..83dc7fa5e869 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java @@ -328,12 +328,22 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler, // the time of handleRequest, but we need more information than is available at that time. if (KeyguardTransitionHandler.handles(info)) { if (mixed != null && mixed.mType != MixedTransition.TYPE_KEYGUARD) { - ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, - "Converting mixed transition into a keyguard transition"); - onTransitionConsumed(transition, false, null); + final MixedTransition keyguardMixed = + new MixedTransition(MixedTransition.TYPE_KEYGUARD, transition); + mActiveTransitions.add(keyguardMixed); + final boolean hasAnimateKeyguard = animateKeyguard(keyguardMixed, info, + startTransaction, finishTransaction, finishCallback); + if (hasAnimateKeyguard) { + ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, + "Converting mixed transition into a keyguard transition"); + // Consume the original mixed transition + onTransitionConsumed(transition, false, null); + return true; + } else { + // Keyguard handler cannot handle it, process through original mixed + mActiveTransitions.remove(keyguardMixed); + } } - mixed = new MixedTransition(MixedTransition.TYPE_KEYGUARD, transition); - mActiveTransitions.add(mixed); } if (mixed == null) return false; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index efd25d5d69e6..b506a363d3d4 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -3798,6 +3798,13 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, } /** + * Notify whether keyguard has created a remote animation runner for next app launch. + */ + public void launchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) { + mKeyguardTransitions.setLaunchingActivityOverLockscreen(isLaunchingActivityOverLockscreen); + } + + /** * Implementation of RemoteAnimationRunner that creates a new * {@link ActivityLaunchAnimator.Runner} whenever onAnimationStart is called, delegating the * remote animation methods to that runner. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 3a8850408f18..6f69ea8170c0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -3429,6 +3429,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { @Override public void setIsLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) { mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen; + mKeyguardViewMediator.launchingActivityOverLockscreen(mIsLaunchingActivityOverLockscreen); } @Override |