summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/views/NavigationBarTest.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarControllerImpl.java47
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()
+ );
+ }
+ }
}