1 /* 2 * Copyright (C) 2022 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.screenrecord 18 19 import com.android.systemui.qs.QsEventLogger 20 import com.android.systemui.qs.pipeline.shared.TileSpec 21 import com.android.systemui.qs.tileimpl.QSTileImpl 22 import com.android.systemui.qs.tiles.ScreenRecordTile 23 import com.android.systemui.qs.tiles.base.interactor.QSTileAvailabilityInteractor 24 import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory 25 import com.android.systemui.qs.tiles.impl.screenrecord.domain.interactor.ScreenRecordTileDataInteractor 26 import com.android.systemui.qs.tiles.impl.screenrecord.domain.interactor.ScreenRecordTileUserActionInteractor 27 import com.android.systemui.qs.tiles.impl.screenrecord.domain.ui.ScreenRecordTileMapper 28 import com.android.systemui.qs.tiles.viewmodel.QSTileConfig 29 import com.android.systemui.qs.tiles.viewmodel.QSTileUIConfig 30 import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel 31 import com.android.systemui.res.R 32 import com.android.systemui.screenrecord.data.model.ScreenRecordModel 33 import com.android.systemui.screenrecord.data.repository.ScreenRecordRepository 34 import com.android.systemui.screenrecord.data.repository.ScreenRecordRepositoryImpl 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 ScreenRecordModule { 43 bindScreenRecordRepositorynull44 @Binds fun bindScreenRecordRepository(impl: ScreenRecordRepositoryImpl): ScreenRecordRepository 45 46 /** Inject ScreenRecordTile into tileMap in QSModule */ 47 @Binds 48 @IntoMap 49 @StringKey(ScreenRecordTile.TILE_SPEC) 50 fun bindScreenRecordTile(screenRecordTile: ScreenRecordTile): QSTileImpl<*> 51 52 @Binds 53 @IntoMap 54 @StringKey(SCREEN_RECORD_TILE_SPEC) 55 fun provideScreenRecordAvailabilityInteractor( 56 impl: ScreenRecordTileDataInteractor 57 ): QSTileAvailabilityInteractor 58 59 companion object { 60 private const val SCREEN_RECORD_TILE_SPEC = "screenrecord" 61 62 @Provides 63 @IntoMap 64 @StringKey(SCREEN_RECORD_TILE_SPEC) 65 fun provideScreenRecordTileConfig(uiEventLogger: QsEventLogger): QSTileConfig = 66 QSTileConfig( 67 tileSpec = TileSpec.create(SCREEN_RECORD_TILE_SPEC), 68 uiConfig = 69 QSTileUIConfig.Resource( 70 iconRes = R.drawable.qs_screen_record_icon_off, 71 labelRes = R.string.quick_settings_screen_record_label, 72 ), 73 instanceId = uiEventLogger.getNewInstanceId(), 74 ) 75 76 /** Inject ScreenRecord Tile into tileViewModelMap in QSModule */ 77 @Provides 78 @IntoMap 79 @StringKey(SCREEN_RECORD_TILE_SPEC) 80 fun provideScreenRecordTileViewModel( 81 factory: QSTileViewModelFactory.Static<ScreenRecordModel>, 82 mapper: ScreenRecordTileMapper, 83 stateInteractor: ScreenRecordTileDataInteractor, 84 userActionInteractor: ScreenRecordTileUserActionInteractor 85 ): QSTileViewModel = 86 factory.create( 87 TileSpec.create(SCREEN_RECORD_TILE_SPEC), 88 userActionInteractor, 89 stateInteractor, 90 mapper, 91 ) 92 } 93 } 94