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

Commit eb30ed8e authored by Ben Lin's avatar Ben Lin
Browse files

Keyguard Shell Transitions: send keyguard/aod updates to all displays.

We used to delegate this responsibility to ATMS, who iterates through
all the displays and then call on KeyguardController individually. We'll
migrate this iteration to Shell side now so that going forward if it
ever needs to only update a set, it can control that itself.

Bug: 364930619
Test: atest
android.server.wm.multidisplay.MultiDisplayLockedKeyguardTests#testPrivateDisplayHideContentWhenLocked
Test: atest
android.server.wm.multidisplay.MultiDisplayLockedKeyguardTests#testVirtualDisplayHideContentWhenLocked
Test: atest
android.server.wm.multidisplay.MultiDisplayLockedKeyguardTests#testDismissKeyguard_secondaryDisplay
Flag: com.android.window.flags.ensure_keyguard_does_transition_starting

Change-Id: Iad86bd9e092ed53dde678071e5ddeae27426d6d8
parent 8ab15616
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -95,6 +95,14 @@ public class DisplayController {
        return displayManager.getDisplay(displayId);
    }

    /**
     * Get all the displays from DisplayManager.
     */
    public Display[] getDisplays() {
        final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
        return displayManager.getDisplays();
    }

    /**
     * Gets the DisplayLayout associated with a display.
     */
+3 −2
Original line number Diff line number Diff line
@@ -795,13 +795,14 @@ public abstract class WMShellBaseModule {
    static KeyguardTransitionHandler provideKeyguardTransitionHandler(
            ShellInit shellInit,
            ShellController shellController,
            DisplayController displayController,
            Transitions transitions,
            TaskStackListenerImpl taskStackListener,
            @ShellMainThread Handler mainHandler,
            @ShellMainThread ShellExecutor mainExecutor) {
        return new KeyguardTransitionHandler(
                shellInit, shellController, transitions, taskStackListener, mainHandler,
                mainExecutor);
                shellInit, shellController, displayController, transitions, taskStackListener,
                mainHandler, mainExecutor);
    }

    @WMSingleton
+10 −4
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.util.ArrayMap;
import android.util.Log;
import android.view.Display;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.IRemoteTransition;
@@ -54,6 +55,7 @@ import android.window.WindowContainerTransaction;

import com.android.internal.protolog.ProtoLog;
import com.android.window.flags.Flags;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.TaskStackListenerCallback;
import com.android.wm.shell.common.TaskStackListenerImpl;
@@ -80,6 +82,8 @@ public class KeyguardTransitionHandler

    private final Transitions mTransitions;
    private final ShellController mShellController;

    private final DisplayController mDisplayController;
    private final Handler mMainHandler;
    private final ShellExecutor mMainExecutor;

@@ -121,12 +125,14 @@ public class KeyguardTransitionHandler
    public KeyguardTransitionHandler(
            @NonNull ShellInit shellInit,
            @NonNull ShellController shellController,
            @NonNull DisplayController displayController,
            @NonNull Transitions transitions,
            @NonNull TaskStackListenerImpl taskStackListener,
            @NonNull Handler mainHandler,
            @NonNull ShellExecutor mainExecutor) {
        mTransitions = transitions;
        mShellController = shellController;
        mDisplayController = displayController;
        mMainHandler = mainHandler;
        mMainExecutor = mainExecutor;
        mTaskStackListener = taskStackListener;
@@ -429,10 +435,10 @@ public class KeyguardTransitionHandler
        @Override
        public void startKeyguardTransition(boolean keyguardShowing, boolean aodShowing) {
            final WindowContainerTransaction wct = new WindowContainerTransaction();
            final KeyguardState keyguardState =
                    new KeyguardState.Builder(android.view.Display.DEFAULT_DISPLAY)
                            .setKeyguardShowing(keyguardShowing).setAodShowing(aodShowing).build();
            wct.addKeyguardState(keyguardState);
            for (Display display : mDisplayController.getDisplays()) {
                wct.addKeyguardState(new KeyguardState.Builder(display.getDisplayId())
                        .setKeyguardShowing(keyguardShowing).setAodShowing(aodShowing).build());
            }
            mMainExecutor.execute(() -> {
                mTransitions.startTransition(keyguardShowing ? TRANSIT_TO_FRONT : TRANSIT_TO_BACK,
                        wct, KeyguardTransitionHandler.this);
+7 −4
Original line number Diff line number Diff line
@@ -2875,7 +2875,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
            }

            if (ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS) {
                mKeyguardTransitions.startKeyguardTransition(showing, aodShowing);
                startKeyguardTransition(showing, aodShowing);
            } else {
                try {

@@ -3019,7 +3019,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
                final int keyguardFlag = flags;
                mUiBgExecutor.execute(() -> {
                    if (ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS) {
                        mKeyguardTransitions.startKeyguardTransition(
                        startKeyguardTransition(
                                false /* keyguardShowing */, false /* aodShowing */);
                        return;
                    }
@@ -3035,6 +3035,10 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        }
    };

    private void startKeyguardTransition(boolean keyguardShowing, boolean aodShowing) {
        mKeyguardTransitions.startKeyguardTransition(keyguardShowing, aodShowing);
    }

    private final Runnable mHideAnimationFinishedRunnable = () -> {
        Log.e(TAG, "mHideAnimationFinishedRunnable#run");
        mHideAnimationRunning = false;
@@ -3490,8 +3494,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        mSurfaceBehindRemoteAnimationRequested = true;

        if (ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS) {
            mKeyguardTransitions.startKeyguardTransition(
                    false /* keyguardShowing */, false /* aodShowing */);
            startKeyguardTransition(false /* keyguardShowing */, false /* aodShowing */);
            return;
        }

+6 −5
Original line number Diff line number Diff line
@@ -122,10 +122,7 @@ constructor(

        if (visible) {
            if (enableNewKeyguardShellTransitions) {
                keyguardTransitions.startKeyguardTransition(
                    false /* keyguardShowing */,
                    false, /* aodShowing */
                )
                startKeyguardTransition(false, /* keyguardShowing */ false /* aodShowing */)
                isKeyguardGoingAway = true
                return
            }
@@ -233,7 +230,7 @@ constructor(
                "aodVisible=$aodVisible).",
        )
        if (enableNewKeyguardShellTransitions) {
            keyguardTransitions.startKeyguardTransition(lockscreenShowing, aodVisible)
            startKeyguardTransition(lockscreenShowing, aodVisible)
        } else {
            activityTaskManagerService.setLockScreenShown(lockscreenShowing, aodVisible)
        }
@@ -241,6 +238,10 @@ constructor(
        this.isAodVisible = aodVisible
    }

    private fun startKeyguardTransition(keyguardShowing: Boolean, aodShowing: Boolean) {
        keyguardTransitions.startKeyguardTransition(keyguardShowing, aodShowing)
    }

    private fun endKeyguardGoingAwayAnimation() {
        if (!isKeyguardGoingAway) {
            Log.d(