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

Commit b422d5ca authored by Robin Lee's avatar Robin Lee Committed by Android (Google) Code Review
Browse files

Merge "Add keyguard-appearing transition handler" into main

parents 19db0f80 c21feaa1
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.service.dreams.Flags.dismissDreamOnKeyguardDismiss;
import static android.view.WindowManager.KEYGUARD_VISIBILITY_TRANSIT_FLAGS;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_LOCKED;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_OCCLUDING;
@@ -83,6 +84,7 @@ public class KeyguardTransitionHandler
     * @see KeyguardTransitions
     */
    private IRemoteTransition mExitTransition = null;
    private IRemoteTransition mAppearTransition = null;
    private IRemoteTransition mOccludeTransition = null;
    private IRemoteTransition mOccludeByDreamTransition = null;
    private IRemoteTransition mUnoccludeTransition = null;
@@ -170,26 +172,28 @@ public class KeyguardTransitionHandler

        // Choose a transition applicable for the changes and keyguard state.
        if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_GOING_AWAY) != 0) {
            return startAnimation(mExitTransition,
                    "going-away",
            return startAnimation(mExitTransition, "going-away",
                    transition, info, startTransaction, finishTransaction, finishCallback);
        }

        if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_APPEARING) != 0) {
            return startAnimation(mAppearTransition, "appearing",
                    transition, info, startTransaction, finishTransaction, finishCallback);
        }


        // Occlude/unocclude animations are only played if the keyguard is locked.
        if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_LOCKED) != 0) {
            if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_OCCLUDING) != 0) {
                if (hasOpeningDream(info)) {
                    return startAnimation(mOccludeByDreamTransition,
                            "occlude-by-dream",
                    return startAnimation(mOccludeByDreamTransition, "occlude-by-dream",
                            transition, info, startTransaction, finishTransaction, finishCallback);
                } else {
                    return startAnimation(mOccludeTransition,
                            "occlude",
                    return startAnimation(mOccludeTransition, "occlude",
                            transition, info, startTransaction, finishTransaction, finishCallback);
                }
            } else if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_UNOCCLUDING) != 0) {
                return startAnimation(mUnoccludeTransition,
                        "unocclude",
                return startAnimation(mUnoccludeTransition, "unocclude",
                        transition, info, startTransaction, finishTransaction, finishCallback);
            }
        }
@@ -359,11 +363,13 @@ public class KeyguardTransitionHandler
        @Override
        public void register(
                IRemoteTransition exitTransition,
                IRemoteTransition appearTransition,
                IRemoteTransition occludeTransition,
                IRemoteTransition occludeByDreamTransition,
                IRemoteTransition unoccludeTransition) {
            mMainExecutor.execute(() -> {
                mExitTransition = exitTransition;
                mAppearTransition = appearTransition;
                mOccludeTransition = occludeTransition;
                mOccludeByDreamTransition = occludeByDreamTransition;
                mUnoccludeTransition = unoccludeTransition;
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ public interface KeyguardTransitions {
     */
    default void register(
            @NonNull IRemoteTransition unlockTransition,
            @NonNull IRemoteTransition appearTransition,
            @NonNull IRemoteTransition occludeTransition,
            @NonNull IRemoteTransition occludeByDreamTransition,
            @NonNull IRemoteTransition unoccludeTransition) {}
+35 −3
Original line number Diff line number Diff line
@@ -1076,6 +1076,33 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        }
    };

    /**
     * For now, the keyguard-appearing animation is a no-op, because we assume that this is
     * happening while the screen is already off or turning off.
     *
     * TODO(b/278086361): create an animation for keyguard appearing over a non-showWhenLocked
     * activity.
     */
    private final IRemoteAnimationRunner.Stub mAppearAnimationRunner =
            new IRemoteAnimationRunner.Stub() {
        @Override
        public void onAnimationStart(@WindowManager.TransitionOldType int transit,
                RemoteAnimationTarget[] apps,
                RemoteAnimationTarget[] wallpapers,
                RemoteAnimationTarget[] nonApps,
                IRemoteAnimationFinishedCallback finishedCallback) {
            try {
                finishedCallback.onAnimationFinished();
            } catch (RemoteException e) {
                Log.e(TAG, "Failed to finish transition", e);
            }
        }

        @Override
        public void onAnimationCancelled() {
        }
    };

    private final IRemoteAnimationRunner mOccludeAnimationRunner =
            new OccludeActivityLaunchRemoteAnimationRunner(mOccludeAnimationController);

@@ -1164,7 +1191,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
                                    finishedCallback.onAnimationFinished();
                                    mOccludeByDreamAnimator = null;
                                } catch (RemoteException e) {
                                    e.printStackTrace();
                                    Log.e(TAG, "Failed to finish transition", e);
                                }
                            }
                        });
@@ -1279,7 +1306,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,

                                    mInteractionJankMonitor.end(CUJ_LOCKSCREEN_OCCLUSION);
                                } catch (RemoteException e) {
                                    e.printStackTrace();
                                    Log.e(TAG, "Failed to finish transition", e);
                                }
                            }
                        });
@@ -1545,6 +1572,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,

        mKeyguardTransitions.register(
                KeyguardService.wrap(this, getExitAnimationRunner()),
                KeyguardService.wrap(this, getAppearAnimationRunner()),
                KeyguardService.wrap(this, getOccludeAnimationRunner()),
                KeyguardService.wrap(this, getOccludeByDreamAnimationRunner()),
                KeyguardService.wrap(this, getUnoccludeAnimationRunner()));
@@ -2123,6 +2151,10 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        return validatingRemoteAnimationRunner(mExitAnimationRunner);
    }

    public IRemoteAnimationRunner getAppearAnimationRunner() {
        return validatingRemoteAnimationRunner(mAppearAnimationRunner);
    }

    public IRemoteAnimationRunner getOccludeAnimationRunner() {
        if (KeyguardWmStateRefactor.isEnabled()) {
            return validatingRemoteAnimationRunner(mWmOcclusionManager.getOccludeAnimationRunner());
@@ -3356,7 +3388,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
            }
        } catch (RemoteException e) {
            mSurfaceBehindRemoteAnimationRequested = false;
            e.printStackTrace();
            Log.e(TAG, "Failed to report keyguardGoingAway", e);
        }
    }