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

Commit 3dedec32 authored by Charles Chen's avatar Charles Chen
Browse files

Notify SystemUI when ActivityDisplay is ready

Bug: 120748674
Test: atest ActivityManagerMultiDisplayTests#testNavBarNotShowingOnDisplayWithoutDecor * 100
Test: atest ActivityManagerMultiDisplayTests#testNavBarShowingOnDisplayWithDecor * 100
Test: atest ActivityManagerMultiDisplayTests#testNavBarNotShowingOnPrivateDisplay * 100
Test: atest SystemUITests
Change-Id: I302a35b9b860ab881b60c6407edabb2da16b75f8
parent d22cf2d3
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -160,4 +160,9 @@ oneway interface IStatusBar
    void onBiometricError(String error);
    // Used to hide the biometric dialog when the AuthenticationClient is stopped
    void hideBiometricDialog();

    /**
     * Notifies System UI that the display is ready to show system decorations.
     */
    void onDisplayReady(int displayId);
}
+18 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
    private static final int MSG_SHOW_CHARGING_ANIMATION       = 44 << MSG_SHIFT;
    private static final int MSG_SHOW_PINNING_TOAST_ENTER_EXIT = 45 << MSG_SHIFT;
    private static final int MSG_SHOW_PINNING_TOAST_ESCAPE     = 46 << MSG_SHIFT;
    private static final int MSG_DISPLAY_READY                 = 47 << MSG_SHIFT;

    public static final int FLAG_EXCLUDE_NONE = 0;
    public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
@@ -274,6 +275,11 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
        default void onBiometricHelp(String message) { }
        default void onBiometricError(String error) { }
        default void hideBiometricDialog() { }

        /**
        * @see IStatusBar#onDisplayReady(int)
        */
        default void onDisplayReady(int displayId) { }
    }

    @VisibleForTesting
@@ -761,6 +767,13 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
        }
    }

    @Override
    public void onDisplayReady(int displayId) {
        synchronized (mLock) {
            mHandler.obtainMessage(MSG_DISPLAY_READY, displayId, 0).sendToTarget();
        }
    }

    private final class H extends Handler {
        private H(Looper l) {
            super(l);
@@ -1015,6 +1028,11 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
                        mCallbacks.get(i).showPinningEscapeToast();
                    }
                    break;
                case MSG_DISPLAY_READY:
                    for (int i = 0; i < mCallbacks.size(); i++) {
                        mCallbacks.get(i).onDisplayReady(msg.arg1);
                    }
                    break;
            }
        }
    }
+11 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar;
import static android.view.Display.DEFAULT_DISPLAY;

import static com.android.systemui.Dependency.MAIN_HANDLER_NAME;
import static com.android.systemui.SysUiServiceProvider.getComponent;

import android.content.Context;
import android.hardware.display.DisplayManager;
@@ -34,6 +35,7 @@ import android.view.WindowManagerGlobal;

import com.android.systemui.Dependency;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.CommandQueue.Callbacks;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
import com.android.systemui.statusbar.phone.LightBarController;
@@ -48,7 +50,7 @@ import javax.inject.Singleton;

/** A controller to handle navigation bars. */
@Singleton
public class NavigationBarController implements DisplayListener {
public class NavigationBarController implements DisplayListener, Callbacks {

    private static final String TAG = NavigationBarController.class.getName();

@@ -65,13 +67,11 @@ public class NavigationBarController implements DisplayListener {
        mHandler = handler;
        mDisplayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
        mDisplayManager.registerDisplayListener(this, mHandler);
        getComponent(mContext, CommandQueue.class).addCallback(this);
    }

    @Override
    public void onDisplayAdded(int displayId) {
        Display display = mDisplayManager.getDisplay(displayId);
        createNavigationBar(display);
    }
    public void onDisplayAdded(int displayId) { }

    @Override
    public void onDisplayRemoved(int displayId) {
@@ -79,7 +79,12 @@ public class NavigationBarController implements DisplayListener {
    }

    @Override
    public void onDisplayChanged(int displayId) {
    public void onDisplayChanged(int displayId) { }

    @Override
    public void onDisplayReady(int displayId) {
        Display display = mDisplayManager.getDisplay(displayId);
        createNavigationBar(display);
    }

    // TODO(b/117478341): I use {@code includeDefaultDisplay} to make this method compatible to
+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ public class NavigationBarButtonTest extends SysuiTestCase {

    @Before
    public void setup() {
        mContext.putComponent(CommandQueue.class, mock(CommandQueue.class));
        final Display display = createVirtualDisplay();
        final SysuiTestableContext context =
                (SysuiTestableContext) mContext.createDisplayContext(display);
+7 −0
Original line number Diff line number Diff line
@@ -100,4 +100,11 @@ public interface StatusBarManagerInternal {
     * @param rotation rotation suggestion
     */
    void onProposedRotationChanged(int rotation, boolean isValid);

    /**
     * Notifies System UI that the display is ready to show system decorations.
     *
     * @param displayId display ID
     */
    void onDisplayReady(int displayId);
}
Loading