Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1a1326e authored by Issei Suzuki's avatar Issei Suzuki Committed by Automerger Merge Worker
Browse files

Merge changes I4dae426c,I3e45ca52,I46879ef8,I81cf31fe into sc-dev am: a54db49a

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

Change-Id: I4e18808ff091660e878cb3128bef11b3bdd468ec
parents b103252b a54db49a
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -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, 1);

    /**
     * @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,21 +97,23 @@ public class KeyguardService extends Service {
        mKeyguardViewMediator = keyguardViewMediator;
        mKeyguardLifecyclesDispatcher = keyguardLifecyclesDispatcher;

        if (sEnableRemoteKeyguardAnimation) {
        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);
    }
    }

    @Override
    public void onCreate() {
+6 −4
Original line number Diff line number Diff line
@@ -162,7 +162,8 @@ class KeyguardUnlockAnimationController @Inject constructor(
                // If the surface alpha is 0f, it's no longer visible so we can safely be done with
                // the animation.
                if (surfaceBehindAlpha == 0f) {
                    keyguardViewMediator.get().finishSurfaceBehindRemoteAnimation()
                    keyguardViewMediator.get().finishSurfaceBehindRemoteAnimation(
                            false /* cancelled */)
                }
            }
        })
@@ -175,7 +176,8 @@ class KeyguardUnlockAnimationController @Inject constructor(
        }
        surfaceBehindEntryAnimator.addListener(object : AnimatorListenerAdapter() {
            override fun onAnimationEnd(animation: Animator) {
                keyguardViewMediator.get().onKeyguardExitRemoteAnimationFinished()
                keyguardViewMediator.get().onKeyguardExitRemoteAnimationFinished(
                        false /* cancelled */)
            }
        })

@@ -317,7 +319,7 @@ class KeyguardUnlockAnimationController @Inject constructor(
    }

    override fun onKeyguardDismissAmountChanged() {
        if (!KeyguardService.sEnableRemoteKeyguardAnimation) {
        if (!KeyguardService.sEnableRemoteKeyguardGoingAwayAnimation) {
            return
        }

@@ -370,7 +372,7 @@ class KeyguardUnlockAnimationController @Inject constructor(
        } else if (keyguardViewMediator.get()
                        .isAnimatingBetweenKeyguardAndSurfaceBehindOrWillBe &&
                reachedHideKeyguardThreshold) {
            keyguardViewMediator.get().onKeyguardExitRemoteAnimationFinished()
            keyguardViewMediator.get().onKeyguardExitRemoteAnimationFinished(false /* cancelled */)
        }
    }

+18 −14
Original line number Diff line number Diff line
@@ -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;
@@ -2315,15 +2315,15 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
    }

    /**
     * Called if the keyguard exit animation has been cancelled and we should return to the
     * Called if the keyguard exit animation has been cancelled and we should dismiss to the
     * keyguard.
     *
     * This can happen due to the system cancelling the RemoteAnimation (due to a timeout), or the
     * user cancelling the unlock swipe gesture.
     * This can happen due to the system cancelling the RemoteAnimation (due to a timeout, a new
     * app transition before finishing the current RemoteAnimation).
     */
    private void handleCancelKeyguardExitAnimation() {
        hideSurfaceBehindKeyguard();
        mKeyguardUnlockAnimationControllerLazy.get().notifyCancelKeyguardExitAnimation();
        showSurfaceBehindKeyguard();
        onKeyguardExitRemoteAnimationFinished(true /* cancelled */);
    }

    /**
@@ -2332,8 +2332,10 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
     * This will call {@link #mSurfaceBehindRemoteAnimationFinishedCallback} to let WM know that
     * we're done with the RemoteAnimation, actually hide the keyguard, and clean up state related
     * to the keyguard exit animation.
     *
     * @param cancelled {@code true} if the animation was cancelled before it finishes.
     */
    public void onKeyguardExitRemoteAnimationFinished() {
    public void onKeyguardExitRemoteAnimationFinished(boolean cancelled) {
        if (!mSurfaceBehindRemoteAnimationRunning && !mSurfaceBehindRemoteAnimationRequested) {
            return;
        }
@@ -2347,7 +2349,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
            mKeyguardUnlockAnimationControllerLazy.get().hideKeyguardViewAfterRemoteAnimation();
        }

        finishSurfaceBehindRemoteAnimation();
        finishSurfaceBehindRemoteAnimation(cancelled);
        mSurfaceBehindRemoteAnimationRequested = false;
        mKeyguardUnlockAnimationControllerLazy.get().notifyFinishedKeyguardExitAnimation();
        InteractionJankMonitor.getInstance().end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION);
@@ -2389,12 +2391,14 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
    }

    /** If it's running, finishes the RemoteAnimation on the surface behind the keyguard. */
    public void finishSurfaceBehindRemoteAnimation() {
    public void finishSurfaceBehindRemoteAnimation(boolean cancelled) {
        mSurfaceBehindRemoteAnimationRunning = false;

        if (mSurfaceBehindRemoteAnimationFinishedCallback != null) {
            try {
                if (!cancelled) {
                    mSurfaceBehindRemoteAnimationFinishedCallback.onAnimationFinished();
                }
                mSurfaceBehindRemoteAnimationFinishedCallback = null;
            } catch (RemoteException e) {
                e.printStackTrace();
@@ -2638,10 +2642,10 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
    }

    /**
     * Cancel the keyguard exit animation, usually because we were swiping to unlock and the swipe
     * gesture was cancelled.
     * Cancel the keyguard exit animation, usually because we were swiping to unlock but WM starts
     * a new remote animation before finishing the keyguard exit animation.
     *
     * This will re-show the keyguard and animate out the app/launcher surface behind the keyguard.
     * This will dismiss the keyguard.
     */
    public void cancelKeyguardExitAnimation() {
        Trace.beginSection("KeyguardViewMediator#cancelKeyguardExitAnimation");
+1 −1
Original line number Diff line number Diff line
@@ -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();
    }

+1 −1
Original line number Diff line number Diff line
@@ -3051,7 +3051,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);
        }
Loading