1 /*
2  * Copyright (C) 2023 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.volume.panel.domain
18 
19 import com.android.systemui.volume.panel.component.shared.model.VolumePanelComponents
20 import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope
21 import com.android.systemui.volume.panel.domain.interactor.ComponentsInteractor
22 import com.android.systemui.volume.panel.domain.interactor.ComponentsInteractorImpl
23 import com.android.systemui.volume.panel.shared.model.VolumePanelComponentKey
24 import dagger.Binds
25 import dagger.Module
26 import dagger.Provides
27 
28 /** Domain layer bindings module. */
29 @Module
30 interface DomainModule {
31 
bindComponentsInteractornull32     @Binds fun bindComponentsInteractor(impl: ComponentsInteractorImpl): ComponentsInteractor
33 
34     @Binds
35     fun bindDefaultComponentAvailabilityCriteria(
36         impl: AlwaysAvailableCriteria
37     ): ComponentAvailabilityCriteria
38 
39     companion object {
40 
41         /**
42          * Enabled components collection. These are the components processed by Volume Panel logic
43          * and possibly shown in the UI.
44          *
45          * There should be a binding in [VolumePanelScope] for [ComponentAvailabilityCriteria] and
46          * [com.android.systemui.volume.panel.ui.VolumePanelComponent] for each component from this
47          * collection.
48          */
49         @Provides
50         @VolumePanelScope
51         fun provideEnabledComponents(): Collection<VolumePanelComponentKey> {
52             return setOf(
53                 VolumePanelComponents.ANC,
54                 VolumePanelComponents.SPATIAL_AUDIO,
55                 VolumePanelComponents.CAPTIONING,
56                 VolumePanelComponents.VOLUME_SLIDERS,
57                 VolumePanelComponents.MEDIA_OUTPUT,
58                 VolumePanelComponents.BOTTOM_BAR,
59             )
60         }
61     }
62 }
63