From a9e2cc87d8257d4390d87e5774299aad55acf5d4 Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Wed, 5 Apr 2023 17:01:46 +0000 Subject: [PATCH] [Central Surfaces] Make StatusBarInitializer a singleton. Bug: 277762009 Test: compiles Test: status bar still works; LetterboxAppearanceCalculator still notified of status bar initialization Test: atest CentralSurfacesImplTest Change-Id: I041c844d06a3022ade7aa49969efc8cd64757d26 Merged-In: I041c844d06a3022ade7aa49969efc8cd64757d26 --- .../systemui/dagger/SystemUICoreStartableModule.kt | 6 ++---- .../com/android/systemui/dagger/SystemUIModule.java | 2 ++ .../systemui/statusbar/core/StatusBarInitializer.kt | 13 +++++++------ .../statusbar/phone/CentralSurfacesImpl.java | 11 +++++++---- .../systemui/statusbar/phone/LetterboxModule.kt | 8 ++++++++ .../phone/dagger/CentralSurfacesComponent.java | 10 ++-------- .../statusbar/phone/dagger/StatusBarViewModule.java | 8 -------- .../statusbar/phone/CentralSurfacesImplTest.java | 4 ++++ 8 files changed, 32 insertions(+), 30 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt index 20d690e209afe..de84cc22e0e14 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt @@ -31,13 +31,13 @@ import com.android.systemui.dagger.qualifiers.PerUser import com.android.systemui.dreams.AssistantAttentionMonitor import com.android.systemui.dreams.DreamMonitor import com.android.systemui.globalactions.GlobalActionsComponent -import com.android.systemui.keyboard.PhysicalKeyboardCoreStartable import com.android.systemui.keyboard.KeyboardUI +import com.android.systemui.keyboard.PhysicalKeyboardCoreStartable import com.android.systemui.keyguard.KeyguardViewMediator import com.android.systemui.keyguard.data.quickaffordance.MuteQuickAffordanceCoreStartable import com.android.systemui.log.SessionTracker -import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI import com.android.systemui.media.RingtonePlayer +import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver import com.android.systemui.media.taptotransfer.sender.MediaTttSenderCoordinator @@ -48,7 +48,6 @@ import com.android.systemui.settings.dagger.MultiUserUtilsModule import com.android.systemui.shortcut.ShortcutKeyDispatcher import com.android.systemui.statusbar.notification.InstantAppNotifier import com.android.systemui.statusbar.phone.KeyguardLiftController -import com.android.systemui.statusbar.phone.LetterboxModule import com.android.systemui.stylus.StylusUsiPowerStartable import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator import com.android.systemui.theme.ThemeOverlayController @@ -68,7 +67,6 @@ import dagger.multibindings.IntoMap @Module(includes = [ MultiUserUtilsModule::class, StartControlsStartableModule::class, - LetterboxModule::class, ]) abstract class SystemUICoreStartableModule { /** Inject into AuthController. */ diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 044dd6a47241d..855cca60d5c1d 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -93,6 +93,7 @@ import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotifica import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent; import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent; import com.android.systemui.statusbar.phone.CentralSurfaces; +import com.android.systemui.statusbar.phone.LetterboxModule; import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent; import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule; import com.android.systemui.statusbar.policy.HeadsUpManager; @@ -160,6 +161,7 @@ import javax.inject.Named; FooterActionsModule.class, GarbageMonitorModule.class, KeyboardModule.class, + LetterboxModule.class, LogModule.class, MediaProjectionModule.class, MotionToolModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt index 5351024c2f9f8..2ad71e7d989da 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt @@ -17,12 +17,11 @@ package com.android.systemui.statusbar.core import android.app.Fragment import com.android.systemui.R +import com.android.systemui.dagger.SysUISingleton import com.android.systemui.fragments.FragmentHostManager import com.android.systemui.statusbar.phone.PhoneStatusBarTransitions import com.android.systemui.statusbar.phone.PhoneStatusBarView import com.android.systemui.statusbar.phone.PhoneStatusBarViewController -import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent -import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent import com.android.systemui.statusbar.window.StatusBarWindowController @@ -33,7 +32,7 @@ import javax.inject.Inject * Responsible for creating the status bar window and initializing the root components of that * window (see [CollapsedStatusBarFragment]) */ -@CentralSurfacesScope +@SysUISingleton class StatusBarInitializer @Inject constructor( private val windowController: StatusBarWindowController, private val creationListeners: Set<@JvmSuppressWildcards OnStatusBarViewInitializedListener>, @@ -42,10 +41,12 @@ class StatusBarInitializer @Inject constructor( var statusBarViewUpdatedListener: OnStatusBarViewUpdatedListener? = null /** - * Creates the status bar window and root views, and initializes the component + * Creates the status bar window and root views, and initializes the component. + * + * TODO(b/277762009): Inject StatusBarFragmentCreator and make this class a CoreStartable. */ fun initializeStatusBar( - centralSurfacesComponent: CentralSurfacesComponent + statusBarFragmentCreator: () -> CollapsedStatusBarFragment, ) { windowController.fragmentHostManager.addTagListener( CollapsedStatusBarFragment.TAG, @@ -69,7 +70,7 @@ class StatusBarInitializer @Inject constructor( }).fragmentManager .beginTransaction() .replace(R.id.status_bar_container, - centralSurfacesComponent.createCollapsedStatusBarFragment(), + statusBarFragmentCreator.invoke(), CollapsedStatusBarFragment.TAG) .commit() } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index fab334c5ebc4a..e585b3aa60226 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -191,10 +191,10 @@ import com.android.systemui.shade.QuickSettingsController; import com.android.systemui.shade.ShadeController; import com.android.systemui.shade.ShadeExpansionChangeEvent; import com.android.systemui.shade.ShadeExpansionStateManager; -import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.shade.ShadeLogger; import com.android.systemui.shade.ShadeSurface; import com.android.systemui.shade.ShadeViewController; +import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.statusbar.AutoHideUiElement; import com.android.systemui.statusbar.BackDropView; import com.android.systemui.statusbar.CircleReveal; @@ -454,6 +454,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { private AuthRippleController mAuthRippleController; @WindowVisibleState private int mStatusBarWindowState = WINDOW_STATE_SHOWING; protected final NotificationShadeWindowController mNotificationShadeWindowController; + private final StatusBarInitializer mStatusBarInitializer; private final StatusBarWindowController mStatusBarWindowController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @VisibleForTesting @@ -722,6 +723,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { FragmentService fragmentService, LightBarController lightBarController, AutoHideController autoHideController, + StatusBarInitializer statusBarInitializer, StatusBarWindowController statusBarWindowController, StatusBarWindowStateController statusBarWindowStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, @@ -816,6 +818,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { mFragmentService = fragmentService; mLightBarController = lightBarController; mAutoHideController = autoHideController; + mStatusBarInitializer = statusBarInitializer; mStatusBarWindowController = statusBarWindowController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mPulseExpansionHandler = pulseExpansionHandler; @@ -1260,8 +1263,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { mPluginDependencyProvider.allowPluginDependency(StatusBarStateController.class); // Set up CollapsedStatusBarFragment and PhoneStatusBarView - StatusBarInitializer initializer = mCentralSurfacesComponent.getStatusBarInitializer(); - initializer.setStatusBarViewUpdatedListener( + mStatusBarInitializer.setStatusBarViewUpdatedListener( (statusBarView, statusBarViewController, statusBarTransitions) -> { mStatusBarView = statusBarView; mPhoneStatusBarViewController = statusBarViewController; @@ -1277,7 +1279,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { setBouncerShowingForStatusBarComponents(mBouncerShowing); checkBarModes(); }); - initializer.initializeStatusBar(mCentralSurfacesComponent); + mStatusBarInitializer.initializeStatusBar( + mCentralSurfacesComponent::createCollapsedStatusBarFragment); mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt index 2e3f0d0abc0a5..61377e20a9e19 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt @@ -18,10 +18,12 @@ package com.android.systemui.statusbar.phone import com.android.systemui.CoreStartable +import com.android.systemui.statusbar.core.StatusBarInitializer import dagger.Binds import dagger.Module import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap +import dagger.multibindings.IntoSet @Module abstract class LetterboxModule { @@ -29,4 +31,10 @@ abstract class LetterboxModule { @IntoMap @ClassKey(LetterboxBackgroundProvider::class) abstract fun bindFeature(impl: LetterboxBackgroundProvider): CoreStartable + + @Binds + @IntoSet + abstract fun statusBarInitializedListener( + letterboxAppearanceCalculator: LetterboxAppearanceCalculator + ): StatusBarInitializer.OnStatusBarViewInitializedListener } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java index 8e59a8b62a053..d80e1d3c9f11d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java @@ -29,7 +29,6 @@ import com.android.systemui.shade.QuickSettingsController; import com.android.systemui.shade.ShadeHeaderController; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationShelfController; -import com.android.systemui.statusbar.core.StatusBarInitializer; import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; @@ -42,6 +41,8 @@ import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter import com.android.systemui.statusbar.phone.StatusBarNotificationPresenterModule; import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment; +import dagger.Subcomponent; + import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.util.Set; @@ -49,8 +50,6 @@ import java.util.Set; import javax.inject.Named; import javax.inject.Scope; -import dagger.Subcomponent; - /** * Dagger subcomponent for classes (semi-)related to the status bar. The component is created once * inside {@link CentralSurfacesImpl} and never re-created. @@ -149,11 +148,6 @@ public interface CentralSurfacesComponent { @Named(STATUS_BAR_FRAGMENT) CollapsedStatusBarFragment createCollapsedStatusBarFragment(); - /** - * Creates a StatusBarInitializer - */ - StatusBarInitializer getStatusBarInitializer(); - /** * Set of startables to be run after a CentralSurfacesComponent has been constructed. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java index 015ee7b5682a3..4cde511e8104a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java @@ -50,14 +50,12 @@ import com.android.systemui.statusbar.LegacyNotificationShelfControllerImpl; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.NotificationShelfController; import com.android.systemui.statusbar.OperatorNameViewController; -import com.android.systemui.statusbar.core.StatusBarInitializer.OnStatusBarViewInitializedListener; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent; import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModelModule; import com.android.systemui.statusbar.notification.shelf.ui.viewbinder.NotificationShelfViewBinderWrapperControllerImpl; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.phone.KeyguardBottomAreaView; -import com.android.systemui.statusbar.phone.LetterboxAppearanceCalculator; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.StatusBarBoundsProvider; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; @@ -274,12 +272,6 @@ public abstract class StatusBarViewModule { return notificationShadeWindowView.findViewById(R.id.notification_container_parent); } - @Binds - @IntoSet - abstract OnStatusBarViewInitializedListener statusBarInitializedListener( - LetterboxAppearanceCalculator letterboxAppearanceCalculator - ); - @Binds @IntoSet abstract StatusBarBoundsProvider.BoundsChangeListener sysBarAttrsListenerAsBoundsListener( diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index ff3cea53f4ad2..219e6a995680f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -44,6 +44,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static java.util.Collections.emptySet; + import android.app.ActivityManager; import android.app.IWallpaperManager; import android.app.Notification; @@ -147,6 +149,7 @@ import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarStateControllerImpl; +import com.android.systemui.statusbar.core.StatusBarInitializer; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotifPipelineFlags; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; @@ -450,6 +453,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mock(FragmentService.class), mLightBarController, mAutoHideController, + new StatusBarInitializer(mStatusBarWindowController, emptySet()), mStatusBarWindowController, mStatusBarWindowStateController, mKeyguardUpdateMonitor,