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

Commit ef4ec2ff authored by Josh Tsuji's avatar Josh Tsuji Committed by Android (Google) Code Review
Browse files

Merge "Enable WM remote occlude flag; fix occlude state issues." into tm-dev

parents edea3fd4 05f45a09
Loading
Loading
Loading
Loading
+42 −4
Original line number Diff line number Diff line
@@ -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);
        }
    }
}
+17 −0
Original line number Diff line number Diff line
@@ -1747,6 +1747,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
+1 −1
Original line number Diff line number Diff line
@@ -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