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