summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Josh Tsuji <tsuji@google.com> 2022-04-27 19:26:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-04-27 19:26:44 +0000
commitef4ec2ff27fdadf053daa11d56e30008c9974a68 (patch)
treefd866c5b8d694a9ae4e425733919337bb96d72ae
parentedea3fd450ac8dda5f7f3c2338691239d3bf4c52 (diff)
parent05f45a09164d9c0519b42868b33892de554643c6 (diff)
Merge "Enable WM remote occlude flag; fix occlude state issues." into tm-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java46
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java17
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java2
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