diff options
| author | 2021-06-07 11:01:54 +0200 | |
|---|---|---|
| committer | 2021-06-11 10:23:57 +0200 | |
| commit | 6ceb0988ed85e238ab58b3419b868eb491a37ea0 (patch) | |
| tree | dd845fadcee7188eec33c508f82678bdfd2a1735 | |
| parent | 271c600617c66e97afca9354843b54b1b02a4865 (diff) | |
Extend property to enable remote animation for keyguard.
There are two types of keyguard invovlved app transitions. Instead of
enabling / disabling remote animation for all such transitions, we can
now enable remote animation one by one.
Disable remote animation for all keyguard transitions.
% adb shell setprop persist.wm.enable_remote_keyguard_animation 0
Enable remote animation only for keyguard going away transition
(default).
% adb shell setprop persist.wm.enable_remote_keyguard_animation 1
Enable remote animation for both keyguard going away and (un)occlude
transition.
% adb shell setprop persist.wm.enable_remote_keyguard_animation 2
After setting the property, you need to restart shell and sysui, or reboot
the device.
Test: No-op chaneg. Pass existing tests.
Bug: 166736690
Change-Id: I81cf31fe60583f0fe0d9f46c3189fc0309e8374f
7 files changed, 56 insertions, 15 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java index 5a5cce8f5093..62b92cb33f5c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java @@ -51,6 +51,7 @@ import com.android.internal.policy.IKeyguardExitCallback; import com.android.internal.policy.IKeyguardService; import com.android.internal.policy.IKeyguardStateCallback; import com.android.systemui.SystemUIApplication; +import com.android.wm.shell.transition.Transitions; import javax.inject.Inject; @@ -62,16 +63,29 @@ public class KeyguardService extends Service { * Run Keyguard animation as remote animation in System UI instead of local animation in * the server process. * + * 0: Runs all keyguard animation as local animation + * 1: Only runs keyguard going away animation as remote animation + * 2: Runs all keyguard animation as remote animation + * * Note: Must be consistent with WindowManagerService. */ private static final String ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY = "persist.wm.enable_remote_keyguard_animation"; + private static final int sEnableRemoteKeyguardAnimation = + SystemProperties.getInt(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, 0); + /** * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ - public static boolean sEnableRemoteKeyguardAnimation = - SystemProperties.getBoolean(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, false); + public static boolean sEnableRemoteKeyguardGoingAwayAnimation = + !Transitions.ENABLE_SHELL_TRANSITIONS && sEnableRemoteKeyguardAnimation >= 1; + + /** + * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY + */ + public static boolean sEnableRemoteKeyguardOccludeAnimation = + !Transitions.ENABLE_SHELL_TRANSITIONS && sEnableRemoteKeyguardAnimation >= 2; private final KeyguardViewMediator mKeyguardViewMediator; private final KeyguardLifecyclesDispatcher mKeyguardLifecyclesDispatcher; @@ -83,20 +97,22 @@ public class KeyguardService extends Service { mKeyguardViewMediator = keyguardViewMediator; mKeyguardLifecyclesDispatcher = keyguardLifecyclesDispatcher; - if (sEnableRemoteKeyguardAnimation) { - RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); + RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); + if (sEnableRemoteKeyguardGoingAwayAnimation) { final RemoteAnimationAdapter exitAnimationAdapter = new RemoteAnimationAdapter(mExitAnimationRunner, 0, 0); definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, exitAnimationAdapter); definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER, exitAnimationAdapter); + } + if (sEnableRemoteKeyguardOccludeAnimation) { final RemoteAnimationAdapter occludeAnimationAdapter = new RemoteAnimationAdapter(mOccludeAnimationRunner, 0, 0); definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_OCCLUDE, occludeAnimationAdapter); definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_UNOCCLUDE, occludeAnimationAdapter); - ActivityTaskManager.getInstance().registerRemoteAnimationsForDisplay( - DEFAULT_DISPLAY, definition); } + ActivityTaskManager.getInstance().registerRemoteAnimationsForDisplay( + DEFAULT_DISPLAY, definition); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt index 665376ac4569..0ecd70eadee9 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt @@ -317,7 +317,7 @@ class KeyguardUnlockAnimationController @Inject constructor( } override fun onKeyguardDismissAmountChanged() { - if (!KeyguardService.sEnableRemoteKeyguardAnimation) { + if (!KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation) { return } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 56efafba4640..257c82ae6af5 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -2180,7 +2180,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable, IRemoteAnimationRunner runner = mKeyguardExitAnimationRunner; mKeyguardExitAnimationRunner = null; - if (KeyguardService.sEnableRemoteKeyguardAnimation && runner != null + if (KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation && runner != null && finishedCallback != null) { // Wrap finishedCallback to clean up the keyguard state once the animation is done. IRemoteAnimationFinishedCallback callback = @@ -2211,7 +2211,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable, // When remaining on the shade, there's no need to do a fancy remote animation, // it will dismiss the panel in that case. - } else if (KeyguardService.sEnableRemoteKeyguardAnimation + } else if (KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation && !mStatusBarStateController.leaveOpenOnKeyguardHide() && apps != null && apps.length > 0) { mSurfaceBehindRemoteAnimationFinishedCallback = finishedCallback; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 09779d12f7b3..c34eadfb5a3c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2101,7 +2101,7 @@ public class StatusBar extends SystemUI implements DemoMode, // launches as they can break the animation. // TODO(b/184121838): Support non activity launches on the lockscreen. return isActivityIntent - && KeyguardService.sEnableRemoteKeyguardAnimation + && KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation && mKeyguardStateController.canDismissLockScreen(); } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index f3b8c7e3e209..22ddc8111f6e 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -3044,7 +3044,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private int handleStartTransitionForKeyguardLw(boolean keyguardGoingAway, long duration) { final int res = applyKeyguardOcclusionChange(); if (res != 0) return res; - if (!WindowManagerService.sEnableRemoteKeyguardAnimation && keyguardGoingAway) { + if (!WindowManagerService.sEnableRemoteKeyguardGoingAwayAnimation && keyguardGoingAway) { if (DEBUG_KEYGUARD) Slog.d(TAG, "Starting keyguard exit animation"); startKeyguardExitAnimation(SystemClock.uptimeMillis(), duration); } diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java index cdce660835b6..0535af57d8ab 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java @@ -264,7 +264,8 @@ public class KeyguardServiceDelegate { */ @Deprecated public void setOccluded(boolean isOccluded, boolean animate) { - if (!WindowManagerService.sEnableRemoteKeyguardAnimation && mKeyguardService != null) { + if (!WindowManagerService.sEnableRemoteKeyguardOccludeAnimation + && mKeyguardService != null) { if (DEBUG) Log.v(TAG, "setOccluded(" + isOccluded + ") animate=" + animate); mKeyguardService.setOccluded(isOccluded, animate); } @@ -405,7 +406,8 @@ public class KeyguardServiceDelegate { } public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) { - if (!WindowManagerService.sEnableRemoteKeyguardAnimation && mKeyguardService != null) { + if (!WindowManagerService.sEnableRemoteKeyguardGoingAwayAnimation + && mKeyguardService != null) { mKeyguardService.startKeyguardExitAnimation(startTime, fadeoutDuration); } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1042a0b13e1c..5f3f2bd729d9 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -422,18 +422,41 @@ public class WindowManagerService extends IWindowManager.Stub SystemProperties.getBoolean(DISABLE_CUSTOM_TASK_ANIMATION_PROPERTY, true); /** + * Use WMShell for app transition. + */ + public static final String ENABLE_SHELL_TRANSITIONS = "persist.debug.shell_transit"; + + /** + * @see #ENABLE_SHELL_TRANSITIONS + */ + public static final boolean sEnableShellTransitions = + SystemProperties.getBoolean(ENABLE_SHELL_TRANSITIONS, false); + + /** * Run Keyguard animation as remote animation in System UI instead of local animation in * the server process. + * + * 0: Runs all keyguard animation as local animation + * 1: Only runs keyguard going away animation as remote animation + * 2: Runs all keyguard animation as remote animation */ private static final String ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY = "persist.wm.enable_remote_keyguard_animation"; + private static final int sEnableRemoteKeyguardAnimation = + SystemProperties.getInt(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, 0); + /** * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ - public static boolean sEnableRemoteKeyguardAnimation = - SystemProperties.getBoolean(ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY, false); + public static final boolean sEnableRemoteKeyguardGoingAwayAnimation = !sEnableShellTransitions + && sEnableRemoteKeyguardAnimation >= 1; + /** + * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY + */ + public static final boolean sEnableRemoteKeyguardOccludeAnimation = !sEnableShellTransitions + && sEnableRemoteKeyguardAnimation >= 2; /** * Allows a fullscreen windowing mode activity to launch in its desired orientation directly |