Updated on 2026-08-14
This commit is contained in:
parent
259d3cd740
commit
724b7df243
12 changed files with 59 additions and 9 deletions
|
|
@ -93,11 +93,14 @@ internal class DefaultOnboardingMultiWalletComponent @AssistedInject constructor
|
|||
)
|
||||
|
||||
val backButtonClickFlow = MutableSharedFlow<Unit>()
|
||||
|
||||
override val innerNavigation: InnerNavigation = object : InnerNavigation {
|
||||
override val state = innerNavigationStateFlow
|
||||
|
||||
override fun pop(onComplete: (Boolean) -> Unit) {
|
||||
if (childStack.active.configuration == SeedPhrase) {
|
||||
val config = childStack.active.configuration
|
||||
|
||||
if (config == SeedPhrase || config == Finalize) {
|
||||
componentScope.launch { backButtonClickFlow.emit(Unit) }
|
||||
} else {
|
||||
model.onBack()
|
||||
|
|
@ -160,6 +163,8 @@ internal class DefaultOnboardingMultiWalletComponent @AssistedInject constructor
|
|||
Finalize -> MultiWalletFinalizeComponent(
|
||||
context = childContext,
|
||||
params = childParams,
|
||||
backButtonClickFlow = backButtonClickFlow,
|
||||
onBack = { model.onBack() },
|
||||
onEvent = ::handleFinalizeComponentEvent,
|
||||
)
|
||||
Done -> error("Unexpected Done state")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.accesscode.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
|
|
@ -20,6 +21,7 @@ import javax.inject.Inject
|
|||
|
||||
private const val MINIMUM_ACCESS_CODE_LENGTH = 4
|
||||
|
||||
@Stable
|
||||
@ComponentScoped
|
||||
internal class MultiWalletAccessCodeModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ import com.tangem.core.decompose.context.AppComponentContext
|
|||
import com.tangem.core.decompose.model.getOrCreateModel
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.features.onboarding.v2.impl.R
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildParams
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildParams
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.backup.model.MultiWalletBackupModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.backup.ui.MultiWalletBackup
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.backup.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.common.core.TangemSdkError
|
||||
|
|
@ -28,6 +29,7 @@ import kotlinx.coroutines.flow.update
|
|||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@Stable
|
||||
@ComponentScoped
|
||||
class MultiWalletBackupModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ class Wallet1ChooseOptionComponent(
|
|||
}
|
||||
|
||||
params.parentParams.titleProvider.changeTitle(
|
||||
text = resourceReference(R.string.onboarding_create_wallet_header),
|
||||
text = resourceReference(R.string.onboarding_getting_started),
|
||||
)
|
||||
|
||||
componentScope.launch {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.chooseoption.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
|
|
@ -18,6 +19,7 @@ import kotlinx.coroutines.flow.update
|
|||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@Stable
|
||||
@ComponentScoped
|
||||
internal class Wallet1ChooseOptionModel @Inject constructor(
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
|
|
|
|||
|
|
@ -8,11 +8,13 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.tangem.core.ui.components.PrimaryButtonIconEnd
|
||||
import com.tangem.core.ui.components.PrimaryButton
|
||||
import com.tangem.core.ui.components.SecondaryButton
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.core.ui.res.TangemThemePreview
|
||||
import com.tangem.features.onboarding.v2.impl.R
|
||||
|
||||
@Composable
|
||||
|
|
@ -34,7 +36,7 @@ fun Wallet1ChooseOption(onSkipClick: () -> Unit, onBackupClick: () -> Unit, modi
|
|||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
text = stringResourceSafe(R.string.onboarding_create_wallet_header),
|
||||
text = stringResourceSafe(R.string.onboarding_wallet_info_title_first),
|
||||
style = TangemTheme.typography.h2,
|
||||
color = TangemTheme.colors.text.primary1,
|
||||
textAlign = TextAlign.Center,
|
||||
|
|
@ -42,7 +44,7 @@ fun Wallet1ChooseOption(onSkipClick: () -> Unit, onBackupClick: () -> Unit, modi
|
|||
)
|
||||
|
||||
Text(
|
||||
text = stringResourceSafe(R.string.onboarding_create_wallet_body),
|
||||
text = stringResourceSafe(R.string.onboarding_wallet_info_subtitle_first),
|
||||
style = TangemTheme.typography.body1,
|
||||
color = TangemTheme.colors.text.secondary,
|
||||
textAlign = TextAlign.Center,
|
||||
|
|
@ -50,11 +52,10 @@ fun Wallet1ChooseOption(onSkipClick: () -> Unit, onBackupClick: () -> Unit, modi
|
|||
)
|
||||
}
|
||||
|
||||
PrimaryButtonIconEnd(
|
||||
PrimaryButton(
|
||||
modifier = Modifier
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 12.dp)
|
||||
.fillMaxWidth(),
|
||||
iconResId = R.drawable.ic_tangem_24,
|
||||
text = stringResourceSafe(R.string.onboarding_button_backup_now),
|
||||
onClick = onBackupClick,
|
||||
)
|
||||
|
|
@ -67,4 +68,16 @@ fun Wallet1ChooseOption(onSkipClick: () -> Unit, onBackupClick: () -> Unit, modi
|
|||
onClick = onSkipClick,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
private fun Preview() {
|
||||
TangemThemePreview {
|
||||
Wallet1ChooseOption(
|
||||
onSkipClick = {},
|
||||
onBackupClick = {},
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.createwallet.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.common.core.TangemSdkError
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
|
|
@ -27,6 +28,7 @@ import kotlinx.coroutines.launch
|
|||
import javax.inject.Inject
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
@Stable
|
||||
@ComponentScoped
|
||||
internal class MultiWalletCreateWalletModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize
|
||||
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
|
|
@ -12,6 +13,7 @@ import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChild
|
|||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildParams
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize.model.MultiWalletFinalizeModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize.ui.MultiWalletFinalize
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
@ -19,6 +21,8 @@ import kotlinx.coroutines.launch
|
|||
internal class MultiWalletFinalizeComponent(
|
||||
context: AppComponentContext,
|
||||
params: MultiWalletChildParams,
|
||||
backButtonClickFlow: SharedFlow<Unit>,
|
||||
onBack: () -> Unit,
|
||||
onEvent: (Event) -> Unit,
|
||||
) : AppComponentContext by context, MultiWalletChildComponent {
|
||||
|
||||
|
|
@ -40,12 +44,21 @@ internal class MultiWalletFinalizeComponent(
|
|||
onEvent(it)
|
||||
}
|
||||
}
|
||||
|
||||
componentScope.launch {
|
||||
backButtonClickFlow.collect { model.onBack() }
|
||||
}
|
||||
componentScope.launch {
|
||||
model.onBackFlow.collect { onBack() }
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun Content(modifier: Modifier) {
|
||||
val state by model.uiState.collectAsStateWithLifecycle()
|
||||
|
||||
BackHandler { model.onBack() }
|
||||
|
||||
MultiWalletFinalize(
|
||||
state = state,
|
||||
modifier = modifier,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.common.core.TangemSdkError
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
|
|
@ -37,6 +38,7 @@ import kotlinx.coroutines.launch
|
|||
import javax.inject.Inject
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
@Stable
|
||||
@ComponentScoped
|
||||
internal class MultiWalletFinalizeModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
|
|
@ -59,6 +61,7 @@ internal class MultiWalletFinalizeModel @Inject constructor(
|
|||
|
||||
private var walletHasBackupError = false
|
||||
val uiState = _uiState.asStateFlow()
|
||||
val onBackFlow = MutableSharedFlow<Unit>()
|
||||
|
||||
val onEvent = MutableSharedFlow<MultiWalletFinalizeComponent.Event>()
|
||||
|
||||
|
|
@ -72,6 +75,12 @@ internal class MultiWalletFinalizeModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
fun onBack() {
|
||||
if (uiState.value.scanPrimary) {
|
||||
modelScope.launch { onBackFlow.emit(Unit) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun getInitialState(): MultiWalletFinalizeUM {
|
||||
val backupService = backupServiceHolder.backupService.get() ?: return MultiWalletFinalizeUM()
|
||||
val initialStep = getInitialStep()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.seedphrase.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.common.core.TangemSdkError
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
|
|
@ -33,6 +34,7 @@ import javax.inject.Inject
|
|||
// | DON'T FIXME !!! MODIFY WITH CAUTION !!! |
|
||||
// =============================================
|
||||
@Suppress("LongParameterList")
|
||||
@Stable
|
||||
@ComponentScoped
|
||||
internal class MultiWalletSeedPhraseModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.features.onboarding.v2.multiwallet.impl.child.seedphrase.ui
|
||||
|
||||
import androidx.compose.animation.*
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyRow
|
||||
|
|
@ -23,7 +24,6 @@ import androidx.compose.ui.unit.dp
|
|||
import com.tangem.core.ui.components.*
|
||||
import com.tangem.core.ui.extensions.resolveReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.core.ui.res.TangemThemePreview
|
||||
import com.tangem.features.onboarding.v2.impl.R
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue