Enable WM remote occlude flag; fix occlude state issues.
The flag in KeyguardService was updated, but this one was not, leading to some duplicate setOccluded calls. Also, we should not be setting the keyguard occluded if the occlusion launch animator is cancelled. Cancellations should be ignored, if we're cancelling due to unoccluding then we'll set occluded = false in the unocclude method. Fixes: 228800628 Fixes: 229749961 Fixes: 230135606 Fixes: 229890065 Test: launch Camera a lot Change-Id: I978cc051c35f84c4a967528801d3bf0f6944430b
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1743,6 +1743,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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user