Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-11 13:15:53 +03:00
parent 259d3cd740
commit 724b7df243
12 changed files with 59 additions and 9 deletions

View file

@ -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")

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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 {

View file

@ -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,

View file

@ -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(),
)
}
}

View file

@ -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,

View file

@ -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,

View file

@ -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()

View file

@ -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,

View file

@ -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