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

Commit 8e08eff7 authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Support game dashboard on tablets

- Report task bar transient state to EdgeBackGestureHandler and NavBarOverlayController
- Register/unregister game dashboard listeners when the task bar is attached and detached

Fixes: 211513457
Test: Game dashboard button shows and hides with the transient task bar
Change-Id: Id55d78fc1ba36025d4441657f550c9e6088112e2
parent 62232b6c
Loading
Loading
Loading
Loading
+51 −6
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.systemui.navigationbar;
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.InsetsState.ITYPE_EXTRA_NAVIGATION_BAR;
import static android.view.InsetsState.containsType;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
@@ -86,6 +86,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
    private static final String TAG = TaskbarDelegate.class.getSimpleName();

    private final EdgeBackGestureHandler mEdgeBackGestureHandler;
    private final NavigationBarOverlayController mNavBarOverlayController;
    private boolean mInitialized;
    private CommandQueue mCommandQueue;
    private OverviewProxyService mOverviewProxyService;
@@ -140,6 +141,13 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,

        @Override
        public void hide() {
            clearTransient();
        }
    };

    private final Consumer<Boolean> mNavbarOverlayVisibilityChangeCallback = (visible) -> {
        if (visible) {
            mAutoHideController.touchAutoHide();
        }
    };

@@ -147,6 +155,11 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
    public TaskbarDelegate(Context context) {
        mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.Factory.class)
                .create(context);
        mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class);
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.init(mNavbarOverlayVisibilityChangeCallback,
                    mEdgeBackGestureHandler::updateNavigationBarOverlayExcludeRegion);
        }
        mContext = context;
        mDisplayManager = mContext.getSystemService(DisplayManager.class);
        mPipListener = mEdgeBackGestureHandler::setPipStashExclusionBounds;
@@ -206,6 +219,9 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
                mNavigationModeController.addListener(this));
        mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mNavBarHelper.init();
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.registerListeners();
        }
        mEdgeBackGestureHandler.onNavBarAttached();
        // Initialize component callback
        Display display = mDisplayManager.getDisplay(displayId);
@@ -229,6 +245,9 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        mNavigationModeController.removeListener(this);
        mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
        mNavBarHelper.destroy();
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.unregisterListeners();
        }
        mEdgeBackGestureHandler.onNavBarDetached();
        mScreenPinningNotify = null;
        if (mWindowContext != null) {
@@ -354,10 +373,13 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        if (displayId != mDisplayId) {
            return;
        }
        if (!containsType(types, ITYPE_NAVIGATION_BAR)) {
        if (!containsType(types, ITYPE_EXTRA_NAVIGATION_BAR)) {
            return;
        }
        if (!mTaskbarTransientShowing) {
            mTaskbarTransientShowing = true;
            onTransientStateChanged();
        }
    }

    @Override
@@ -365,15 +387,14 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        if (displayId != mDisplayId) {
            return;
        }
        if (!containsType(types, ITYPE_NAVIGATION_BAR)) {
        if (!containsType(types, ITYPE_EXTRA_NAVIGATION_BAR)) {
            return;
        }
        mTaskbarTransientShowing = false;
        clearTransient();
    }

    @Override
    public void onTaskbarAutohideSuspend(boolean suspend) {
        mTaskbarTransientShowing = suspend;
        if (suspend) {
            mAutoHideController.suspendAutoHide();
        } else {
@@ -381,6 +402,30 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        }
    }

    private void clearTransient() {
        if (mTaskbarTransientShowing) {
            mTaskbarTransientShowing = false;
            onTransientStateChanged();
        }
    }

    private void onTransientStateChanged() {
        mEdgeBackGestureHandler.onNavBarTransientStateChanged(mTaskbarTransientShowing);

        // The visibility of the navigation bar buttons is dependent on the transient state of
        // the navigation bar.
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.setButtonState(mTaskbarTransientShowing, /* force */ false);
        }
    }

    @Override
    public void onRecentsAnimationStateChanged(boolean running) {
        if (running) {
            mNavBarOverlayController.setButtonState(/* visible */false, /* force */true);
        }
    }

    @Override
    public void onNavigationModeChanged(int mode) {
        mNavigationMode = mode;