1 /* 2 * Copyright (C) 2024 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.qs.tiles.impl.sensorprivacy.ui 18 19 import android.content.res.Resources 20 import com.android.systemui.common.shared.model.Icon 21 import com.android.systemui.dagger.qualifiers.Main 22 import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper 23 import com.android.systemui.qs.tiles.impl.sensorprivacy.domain.model.SensorPrivacyToggleTileModel 24 import com.android.systemui.qs.tiles.viewmodel.QSTileConfig 25 import com.android.systemui.qs.tiles.viewmodel.QSTileState 26 import com.android.systemui.res.R 27 import dagger.assisted.Assisted 28 import dagger.assisted.AssistedFactory 29 import dagger.assisted.AssistedInject 30 31 /** Maps [SensorPrivacyToggleTileModel] to [QSTileState]. */ 32 class SensorPrivacyToggleTileMapper 33 @AssistedInject 34 constructor( 35 @Main private val resources: Resources, 36 private val theme: Resources.Theme, 37 @Assisted private val sensorPrivacyTileResources: SensorPrivacyTileResources, 38 ) : QSTileDataToStateMapper<SensorPrivacyToggleTileModel> { 39 40 @AssistedFactory 41 interface Factory { createnull42 fun create( 43 sensorPrivacyTileResources: SensorPrivacyTileResources 44 ): SensorPrivacyToggleTileMapper 45 } 46 47 override fun map(config: QSTileConfig, data: SensorPrivacyToggleTileModel): QSTileState = 48 QSTileState.build(resources, theme, config.uiConfig) { 49 label = resources.getString(sensorPrivacyTileResources.getTileLabelRes()) 50 contentDescription = label 51 supportedActions = 52 setOf(QSTileState.UserAction.CLICK, QSTileState.UserAction.LONG_CLICK) 53 iconRes = sensorPrivacyTileResources.getIconRes(data.isBlocked) 54 icon = { Icon.Loaded(resources.getDrawable(iconRes!!, theme), null) } 55 56 sideViewIcon = QSTileState.SideViewIcon.None 57 58 if (data.isBlocked) { 59 activationState = QSTileState.ActivationState.INACTIVE 60 secondaryLabel = resources.getString(R.string.quick_settings_camera_mic_blocked) 61 } else { 62 activationState = QSTileState.ActivationState.ACTIVE 63 secondaryLabel = resources.getString(R.string.quick_settings_camera_mic_available) 64 } 65 } 66 } 67