diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerProvider.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerProvider.kt index ec4c83c460..71255de6a0 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerProvider.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerProvider.kt @@ -17,6 +17,7 @@ import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultUse import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultUserWalletsSensitiveInformationRepository import com.tangem.tap.domain.userWalletList.utils.json.ByteArrayKeyAdapter import com.tangem.tap.domain.userWalletList.utils.json.CardBackupStatusAdapter +import com.tangem.tap.domain.userWalletList.utils.json.DerivationPathAdapterWithMigration import com.tangem.tap.domain.userWalletList.utils.json.ExtendedPublicKeysMapAdapter import com.tangem.tap.domain.userWalletList.utils.json.ScanResponseDerivedKeysMapAdapter import com.tangem.tap.domain.userWalletList.utils.json.WalletDerivedKeysMapAdapter @@ -33,8 +34,8 @@ fun UserWalletsListManager.Companion.provideBiometricImplementation( .add(ByteArrayKeyAdapter()) .add(ExtendedPublicKeysMapAdapter()) .add(CardBackupStatusAdapter()) + .add(DerivationPathAdapterWithMigration()) .add(TangemSdkAdapter.DateAdapter()) - .add(TangemSdkAdapter.DerivationPathAdapter()) .add(TangemSdkAdapter.DerivationNodeAdapter()) .add(TangemSdkAdapter.FirmwareVersionAdapter()) // For PrimaryCard model .add(KotlinJsonAdapterFactory()) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/DerivationPathAdapterWithMigration.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/DerivationPathAdapterWithMigration.kt new file mode 100644 index 0000000000..4719b96b49 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/DerivationPathAdapterWithMigration.kt @@ -0,0 +1,35 @@ +package com.tangem.tap.domain.userWalletList.utils.json + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +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 + fun toJson(src: DerivationPath): String = src.rawPath + + @FromJson + fun fromJson(json: String): DerivationPath { + val jsonMap = MoshiJsonConverter.default().toMap(json) + return if (jsonMap.isEmpty()) { + DerivationPath(json) + } else { + fromLegacyScheme(jsonMap) + } + } + + @Suppress("UNCHECKED_CAST") + private fun fromLegacyScheme(jsonMap: Map): DerivationPath { + val rawPath = jsonMap["rawPath"] as String + val nodeIndexes = (jsonMap["nodes"] as? List).guard { + Timber.e("Unable to convert derivation path nodes from JSON") + return DerivationPath(rawPath) + } + val nodes = nodeIndexes.map { DerivationNode.fromIndex(it.toLong()) } + return DerivationPath(rawPath, nodes) + } +} \ No newline at end of file