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

Commit 75989f24 authored by Lingyu Feng's avatar Lingyu Feng
Browse files

Update hasNavigationBar when shouldShowSystemDecors changes

This CL updates DisplayPolicy.mHasNavigationBar and
NavigationBarControllerImpl.mHasNavBar when shouldShowSystemDecors
changes.

Bug: 352461502
Bug: 374240163
Flag: com.android.server.display.feature.flags.enable_display_content_mode_management
Test: manually (adb shell settings put secure mirror_built_in_display {1|0})
Change-Id: I8700a500661aa4b5f3cb836ac0c8c9c8694bfd93
parent d59304db
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -395,4 +395,7 @@ oneway interface IStatusBar
    * @param displayId the id of the current display.
    */
    void moveFocusedTaskToDesktop(int displayId);

    /** Set whether the display should have a navigation bar. */
    void setHasNavigationBar(int displayId, boolean hasNavigationBar);
}
+8 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.navigationbar;

import static com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler.DEBUG_MISSING_GESTURE_TAG;
import static com.android.systemui.shared.recents.utilities.Utilities.isLargeScreen;
import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement;
import static com.android.wm.shell.Flags.enableTaskbarNavbarUnification;
import static com.android.wm.shell.Flags.enableTaskbarOnPhones;

@@ -309,6 +310,13 @@ public class NavigationBarControllerImpl implements
                navBarView.showPinningEscapeToast();
            }
        }

        @Override
        public void setHasNavigationBar(int displayId, boolean hasNavigationBar) {
            if (enableDisplayContentModeManagement()) {
                mHasNavBar.put(displayId, hasNavigationBar);
            }
        }
    };

    /**
+21 −0
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ public class CommandQueue extends IStatusBar.Stub implements
    private static final int MSG_SET_SPLITSCREEN_FOCUS = 81 << MSG_SHIFT;
    private static final int MSG_TOGGLE_QUICK_SETTINGS_PANEL = 82 << MSG_SHIFT;
    private static final int MSG_WALLET_ACTION_LAUNCH_GESTURE = 83 << MSG_SHIFT;
    private static final int MSG_SET_HAS_NAVIGATION_BAR = 84 << MSG_SHIFT;
    public static final int FLAG_EXCLUDE_NONE = 0;
    public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
    public static final int FLAG_EXCLUDE_RECENTS_PANEL = 1 << 1;
@@ -580,6 +581,12 @@ public class CommandQueue extends IStatusBar.Stub implements
         * @see IStatusBar#moveFocusedTaskToDesktop(int)
         */
        default void moveFocusedTaskToDesktop(int displayId) {}

        /**
         * @see IStatusBar#setHasNavigationBar(int, boolean)
         */
        default void setHasNavigationBar(int displayId, boolean hasNavigationBar) {
        }
    }

    @VisibleForTesting
@@ -1510,6 +1517,15 @@ public class CommandQueue extends IStatusBar.Stub implements
        mHandler.obtainMessage(MSG_ENTER_DESKTOP, args).sendToTarget();
    }

    @Override
    public void setHasNavigationBar(int displayId, boolean hasNavigationBar) {
        synchronized (mLock) {
            mHandler.obtainMessage(MSG_SET_HAS_NAVIGATION_BAR, displayId,
                    hasNavigationBar ? 1 : 0).sendToTarget();
        }
    }


    private final class H extends Handler {
        private H(Looper l) {
            super(l);
@@ -2036,6 +2052,11 @@ public class CommandQueue extends IStatusBar.Stub implements
                    }
                    break;
                }
                case MSG_SET_HAS_NAVIGATION_BAR:
                    for (int i = 0; i < mCallbacks.size(); i++) {
                        mCallbacks.get(i).setHasNavigationBar(msg.arg1, msg.arg2 != 0);
                    }
                    break;
            }
        }
    }
+7 −1
Original line number Diff line number Diff line
@@ -275,7 +275,13 @@ public interface StatusBarManagerInternal {
     */
    void moveFocusedTaskToDesktop(int displayId);


    /** Passes through the given shell commands to SystemUI */
    void passThroughShellCommand(String[] args, FileDescriptor fd);

    /**
     * Set whether the display should have a navigation bar.
     *
     * TODO(b/390591772): Refactor this method
     */
    void setHasNavigationBar(int displayId, boolean hasNavigationBar);
}
+17 −0
Original line number Diff line number Diff line
@@ -996,6 +996,23 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
        public void passThroughShellCommand(String[] args, FileDescriptor fd) {
            StatusBarManagerService.this.passThroughShellCommand(args, fd);
        }

        @Override
        public void setHasNavigationBar(int displayId, boolean hasNavigationBar) {
            if (isVisibleBackgroundUserOnDisplay(displayId)) {
                if (SPEW) {
                    Slog.d(TAG, "Skipping setHasNavigationBar for visible background user "
                            + mUserManagerInternal.getUserAssignedToDisplay(displayId));
                }
                return;
            }
            IStatusBar bar = mBar;
            if (bar != null) {
                try {
                    bar.setHasNavigationBar(displayId, hasNavigationBar);
                } catch (RemoteException ex) {}
            }
        }
    };

    private final GlobalActionsProvider mGlobalActionsProvider = new GlobalActionsProvider() {
Loading