1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.statusbar.notification.dagger; 18 19 import android.content.Context; 20 21 import com.android.systemui.R; 22 import com.android.systemui.dagger.SysUISingleton; 23 import com.android.systemui.dagger.qualifiers.UiBackground; 24 import com.android.systemui.plugins.statusbar.StatusBarStateController; 25 import com.android.systemui.shade.ShadeEventsModule; 26 import com.android.systemui.shade.ShadeExpansionStateManager; 27 import com.android.systemui.statusbar.NotificationListener; 28 import com.android.systemui.statusbar.notification.VisibilityLocationProvider; 29 import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl; 30 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore; 31 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreImpl; 32 import com.android.systemui.statusbar.notification.collection.NotifPipeline; 33 import com.android.systemui.statusbar.notification.collection.NotifPipelineChoreographerModule; 34 import com.android.systemui.statusbar.notification.collection.coordinator.ShadeEventCoordinator; 35 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorsModule; 36 import com.android.systemui.statusbar.notification.collection.inflation.BindEventManager; 37 import com.android.systemui.statusbar.notification.collection.inflation.BindEventManagerImpl; 38 import com.android.systemui.statusbar.notification.collection.inflation.NotifInflater; 39 import com.android.systemui.statusbar.notification.collection.inflation.OnUserInteractionCallbackImpl; 40 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; 41 import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider; 42 import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProviderImpl; 43 import com.android.systemui.statusbar.notification.collection.provider.NotificationVisibilityProviderImpl; 44 import com.android.systemui.statusbar.notification.collection.provider.SeenNotificationsProviderModule; 45 import com.android.systemui.statusbar.notification.collection.provider.VisibilityLocationProviderDelegator; 46 import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager; 47 import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl; 48 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; 49 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManagerImpl; 50 import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager; 51 import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource; 52 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; 53 import com.android.systemui.statusbar.notification.icon.ConversationIconManager; 54 import com.android.systemui.statusbar.notification.icon.IconManager; 55 import com.android.systemui.statusbar.notification.init.NotificationsController; 56 import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl; 57 import com.android.systemui.statusbar.notification.init.NotificationsControllerStub; 58 import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProviderModule; 59 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; 60 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl; 61 import com.android.systemui.statusbar.notification.logging.NotificationLogger; 62 import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger; 63 import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerImpl; 64 import com.android.systemui.statusbar.notification.row.NotificationGutsManager; 65 import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback; 66 import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModelModule; 67 import com.android.systemui.statusbar.notification.stack.NotificationListContainer; 68 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager; 69 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController; 70 import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm; 71 import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModelModule; 72 import com.android.systemui.statusbar.phone.KeyguardBypassController; 73 74 import dagger.Binds; 75 import dagger.Module; 76 import dagger.Provides; 77 78 import java.util.concurrent.Executor; 79 80 import javax.inject.Provider; 81 82 /** 83 * Dagger Module for classes found within the com.android.systemui.statusbar.notification package. 84 */ 85 @Module(includes = { 86 CoordinatorsModule.class, 87 KeyguardNotificationVisibilityProviderModule.class, 88 SeenNotificationsProviderModule.class, 89 ShadeEventsModule.class, 90 NotifPipelineChoreographerModule.class, 91 NotificationSectionHeadersModule.class, 92 NotificationListViewModelModule.class, 93 ActivatableNotificationViewModelModule.class, 94 NotificationMemoryModule.class, 95 }) 96 public interface NotificationsModule { 97 @Binds bindSectionProvider(NotificationSectionsManager impl)98 StackScrollAlgorithm.SectionProvider bindSectionProvider(NotificationSectionsManager impl); 99 100 @Binds bindBypassController(KeyguardBypassController impl)101 StackScrollAlgorithm.BypassController bindBypassController(KeyguardBypassController impl); 102 103 /** Provides an instance of {@link NotifGutsViewManager} */ 104 @Binds bindNotifGutsViewManager(NotificationGutsManager notificationGutsManager)105 NotifGutsViewManager bindNotifGutsViewManager(NotificationGutsManager notificationGutsManager); 106 107 /** Provides an instance of {@link VisibilityLocationProvider} */ 108 @Binds bindVisibilityLocationProvider( VisibilityLocationProviderDelegator visibilityLocationProviderDelegator)109 VisibilityLocationProvider bindVisibilityLocationProvider( 110 VisibilityLocationProviderDelegator visibilityLocationProviderDelegator); 111 112 /** Provides an instance of {@link NotificationLogger} */ 113 @SysUISingleton 114 @Provides provideNotificationLogger( NotificationListener notificationListener, @UiBackground Executor uiBgExecutor, NotifLiveDataStore notifLiveDataStore, NotificationVisibilityProvider visibilityProvider, NotifPipeline notifPipeline, StatusBarStateController statusBarStateController, ShadeExpansionStateManager shadeExpansionStateManager, NotificationLogger.ExpansionStateLogger expansionStateLogger, NotificationPanelLogger notificationPanelLogger)115 static NotificationLogger provideNotificationLogger( 116 NotificationListener notificationListener, 117 @UiBackground Executor uiBgExecutor, 118 NotifLiveDataStore notifLiveDataStore, 119 NotificationVisibilityProvider visibilityProvider, 120 NotifPipeline notifPipeline, 121 StatusBarStateController statusBarStateController, 122 ShadeExpansionStateManager shadeExpansionStateManager, 123 NotificationLogger.ExpansionStateLogger expansionStateLogger, 124 NotificationPanelLogger notificationPanelLogger) { 125 return new NotificationLogger( 126 notificationListener, 127 uiBgExecutor, 128 notifLiveDataStore, 129 visibilityProvider, 130 notifPipeline, 131 statusBarStateController, 132 shadeExpansionStateManager, 133 expansionStateLogger, 134 notificationPanelLogger); 135 } 136 137 /** Provides an instance of {@link NotificationPanelLogger} */ 138 @SysUISingleton 139 @Provides provideNotificationPanelLogger()140 static NotificationPanelLogger provideNotificationPanelLogger() { 141 return new NotificationPanelLoggerImpl(); 142 } 143 144 /** Provides an instance of {@link GroupMembershipManager} */ 145 @SysUISingleton 146 @Provides provideGroupMembershipManager()147 static GroupMembershipManager provideGroupMembershipManager() { 148 return new GroupMembershipManagerImpl(); 149 } 150 151 /** Provides an instance of {@link GroupExpansionManager} */ 152 @Binds provideGroupExpansionManager(GroupExpansionManagerImpl impl)153 GroupExpansionManager provideGroupExpansionManager(GroupExpansionManagerImpl impl); 154 155 /** Initializes the notification data pipeline (can be disabled via config). */ 156 @SysUISingleton 157 @Provides provideNotificationsController( Context context, Provider<NotificationsControllerImpl> realController, Provider<NotificationsControllerStub> stubController)158 static NotificationsController provideNotificationsController( 159 Context context, 160 Provider<NotificationsControllerImpl> realController, 161 Provider<NotificationsControllerStub> stubController) { 162 if (context.getResources().getBoolean(R.bool.config_renderNotifications)) { 163 return realController.get(); 164 } else { 165 return stubController.get(); 166 } 167 } 168 169 /** Provides the container for the notification list. */ 170 @Provides 171 @SysUISingleton provideListContainer( NotificationStackScrollLayoutController nsslController)172 static NotificationListContainer provideListContainer( 173 NotificationStackScrollLayoutController nsslController) { 174 return nsslController.getNotificationListContainer(); 175 } 176 177 /** 178 * Provide the active notification collection managing the notifications to render. 179 */ 180 @Binds provideCommonNotifCollection(NotifPipeline pipeline)181 CommonNotifCollection provideCommonNotifCollection(NotifPipeline pipeline); 182 183 /** 184 * Provide the object which can be used to obtain dismissibility of a Notification. 185 */ 186 @Binds provideNotificationDismissibilityProvider( NotificationDismissibilityProviderImpl impl)187 NotificationDismissibilityProvider provideNotificationDismissibilityProvider( 188 NotificationDismissibilityProviderImpl impl); 189 190 /** 191 * Provide the object which can be used to obtain NotificationVisibility objects. 192 */ 193 @Binds provideNotificationVisibilityProvider( NotificationVisibilityProviderImpl impl)194 NotificationVisibilityProvider provideNotificationVisibilityProvider( 195 NotificationVisibilityProviderImpl impl); 196 197 /** 198 * Provide the active implementation for presenting notifications. 199 */ 200 @Binds provideNotifShadeEventSource(ShadeEventCoordinator shadeEventCoordinator)201 NotifShadeEventSource provideNotifShadeEventSource(ShadeEventCoordinator shadeEventCoordinator); 202 203 /** 204 * Provide a dismissal callback that's triggered when a user manually dismissed a notification 205 * from the notification shade or it gets auto-cancelled by click. 206 */ 207 @Binds provideOnUserInteractionCallback(OnUserInteractionCallbackImpl impl)208 OnUserInteractionCallback provideOnUserInteractionCallback(OnUserInteractionCallbackImpl impl); 209 210 /** */ 211 @Binds bindNotificationInterruptStateProvider( NotificationInterruptStateProviderImpl notificationInterruptStateProviderImpl)212 NotificationInterruptStateProvider bindNotificationInterruptStateProvider( 213 NotificationInterruptStateProviderImpl notificationInterruptStateProviderImpl); 214 215 /** */ 216 @Binds bindNotifInflater(NotifInflaterImpl notifInflaterImpl)217 NotifInflater bindNotifInflater(NotifInflaterImpl notifInflaterImpl); 218 219 /** */ 220 @Binds bindConversationIconManager(IconManager iconManager)221 ConversationIconManager bindConversationIconManager(IconManager iconManager); 222 223 /** */ 224 @Binds bindBindEventManagerImpl(BindEventManagerImpl bindEventManagerImpl)225 BindEventManager bindBindEventManagerImpl(BindEventManagerImpl bindEventManagerImpl); 226 227 /** */ 228 @Binds bindNotifLiveDataStore(NotifLiveDataStoreImpl notifLiveDataStoreImpl)229 NotifLiveDataStore bindNotifLiveDataStore(NotifLiveDataStoreImpl notifLiveDataStoreImpl); 230 } 231