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.NotificationVisibilityProviderImpl; 42 import com.android.systemui.statusbar.notification.collection.provider.SeenNotificationsProviderModule; 43 import com.android.systemui.statusbar.notification.collection.provider.VisibilityLocationProviderDelegator; 44 import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager; 45 import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl; 46 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; 47 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManagerImpl; 48 import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager; 49 import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource; 50 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; 51 import com.android.systemui.statusbar.notification.icon.ConversationIconManager; 52 import com.android.systemui.statusbar.notification.icon.IconManager; 53 import com.android.systemui.statusbar.notification.init.NotificationsController; 54 import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl; 55 import com.android.systemui.statusbar.notification.init.NotificationsControllerStub; 56 import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProviderModule; 57 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; 58 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl; 59 import com.android.systemui.statusbar.notification.logging.NotificationLogger; 60 import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger; 61 import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerImpl; 62 import com.android.systemui.statusbar.notification.row.NotificationGutsManager; 63 import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback; 64 import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager; 65 import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm; 66 import com.android.systemui.statusbar.phone.KeyguardBypassController; 67 68 import java.util.concurrent.Executor; 69 70 import javax.inject.Provider; 71 72 import dagger.Binds; 73 import dagger.Module; 74 import dagger.Provides; 75 76 /** 77 * Dagger Module for classes found within the com.android.systemui.statusbar.notification package. 78 */ 79 @Module(includes = { 80 CoordinatorsModule.class, 81 KeyguardNotificationVisibilityProviderModule.class, 82 SeenNotificationsProviderModule.class, 83 ShadeEventsModule.class, 84 NotifPipelineChoreographerModule.class, 85 NotificationSectionHeadersModule.class, 86 }) 87 public interface NotificationsModule { 88 @Binds bindSectionProvider(NotificationSectionsManager impl)89 StackScrollAlgorithm.SectionProvider bindSectionProvider(NotificationSectionsManager impl); 90 91 @Binds bindBypassController(KeyguardBypassController impl)92 StackScrollAlgorithm.BypassController bindBypassController(KeyguardBypassController impl); 93 94 /** Provides an instance of {@link NotifGutsViewManager} */ 95 @Binds bindNotifGutsViewManager(NotificationGutsManager notificationGutsManager)96 NotifGutsViewManager bindNotifGutsViewManager(NotificationGutsManager notificationGutsManager); 97 98 /** Provides an instance of {@link VisibilityLocationProvider} */ 99 @Binds bindVisibilityLocationProvider( VisibilityLocationProviderDelegator visibilityLocationProviderDelegator)100 VisibilityLocationProvider bindVisibilityLocationProvider( 101 VisibilityLocationProviderDelegator visibilityLocationProviderDelegator); 102 103 /** Provides an instance of {@link NotificationLogger} */ 104 @SysUISingleton 105 @Provides provideNotificationLogger( NotificationListener notificationListener, @UiBackground Executor uiBgExecutor, NotifLiveDataStore notifLiveDataStore, NotificationVisibilityProvider visibilityProvider, NotifPipeline notifPipeline, StatusBarStateController statusBarStateController, ShadeExpansionStateManager shadeExpansionStateManager, NotificationLogger.ExpansionStateLogger expansionStateLogger, NotificationPanelLogger notificationPanelLogger)106 static NotificationLogger provideNotificationLogger( 107 NotificationListener notificationListener, 108 @UiBackground Executor uiBgExecutor, 109 NotifLiveDataStore notifLiveDataStore, 110 NotificationVisibilityProvider visibilityProvider, 111 NotifPipeline notifPipeline, 112 StatusBarStateController statusBarStateController, 113 ShadeExpansionStateManager shadeExpansionStateManager, 114 NotificationLogger.ExpansionStateLogger expansionStateLogger, 115 NotificationPanelLogger notificationPanelLogger) { 116 return new NotificationLogger( 117 notificationListener, 118 uiBgExecutor, 119 notifLiveDataStore, 120 visibilityProvider, 121 notifPipeline, 122 statusBarStateController, 123 shadeExpansionStateManager, 124 expansionStateLogger, 125 notificationPanelLogger); 126 } 127 128 /** Provides an instance of {@link NotificationPanelLogger} */ 129 @SysUISingleton 130 @Provides provideNotificationPanelLogger()131 static NotificationPanelLogger provideNotificationPanelLogger() { 132 return new NotificationPanelLoggerImpl(); 133 } 134 135 /** Provides an instance of {@link GroupMembershipManager} */ 136 @SysUISingleton 137 @Provides provideGroupMembershipManager()138 static GroupMembershipManager provideGroupMembershipManager() { 139 return new GroupMembershipManagerImpl(); 140 } 141 142 /** Provides an instance of {@link GroupExpansionManager} */ 143 @Binds provideGroupExpansionManager(GroupExpansionManagerImpl impl)144 GroupExpansionManager provideGroupExpansionManager(GroupExpansionManagerImpl impl); 145 146 /** Initializes the notification data pipeline (can be disabled via config). */ 147 @SysUISingleton 148 @Provides provideNotificationsController( Context context, Provider<NotificationsControllerImpl> realController, Provider<NotificationsControllerStub> stubController)149 static NotificationsController provideNotificationsController( 150 Context context, 151 Provider<NotificationsControllerImpl> realController, 152 Provider<NotificationsControllerStub> stubController) { 153 if (context.getResources().getBoolean(R.bool.config_renderNotifications)) { 154 return realController.get(); 155 } else { 156 return stubController.get(); 157 } 158 } 159 160 /** 161 * Provide the active notification collection managing the notifications to render. 162 */ 163 @Binds provideCommonNotifCollection(NotifPipeline pipeline)164 CommonNotifCollection provideCommonNotifCollection(NotifPipeline pipeline); 165 166 /** 167 * Provide the object which can be used to obtain NotificationVisibility objects. 168 */ 169 @Binds provideNotificationVisibilityProvider( NotificationVisibilityProviderImpl impl)170 NotificationVisibilityProvider provideNotificationVisibilityProvider( 171 NotificationVisibilityProviderImpl impl); 172 173 /** 174 * Provide the active implementation for presenting notifications. 175 */ 176 @Binds provideNotifShadeEventSource(ShadeEventCoordinator shadeEventCoordinator)177 NotifShadeEventSource provideNotifShadeEventSource(ShadeEventCoordinator shadeEventCoordinator); 178 179 /** 180 * Provide a dismissal callback that's triggered when a user manually dismissed a notification 181 * from the notification shade or it gets auto-cancelled by click. 182 */ 183 @Binds provideOnUserInteractionCallback(OnUserInteractionCallbackImpl impl)184 OnUserInteractionCallback provideOnUserInteractionCallback(OnUserInteractionCallbackImpl impl); 185 186 /** */ 187 @Binds bindNotificationInterruptStateProvider( NotificationInterruptStateProviderImpl notificationInterruptStateProviderImpl)188 NotificationInterruptStateProvider bindNotificationInterruptStateProvider( 189 NotificationInterruptStateProviderImpl notificationInterruptStateProviderImpl); 190 191 /** */ 192 @Binds bindNotifInflater(NotifInflaterImpl notifInflaterImpl)193 NotifInflater bindNotifInflater(NotifInflaterImpl notifInflaterImpl); 194 195 /** */ 196 @Binds bindConversationIconManager(IconManager iconManager)197 ConversationIconManager bindConversationIconManager(IconManager iconManager); 198 199 /** */ 200 @Binds bindBindEventManagerImpl(BindEventManagerImpl bindEventManagerImpl)201 BindEventManager bindBindEventManagerImpl(BindEventManagerImpl bindEventManagerImpl); 202 203 /** */ 204 @Binds bindNotifLiveDataStore(NotifLiveDataStoreImpl notifLiveDataStoreImpl)205 NotifLiveDataStore bindNotifLiveDataStore(NotifLiveDataStoreImpl notifLiveDataStoreImpl); 206 } 207