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

Commit 5b7daf45 authored by wilsonshih's avatar wilsonshih Committed by Wei Sheng Shih
Browse files

Notify launch app over lockscreen to keyguard transition handler.

Provide a short term workaround for shell transition, let Keyguard
service notify KeyguardTransitionHandler that there has created a
remote transition request for next launch app transition, so the
transition doesn't needs to be handled by KeyguardTransitionHandler.

Bug: 297859920
Test: launch app from Keyguard, verify the KeyguardTransitionHandler
can handle that open-app transition.

Change-Id: If146900a0411a532679e930ca4e317cb1b7a7969
parent fd011456
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -76,6 +76,10 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
    private IRemoteTransition mOccludeByDreamTransition = null;
    private IRemoteTransition mOccludeByDreamTransition = null;
    private IRemoteTransition mUnoccludeTransition = null;
    private IRemoteTransition mUnoccludeTransition = null;


    // While set true, Keyguard has created a remote animation runner to handle the open app
    // transition.
    private boolean mIsLaunchingActivityOverLockscreen;

    private final class StartedTransition {
    private final class StartedTransition {
        final TransitionInfo mInfo;
        final TransitionInfo mInfo;
        final SurfaceControl.Transaction mFinishT;
        final SurfaceControl.Transaction mFinishT;
@@ -120,7 +124,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull TransitionFinishCallback finishCallback) {
            @NonNull TransitionFinishCallback finishCallback) {
        if (!handles(info)) {
        if (!handles(info) || mIsLaunchingActivityOverLockscreen) {
            return false;
            return false;
        }
        }


@@ -313,5 +317,11 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
                mUnoccludeTransition = unoccludeTransition;
                mUnoccludeTransition = unoccludeTransition;
            });
            });
        }
        }

        @Override
        public void setLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {
            mMainExecutor.execute(() ->
                    mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen);
        }
    }
    }
}
}
+5 −0
Original line number Original line Diff line number Diff line
@@ -38,4 +38,9 @@ public interface KeyguardTransitions {
            @NonNull IRemoteTransition occludeTransition,
            @NonNull IRemoteTransition occludeTransition,
            @NonNull IRemoteTransition occludeByDreamTransition,
            @NonNull IRemoteTransition occludeByDreamTransition,
            @NonNull IRemoteTransition unoccludeTransition) {}
            @NonNull IRemoteTransition unoccludeTransition) {}

    /**
     * Notify whether keyguard has created a remote animation runner for next app launch.
     */
    default void setLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {}
}
}
+15 −5
Original line number Original line Diff line number Diff line
@@ -327,12 +327,22 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler,
        // the time of handleRequest, but we need more information than is available at that time.
        // the time of handleRequest, but we need more information than is available at that time.
        if (KeyguardTransitionHandler.handles(info)) {
        if (KeyguardTransitionHandler.handles(info)) {
            if (mixed != null && mixed.mType != MixedTransition.TYPE_KEYGUARD) {
            if (mixed != null && mixed.mType != MixedTransition.TYPE_KEYGUARD) {
                final MixedTransition keyguardMixed =
                        new MixedTransition(MixedTransition.TYPE_KEYGUARD, transition);
                mActiveTransitions.add(keyguardMixed);
                final boolean hasAnimateKeyguard = animateKeyguard(keyguardMixed, info,
                        startTransaction, finishTransaction, finishCallback);
                if (hasAnimateKeyguard) {
                    ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
                    ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
                            "Converting mixed transition into a keyguard transition");
                            "Converting mixed transition into a keyguard transition");
                    // Consume the original mixed transition
                    onTransitionConsumed(transition, false, null);
                    onTransitionConsumed(transition, false, null);
                    return true;
                } else {
                    // Keyguard handler cannot handle it, process through original mixed
                    mActiveTransitions.remove(keyguardMixed);
                }
            }
            }
            mixed = new MixedTransition(MixedTransition.TYPE_KEYGUARD, transition);
            mActiveTransitions.add(mixed);
        }
        }


        if (mixed == null) return false;
        if (mixed == null) return false;
+7 −0
Original line number Original line Diff line number Diff line
@@ -3785,6 +3785,13 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        }
        }
    }
    }


    /**
     * Notify whether keyguard has created a remote animation runner for next app launch.
     */
    public void launchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {
        mKeyguardTransitions.setLaunchingActivityOverLockscreen(isLaunchingActivityOverLockscreen);
    }

    /**
    /**
     * Implementation of RemoteAnimationRunner that creates a new
     * Implementation of RemoteAnimationRunner that creates a new
     * {@link ActivityLaunchAnimator.Runner} whenever onAnimationStart is called, delegating the
     * {@link ActivityLaunchAnimator.Runner} whenever onAnimationStart is called, delegating the
+1 −0
Original line number Original line Diff line number Diff line
@@ -3716,6 +3716,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    @Override
    @Override
    public void setIsLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {
    public void setIsLaunchingActivityOverLockscreen(boolean isLaunchingActivityOverLockscreen) {
        mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen;
        mIsLaunchingActivityOverLockscreen = isLaunchingActivityOverLockscreen;
        mKeyguardViewMediator.launchingActivityOverLockscreen(mIsLaunchingActivityOverLockscreen);
    }
    }


    @Override
    @Override