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

Commit 0eebce6a authored by Peiyong Lin's avatar Peiyong Lin
Browse files

Add NavigationBarOverlayController.

A NavigationBarOverlayController is used to create and control buttons
floating as an overlay with the navigation bar.

Minor: Fix import order per lint error.

Bug: b/176190597
Test: manual
Change-Id: I9ce574f7a1c38baad12b4fc45a7799e07127fe87
parent 9df4c361
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.NavigationBarController;
import com.android.systemui.navigationbar.NavigationBarOverlayController;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.DarkIconDispatcher;
@@ -340,6 +341,7 @@ public class Dependency {
    @Inject Lazy<ProtoTracer> mProtoTracer;
    @Inject Lazy<MediaOutputDialogFactory> mMediaOutputDialogFactory;
    @Inject Lazy<DeviceConfigProxy> mDeviceConfigProxy;
    @Inject Lazy<NavigationBarOverlayController> mNavbarButtonsControllerLazy;

    @Inject
    public Dependency() {
@@ -536,6 +538,8 @@ public class Dependency {

        mProviders.put(MediaOutputDialogFactory.class, mMediaOutputDialogFactory::get);

        mProviders.put(NavigationBarOverlayController.class, mNavbarButtonsControllerLazy::get);

        Dependency.setInstance(this);
    }

+4 −1
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.NavigationBarController;
import com.android.systemui.navigationbar.NavigationBarOverlayController;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.PluginInitializerImpl;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -81,8 +82,8 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.theme.ThemeOverlayApplier;
import com.android.systemui.util.leak.LeakDetector;
import com.android.wm.shell.pip.Pip;
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
import com.android.wm.shell.pip.Pip;

import java.util.Optional;
import java.util.concurrent.Executor;
@@ -221,6 +222,7 @@ public class DependencyProvider {
            SystemActions systemActions,
            @Main Handler mainHandler,
            UiEventLogger uiEventLogger,
            NavigationBarOverlayController navBarOverlayController,
            ConfigurationController configurationController) {
        return new NavigationBarController(context,
                windowManager,
@@ -244,6 +246,7 @@ public class DependencyProvider {
                systemActions,
                mainHandler,
                uiEventLogger,
                navBarOverlayController,
                configurationController);
    }

+11 −1
Original line number Diff line number Diff line
@@ -136,8 +136,8 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.wm.shell.pip.Pip;
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
import com.android.wm.shell.pip.Pip;

import java.io.PrintWriter;
import java.util.List;
@@ -185,6 +185,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
    private final Optional<Recents> mRecentsOptional;
    private final SystemActions mSystemActions;
    private final Handler mHandler;
    private final NavigationBarOverlayController mNavbarOverlayController;
    private final UiEventLogger mUiEventLogger;

    private Bundle mSavedState;
@@ -415,6 +416,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
            NotificationRemoteInputManager notificationRemoteInputManager,
            SystemActions systemActions,
            @Main Handler mainHandler,
            NavigationBarOverlayController navbarOverlayController,
            UiEventLogger uiEventLogger) {
        mContext = context;
        mWindowManager = windowManager;
@@ -438,6 +440,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
        mRecentsOptional = recentsOptional;
        mSystemActions = systemActions;
        mHandler = mainHandler;
        mNavbarOverlayController = navbarOverlayController;
        mUiEventLogger = uiEventLogger;
    }

@@ -862,6 +865,13 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
        rotationButtonController.onRotationProposal(rotation, winRotation, isValid);
    }

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

    /** Restores the appearance and the transient saved state to {@link NavigationBar}. */
    public void restoreAppearanceAndTransientState() {
        final int barMode = barMode(mTransientShown, mAppearance);
+5 −1
Original line number Diff line number Diff line
@@ -64,8 +64,8 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.wm.shell.pip.Pip;
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
import com.android.wm.shell.pip.Pip;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -107,6 +107,7 @@ public class NavigationBarController implements Callbacks,
    private final UiEventLogger mUiEventLogger;
    private final Handler mHandler;
    private final DisplayManager mDisplayManager;
    private final NavigationBarOverlayController mNavBarOverlayController;

    /** A displayId - nav bar maps. */
    @VisibleForTesting
@@ -141,6 +142,7 @@ public class NavigationBarController implements Callbacks,
            SystemActions systemActions,
            @Main Handler mainHandler,
            UiEventLogger uiEventLogger,
            NavigationBarOverlayController navBarOverlayController,
            ConfigurationController configurationController) {
        mContext = context;
        mWindowManager = windowManager;
@@ -168,6 +170,7 @@ public class NavigationBarController implements Callbacks,
        commandQueue.addCallback(this);
        configurationController.addCallback(this);
        mConfigChanges.applyNewConfig(mContext.getResources());
        mNavBarOverlayController = navBarOverlayController;
    }

    @Override
@@ -290,6 +293,7 @@ public class NavigationBarController implements Callbacks,
                mNotificationRemoteInputManager,
                mSystemActions,
                mHandler,
                mNavBarOverlayController,
                mUiEventLogger);

        View navigationBarView = navBar.createView(savedState);
+88 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.navigationbar;

import android.annotation.ColorInt;
import android.content.Context;
import android.view.View;

import com.android.systemui.dagger.SysUISingleton;

import java.util.function.Consumer;

import javax.inject.Inject;

/** Contains logic that deals with showing buttons with navigation bar. */
@SysUISingleton
public class NavigationBarOverlayController {

    protected final Context mContext;

    @Inject
    public NavigationBarOverlayController(Context context) {
        mContext = context;
    }

    public Context getContext() {
        return mContext;
    }

    /**
     * Initialize the controller with visibility change callback and light/dark icon color.
     */
    public void init(Consumer<Boolean> visibilityChangeCallback, @ColorInt int lightIconColor,
            @ColorInt int darkIconColor) {}

    /**
     * Set whether the view can be shown.
     */
    public void setCanShow(boolean canShow) {}

    /**
     * Set the buttons visibility.
     */
    public void setButtonState(boolean visible, boolean force) {}

    /**
     * Register necessary listeners, called when NavigationBarView is attached to window.
     */
    public void registerListeners() {}

    /**
     * Unregister listeners, called when navigationBarView is detached from window.
     */
    public void unregisterListeners() {}

    /**
     * Set the dark intensity for all drawables.
     */
    public void setDarkIntensity(float darkIntensity) {}

    /**
     * Return the current view.
     */
    public View getCurrentView() {
        return null;
    }

    /**
     * Return the visibility of the view.
     */
    public boolean isVisible() {
        return false;
    }
}
Loading