Updated on 2026-08-14
This commit is contained in:
parent
334eb75395
commit
c67fd1801c
11 changed files with 62 additions and 21 deletions
|
|
@ -7,6 +7,7 @@ import com.tangem.common.authentication.storage.AuthenticatedStorage
|
|||
import com.tangem.common.json.TangemSdkAdapter
|
||||
import com.tangem.common.services.secure.SecureStorage
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.domain.models.scan.serialization.*
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.sdk.storage.AndroidSecureStorage
|
||||
import com.tangem.sdk.storage.createEncryptedSharedPreferences
|
||||
|
|
@ -19,7 +20,6 @@ import com.tangem.tap.domain.userWalletList.repository.implementation.BiometricU
|
|||
import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultSelectedUserWalletRepository
|
||||
import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultUserWalletsPublicInformationRepository
|
||||
import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultUserWalletsSensitiveInformationRepository
|
||||
import com.tangem.tap.domain.userWalletList.utils.json.*
|
||||
import com.tangem.tap.tangemSdkManager
|
||||
import com.tangem.utils.Provider
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils
|
||||
|
|
@ -325,6 +325,7 @@ sealed class AppRoute(val path: String) : Route {
|
|||
) : AppRoute(path = "/swap_crypto/${userWalletId.stringValue}")
|
||||
|
||||
// Onboarding V2
|
||||
@Serializable
|
||||
data class Onboarding(
|
||||
val scanResponse: ScanResponse,
|
||||
val startFromBackup: Boolean,
|
||||
|
|
|
|||
|
|
@ -1,21 +1,27 @@
|
|||
package com.tangem.domain.models.scan
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.common.card.WalletData
|
||||
import com.tangem.common.extensions.ByteArrayKey
|
||||
import com.tangem.domain.models.scan.serialization.ScanResponseAsStringSerializer
|
||||
import com.tangem.operations.backup.PrimaryCard
|
||||
import com.tangem.operations.derivation.ExtendedPublicKeysMap
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
// TODO: Move to :domain:card:models
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
@Serializable(with = ScanResponseAsStringSerializer::class)
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class ScanResponse(
|
||||
val card: CardDTO,
|
||||
val productType: ProductType,
|
||||
val walletData: WalletData?,
|
||||
val secondTwinPublicKey: String? = null,
|
||||
val derivedKeys: Map<KeyWalletPublicKey, ExtendedPublicKeysMap> = mapOf(),
|
||||
val primaryCard: PrimaryCard? = null,
|
||||
@Json(name = "card") val card: CardDTO,
|
||||
@Json(name = "productType") val productType: ProductType,
|
||||
@Json(name = "walletData") val walletData: WalletData?,
|
||||
@Json(name = "secondTwinPublicKey") val secondTwinPublicKey: String? = null,
|
||||
@Json(name = "derivedKeys") val derivedKeys: Map<KeyWalletPublicKey, ExtendedPublicKeysMap> = mapOf(),
|
||||
@Json(name = "primaryCard") val primaryCard: PrimaryCard? = null,
|
||||
)
|
||||
|
||||
typealias KeyWalletPublicKey = ByteArrayKey
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils.json
|
||||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
|
|
@ -7,7 +7,7 @@ import com.squareup.moshi.JsonWriter
|
|||
import com.squareup.moshi.ToJson
|
||||
import com.tangem.common.extensions.ByteArrayKey
|
||||
|
||||
internal class ByteArrayKeyAdapter {
|
||||
class ByteArrayKeyAdapter {
|
||||
@ToJson
|
||||
fun toJson(writer: JsonWriter, src: ByteArrayKey, byteArrayAdapter: JsonAdapter<ByteArray>) {
|
||||
byteArrayAdapter.toJson(writer, src.bytes)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils.json
|
||||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
|
|
@ -7,7 +7,7 @@ import com.squareup.moshi.JsonWriter
|
|||
import com.squareup.moshi.ToJson
|
||||
import com.tangem.domain.models.scan.CardDTO
|
||||
|
||||
internal class CardBackupStatusAdapter {
|
||||
class CardBackupStatusAdapter {
|
||||
@ToJson
|
||||
fun toJson(writer: JsonWriter, src: CardDTO.BackupStatus?, mapAdapter: JsonAdapter<Map<String, String>>) {
|
||||
val jsonMap = mutableMapOf<String, String>()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils.json
|
||||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.ToJson
|
||||
|
|
@ -6,7 +6,6 @@ import com.tangem.common.extensions.guard
|
|||
import com.tangem.common.json.MoshiJsonConverter
|
||||
import com.tangem.crypto.hdWallet.DerivationNode
|
||||
import com.tangem.crypto.hdWallet.DerivationPath
|
||||
import timber.log.Timber
|
||||
|
||||
class DerivationPathAdapterWithMigration {
|
||||
@ToJson
|
||||
|
|
@ -26,7 +25,6 @@ class DerivationPathAdapterWithMigration {
|
|||
private fun fromLegacyScheme(jsonMap: Map<String, Any>): DerivationPath {
|
||||
val rawPath = jsonMap["rawPath"] as String
|
||||
val nodeIndexes = (jsonMap["nodes"] as? List<Number>).guard {
|
||||
Timber.e("Unable to convert derivation path nodes from JSON")
|
||||
return DerivationPath(rawPath)
|
||||
}
|
||||
val nodes = nodeIndexes.map { DerivationNode.fromIndex(it.toLong()) }
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils.json
|
||||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
|
|
@ -11,7 +11,7 @@ import com.tangem.crypto.hdWallet.DerivationPath
|
|||
import com.tangem.crypto.hdWallet.bip32.ExtendedPublicKey
|
||||
import com.tangem.operations.derivation.ExtendedPublicKeysMap
|
||||
|
||||
internal class ExtendedPublicKeysMapAdapter {
|
||||
class ExtendedPublicKeysMapAdapter {
|
||||
@ToJson
|
||||
fun toJson(
|
||||
writer: JsonWriter,
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||
import com.tangem.common.json.TangemSdkAdapter
|
||||
import com.tangem.domain.models.scan.ScanResponse
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
internal object ScanResponseAsStringSerializer : KSerializer<ScanResponse> {
|
||||
private val moshi = Moshi.Builder()
|
||||
.add(WalletDerivedKeysMapAdapter())
|
||||
.add(ScanResponseDerivedKeysMapAdapter())
|
||||
.add(ByteArrayKeyAdapter())
|
||||
.add(ExtendedPublicKeysMapAdapter())
|
||||
.add(CardBackupStatusAdapter())
|
||||
.add(DerivationPathAdapterWithMigration())
|
||||
.add(TangemSdkAdapter.DateAdapter())
|
||||
.add(TangemSdkAdapter.DerivationNodeAdapter())
|
||||
.add(TangemSdkAdapter.FirmwareVersionAdapter()) // For PrimaryCard model
|
||||
.add(KotlinJsonAdapterFactory())
|
||||
.build()
|
||||
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ScanResponse", PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder): ScanResponse {
|
||||
return moshi.adapter(ScanResponse::class.java).fromJson(decoder.decodeString())!!
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: ScanResponse) {
|
||||
encoder.encodeString(moshi.adapter(ScanResponse::class.java).toJson(value)!!)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils.json
|
||||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
|
|
@ -8,7 +8,7 @@ import com.squareup.moshi.ToJson
|
|||
import com.tangem.common.extensions.ByteArrayKey
|
||||
import com.tangem.operations.derivation.ExtendedPublicKeysMap
|
||||
|
||||
internal class ScanResponseDerivedKeysMapAdapter {
|
||||
class ScanResponseDerivedKeysMapAdapter {
|
||||
@ToJson
|
||||
fun toJson(
|
||||
writer: JsonWriter,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.tap.domain.userWalletList.utils.json
|
||||
package com.tangem.domain.models.scan.serialization
|
||||
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
|
|
@ -10,7 +10,7 @@ import com.tangem.common.extensions.toHexString
|
|||
import com.tangem.crypto.hdWallet.DerivationPath
|
||||
import com.tangem.crypto.hdWallet.bip32.ExtendedPublicKey
|
||||
|
||||
internal class WalletDerivedKeysMapAdapter {
|
||||
class WalletDerivedKeysMapAdapter {
|
||||
@ToJson
|
||||
fun toJson(
|
||||
writer: JsonWriter,
|
||||
Loading…
Add table
Add a link
Reference in a new issue