• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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