diff options
| author | 2022-04-27 19:26:44 +0000 | |
|---|---|---|
| committer | 2022-04-27 19:26:44 +0000 | |
| commit | ef4ec2ff27fdadf053daa11d56e30008c9974a68 (patch) | |
| tree | fd866c5b8d694a9ae4e425733919337bb96d72ae | |
| parent | edea3fd450ac8dda5f7f3c2338691239d3bf4c52 (diff) | |
| parent | 05f45a09164d9c0519b42868b33892de554643c6 (diff) | |
Merge "Enable WM remote occlude flag; fix occlude state issues." into tm-dev
3 files changed, 60 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 2e1373259975..29e940f24df6 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -849,7 +849,8 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, @Override public void onLaunchAnimationCancelled() { - setOccluded(true /* occluded */, false /* animate */); + Log.d(TAG, "Occlude launch animation cancelled. " + + "Occluded state is now: " + mOccluded); } @NonNull @@ -894,7 +895,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, }; private IRemoteAnimationRunner mOccludeAnimationRunner = - new ActivityLaunchRemoteAnimationRunner(mOccludeAnimationController); + new OccludeActivityLaunchRemoteAnimationRunner(mOccludeAnimationController); /** * Animation controller for activities that unocclude the keyguard. This does not use the @@ -919,13 +920,17 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) throws RemoteException { - final RemoteAnimationTarget primary = apps[0]; + if (apps == null || apps.length == 0 || apps[0] == null) { + Log.d(TAG, "No apps provided to unocclude runner; " + + "skipping animation and unoccluding."); - if (primary == null) { finishedCallback.onAnimationFinished(); + setOccluded(false /* isOccluded */, true /* animate */); return; } + final RemoteAnimationTarget primary = apps[0]; + final SyncRtSurfaceTransactionApplier applier = new SyncRtSurfaceTransactionApplier( mKeyguardViewControllerLazy.get().getViewRootImpl().getView()); @@ -965,6 +970,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, @Override public void onAnimationEnd(Animator animation) { try { + setOccluded(false /* isOccluded */, true /* animate */); finishedCallback.onAnimationFinished(); mUnoccludeAnimator = null; } catch (RemoteException e) { @@ -3125,4 +3131,36 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, mRunner.onAnimationStart(transit, apps, wallpapers, nonApps, finishedCallback); } } + + /** + * Subclass of {@link ActivityLaunchRemoteAnimationRunner} that calls {@link #setOccluded} when + * onAnimationStart is called. + */ + private class OccludeActivityLaunchRemoteAnimationRunner + extends ActivityLaunchRemoteAnimationRunner { + + OccludeActivityLaunchRemoteAnimationRunner( + ActivityLaunchAnimator.Controller controller) { + super(controller); + } + + @Override + public void onAnimationStart(int transit, RemoteAnimationTarget[] apps, + RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, + IRemoteAnimationFinishedCallback finishedCallback) throws RemoteException { + super.onAnimationStart(transit, apps, wallpapers, nonApps, finishedCallback); + + // This is the first signal we have from WM that we're going to be occluded. Set our + // internal state to reflect that immediately, vs. waiting for the launch animator to + // begin. Otherwise, calls to setShowingLocked, etc. will not know that we're about to + // be occluded and might re-show the keyguard. + setOccluded(true /* isOccluded */, false /* animate */); + } + + @Override + public void onAnimationCancelled() throws RemoteException { + super.onAnimationCancelled(); + Log.d(TAG, "Occlude launch animation cancelled. Occluded state is now: " + mOccluded); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java index b14e92bf39cf..7b2c2e36129e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java @@ -1748,6 +1748,23 @@ public class CentralSurfaces extends CoreStartable implements } @Override + public void onLaunchAnimationStart(boolean isExpandingFullyAbove) { + super.onLaunchAnimationStart(isExpandingFullyAbove); + + // Double check that the keyguard is still showing and not going away, but if so + // set the keyguard occluded. Typically, WM will let KeyguardViewMediator know + // directly, but we're overriding that to play the custom launch animation, so + // we need to take care of that here. The unocclude animation is not overridden, + // so WM will call KeyguardViewMediator's unocclude animation runner when the + // activity is exited. + if (mKeyguardStateController.isShowing() + && !mKeyguardStateController.isKeyguardGoingAway()) { + mKeyguardViewMediator.setOccluded(true /* isOccluded */, + true /* animate */); + } + } + + @Override public void onLaunchAnimationEnd(boolean isExpandingFullyAbove) { // Set mIsLaunchingActivityOverLockscreen to false before actually finishing the // animation so that we can assume that mIsLaunchingActivityOverLockscreen diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index eff75bc0622b..a9b0f0dc28ad 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -423,7 +423,7 @@ public class WindowManagerService extends IWindowManager.Stub "persist.wm.enable_remote_keyguard_animation"; private static final int sEnableRemoteKeyguardAnimation = - SystemProperties.getInt(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, 1); + SystemProperties.getInt(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, 2); /** * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY |