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

Commit c0513c3a authored by Alina Zaidi's avatar Alina Zaidi
Browse files

Use AutoHideControllerStore to provide separate instances of

AutoHideController for multi displays

Bug: 373309973
Test: mp droid
Flag: com.android.systemui.status_bar_connected_displays
Change-Id: Ifcb28246d078cd38f5a9b2fae7b6179fe233e0a5
parent 2d490709
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ import com.android.systemui.accessibility.SystemActions;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.kosmos.KosmosJavaAdapter;
import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.NavBarHelper;
import com.android.systemui.navigationbar.NavigationBarController;
@@ -116,7 +117,7 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.AutoHideControllerStore;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
@@ -147,6 +148,7 @@ import java.util.concurrent.Executor;
@SmallTest
public class NavigationBarTest extends SysuiTestCase {
    private static final int EXTERNAL_DISPLAY_ID = 2;
    private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this);

    private NavigationBar mNavigationBar;
    private NavigationBar mExternalDisplayNavigationBar;
@@ -210,10 +212,6 @@ public class NavigationBarTest extends SysuiTestCase {
    @Mock
    private LightBarController.Factory mLightBarcontrollerFactory;
    @Mock
    private AutoHideController mAutoHideController;
    @Mock
    private AutoHideController.Factory mAutoHideControllerFactory;
    @Mock
    private WindowManager mWindowManager;
    @Mock
    private ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager;
@@ -247,6 +245,8 @@ public class NavigationBarTest extends SysuiTestCase {
    private DeviceConfigProxyFake mDeviceConfigProxyFake = new DeviceConfigProxyFake();
    private TaskStackChangeListeners mTaskStackChangeListeners =
            TaskStackChangeListeners.getTestInstance();
    private final AutoHideControllerStore mAutoHideControllerStore =
            mKosmos.getAutoHideControllerStore();

    @Rule
    public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
@@ -258,7 +258,6 @@ public class NavigationBarTest extends SysuiTestCase {
        MockitoAnnotations.initMocks(this);

        when(mLightBarcontrollerFactory.create(any(Context.class))).thenReturn(mLightBarController);
        when(mAutoHideControllerFactory.create(any(Context.class))).thenReturn(mAutoHideController);
        when(mNavigationBarView.getHomeButton()).thenReturn(mHomeButton);
        when(mNavigationBarView.getRecentsButton()).thenReturn(mRecentsButton);
        when(mNavigationBarView.getAccessibilityButton()).thenReturn(mAccessibilityButton);
@@ -651,8 +650,7 @@ public class NavigationBarTest extends SysuiTestCase {
                mNavBarHelper,
                mLightBarController,
                mLightBarcontrollerFactory,
                mAutoHideController,
                mAutoHideControllerFactory,
                mAutoHideControllerStore,
                Optional.of(mTelecomManager),
                mInputMethodManager,
                mDeadZone,
+5 −4
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.shared.statusbar.phone.BarTransitions.TransitionMode;
import com.android.systemui.shared.system.TaskStackChangeListeners;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.AutoHideControllerStore;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.util.Utils;
@@ -124,7 +124,7 @@ public class NavigationBarControllerImpl implements
            TaskbarDelegate taskbarDelegate,
            NavigationBarComponent.Factory navigationBarComponentFactory,
            DumpManager dumpManager,
            AutoHideController autoHideController,
            AutoHideControllerStore autoHideControllerStore,
            LightBarController lightBarController,
            TaskStackChangeListeners taskStackChangeListeners,
            Optional<Pip> pipOptional,
@@ -146,8 +146,9 @@ public class NavigationBarControllerImpl implements
        mTaskbarDelegate = taskbarDelegate;
        mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
                navBarHelper, navigationModeController, sysUiFlagsContainer,
                dumpManager, autoHideController, lightBarController, pipOptional,
                backAnimation.orElse(null), taskStackChangeListeners);
                dumpManager, autoHideControllerStore.forDisplay(mContext.getDisplayId()),
                lightBarController, pipOptional, backAnimation.orElse(null),
                taskStackChangeListeners);
        mIsLargeScreen = isLargeScreen(mContext);
        mIsPhone = determineIfPhone(mContext, deviceStateManager);
        dumpManager.registerDumpable(this);
+5 −13
Original line number Diff line number Diff line
@@ -151,6 +151,7 @@ import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.AutoHideControllerStore;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -261,8 +262,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
    private final LightBarController mMainLightBarController;
    private final LightBarController.Factory mLightBarControllerFactory;
    private AutoHideController mAutoHideController;
    private final AutoHideController mMainAutoHideController;
    private final AutoHideController.Factory mAutoHideControllerFactory;
    private final AutoHideControllerStore mAutoHideControllerStore;
    private final Optional<TelecomManager> mTelecomManagerOptional;
    private final InputMethodManager mInputMethodManager;
    private final TaskStackChangeListeners mTaskStackChangeListeners;
@@ -582,8 +582,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
            NavBarHelper navBarHelper,
            LightBarController mainLightBarController,
            LightBarController.Factory lightBarControllerFactory,
            AutoHideController mainAutoHideController,
            AutoHideController.Factory autoHideControllerFactory,
            AutoHideControllerStore autoHideControllerStore,
            Optional<TelecomManager> telecomManagerOptional,
            InputMethodManager inputMethodManager,
            DeadZone deadZone,
@@ -630,8 +629,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
        mNotificationShadeDepthController = notificationShadeDepthController;
        mMainLightBarController = mainLightBarController;
        mLightBarControllerFactory = lightBarControllerFactory;
        mMainAutoHideController = mainAutoHideController;
        mAutoHideControllerFactory = autoHideControllerFactory;
        mAutoHideControllerStore = autoHideControllerStore;
        mTelecomManagerOptional = telecomManagerOptional;
        mInputMethodManager = inputMethodManager;
        mUserContextProvider = userContextProvider;
@@ -846,13 +844,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
                ? mMainLightBarController : mLightBarControllerFactory.create(mContext);
        setLightBarController(lightBarController);

        // TODO(b/118592525): to support multi-display, we start to add something which is
        //                    per-display, while others may be global. I think it's time to
        //                    add a new class maybe named DisplayDependency to solve
        //                    per-display Dependency problem.
        // Alternative: this is a good case for a Dagger subcomponent. Same with LightBarController.
        AutoHideController autoHideController = mIsOnDefaultDisplay
                ? mMainAutoHideController : mAutoHideControllerFactory.create(mContext);
        AutoHideController autoHideController = mAutoHideControllerStore.forDisplay(mDisplayId);
        setAutoHideController(autoHideController);
        restoreAppearanceAndTransientState();
    }
+3 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.systemui.display.data.repository.DisplayScopeRepository
import com.android.systemui.statusbar.data.repository.LightBarControllerStore
import com.android.systemui.statusbar.data.repository.PrivacyDotWindowControllerStore
import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore
import com.android.systemui.statusbar.phone.AutoHideControllerStore
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
import com.android.systemui.statusbar.window.data.repository.StatusBarWindowStateRepositoryStore
import com.android.systemui.util.kotlin.pairwiseBy
@@ -50,6 +51,7 @@ constructor(
    private val initializerStore: StatusBarInitializerStore,
    private val statusBarWindowControllerStore: StatusBarWindowControllerStore,
    private val statusBarInitializerStore: StatusBarInitializerStore,
    private val autoHideControllerStore: AutoHideControllerStore,
    private val privacyDotWindowControllerStore: PrivacyDotWindowControllerStore,
    private val lightBarControllerStore: LightBarControllerStore,
) : CoreStartable {
@@ -95,6 +97,7 @@ constructor(
                statusBarModeRepositoryStore.forDisplay(displayId),
                initializerStore.forDisplay(displayId),
                statusBarWindowControllerStore.forDisplay(displayId),
                autoHideControllerStore.forDisplay(displayId),
            )
            .start()
    }
+3 −9
Original line number Diff line number Diff line
@@ -71,9 +71,9 @@ constructor(
    @Assisted private val statusBarInitializer: StatusBarInitializer,
    @Assisted private val statusBarWindowController: StatusBarWindowController,
    @Main private val mainContext: CoroutineContext,
    @Assisted private val autoHideController: AutoHideController,
    private val demoModeController: DemoModeController,
    private val pluginDependencyProvider: PluginDependencyProvider,
    private val autoHideController: AutoHideController,
    private val remoteInputManager: NotificationRemoteInputManager,
    private val notificationShadeWindowViewControllerLazy:
        Lazy<NotificationShadeWindowViewController>,
@@ -210,10 +210,6 @@ constructor(
    }

    private fun setUpAutoHide() {
        if (displayId != Display.DEFAULT_DISPLAY) {
            return
        }
        // TODO(b/373309973): per display implementation of auto hide controller
        autoHideController.setStatusBar(
            object : AutoHideUiElement {
                override fun synchronizeState() {}
@@ -241,11 +237,8 @@ constructor(
        if (!demoModeController.isInDemoMode) {
            barTransitions.transitionTo(barMode.toTransitionModeInt(), animate)
        }
        if (displayId == Display.DEFAULT_DISPLAY) {
            // TODO(b/373309973): per display implementation of auto hide controller
        autoHideController.touchAutoHide()
    }
    }

    private fun updateBubblesVisibility(statusBarVisible: Boolean) {
        if (displayId != Display.DEFAULT_DISPLAY) {
@@ -288,6 +281,7 @@ constructor(
            statusBarModeRepository: StatusBarModePerDisplayRepository,
            statusBarInitializer: StatusBarInitializer,
            statusBarWindowController: StatusBarWindowController,
            autoHideController: AutoHideController,
        ): StatusBarOrchestrator
    }
}
Loading