Updated on 2026-08-14
This commit is contained in:
parent
9ea256e557
commit
7e02e72a40
5 changed files with 38 additions and 8 deletions
|
|
@ -2,12 +2,16 @@ package com.tangem.features.hotwallet.accesscode
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.arkivanov.essenty.lifecycle.doOnResume
|
||||
import com.tangem.core.decompose.context.AppComponentContext
|
||||
import com.tangem.core.decompose.model.getOrCreateModel
|
||||
import com.tangem.core.ui.decompose.ComposableContentComponent
|
||||
import com.tangem.core.ui.event.EventEffect
|
||||
import com.tangem.core.ui.security.DisableScreenshotsDisposableEffect
|
||||
import com.tangem.features.hotwallet.accesscode.ui.AccessCode
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
|
@ -31,10 +35,18 @@ internal class AccessCodeComponent @AssistedInject constructor(
|
|||
@Composable
|
||||
override fun Content(modifier: Modifier) {
|
||||
val state by model.uiState.collectAsStateWithLifecycle()
|
||||
val focusRequester = remember { FocusRequester() }
|
||||
val focusManager = LocalFocusManager.current
|
||||
|
||||
EventEffect(event = state.requestFocus) {
|
||||
focusManager.clearFocus()
|
||||
focusRequester.requestFocus()
|
||||
}
|
||||
|
||||
DisableScreenshotsDisposableEffect()
|
||||
AccessCode(
|
||||
modifier = modifier,
|
||||
focusRequester = focusRequester,
|
||||
state = state,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import com.tangem.core.decompose.model.Model
|
|||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.core.decompose.ui.UiMessageSender
|
||||
import com.tangem.core.ui.components.fields.PinTextColor
|
||||
import com.tangem.core.ui.event.consumedEvent
|
||||
import com.tangem.core.ui.event.triggeredEvent
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.message.DialogMessage
|
||||
import com.tangem.core.ui.message.EventMessageAction
|
||||
|
|
@ -146,7 +148,11 @@ internal class AccessCodeModel @Inject constructor(
|
|||
title = resourceReference(R.string.access_code_alert_validation_cancel),
|
||||
onClick = {
|
||||
uiState.update { currentState ->
|
||||
currentState.copy(onAccessCodeChange = ::onAccessCodeChange)
|
||||
currentState.copy(
|
||||
accessCode = "",
|
||||
onAccessCodeChange = ::onAccessCodeChange,
|
||||
requestFocus = triggeredEvent(Unit, ::consumeRequestFocusEvent),
|
||||
)
|
||||
}
|
||||
},
|
||||
),
|
||||
|
|
@ -154,15 +160,17 @@ internal class AccessCodeModel @Inject constructor(
|
|||
title = resourceReference(R.string.access_code_alert_validation_ok),
|
||||
onClick = ::setNewCode,
|
||||
),
|
||||
onDismissRequest = {
|
||||
uiState.update { currentState ->
|
||||
currentState.copy(onAccessCodeChange = ::onAccessCodeChange)
|
||||
}
|
||||
},
|
||||
isDismissable = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun consumeRequestFocusEvent() {
|
||||
uiState.update { currentState ->
|
||||
currentState.copy(requestFocus = consumedEvent())
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun showErrorAndReset() {
|
||||
uiState.update { currentState ->
|
||||
currentState.copy(
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package com.tangem.features.hotwallet.accesscode.entity
|
||||
|
||||
import com.tangem.core.ui.components.fields.PinTextColor
|
||||
import com.tangem.core.ui.event.StateEvent
|
||||
import com.tangem.core.ui.event.consumedEvent
|
||||
import com.tangem.features.hotwallet.accesscode.ACCESS_CODE_LENGTH
|
||||
|
||||
internal data class AccessCodeUM(
|
||||
|
|
@ -8,6 +10,7 @@ internal data class AccessCodeUM(
|
|||
val accessCodeColor: PinTextColor,
|
||||
val onAccessCodeChange: (String) -> Unit,
|
||||
val isConfirmMode: Boolean,
|
||||
val requestFocus: StateEvent<Unit> = consumedEvent(),
|
||||
) {
|
||||
val accessCodeLength: Int = ACCESS_CODE_LENGTH
|
||||
}
|
||||
|
|
@ -5,8 +5,10 @@ import androidx.compose.foundation.background
|
|||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
|
@ -20,7 +22,11 @@ import com.tangem.features.hotwallet.accesscode.entity.AccessCodeUM
|
|||
|
||||
@Suppress("LongParameterList", "LongMethod")
|
||||
@Composable
|
||||
internal fun AccessCode(state: AccessCodeUM, modifier: Modifier = Modifier) {
|
||||
internal fun AccessCode(
|
||||
state: AccessCodeUM,
|
||||
modifier: Modifier = Modifier,
|
||||
focusRequester: FocusRequester = remember { FocusRequester() },
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier
|
||||
.fillMaxSize()
|
||||
|
|
@ -77,6 +83,7 @@ internal fun AccessCode(state: AccessCodeUM, modifier: Modifier = Modifier) {
|
|||
value = state.accessCode,
|
||||
pinTextColor = state.accessCodeColor,
|
||||
onValueChange = state.onAccessCodeChange,
|
||||
focusRequester = focusRequester,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue