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.media.dagger;
18 
19 import com.android.systemui.dagger.SysUISingleton;
20 import com.android.systemui.log.LogBuffer;
21 import com.android.systemui.log.LogBufferFactory;
22 import com.android.systemui.media.controls.pipeline.MediaDataManager;
23 import com.android.systemui.media.controls.ui.MediaHierarchyManager;
24 import com.android.systemui.media.controls.ui.MediaHost;
25 import com.android.systemui.media.controls.ui.MediaHostStatesManager;
26 import com.android.systemui.media.dream.dagger.MediaComplicationComponent;
27 import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper;
28 import com.android.systemui.media.taptotransfer.MediaTttFlags;
29 import com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogBuffer;
30 import com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogBuffer;
31 
32 import dagger.Lazy;
33 import dagger.Module;
34 import dagger.Provides;
35 
36 import java.util.Optional;
37 
38 import javax.inject.Named;
39 
40 /** Dagger module for the media package. */
41 @Module(subcomponents = {
42         MediaComplicationComponent.class,
43 })
44 public interface MediaModule {
45     String QS_PANEL = "media_qs_panel";
46     String QUICK_QS_PANEL = "media_quick_qs_panel";
47     String KEYGUARD = "media_keyguard";
48     String DREAM = "dream";
49 
50     /** */
51     @Provides
52     @SysUISingleton
53     @Named(QS_PANEL)
providesQSMediaHost(MediaHost.MediaHostStateHolder stateHolder, MediaHierarchyManager hierarchyManager, MediaDataManager dataManager, MediaHostStatesManager statesManager)54     static MediaHost providesQSMediaHost(MediaHost.MediaHostStateHolder stateHolder,
55             MediaHierarchyManager hierarchyManager, MediaDataManager dataManager,
56             MediaHostStatesManager statesManager) {
57         return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
58     }
59 
60     /** */
61     @Provides
62     @SysUISingleton
63     @Named(QUICK_QS_PANEL)
providesQuickQSMediaHost(MediaHost.MediaHostStateHolder stateHolder, MediaHierarchyManager hierarchyManager, MediaDataManager dataManager, MediaHostStatesManager statesManager)64     static MediaHost providesQuickQSMediaHost(MediaHost.MediaHostStateHolder stateHolder,
65             MediaHierarchyManager hierarchyManager, MediaDataManager dataManager,
66             MediaHostStatesManager statesManager) {
67         return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
68     }
69 
70     /** */
71     @Provides
72     @SysUISingleton
73     @Named(KEYGUARD)
providesKeyguardMediaHost(MediaHost.MediaHostStateHolder stateHolder, MediaHierarchyManager hierarchyManager, MediaDataManager dataManager, MediaHostStatesManager statesManager)74     static MediaHost providesKeyguardMediaHost(MediaHost.MediaHostStateHolder stateHolder,
75             MediaHierarchyManager hierarchyManager, MediaDataManager dataManager,
76             MediaHostStatesManager statesManager) {
77         return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
78     }
79 
80     /** */
81     @Provides
82     @SysUISingleton
83     @Named(DREAM)
providesDreamMediaHost(MediaHost.MediaHostStateHolder stateHolder, MediaHierarchyManager hierarchyManager, MediaDataManager dataManager, MediaHostStatesManager statesManager)84     static MediaHost providesDreamMediaHost(MediaHost.MediaHostStateHolder stateHolder,
85             MediaHierarchyManager hierarchyManager, MediaDataManager dataManager,
86             MediaHostStatesManager statesManager) {
87         return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
88     }
89 
90     /** Provides a logging buffer related to the media tap-to-transfer chip on the sender device. */
91     @Provides
92     @SysUISingleton
93     @MediaTttSenderLogBuffer
provideMediaTttSenderLogBuffer(LogBufferFactory factory)94     static LogBuffer provideMediaTttSenderLogBuffer(LogBufferFactory factory) {
95         return factory.create("MediaTttSender", 30);
96     }
97 
98     /**
99      * Provides a logging buffer related to the media tap-to-transfer chip on the receiver device.
100      */
101     @Provides
102     @SysUISingleton
103     @MediaTttReceiverLogBuffer
provideMediaTttReceiverLogBuffer(LogBufferFactory factory)104     static LogBuffer provideMediaTttReceiverLogBuffer(LogBufferFactory factory) {
105         return factory.create("MediaTttReceiver", 20);
106     }
107 
108     /** */
109     @Provides
110     @SysUISingleton
providesMediaTttCommandLineHelper( MediaTttFlags mediaTttFlags, Lazy<MediaTttCommandLineHelper> helperLazy)111     static Optional<MediaTttCommandLineHelper> providesMediaTttCommandLineHelper(
112             MediaTttFlags mediaTttFlags,
113             Lazy<MediaTttCommandLineHelper> helperLazy) {
114         if (!mediaTttFlags.isMediaTttEnabled()) {
115             return Optional.empty();
116         }
117         return Optional.of(helperLazy.get());
118     }
119 }
120