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.qrcodescanner.dagger 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.QRCodeScannerTile 25 import com.android.systemui.qs.tiles.base.interactor.QSTileAvailabilityInteractor 26 import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory 27 import com.android.systemui.qs.tiles.impl.qr.domain.interactor.QRCodeScannerTileDataInteractor 28 import com.android.systemui.qs.tiles.impl.qr.domain.interactor.QRCodeScannerTileUserActionInteractor 29 import com.android.systemui.qs.tiles.impl.qr.domain.model.QRCodeScannerTileModel 30 import com.android.systemui.qs.tiles.impl.qr.ui.QRCodeScannerTileMapper 31 import com.android.systemui.qs.tiles.viewmodel.QSTileConfig 32 import com.android.systemui.qs.tiles.viewmodel.QSTileUIConfig 33 import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel 34 import com.android.systemui.qs.tiles.viewmodel.StubQSTileViewModel 35 import com.android.systemui.res.R 36 import dagger.Binds 37 import dagger.Module 38 import dagger.Provides 39 import dagger.multibindings.IntoMap 40 import dagger.multibindings.StringKey 41 42 @Module 43 interface QRCodeScannerModule { 44 45 /** */ 46 @Binds 47 @IntoMap 48 @StringKey(QRCodeScannerTile.TILE_SPEC) bindQRCodeScannerTilenull49 fun bindQRCodeScannerTile(qrCodeScannerTile: QRCodeScannerTile): QSTileImpl<*> 50 51 @Binds 52 @IntoMap 53 @StringKey(QR_CODE_SCANNER_TILE_SPEC) 54 fun provideQrCodeScannerAvailabilityInteractor( 55 impl: QRCodeScannerTileDataInteractor 56 ): QSTileAvailabilityInteractor 57 58 companion object { 59 const val QR_CODE_SCANNER_TILE_SPEC = "qr_code_scanner" 60 61 @Provides 62 @IntoMap 63 @StringKey(QR_CODE_SCANNER_TILE_SPEC) 64 fun provideQRCodeScannerTileConfig(uiEventLogger: QsEventLogger): QSTileConfig = 65 QSTileConfig( 66 tileSpec = TileSpec.create(QR_CODE_SCANNER_TILE_SPEC), 67 uiConfig = 68 QSTileUIConfig.Resource( 69 iconRes = R.drawable.ic_qr_code_scanner, 70 labelRes = R.string.qr_code_scanner_title, 71 ), 72 instanceId = uiEventLogger.getNewInstanceId(), 73 category = TileCategory.UTILITIES, 74 ) 75 76 /** Inject QR Code Scanner Tile into tileViewModelMap in QSModule. */ 77 @Provides 78 @IntoMap 79 @StringKey(QR_CODE_SCANNER_TILE_SPEC) 80 fun provideQRCodeScannerTileViewModel( 81 factory: QSTileViewModelFactory.Static<QRCodeScannerTileModel>, 82 mapper: QRCodeScannerTileMapper, 83 stateInteractor: QRCodeScannerTileDataInteractor, 84 userActionInteractor: QRCodeScannerTileUserActionInteractor 85 ): QSTileViewModel = 86 if (Flags.qsNewTilesFuture()) 87 factory.create( 88 TileSpec.create(QR_CODE_SCANNER_TILE_SPEC), 89 userActionInteractor, 90 stateInteractor, 91 mapper, 92 ) 93 else StubQSTileViewModel 94 } 95 } 96