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.dagger.SysUISingleton 20 import com.android.systemui.log.LogBuffer 21 import com.android.systemui.log.LogBufferFactory 22 import com.android.systemui.qs.QsEventLogger 23 import com.android.systemui.qs.pipeline.shared.TileSpec 24 import com.android.systemui.qs.shared.model.TileCategory 25 import com.android.systemui.qs.tileimpl.QSTileImpl 26 import com.android.systemui.qs.tiles.ScreenRecordTile 27 import com.android.systemui.qs.tiles.base.domain.interactor.QSTileAvailabilityInteractor 28 import com.android.systemui.qs.tiles.base.shared.model.QSTileConfig 29 import com.android.systemui.qs.tiles.base.shared.model.QSTileUIConfig 30 import com.android.systemui.qs.tiles.base.ui.viewmodel.QSTileViewModel 31 import com.android.systemui.qs.tiles.base.ui.viewmodel.QSTileViewModelFactory 32 import com.android.systemui.qs.tiles.impl.screenrecord.domain.interactor.ScreenRecordTileDataInteractor 33 import com.android.systemui.qs.tiles.impl.screenrecord.domain.interactor.ScreenRecordTileUserActionInteractor 34 import com.android.systemui.qs.tiles.impl.screenrecord.domain.ui.mapper.ScreenRecordTileMapper 35 import com.android.systemui.res.R 36 import com.android.systemui.screenrecord.data.model.ScreenRecordModel 37 import com.android.systemui.screenrecord.data.repository.ScreenRecordRepository 38 import com.android.systemui.screenrecord.data.repository.ScreenRecordRepositoryImpl 39 import dagger.Binds 40 import dagger.Module 41 import dagger.Provides 42 import dagger.multibindings.IntoMap 43 import dagger.multibindings.StringKey 44 45 @Module 46 interface ScreenRecordModule { 47 bindScreenRecordRepositorynull48 @Binds fun bindScreenRecordRepository(impl: ScreenRecordRepositoryImpl): ScreenRecordRepository 49 50 /** Inject ScreenRecordTile into tileMap in QSModule */ 51 @Binds 52 @IntoMap 53 @StringKey(ScreenRecordTile.TILE_SPEC) 54 fun bindScreenRecordTile(screenRecordTile: ScreenRecordTile): QSTileImpl<*> 55 56 @Binds 57 @IntoMap 58 @StringKey(SCREEN_RECORD_TILE_SPEC) 59 fun provideScreenRecordAvailabilityInteractor( 60 impl: ScreenRecordTileDataInteractor 61 ): QSTileAvailabilityInteractor 62 63 companion object { 64 private const val SCREEN_RECORD_TILE_SPEC = "screenrecord" 65 66 @Provides 67 @IntoMap 68 @StringKey(SCREEN_RECORD_TILE_SPEC) 69 fun provideScreenRecordTileConfig(uiEventLogger: QsEventLogger): QSTileConfig = 70 QSTileConfig( 71 tileSpec = TileSpec.create(SCREEN_RECORD_TILE_SPEC), 72 uiConfig = 73 QSTileUIConfig.Resource( 74 iconRes = R.drawable.qs_screen_record_icon_off, 75 labelRes = R.string.quick_settings_screen_record_label, 76 ), 77 instanceId = uiEventLogger.getNewInstanceId(), 78 category = TileCategory.DISPLAY, 79 ) 80 81 /** Inject ScreenRecord Tile into tileViewModelMap in QSModule */ 82 @Provides 83 @IntoMap 84 @StringKey(SCREEN_RECORD_TILE_SPEC) 85 fun provideScreenRecordTileViewModel( 86 factory: QSTileViewModelFactory.Static<ScreenRecordModel>, 87 mapper: ScreenRecordTileMapper, 88 stateInteractor: ScreenRecordTileDataInteractor, 89 userActionInteractor: ScreenRecordTileUserActionInteractor, 90 ): QSTileViewModel = 91 factory.create( 92 TileSpec.create(SCREEN_RECORD_TILE_SPEC), 93 userActionInteractor, 94 stateInteractor, 95 mapper, 96 ) 97 98 @Provides 99 @SysUISingleton 100 @RecordingControllerLog 101 fun provideRecordingControllerLogBuffer(factory: LogBufferFactory): LogBuffer { 102 return factory.create("RecordingControllerLog", 50) 103 } 104 } 105 } 106