diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsItemsFactory.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsItemsFactory.kt index bde3cf116f..53b58cdd25 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsItemsFactory.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsItemsFactory.kt @@ -38,6 +38,7 @@ internal class AppSettingsItemsFactory { isChecked: Boolean, isEnabled: Boolean, onCheckedChange: (Boolean) -> Unit, + onDisabledClick: () -> Unit, ): Item.Switch { return Item.Switch( id = ID_USE_BIOMETRICS_SWITCH, @@ -49,6 +50,7 @@ internal class AppSettingsItemsFactory { isEnabled = isEnabled, isChecked = isChecked, onCheckedChange = onCheckedChange, + onDisabledClick = onDisabledClick, ) } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreenState.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreenState.kt index 108b30fec8..f73524e227 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreenState.kt @@ -35,6 +35,7 @@ internal sealed class AppSettingsScreenState { val isEnabled: Boolean, val isChecked: Boolean, val onCheckedChange: (Boolean) -> Unit, + val onDisabledClick: () -> Unit = {}, ) : Item() data class Button( diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsSwitchItem.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsSwitchItem.kt index 153b026e85..29791e12c7 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsSwitchItem.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsSwitchItem.kt @@ -1,12 +1,16 @@ package com.tangem.tap.features.details.ui.appsettings.components import android.content.res.Configuration +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -39,35 +43,49 @@ internal fun SettingsSwitchItem(item: Item.Switch, modifier: Modifier = Modifier }, ) - Row( - modifier = modifier, - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Column( - modifier = Modifier.weight(weight = .9f), - verticalArrangement = Arrangement.Center, + Box(modifier = modifier) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, ) { - Text( - text = item.title.resolveReference(), - style = TangemTheme.typography.subtitle1, - color = titleTextColor, - ) - SpacerH4() - Text( - text = item.description.resolveReference(), - style = TangemTheme.typography.body2, - color = descriptionTextColor, + Column( + modifier = Modifier.weight(weight = .9f), + verticalArrangement = Arrangement.Center, + ) { + Text( + text = item.title.resolveReference(), + style = TangemTheme.typography.subtitle1, + color = titleTextColor, + ) + SpacerH4() + Text( + text = item.description.resolveReference(), + style = TangemTheme.typography.body2, + color = descriptionTextColor, + ) + } + SpacerW32() + TangemSwitch( + checked = item.isChecked, + enabled = item.isEnabled, + onCheckedChange = item.onCheckedChange, + checkedColor = TangemTheme.colors.control.checked, + uncheckedColor = TangemTheme.colors.icon.inactive, + ) + } + + if (item.isEnabled.not()) { + Box( + Modifier + .matchParentSize() + .clickable( + enabled = true, + interactionSource = remember { MutableInteractionSource() }, + indication = null, + onClick = item.onDisabledClick, + ), ) } - SpacerW32() - TangemSwitch( - checked = item.isChecked, - enabled = item.isEnabled, - onCheckedChange = item.onCheckedChange, - checkedColor = TangemTheme.colors.control.checked, - uncheckedColor = TangemTheme.colors.icon.inactive, - ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/model/AppSettingsModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/model/AppSettingsModel.kt index 2df9cb3974..c5cc2f6f36 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/model/AppSettingsModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/model/AppSettingsModel.kt @@ -5,6 +5,9 @@ import com.tangem.common.routing.AppRoute import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.model.Model +import com.tangem.core.decompose.ui.UiMessageSender +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.message.DialogMessage import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.domain.apptheme.model.AppThemeMode @@ -34,6 +37,7 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.JobHolder import com.tangem.utils.coroutines.saveIn import com.tangem.utils.extensions.addIf +import com.tangem.wallet.R import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.* @@ -56,6 +60,7 @@ internal class AppSettingsModel @Inject constructor( private val settingsRepository: SettingsRepository, private val appSettingsItemsAnalyticsSender: AppSettingsItemsAnalyticsSender, private val hotWalletFeatureToggles: HotWalletFeatureToggles, + private val uiMessageSender: UiMessageSender, ) : Model(), StoreSubscriber { private val itemsFactory = AppSettingsItemsFactory() @@ -124,6 +129,7 @@ internal class AppSettingsModel @Inject constructor( isChecked = state.useBiometricAuthentication, isEnabled = canUseBiometrics, onCheckedChange = ::onBiometricAuthenticationToggled, + onDisabledClick = ::onBiometricAuthenticationDisabledClicked, ), ) @@ -224,6 +230,10 @@ internal class AppSettingsModel @Inject constructor( } } + private fun onBiometricAuthenticationDisabledClicked() { + uiMessageSender.send(DialogMessage(message = resourceReference(R.string.app_settings_access_code_warning))) + } + private fun onRequireAccessCodeToggled(isChecked: Boolean) { // TODO : Uncomment and implement analytics event when ready // val param = AnalyticsParam.OnOffState(isChecked)