diff options
5 files changed, 69 insertions, 10 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/views/NavigationBarTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/views/NavigationBarTest.java index 646722bee35f..2905a7329d21 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/views/NavigationBarTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/views/NavigationBarTest.java @@ -116,7 +116,6 @@ 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.data.repository.LightBarControllerStore; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.LightBarController; @@ -209,7 +208,7 @@ public class NavigationBarTest extends SysuiTestCase { @Mock private LightBarController mLightBarController; @Mock - private LightBarControllerStore mLightBarControllerStore; + private LightBarController.Factory mLightBarcontrollerFactory; @Mock private AutoHideController mAutoHideController; @Mock @@ -258,7 +257,7 @@ public class NavigationBarTest extends SysuiTestCase { public void setup() throws Exception { MockitoAnnotations.initMocks(this); - when(mLightBarControllerStore.forDisplay(anyInt())).thenReturn(mLightBarController); + 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); @@ -650,7 +649,8 @@ public class NavigationBarTest extends SysuiTestCase { mFakeExecutor, mUiEventLogger, mNavBarHelper, - mLightBarControllerStore, + mLightBarController, + mLightBarcontrollerFactory, mAutoHideController, mAutoHideControllerFactory, Optional.of(mTelecomManager), diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java index 40613c0edc68..96c0cac53908 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java @@ -149,7 +149,6 @@ import com.android.systemui.statusbar.CommandQueue.Callbacks; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.StatusBarState; -import com.android.systemui.statusbar.data.repository.LightBarControllerStore; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.CentralSurfaces; @@ -259,7 +258,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements private boolean mTransientShownFromGestureOnSystemBar; private int mNavBarMode = NAV_BAR_MODE_3BUTTON; private LightBarController mLightBarController; - private final LightBarControllerStore mLightBarControllerStore; + private final LightBarController mMainLightBarController; + private final LightBarController.Factory mLightBarControllerFactory; private AutoHideController mAutoHideController; private final AutoHideController mMainAutoHideController; private final AutoHideController.Factory mAutoHideControllerFactory; @@ -580,7 +580,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements @Background Executor bgExecutor, UiEventLogger uiEventLogger, NavBarHelper navBarHelper, - LightBarControllerStore lightBarControllerStore, + LightBarController mainLightBarController, + LightBarController.Factory lightBarControllerFactory, AutoHideController mainAutoHideController, AutoHideController.Factory autoHideControllerFactory, Optional<TelecomManager> telecomManagerOptional, @@ -627,7 +628,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements mUiEventLogger = uiEventLogger; mNavBarHelper = navBarHelper; mNotificationShadeDepthController = notificationShadeDepthController; - mLightBarControllerStore = lightBarControllerStore; + mMainLightBarController = mainLightBarController; + mLightBarControllerFactory = lightBarControllerFactory; mMainAutoHideController = mainAutoHideController; mAutoHideControllerFactory = autoHideControllerFactory; mTelecomManagerOptional = telecomManagerOptional; @@ -840,7 +842,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements // Unfortunately, we still need it because status bar needs LightBarController // before notifications creation. We cannot directly use getLightBarController() // from NavigationBarFragment directly. - LightBarController lightBarController = mLightBarControllerStore.forDisplay(mDisplayId); + LightBarController lightBarController = mIsOnDefaultDisplay + ? mMainLightBarController : mLightBarControllerFactory.create(mContext); setLightBarController(lightBarController); // TODO(b/118592525): to support multi-display, we start to add something which is diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt index 9b24d451f9cb..47b695e50a0e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt @@ -30,6 +30,7 @@ import com.android.systemui.statusbar.data.repository.LightBarControllerStore import com.android.systemui.statusbar.phone.AutoHideController import com.android.systemui.statusbar.phone.AutoHideControllerImpl import com.android.systemui.statusbar.phone.LightBarController +import com.android.systemui.statusbar.phone.LightBarControllerImpl import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider import com.android.systemui.statusbar.phone.StatusBarContentInsetsProviderImpl import com.android.systemui.statusbar.phone.StatusBarSignalPolicy @@ -83,6 +84,11 @@ interface StatusBarModule { @Binds @SysUISingleton fun autoHideController(impl: AutoHideControllerImpl): AutoHideController + @Binds + fun lightBarControllerFactory( + legacyFactory: LightBarControllerImpl.LegacyFactory + ): LightBarController.Factory + companion object { @Provides diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.kt index a6374a66806b..cd9b9d244e0e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.kt @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone +import android.content.Context import android.view.WindowInsetsController import com.android.internal.colorextraction.ColorExtractor import com.android.internal.view.AppearanceRegion @@ -64,4 +65,8 @@ interface LightBarController : CoreStartable { scrimBehindAlpha: Float, scrimInFrontColor: ColorExtractor.GradientColors, ) + + fun interface Factory { + fun create(context: Context): LightBarController + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java index ccb9a119d92f..1a4f3ca5b07f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java @@ -22,6 +22,7 @@ import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS; import static com.android.systemui.shared.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT; import static com.android.systemui.shared.statusbar.phone.BarTransitions.MODE_TRANSPARENT; +import android.content.Context; import android.graphics.Rect; import android.util.Log; import android.view.Display; @@ -34,12 +35,15 @@ import androidx.annotation.Nullable; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.view.AppearanceRegion; +import com.android.systemui.dagger.qualifiers.Application; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.statusbar.data.model.StatusBarAppearance; +import com.android.systemui.statusbar.data.repository.DarkIconDispatcherStore; import com.android.systemui.statusbar.data.repository.StatusBarModePerDisplayRepository; +import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.Compile; import com.android.systemui.util.kotlin.JavaAdapterKt; @@ -55,6 +59,8 @@ import kotlinx.coroutines.CoroutineScope; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; + /** * Controls how light status bar flag applies to the icons. */ @@ -67,6 +73,7 @@ public class LightBarControllerImpl implements private static final float NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD = 0.1f; + private final int mDisplayId; private final CoroutineScope mCoroutineScope; private final SysuiDarkIconDispatcher mStatusBarIconController; private final BatteryController mBatteryController; @@ -140,6 +147,7 @@ public class LightBarControllerImpl implements DumpManager dumpManager, @Main CoroutineContext mainContext, BiometricUnlockController biometricUnlockController) { + mDisplayId = displayId; mCoroutineScope = coroutineScope; mStatusBarIconController = (SysuiDarkIconDispatcher) darkIconDispatcher; mBatteryController = batteryController; @@ -155,7 +163,12 @@ public class LightBarControllerImpl implements @Override public void start() { - mDumpManager.registerCriticalDumpable(mDumpableName, this); + if (mDisplayId == Display.DEFAULT_DISPLAY) { + // Can only register on default display, because NavigationBar creates its own instance + // as well as PerDisplayStore. + // TODO: b/380394368 - make sure there is only one instance per display. + mDumpManager.registerCriticalDumpable(mDumpableName, this); + } mBatteryController.addCallback(this); mNavigationMode = mNavModeController.addListener(mNavigationModeListener); JavaAdapterKt.collectFlow( @@ -490,4 +503,36 @@ public class LightBarControllerImpl implements DarkIconDispatcher darkIconDispatcher, StatusBarModePerDisplayRepository statusBarModePerDisplayRepository); } + + public static class LegacyFactory implements LightBarController.Factory { + + private final Factory mFactory; + private final CoroutineScope mApplicationScope; + private final DarkIconDispatcherStore mDarkIconDispatcherStore; + private final StatusBarModeRepositoryStore mStatusBarModeRepositoryStore; + + @Inject + public LegacyFactory( + LightBarControllerImpl.Factory factory, + @Application CoroutineScope applicationScope, + DarkIconDispatcherStore darkIconDispatcherStore, + StatusBarModeRepositoryStore statusBarModeRepositoryStore) { + mFactory = factory; + mApplicationScope = applicationScope; + mDarkIconDispatcherStore = darkIconDispatcherStore; + mStatusBarModeRepositoryStore = statusBarModeRepositoryStore; + } + + @NonNull + @Override + public LightBarController create(@NonNull Context context) { + // TODO: b/380394368 - Make sure correct per display instances are used. + return mFactory.create( + context.getDisplayId(), + mApplicationScope, + mDarkIconDispatcherStore.getDefaultDisplay(), + mStatusBarModeRepositoryStore.getDefaultDisplay() + ); + } + } } |