[CS] Make NSSLC and NotificationListContainer singletons.

Note on the Dagger module changes: Previously, NSSLC and its
dependencies were part of CentralSurfacesComponent, so the submodules
that included NSSLC's dependencies only needed to be in
CentralSurfacesComponent. Now that NSSLC is a singleton, those
dependencies need to be available *outside* of CentralSurfacesComponent.
NotificationsModule is the logical place for them, because they're
notifications-related.

Now, when NSSLC is injected into CentralSurfacesImpl, it can pull its
dependencies from any modules that SysUI has, which includes
NotificationsModule.

Bug: 277762009
Test: compiles
Test: notifications smoke test (posting new notifs, expanding &
collapsing notifs, swiping notifs away, changing font size &
display scale)
Test: atest CentralSurfacesImplTest
Test: `m
out/soong/.intermediates/vendor/google_arc/packages/system/ArcSystemUI/ArcSystemUI-tests/android_common/kapt/kapt-sources.jar`
succeeds

Change-Id: Ia9c629c7dab06204568a4f04ab1a092db28be467
This commit is contained in:
Caitlin Shkuratov
2023-06-13 15:16:55 +00:00
parent 80c14a30f2
commit e33987ccd5
11 changed files with 37 additions and 67 deletions

View File

@@ -140,7 +140,6 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
.expandableNotificationRow(row)
.notificationEntry(entry)
.onExpandClickListener(mPresenter)
.listContainer(mListContainer)
.build();
ExpandableNotificationRowController rowController =
component.getExpandableNotificationRowController();

View File

@@ -63,8 +63,12 @@ import com.android.systemui.statusbar.notification.logging.NotificationPanelLogg
import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerImpl;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModelModule;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModelModule;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import dagger.Binds;
@@ -85,6 +89,8 @@ import javax.inject.Provider;
ShadeEventsModule.class,
NotifPipelineChoreographerModule.class,
NotificationSectionHeadersModule.class,
NotificationListViewModelModule.class,
ActivatableNotificationViewModelModule.class,
})
public interface NotificationsModule {
@Binds
@@ -159,6 +165,14 @@ public interface NotificationsModule {
}
}
/** Provides the container for the notification list. */
@Provides
@SysUISingleton
static NotificationListContainer provideListContainer(
NotificationStackScrollLayoutController nsslController) {
return nsslController.getNotificationListContainer();
}
/**
* Provide the active notification collection managing the notifications to render.
*/

View File

@@ -25,7 +25,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import dagger.Binds;
@@ -59,8 +58,6 @@ public interface ExpandableNotificationRowComponent {
Builder notificationEntry(NotificationEntry entry);
@BindsInstance
Builder onExpandClickListener(ExpandableNotificationRow.OnExpandClickListener presenter);
@BindsInstance
Builder listContainer(NotificationListContainer listContainer);
ExpandableNotificationRowComponent build();
}

View File

@@ -16,16 +16,16 @@
package com.android.systemui.statusbar.notification.shelf.ui.viewmodel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.NotificationShelf
import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel
import com.android.systemui.statusbar.notification.shelf.domain.interactor.NotificationShelfInteractor
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
/** ViewModel for [NotificationShelf]. */
@CentralSurfacesScope
@SysUISingleton
class NotificationShelfViewModel
@Inject
constructor(

View File

@@ -59,6 +59,7 @@ import com.android.systemui.Gefingerpoken;
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor;
import com.android.systemui.classifier.Classifier;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
@@ -118,7 +119,6 @@ import com.android.systemui.statusbar.phone.HeadsUpTouchHelper;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -141,7 +141,7 @@ import javax.inject.Named;
/**
* Controller for {@link NotificationStackScrollLayout}.
*/
@CentralSurfacesComponent.CentralSurfacesScope
@SysUISingleton
public class NotificationStackScrollLayoutController {
private static final String TAG = "StackScrollerController";
private static final boolean DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG);
@@ -1462,7 +1462,7 @@ public class NotificationStackScrollLayoutController {
return mNotificationRoundnessManager;
}
NotificationListContainer getNotificationListContainer() {
public NotificationListContainer getNotificationListContainer() {
return mNotificationListContainer;
}

View File

@@ -1,32 +0,0 @@
/*
* Copyright (C) 2022 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.statusbar.notification.stack;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import dagger.Module;
import dagger.Provides;
@Module
public abstract class NotificationStackScrollLayoutListContainerModule {
@Provides
@CentralSurfacesComponent.CentralSurfacesScope
static NotificationListContainer provideListContainer(
NotificationStackScrollLayoutController nsslController) {
return nsslController.getNotificationListContainer();
}
}

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.stack.ui.viewmodel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.statusbar.notification.shelf.ui.viewmodel.NotificationShelfViewModel
@@ -33,6 +34,7 @@ class NotificationListViewModel(
object NotificationListViewModelModule {
@JvmStatic
@Provides
@SysUISingleton
fun maybeProvideViewModel(
featureFlags: FeatureFlags,
shelfViewModel: Provider<NotificationShelfViewModel>,

View File

@@ -312,7 +312,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
private final DeviceStateManager mDeviceStateManager;
private CentralSurfacesCommandQueueCallbacks mCommandQueueCallbacks;
private float mTransitionToFullShadeProgress = 0f;
private NotificationListContainer mNotifListContainer;
private final NotificationListContainer mNotifListContainer;
private boolean mIsShortcutListSearchEnabled;
private final KeyguardStateController.Callback mKeyguardStateControllerCallback =
@@ -660,8 +660,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
private final ActivityIntentHelper mActivityIntentHelper;
@VisibleForTesting
protected NotificationStackScrollLayoutController mStackScrollerController;
private final NotificationStackScrollLayoutController mStackScrollerController;
private final ColorExtractor.OnColorsChangedListener mOnColorsChangedListener =
(extractor, which) -> updateTheme();
@@ -749,6 +748,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
ConfigurationController configurationController,
NotificationShadeWindowController notificationShadeWindowController,
NotificationShelfController notificationShelfController,
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
DozeParameters dozeParameters,
ScrimController scrimController,
Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
@@ -849,6 +849,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mConfigurationController = configurationController;
mNotificationShadeWindowController = notificationShadeWindowController;
mNotificationShelfController = notificationShelfController;
mStackScrollerController = notificationStackScrollLayoutController;
mStackScroller = mStackScrollerController.getView();
mNotifListContainer = mStackScrollerController.getNotificationListContainer();
mDozeServiceHost = dozeServiceHost;
mPowerManager = powerManager;
mDozeParameters = dozeParameters;
@@ -1658,12 +1661,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mShadeController.setNotificationPanelViewController(npvc);
mShadeController.setNotificationShadeWindowViewController(
mNotificationShadeWindowViewController);
mStackScrollerController =
mCentralSurfacesComponent.getNotificationStackScrollLayoutController();
mQsController = mCentralSurfacesComponent.getQuickSettingsController();
mBackActionInteractor.setup(mQsController, mShadeSurface);
mStackScroller = mStackScrollerController.getView();
mNotifListContainer = mCentralSurfacesComponent.getNotificationListContainer();
mPresenter = mCentralSurfacesComponent.getNotificationPresenter();
mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();
@@ -3369,7 +3368,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
protected IStatusBarService mBarService;
// all notifications
protected NotificationStackScrollLayout mStackScroller;
private final NotificationStackScrollLayout mStackScroller;
protected AccessibilityManager mAccessibilityManager;

View File

@@ -28,9 +28,6 @@ import com.android.systemui.shade.QuickSettingsController;
import com.android.systemui.shade.ShadeHeaderController;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutListContainerModule;
import com.android.systemui.statusbar.phone.CentralSurfacesCommandQueueCallbacks;
import com.android.systemui.statusbar.phone.CentralSurfacesImpl;
import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener;
@@ -56,7 +53,6 @@ import javax.inject.Scope;
* outside the component. Should more items be moved *into* this component to avoid so many getters?
*/
@Subcomponent(modules = {
NotificationStackScrollLayoutListContainerModule.class,
StatusBarViewModule.class,
StatusBarNotificationActivityStarterModule.class,
StatusBarNotificationPresenterModule.class,
@@ -87,9 +83,6 @@ public interface CentralSurfacesComponent {
*/
NotificationShadeWindowView getNotificationShadeWindowView();
/** */
NotificationStackScrollLayoutController getNotificationStackScrollLayoutController();
/**
* Creates a NotificationShadeWindowViewController.
*/
@@ -128,6 +121,4 @@ public interface CentralSurfacesComponent {
NotificationActivityStarter getNotificationActivityStarter();
NotificationPresenter getNotificationPresenter();
NotificationListContainer getNotificationListContainer();
}

View File

@@ -31,8 +31,6 @@ import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModelModule;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModelModule;
import com.android.systemui.statusbar.phone.KeyguardBottomAreaView;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.StatusBarBoundsProvider;
@@ -60,11 +58,14 @@ import java.util.concurrent.Executor;
import javax.inject.Named;
@Module(subcomponents = StatusBarFragmentComponent.class,
includes = {
ActivatableNotificationViewModelModule.class,
NotificationListViewModelModule.class,
})
/**
* A module for {@link CentralSurfacesComponent.CentralSurfacesScope} components.
*
* @deprecated CentralSurfacesScope will be removed shortly (b/277762009). Classes should be
* annotated with @SysUISingleton instead.
*/
@Module(subcomponents = StatusBarFragmentComponent.class)
@Deprecated
public abstract class StatusBarViewModule {
public static final String STATUS_BAR_FRAGMENT = "status_bar_fragment";

View File

@@ -510,6 +510,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
configurationController,
mNotificationShadeWindowController,
mNotificationShelfController,
mStackScrollerController,
mDozeParameters,
mScrimController,
mLockscreenWallpaperLazy,
@@ -593,8 +594,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
mCentralSurfaces.mPresenter = mNotificationPresenter;
mCentralSurfaces.mKeyguardIndicationController = mKeyguardIndicationController;
mCentralSurfaces.mBarService = mBarService;
mCentralSurfaces.mStackScrollerController = mStackScrollerController;
mCentralSurfaces.mStackScroller = mStackScroller;
mCentralSurfaces.mGestureWakeLock = mPowerManager.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "sysui:GestureWakeLock");
mCentralSurfaces.startKeyguard();