• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.recordissue
18 
19 import com.android.systemui.Flags
20 import com.android.systemui.qs.QsEventLogger
21 import com.android.systemui.qs.pipeline.shared.TileSpec
22 import com.android.systemui.qs.shared.model.TileCategory
23 import com.android.systemui.qs.tileimpl.QSTileImpl
24 import com.android.systemui.qs.tiles.RecordIssueTile
25 import com.android.systemui.qs.tiles.base.shared.model.QSTileConfig
26 import com.android.systemui.qs.tiles.base.shared.model.QSTileUIConfig
27 import com.android.systemui.qs.tiles.base.ui.viewmodel.QSTileViewModel
28 import com.android.systemui.qs.tiles.base.ui.viewmodel.QSTileViewModelFactory
29 import com.android.systemui.qs.tiles.base.ui.viewmodel.StubQSTileViewModel
30 import com.android.systemui.qs.tiles.impl.irecording.data.model.IssueRecordingModel
31 import com.android.systemui.qs.tiles.impl.irecording.domain.interactor.IssueRecordingDataInteractor
32 import com.android.systemui.qs.tiles.impl.irecording.domain.interactor.IssueRecordingUserActionInteractor
33 import com.android.systemui.qs.tiles.impl.irecording.ui.mapper.IssueRecordingMapper
34 import com.android.systemui.res.R
35 import dagger.Binds
36 import dagger.Module
37 import dagger.Provides
38 import dagger.multibindings.IntoMap
39 import dagger.multibindings.StringKey
40 
41 @Module
42 interface RecordIssueModule {
43     /** Inject RecordIssueTile into tileMap in QSModule */
44     @Binds
45     @IntoMap
46     @StringKey(TILE_SPEC)
bindRecordIssueTilenull47     fun bindRecordIssueTile(recordIssueTile: RecordIssueTile): QSTileImpl<*>
48 
49     companion object {
50 
51         const val TILE_SPEC = "record_issue"
52 
53         @Provides
54         @IntoMap
55         @StringKey(TILE_SPEC)
56         fun provideRecordIssueTileConfig(uiEventLogger: QsEventLogger): QSTileConfig =
57             QSTileConfig(
58                 tileSpec = TileSpec.create(TILE_SPEC),
59                 uiConfig =
60                     QSTileUIConfig.Resource(
61                         iconRes = R.drawable.qs_record_issue_icon_off,
62                         labelRes = R.string.qs_record_issue_label,
63                     ),
64                 instanceId = uiEventLogger.getNewInstanceId(),
65                 category = TileCategory.UTILITIES,
66             )
67 
68         /** Inject FlashlightTile into tileViewModelMap in QSModule */
69         @Provides
70         @IntoMap
71         @StringKey(TILE_SPEC)
72         fun provideIssueRecordingTileViewModel(
73             factory: QSTileViewModelFactory.Static<IssueRecordingModel>,
74             mapper: IssueRecordingMapper,
75             stateInteractor: IssueRecordingDataInteractor,
76             userActionInteractor: IssueRecordingUserActionInteractor,
77         ): QSTileViewModel =
78             if (Flags.qsNewTilesFuture())
79                 factory.create(
80                     TileSpec.create(TILE_SPEC),
81                     userActionInteractor,
82                     stateInteractor,
83                     mapper,
84                 )
85             else StubQSTileViewModel
86     }
87 }
88