Merge "Enable WM remote occlude flag; fix occlude state issues." into tm-dev am: ef4ec2ff27

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17776445

Change-Id: I6b41ff5d555e36b7c6bcbd118314de1cbb1ac2f4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Josh Tsuji
2022-04-27 20:01:50 +00:00
committed by Automerger Merge Worker
3 changed files with 60 additions and 5 deletions

View File

@@ -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);
}
}
}

View File

@@ -1747,6 +1747,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

View File

@@ -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