diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9c4e5fbd00..1c3f8708a3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,4 +1,5 @@ import java.util.Properties +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants plugins { alias(deps.plugins.android.application) @@ -254,6 +255,10 @@ dependencies { implementation(deps.decompose.ext.compose) implementation(deps.moshi.adapters) + implementation(deps.moshi.kotlin) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) + /** Testing libraries */ testImplementation(deps.test.coroutine) testImplementation(deps.test.junit) @@ -271,6 +276,7 @@ dependencies { /** Chucker */ debugImplementation(deps.chucker) + debugPGImplementation(deps.chucker) mockedImplementation(deps.chuckerStub) externalImplementation(deps.chuckerStub) internalImplementation(deps.chuckerStub) @@ -292,5 +298,4 @@ dependencies { // excludes version 9999.0-empty-to-avoid-conflict-with-guava exclude(group = "com.google.guava", module = "listenablefuture") } - } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 2f9dc5a47e..2a7b205c9d 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,21 +1,208 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html +-dontusemixedcaseclassnames +-flattenpackagehierarchy +-adaptclassstrings -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} +# firebase +-keep public class com.google.firebase.** { *; } +-keep class com.google.android.gms.internal.** { *; } +-keepclasseswithmembers class com.google.firebase.FirebaseException -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable +# hedera sdk +-keep class com.hedera.hashgraph.sdk.** { *; } +-keep interface com.hedera.hashgraph.sdk.** { *; } +-dontwarn com.esaulpaugh.headlong.** +-dontwarn edu.umd.cs.findbugs.annotations.SuppressFBWarnings +-dontwarn io.grpc.stub.** -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile +# trustwallet sdk +-keep class wallet.core.jni.** { *; } + +# solana +-keep class org.p2p.solanaj.** { *; } +-keep class com.tangem.blockchain.blockchains.solana.solanaj.model.** { *; } + +# binance +-keep class com.tangem.blockchain.blockchains.binance.client.** { *; } + +# shadow gson +-keep,allowobfuscation,allowshrinking class shadow.com.google.gson.reflect.TypeToken +-keep,allowobfuscation,allowshrinking class * extends shadow.com.google.gson.reflect.TypeToken + +# polkadot +-keep class io.emeraldpay.polkaj.api.RpcRequest { *; } +-keep class io.emeraldpay.polkaj.api.RpcResponse { *; } +-keep class io.emeraldpay.polkaj.api.RpcResponseError { *; } + +# kethereum +-keep class org.kethereum.bip32.model.ExtendedKey** +-keepclassmembers class org.kethereum.bip32.model.ExtendedKey** { *; } + +# some crypto +-dontwarn net.i2p.crypto.** +-dontwarn java.net.http.** +-dontwarn lombok.** + +-keep class org.spongycastle.** { *; } + +-dontwarn org.apache.hc.core5.** +-dontwarn org.apache.hc.client5.** +-dontwarn org.apache.log4j.config.** + +-dontwarn javax.naming.** +-dontwarn javax.xml.stream.** +-dontwarn javax.script.** + +-dontwarn org.java_websocket.client.WebSocketClient +-dontwarn org.java_websocket.handshake.ServerHandshake + +-dontwarn aQute.bnd.annotation.spi.ServiceProvider + +-dontwarn org.threeten.bp.** +-keep class org.threeten.bp.* +-keepclassmembers class org.threeten.bp.** { *; } + +# joda time +# These aren't necessary if including joda-convert +-dontwarn org.joda.convert.FromString +-dontwarn org.joda.convert.ToString + +-keepnames class org.joda.** implements java.io.Serializable +-keepclassmembers class org.joda.** implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + !static !transient ; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} +# joda time + +# The name of @JsonClass types is used to look up the generated adapter. +-keepnames @com.squareup.moshi.JsonClass class * + +-keepclassmembers class * { + @com.squareup.moshi.FromJson ; + @com.squareup.moshi.ToJson ; +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class kotlin.Metadata { *; } +-keepclassmembers class kotlin.Metadata { + public ; +} + +# Proguard configuration for Jackson 2.x +-keep class com.fasterxml.** { *; } +-keep class com.fasterxml.jackson.databind.ObjectMapper { + public ; + protected ; +} +-keep class com.fasterxml.jackson.databind.ObjectWriter { + public ** writeValueAsString(**); +} +-keepnames class com.fasterxml.jackson.** { *; } +-dontwarn com.fasterxml.jackson.databind.** +-keep class * implements com.fasterxml.jackson.core.type.TypeReference + +-keep class kotlin.reflect.** +-keep public class kotlin.reflect.jvm.internal.impl.** { public *; } + +# Kotlin serialization looks up the generated serializer classes through a function on companion +# objects. The companions are looked up reflectively so we need to explicitly keep these functions. +-keepclasseswithmembers class **.*$Companion { + kotlinx.serialization.KSerializer serializer(...); +} +# If a companion has the serializer function, keep the companion field on the original type so that +# the reflective lookup succeeds. +-if class **.*$Companion { + kotlinx.serialization.KSerializer serializer(...); +} +-keepclassmembers class <1>.<2> { + <1>.<2>$Companion Companion; +} + +-keepnames class * implements android.os.Parcelable { + public static final ** CREATOR; +} +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} + +-dontwarn okhttp3.** +-dontwarn okio.** + +# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and +# EnclosingMethod is required to use InnerClasses. +-keepattributes Signature, InnerClasses, EnclosingMethod, *Annotation*, Exceptions + +# Retrofit does reflection on method and parameter annotations. +-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations + +# Keep annotation default values (e.g., retrofit2.http.Field.encoded). +-keepattributes AnnotationDefault + +# Retain service method parameters when optimizing. +-keepclassmembers,allowshrinking,allowobfuscation interface * { + @retrofit2.http.* ; +} + +-keepclasseswithmembers class * { + @retrofit2.http.* ; +} +-keepclassmembernames interface * { + @retrofit.http.* ; +} + +# Ignore annotation used for build tooling. +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement + +# Ignore JSR 305 annotations for embedding nullability information. +-dontwarn javax.annotation.** + +# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath. +-dontwarn kotlin.Unit + +# Top-level functions that can only be used by Kotlin. +-dontwarn retrofit2.KotlinExtensions +-dontwarn retrofit2.KotlinExtensions.* + +# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy +# and replaces all potential values with null. Explicitly keeping the interfaces prevents this. +-if interface * { @retrofit2.http.* ; } +-keep,allowobfuscation interface <1> + +# Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items). +-keep,allowobfuscation,allowshrinking interface retrofit2.Call +-keep,allowobfuscation,allowshrinking class retrofit2.Response + +# With R8 full mode generic signatures are stripped for classes that are not +# kept. Suspend functions are wrapped in continuations where the type argument +# is used. +-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation + +# public tangem android sdk +-keep class com.tangem.operations.** { *; } +-keep class com.tangem.crypto.** { *; } +-keep class com.tangem.common.card.** { *; } + +# TODO remove (easy to fix in sdk) +-keep class com.tangem.common.json.** { *; } +-keep class com.tangem.common.SuccessResponse { *; } +-keep class com.tangem.common.UserCode { *; } +-keep class com.tangem.common.UserCodeType { *; } + +# non-sensitive enums +-keep enum com.tangem.domain.apptheme.model.AppThemeMode { *; } + +-keep class com.reown.walletkit.client.Wallet$Model { *; } +-keep class com.reown.walletkit.client.Wallet { *; } + +-keep class **.R +-keep class **.R$* { + ; +} diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/model/UserWalletInformation.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/model/UserWalletInformation.kt index 8a3f2fe559..2697b453b7 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/model/UserWalletInformation.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/model/UserWalletInformation.kt @@ -1,5 +1,6 @@ package com.tangem.tap.domain.userWalletList.model +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse @@ -7,16 +8,24 @@ import com.tangem.domain.wallets.models.UserWalletId @JsonClass(generateAdapter = true) internal data class UserWalletSensitiveInformation( + @Json(name = "wallets") val wallets: List, ) @JsonClass(generateAdapter = true) internal data class UserWalletPublicInformation( + @Json(name = "name") val name: String, + @Json(name = "walletId") val walletId: UserWalletId, + @Json(name = "artworkUrl") val artworkUrl: String, + @Json(name = "cardsInWallet") val cardsInWallet: Set, + @Json(name = "scanResponse") val scanResponse: ScanResponse, + @Json(name = "isMultiCurrency") val isMultiCurrency: Boolean, + @Json(name = "hasBackupError") val hasBackupError: Boolean = false, ) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcJrpcMethods.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcJrpcMethods.kt index 7c937b3772..f405179561 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcJrpcMethods.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcJrpcMethods.kt @@ -52,6 +52,8 @@ data class WcSignMessage( @Json(name = "type") val type: WCSignType, ) : WcRequestData { + + @JsonClass(generateAdapter = false) enum class WCSignType { MESSAGE, PERSONAL_MESSAGE, TYPED_MESSAGE, SOLANA_MESSAGE, } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Account.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Account.kt index 9372666b46..48114a57c4 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Account.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Account.kt @@ -1,3 +1,16 @@ package com.tangem.tap.domain.walletconnect2.domain.models -data class Account(val chainId: String, val walletAddress: String, val derivationPath: String?) \ No newline at end of file +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class Account( + @Json(name = "chainId") + val chainId: String, + + @Json(name = "walletAddress") + val walletAddress: String, + + @Json(name = "derivationPath") + val derivationPath: String?, +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Session.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Session.kt index 896b6dc97a..6950d29486 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Session.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/Session.kt @@ -1,6 +1,13 @@ package com.tangem.tap.domain.walletconnect2.domain.models +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) data class Session( + @Json(name = "topic") val topic: String, + + @Json(name = "accounts") val accounts: List, ) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceCancelOrder.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceCancelOrder.kt index aebac1b973..112c92e7a6 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceCancelOrder.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceCancelOrder.kt @@ -2,29 +2,34 @@ package com.tangem.tap.domain.walletconnect2.domain.models.binance import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import com.tangem.tap.domain.walletconnect2.domain.WcRequestData @Suppress("LongParameterList") @JsonClass(generateAdapter = true) -class WcBinanceCancelOrder( +data class WcBinanceCancelOrder( @Json(name = "account_number") - accountNumber: String, + val accountNumber: String, @Json(name = "chain_id") - chainId: String, + val chainId: String, @Json(name = "data") - data: String?, + val data: String?, @Json(name = "memo") - memo: String?, + val memo: String?, @Json(name = "sequence") - sequence: String, + val sequence: String, @Json(name = "source") - source: String, + val source: String, @Json(name = "msgs") - msgs: List, -) : WcBinanceOrder(accountNumber, chainId, data, memo, sequence, source, msgs) { + val msgs: List, +) : WcRequestData { + @JsonClass(generateAdapter = true) data class Message( + @Json(name = "refid") val refid: String, + @Json(name = "sender") val sender: String, + @Json(name = "symbol") val symbol: String, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceOrder.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceOrder.kt deleted file mode 100644 index 1e3f33db29..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceOrder.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.tangem.tap.domain.walletconnect2.domain.models.binance - -import com.tangem.tap.domain.walletconnect2.domain.WcRequestData - -@Suppress("LongParameterList") -open class WcBinanceOrder( - val accountNumber: String, - val chainId: String, - val data: String?, - val memo: String?, - val sequence: String, - val source: String, - val msgs: List, -) : WcRequestData - -data class WcBinanceTxConfirmParam( - val ok: Boolean, - val errorMsg: String?, -) : WcRequestData \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTradeOrder.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTradeOrder.kt index d00997295d..bdeaba5b27 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTradeOrder.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTradeOrder.kt @@ -4,21 +4,28 @@ import com.github.salomonbrys.kotson.jsonSerializer import com.google.gson.JsonObject import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import com.tangem.tap.domain.walletconnect2.domain.WcRequestData @Suppress("LongParameterList") @JsonClass(generateAdapter = true) -class WcBinanceTradeOrder( +data class WcBinanceTradeOrder( @Json(name = "account_number") - accountNumber: String, + val accountNumber: String, @Json(name = "chain_id") - chainId: String, - data: String?, - memo: String?, - sequence: String, - source: String, - msgs: List, -) : WcBinanceOrder(accountNumber, chainId, data, memo, sequence, source, msgs) { + val chainId: String, + @Json(name = "data") + val data: String?, + @Json(name = "memo") + val memo: String?, + @Json(name = "sequence") + val sequence: String, + @Json(name = "source") + val source: String, + @Json(name = "msgs") + val msgs: List, +) : WcRequestData { + @JsonClass(generateAdapter = false) enum class MessageKey(val key: String) { ID("id"), ORDER_TYPE("ordertype"), @@ -30,14 +37,23 @@ class WcBinanceTradeOrder( TIME_INFORCE("timeinforce"), } + @JsonClass(generateAdapter = true) data class Message( + @Json(name = "id") val id: String, + @Json(name = "orderType") val orderType: Int, + @Json(name = "price") val price: Long, + @Json(name = "quantity") val quantity: Long, + @Json(name = "sender") val sender: String, + @Json(name = "side") val side: Int, + @Json(name = "symbol") val symbol: String, + @Json(name = "timeInforce") val timeInforce: Int, ) } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTransferOrder.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTransferOrder.kt index 6d46e17319..99199c17dc 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTransferOrder.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTransferOrder.kt @@ -2,33 +2,48 @@ package com.tangem.tap.domain.walletconnect2.domain.models.binance import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import com.tangem.tap.domain.walletconnect2.domain.WcRequestData @Suppress("LongParameterList") @JsonClass(generateAdapter = true) -class WcBinanceTransferOrder( +data class WcBinanceTransferOrder( @Json(name = "account_number") - accountNumber: String, + val accountNumber: String, @Json(name = "chain_id") - chainId: String, - data: String?, - memo: String?, - sequence: String, - source: String, - msgs: List, -) : WcBinanceOrder(accountNumber, chainId, data, memo, sequence, source, msgs) { + val chainId: String, + @Json(name = "data") + val data: String?, + @Json(name = "memo") + val memo: String?, + @Json(name = "sequence") + val sequence: String, + @Json(name = "source") + val source: String, + @Json(name = "msgs") + val msgs: List, +) : WcRequestData { + @JsonClass(generateAdapter = true) data class Message( + @Json(name = "inputs") val inputs: List, + @Json(name = "outputs") val outputs: List, ) { + @JsonClass(generateAdapter = true) data class Item( + @Json(name = "address") val address: String, + @Json(name = "coins") val coins: List, ) { + @JsonClass(generateAdapter = true) data class Coin( + @Json(name = "amount") val amount: Long, + @Json(name = "denom") val denom: String, ) } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTxConfirmParam.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTxConfirmParam.kt new file mode 100644 index 0000000000..24ada4ca98 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/binance/WcBinanceTxConfirmParam.kt @@ -0,0 +1,13 @@ +package com.tangem.tap.domain.walletconnect2.domain.models.binance + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +import com.tangem.tap.domain.walletconnect2.domain.WcRequestData + +@JsonClass(generateAdapter = true) +data class WcBinanceTxConfirmParam( + @Json(name = "ok") + val ok: Boolean, + @Json(name = "errorMsg") + val errorMsg: String?, +) : WcRequestData \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt index 95f2c90b4c..6709842bb5 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt @@ -1,6 +1,7 @@ package com.tangem.tap.network.exchangeServices.mercuryo import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import retrofit2.http.GET import retrofit2.http.Path @@ -11,21 +12,25 @@ interface MercuryoApi { suspend fun currencies(@Path("apiVersion") apiVersion: String): MercuryoCurrenciesResponse } +@JsonClass(generateAdapter = true) data class MercuryoCurrenciesResponse( - val status: Int, - val data: Data, + @Json(name = "status") val status: Int, + @Json(name = "data") val data: Data, ) { + @JsonClass(generateAdapter = true) data class Data( - val fiat: List, - val crypto: List, - val config: Config, + @Json(name = "fiat") val fiat: List, + @Json(name = "crypto") val crypto: List, + @Json(name = "config") val config: Config, ) + @JsonClass(generateAdapter = true) data class Config( @Json(name = "crypto_currencies") val cryptoCurrencies: List, ) + @JsonClass(generateAdapter = true) data class MercuryoCryptoCurrency( @Json(name = "currency") val currencySymbol: String, diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayApi.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayApi.kt index e5948ce873..c8235a8f74 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayApi.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayApi.kt @@ -22,7 +22,9 @@ interface MoonPayApi { @JsonClass(generateAdapter = true) data class MoonPayUserStatus( + @Json(name = "isBuyAllowed") val isBuyAllowed: Boolean, + @Json(name = "isSellAllowed") val isSellAllowed: Boolean, @Json(name = "isAllowed") val isMoonpayAllowed: Boolean, @@ -34,18 +36,18 @@ data class MoonPayUserStatus( @JsonClass(generateAdapter = true) data class MoonPayCurrencies( - val type: String, - val code: String, - val supportsLiveMode: Boolean = false, - val isSuspended: Boolean = true, - val isSupportedInUS: Boolean = false, - val isSellSupported: Boolean = false, - val notAllowedUSStates: List = emptyList(), - val metadata: MoonPayCurrenciesMetadata? = null, + @Json(name = "type") val type: String, + @Json(name = "code") val code: String, + @Json(name = "supportsLiveMode") val supportsLiveMode: Boolean = false, + @Json(name = "isSuspended") val isSuspended: Boolean = true, + @Json(name = "isSupportedInUS") val isSupportedInUS: Boolean = false, + @Json(name = "isSellSupported") val isSellSupported: Boolean = false, + @Json(name = "notAllowedUSStates") val notAllowedUSStates: List = emptyList(), + @Json(name = "metadata") val metadata: MoonPayCurrenciesMetadata? = null, ) @JsonClass(generateAdapter = true) data class MoonPayCurrenciesMetadata( - val contractAddress: String?, - val networkCode: String?, + @Json(name = "contractAddress") val contractAddress: String?, + @Json(name = "networkCode") val networkCode: String?, ) \ No newline at end of file diff --git a/common/ui-charts/src/main/kotlin/com/tangem/common/ui/charts/layer/ChartMarker.kt b/common/ui-charts/src/main/kotlin/com/tangem/common/ui/charts/layer/ChartMarker.kt index 0005e47d15..5ef509c92b 100644 --- a/common/ui-charts/src/main/kotlin/com/tangem/common/ui/charts/layer/ChartMarker.kt +++ b/common/ui-charts/src/main/kotlin/com/tangem/common/ui/charts/layer/ChartMarker.kt @@ -15,7 +15,6 @@ import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerValueForma import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker import com.patrykandpatrick.vico.core.common.Dimensions import com.patrykandpatrick.vico.core.common.LayeredComponent -import com.patrykandpatrick.vico.core.common.component.Component import com.patrykandpatrick.vico.core.common.component.TextComponent import com.patrykandpatrick.vico.core.common.shape.Shape import com.tangem.core.ui.res.TangemTheme @@ -39,7 +38,28 @@ internal fun rememberTangemChartMarker(color: Color): CartesianMarker { object : DefaultCartesianMarker( label = TextComponent(textSizeSp = 0f), - indicator = ::indicator, + indicator = { color -> + val composeColor = Color(color) + + LayeredComponent( + rear = shapeComponent( + color = composeColor.copy(alpha = INDICATOR_REAR_COLOR_ALPHA), + shape = Shape.Pill, + ), + front = LayeredComponent( + rear = shapeComponent( + color = composeColor, + shape = Shape.Pill, + ), + front = shapeComponent( + color = Color.White, + shape = Shape.Pill, + ), + padding = indicatorPadding, + ), + padding = indicatorPadding, + ) + }, indicatorSizeDp = INDICATOR_SIZE_DP, guideline = guideline, valueFormatter = object : CartesianMarkerValueFormatter { @@ -81,29 +101,6 @@ internal fun rememberTangemChartMarker(color: Color): CartesianMarker { } } -private fun indicator(color: Int): Component { - val composeColor = Color(color) - - return LayeredComponent( - rear = shapeComponent( - color = composeColor.copy(alpha = INDICATOR_REAR_COLOR_ALPHA), - shape = Shape.Pill, - ), - front = LayeredComponent( - rear = shapeComponent( - color = composeColor, - shape = Shape.Pill, - ), - front = shapeComponent( - color = Color.White, - shape = Shape.Pill, - ), - padding = indicatorPadding, - ), - padding = indicatorPadding, - ) -} - private val indicatorPadding = Dimensions.of(3.dp) private const val LABEL_BACKGROUND_SHADOW_RADIUS_DP = 4f private const val LABEL_BACKGROUND_SHADOW_DY_DP = 2f diff --git a/core/config-toggles/build.gradle.kts b/core/config-toggles/build.gradle.kts index 0a7bc83fdc..97534f26fa 100644 --- a/core/config-toggles/build.gradle.kts +++ b/core/config-toggles/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -11,7 +13,6 @@ android { } dependencies { - /** DI */ implementation(deps.hilt.android) kapt(deps.hilt.kapt) @@ -23,6 +24,7 @@ dependencies { implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) /** Core modules */ implementation(projects.core.datasource) diff --git a/core/datasource/build.gradle.kts b/core/datasource/build.gradle.kts index 3570cea973..f886a6b930 100644 --- a/core/datasource/build.gradle.kts +++ b/core/datasource/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -53,6 +55,8 @@ dependencies { implementation(deps.okHttp.prettyLogging) implementation(deps.retrofit) implementation(deps.retrofit.moshi) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) /** Time */ implementation(deps.jodatime) @@ -62,6 +66,7 @@ dependencies { /** Chucker */ debugImplementation(deps.chucker) + debugPGImplementation(deps.chucker) mockedImplementation(deps.chuckerStub) externalImplementation(deps.chuckerStub) internalImplementation(deps.chuckerStub) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt index 100cc04382..28d4220428 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt @@ -40,6 +40,7 @@ sealed class ApiConfig { companion object { internal const val DEBUG_BUILD_TYPE = "debug" + internal const val DEBUG_PG_BUILD_TYPE = "debugPG" internal const val INTERNAL_BUILD_TYPE = "internal" internal const val MOCKED_BUILD_TYPE = "mocked" internal const val EXTERNAL_BUILD_TYPE = "external" diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt index 00945bf772..15c20cc12b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt @@ -1,10 +1,21 @@ package com.tangem.datasource.api.common.config +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + /** * Api environment * [REDACTED_AUTHOR] */ +@JsonClass(generateAdapter = false) enum class ApiEnvironment { - DEV, STAGE, PROD + @Json(name = "DEV") + DEV, + + @Json(name = "STAGE") + STAGE, + + @Json(name = "PROD") + PROD, } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt index a0c28a6880..8a850c20ea 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt @@ -68,7 +68,9 @@ internal class Express( fun getInitialEnvironment(): ApiEnvironment { return when (BuildConfig.BUILD_TYPE) { - DEBUG_BUILD_TYPE -> ApiEnvironment.DEV + DEBUG_BUILD_TYPE, + DEBUG_PG_BUILD_TYPE, + -> ApiEnvironment.DEV INTERNAL_BUILD_TYPE, MOCKED_BUILD_TYPE, -> ApiEnvironment.STAGE diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/AssetsRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/AssetsRequestBody.kt index 2d496a94ec..9b63f6b517 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/AssetsRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/AssetsRequestBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class AssetsRequestBody( @Json(name = "tokensList") val tokensList: List?, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/ExchangeSentRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/ExchangeSentRequestBody.kt index b585a80775..7e2c9eae29 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/ExchangeSentRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/ExchangeSentRequestBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class ExchangeSentRequestBody( @Json(name = "txId") val txId: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/LeastTokenInfo.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/LeastTokenInfo.kt index fd636c6682..9b6884f59e 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/LeastTokenInfo.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/LeastTokenInfo.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class LeastTokenInfo( @Json(name = "contractAddress") val contractAddress: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/PairsRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/PairsRequestBody.kt index c22747d9cf..325ac78f23 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/PairsRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/request/PairsRequestBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class PairsRequestBody( @Json(name = "from") val from: List, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/Asset.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/Asset.kt index a4de3fcb40..69e5ccb9a0 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/Asset.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/Asset.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class Asset( @Json(name = "contractAddress") val contractAddress: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeDataResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeDataResponse.kt index 5e1eb6d5d3..90785de95d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeDataResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeDataResponse.kt @@ -1,11 +1,17 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class ExchangeDataResponseWithTxDetails( + @Json(name = "dataResponse") val dataResponse: ExchangeDataResponse, + @Json(name = "txDetails") val txDetails: TxDetails, ) + +@JsonClass(generateAdapter = true) data class ExchangeDataResponse( @Json(name = "fromAmount") val fromAmount: String, @@ -29,6 +35,7 @@ data class ExchangeDataResponse( val signature: String, ) +@JsonClass(generateAdapter = true) data class TxDetails( @Json(name = "payoutAddress") val payoutAddress: String, @@ -70,6 +77,7 @@ data class TxDetails( val gas: String?, ) +@JsonClass(generateAdapter = false) enum class TxType { @Json(name = "send") SEND, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt index 2c962257ca..2ef036c212 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt @@ -1,8 +1,10 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class ExchangeProvider( @Json(name = "id") val id: String, @@ -32,6 +34,7 @@ data class ExchangeProvider( val slippage: BigDecimal?, ) +@JsonClass(generateAdapter = false) enum class ExchangeProviderType { @Json(name = "dex") DEX, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt index e643811822..d08ebf45bc 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt @@ -1,8 +1,10 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class ExchangeQuoteResponse( @Json(name = "fromAmount") diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeSentResponseBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeSentResponseBody.kt index b6b1453465..284231a50a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeSentResponseBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeSentResponseBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class ExchangeSentResponseBody( @Json(name = "txId") val txId: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt index a56308d255..043222d3e3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class ExchangeStatusResponse( @Json(name = "providerId") @@ -26,6 +28,7 @@ data class ExchangeStatusResponse( val refundContractAddress: String? = null, ) +@JsonClass(generateAdapter = false) enum class ExchangeStatus { @Json(name = "new") @@ -71,6 +74,7 @@ enum class ExchangeStatus { Unknown, } +@JsonClass(generateAdapter = true) data class ExchangeStatusError( @Json(name = "code") val code: Int, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt index 183965a431..9d32f36491 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt @@ -1,13 +1,16 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class ExpressErrorResponse( @Json(name = "error") val error: ExpressError, ) +@JsonClass(generateAdapter = true) data class ExpressError( @Json(name = "code") val code: Int, @@ -19,6 +22,7 @@ data class ExpressError( val value: ExpressErrorValue?, ) +@JsonClass(generateAdapter = true) data class ExpressErrorValue( @Json(name = "minAmount") val minAmount: String?, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/SwapPair.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/SwapPair.kt index f96aef7dfc..9b96730278 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/SwapPair.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/SwapPair.kt @@ -1,8 +1,10 @@ package com.tangem.datasource.api.express.models.response import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.datasource.api.express.models.request.LeastTokenInfo +@JsonClass(generateAdapter = true) data class SwapPair( @Json(name = "from") val from: LeastTokenInfo, @@ -15,6 +17,7 @@ data class SwapPair( ) +@JsonClass(generateAdapter = true) data class SwapPairProvider( @Json(name = "providerId") val providerId: String, @@ -23,6 +26,7 @@ data class SwapPairProvider( val rateTypes: List, ) +@JsonClass(generateAdapter = false) enum class RateType { @Json(name = "float") FLOAT, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt index e558fdd934..03f14b108c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt @@ -3,8 +3,11 @@ package com.tangem.datasource.api.onramp.models.response import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class OnrampDataResponseWithTxDetails( + @Json(name = "dataResponse") val dataResponse: OnrampDataResponse, + @Json(name = "txDetails") val txDetails: OnrampTxDetails, ) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt index 301fd2421f..c701137912 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt @@ -60,6 +60,7 @@ data class OnrampStatusResponse( val countryCode: String, ) +@JsonClass(generateAdapter = false) enum class Status { @Json(name = "created") Created, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ActionRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ActionRequestBody.kt index 9063ff0b74..efd6c85900 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ActionRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ActionRequestBody.kt @@ -1,11 +1,13 @@ package com.tangem.datasource.api.stakekit.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.datasource.api.stakekit.models.request.ConstructTransactionRequestBody.GasArgs import com.tangem.datasource.api.stakekit.models.response.model.BalanceDTO import com.tangem.datasource.api.stakekit.models.response.model.TokenDTO import com.tangem.domain.staking.model.stakekit.action.StakingActionType +@JsonClass(generateAdapter = true) data class PendingActionRequestBody( @Json(name = "type") val type: StakingActionType, @@ -19,6 +21,7 @@ data class PendingActionRequestBody( val gasArgs: GasArgs? = null, // used only in estimate_gas request ) +@JsonClass(generateAdapter = true) data class ActionRequestBody( @Json(name = "integrationId") val integrationId: String, @@ -32,6 +35,7 @@ data class ActionRequestBody( val gasArgs: GasArgs? = null, // used only in estimate_gas request ) +@JsonClass(generateAdapter = true) data class ActionRequestBodyArgs( @Json(name = "amount") val amount: String, @@ -55,6 +59,7 @@ data class ActionRequestBodyArgs( val inputToken: TokenDTO? = null, ) +@JsonClass(generateAdapter = true) data class SignatureVerification( @Json(name = "message") val message: String, @@ -62,6 +67,7 @@ data class SignatureVerification( val signed: String, ) +@JsonClass(generateAdapter = false) enum class TronResource { @Json(name = "ENERGY") ENERGY, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/Address.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/Address.kt index 4e93f0353a..fc029f0fb1 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/Address.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/Address.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class Address( @Json(name = "address") val address: String, @@ -11,6 +13,7 @@ data class Address( val explorerUrl: String? = null, ) { + @JsonClass(generateAdapter = true) data class AdditionalAddresses( // cosmos-specific @Json(name = "cosmosPubKey") diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt index 60ee34b310..55290861d3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt @@ -1,14 +1,17 @@ package com.tangem.datasource.api.stakekit.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class ConstructTransactionRequestBody( @Json(name = "gasArgs") val gasArgs: GasArgs? = null, @Json(name = "ledgerWalletAPICompatible") val ledgerWalletAPICompatible: Boolean? = null, ) { + @JsonClass(generateAdapter = true) data class GasArgs( // cosmos-specific @Json(name = "gasPrice") diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/MultipleYieldBalancesRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/MultipleYieldBalancesRequestBody.kt index 1872f19673..7b4360ac11 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/MultipleYieldBalancesRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/MultipleYieldBalancesRequestBody.kt @@ -1,19 +1,23 @@ package com.tangem.datasource.api.stakekit.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class MultipleYieldBalancesRequestBody( @Json(name = "addresses") val addresses: Address, @Json(name = "args") val args: MultipleYieldBalancesRequestArgs, @Json(name = "integrationId") val integrationId: String, ) { + @JsonClass(generateAdapter = true) data class Address( @Json(name = "address") val address: String, @Json(name = "additionalAddresses") val additionalAddresses: AdditionalAddresses? = null, @Json(name = "explorerUrl") val explorerUrl: String, ) { + @JsonClass(generateAdapter = true) data class AdditionalAddresses( @Json(name = "cosmosPubKey") val cosmosPubKey: String? = null, @Json(name = "binanceBeaconAddress") val binanceBeaconAddress: String? = null, @@ -25,6 +29,7 @@ data class MultipleYieldBalancesRequestBody( ) } + @JsonClass(generateAdapter = true) data class MultipleYieldBalancesRequestArgs( @Json(name = "validatorAddresses") val validatorAddresses: List, ) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/RevenueOption.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/RevenueOption.kt index e396cd7ebb..0d68f38d13 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/RevenueOption.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/RevenueOption.kt @@ -1,8 +1,13 @@ package com.tangem.datasource.api.stakekit.models.request +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = false) enum class RevenueOption(val value: String) { - SUPPORTS_FEE("supportsFee"), - SUPPORTS_REV_SHARE("supportsRevShare"), + @Json(name = "SUPPORTS_FEE") SUPPORTS_FEE("supportsFee"), + + @Json(name = "SUPPORTS_REV_SHARE") SUPPORTS_REV_SHARE("supportsRevShare"), ; override fun toString(): String { diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/SubmitTransactionHashRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/SubmitTransactionHashRequestBody.kt index c07a103fe1..628ff3b1dc 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/SubmitTransactionHashRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/SubmitTransactionHashRequestBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class SubmitTransactionHashRequestBody( @Json(name = "hash") val hash: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/YieldBalanceRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/YieldBalanceRequestBody.kt index b950b05390..159d5b9d71 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/YieldBalanceRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/YieldBalanceRequestBody.kt @@ -1,13 +1,16 @@ package com.tangem.datasource.api.stakekit.models.request import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class YieldBalanceRequestBody( @Json(name = "addresses") val addresses: Address, @Json(name = "args") val args: YieldBalanceRequestArgs, @Json(name = "integrationId") val integrationId: String, ) { + @JsonClass(generateAdapter = true) data class YieldBalanceRequestArgs( @Json(name = "validatorAddresses") val validatorAddresses: List, ) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/NetworkTypeDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/NetworkTypeDTO.kt index c7fedd5ec8..486381bfcc 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/NetworkTypeDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/NetworkTypeDTO.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.response.model import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = false) enum class NetworkTypeDTO { @Json(name = "avalanche-c") AVALANCHE_C, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldBalanceWrapperDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldBalanceWrapperDTO.kt index 964bde08a7..a83ebdd931 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldBalanceWrapperDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldBalanceWrapperDTO.kt @@ -41,6 +41,7 @@ data class BalanceDTO( val providerId: String?, ) { + @JsonClass(generateAdapter = false) enum class BalanceTypeDTO { @Json(name = "available") AVAILABLE, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldDTO.kt index 88cc922696..5411bcc840 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/YieldDTO.kt @@ -85,7 +85,7 @@ data class YieldDTO( @Json(name = "preferred") val preferred: Boolean?, ) { - @JsonClass(generateAdapter = true) + @JsonClass(generateAdapter = false) enum class ValidatorStatusDTO { @Json(name = "active") ACTIVE, @@ -153,6 +153,7 @@ data class YieldDTO( val enabled: Boolean?, ) + @JsonClass(generateAdapter = false) enum class RewardScheduleDTO { @Json(name = "block") BLOCK, @@ -178,6 +179,7 @@ data class YieldDTO( UNKNOWN, } + @JsonClass(generateAdapter = false) enum class RewardClaimingDTO { @Json(name = "auto") AUTO, @@ -189,6 +191,7 @@ data class YieldDTO( } } + @JsonClass(generateAdapter = false) enum class RewardTypeDTO { @Json(name = "apy") APY, // compound rate diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionStatusDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionStatusDTO.kt index 040cab01ea..3695474070 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionStatusDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionStatusDTO.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.response.model.action import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = false) enum class StakingActionStatusDTO { @Json(name = "CANCELED") CANCELED, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionTypeDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionTypeDTO.kt index 3ba035dc64..7764d9b75b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionTypeDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/action/StakingActionTypeDTO.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.response.model.action import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = false) enum class StakingActionTypeDTO { @Json(name = "STAKE") STAKE, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/error/StakeKitErrorResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/error/StakeKitErrorResponse.kt index 086837d4b1..34e09b47d5 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/error/StakeKitErrorResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/error/StakeKitErrorResponse.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.response.model.error import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) class StakeKitErrorResponse( @Json(name = "message") val message: String? = null, @@ -26,6 +28,7 @@ class StakeKitErrorResponse( val tags: List? = null, ) +@JsonClass(generateAdapter = true) data class StakeKitErrorDetailsDTO( @Json(name = "arguments") val arguments: String? = null, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionStatusDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionStatusDTO.kt index f7a4f6d76d..83b7a61515 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionStatusDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionStatusDTO.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.response.model.transaction import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = false) enum class StakingTransactionStatusDTO { @Json(name = "NOT_FOUND") NOT_FOUND, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionTypeDTO.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionTypeDTO.kt index e79e28e7bb..d129f7c2b9 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionTypeDTO.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/response/model/transaction/StakingTransactionTypeDTO.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.stakekit.models.response.model.transaction import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = false) enum class StakingTransactionTypeDTO { @Json(name = "SWAP") SWAP, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CoinsResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CoinsResponse.kt index 0a19554bf0..de48c2a17a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CoinsResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CoinsResponse.kt @@ -1,14 +1,17 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class CoinsResponse( @Json(name = "imageHost") val imageHost: String?, @Json(name = "coins") val coins: List, @Json(name = "total") val total: Int, ) { + @JsonClass(generateAdapter = true) data class Coin( @Json(name = "id") val id: String, @Json(name = "name") val name: String, @@ -17,6 +20,7 @@ data class CoinsResponse( @Json(name = "networks") val networks: List = listOf(), ) { + @JsonClass(generateAdapter = true) data class Network( @Json(name = "networkId") val networkId: String, @Json(name = "contractAddress") val contractAddress: String? = null, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CreateUserTokensAccountBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CreateUserTokensAccountBody.kt index 7f88539dad..d5169e4793 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CreateUserTokensAccountBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CreateUserTokensAccountBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class CreateUserTokensAccountBody( @Json(name = "accountId") val id: Int, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CurrenciesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CurrenciesResponse.kt index c2799b1c2d..786d84a760 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CurrenciesResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/CurrenciesResponse.kt @@ -17,7 +17,7 @@ data class CurrenciesResponse( @Json(name = "rateBTC") val rateBTC: String, @Json(name = "unit") val unit: String, // $, €, ₽ @Json(name = "type") val type: String, - val iconSmallUrl: String? = null, - val iconMediumUrl: String? = null, + @Json(name = "iconSmallUrl") val iconSmallUrl: String? = null, + @Json(name = "iconMediumUrl") val iconMediumUrl: String? = null, ) } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/FeaturesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/FeaturesResponse.kt index 2d72021cd0..eed4e642cd 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/FeaturesResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/FeaturesResponse.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class FeaturesResponse( @Json(name = "send") val isNewSendEnabled: Boolean, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt index e1e9e07e40..8c42687aa8 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt @@ -1,13 +1,16 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class QuotesResponse( @Json(name = "quotes") val quotes: Map, ) { + @JsonClass(generateAdapter = true) data class Quote( @Json(name = "price") val price: BigDecimal?, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/RatesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/RatesResponse.kt index c743ff9147..4f51d97ee4 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/RatesResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/RatesResponse.kt @@ -1,8 +1,10 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass // rates.keys = networkId's +@JsonClass(generateAdapter = true) data class RatesResponse( @Json(name = "rates") val rates: Map, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ReferralResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ReferralResponse.kt index 2abb6e2a57..0327383d27 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ReferralResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ReferralResponse.kt @@ -1,30 +1,36 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import org.joda.time.LocalDate +@JsonClass(generateAdapter = true) data class ReferralResponse( @Json(name = "conditions") val conditions: Conditions, @Json(name = "referral") val referral: Referral?, @Json(name = "expectedAwards") val expectedAwards: ExpectedAwards?, ) { + @JsonClass(generateAdapter = true) data class Conditions( @Json(name = "discount") val discount: Discount, @Json(name = "awards") val awards: List, @Json(name = "tosLink") val tosLink: String, ) { + @JsonClass(generateAdapter = true) data class Discount( @Json(name = "amount") val amount: Int, @Json(name = "type") val discountType: String, ) + @JsonClass(generateAdapter = true) data class Award( @Json(name = "amount") val amount: Int, @Json(name = "token") val token: Token, ) { + @JsonClass(generateAdapter = true) data class Token( @Json(name = "id") val id: String, @Json(name = "name") val name: String, @@ -36,6 +42,7 @@ data class ReferralResponse( } } + @JsonClass(generateAdapter = true) data class Referral( @Json(name = "shareLink") val shareLink: String, @Json(name = "address") val address: String, @@ -44,11 +51,13 @@ data class ReferralResponse( @Json(name = "termsAcceptedAt") val termsAcceptedAt: String?, ) + @JsonClass(generateAdapter = true) data class ExpectedAwards( @Json(name = "numberOfWallets") val numberOfWallets: Int, @Json(name = "list") val list: List, ) { + @JsonClass(generateAdapter = true) data class AwardItem( @Json(name = "currency") val currency: String, @Json(name = "paymentDate") val paymentDate: LocalDate, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/SalesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/SalesResponse.kt index 1c3461f012..c9c923f823 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/SalesResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/SalesResponse.kt @@ -1,10 +1,12 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass /** * Sales response */ +@JsonClass(generateAdapter = true) data class SalesResponse( @Json(name = "sales") val sales: List, ) @@ -17,6 +19,7 @@ data class SalesResponse( * @property product product that is sales * @property notification optional notification for product */ +@JsonClass(generateAdapter = true) data class Sales( @Json(name = "id") val id: String, @Json(name = "state") val state: String, @@ -31,12 +34,14 @@ data class Sales( * @property code code that shows what product it is * @property name product name */ +@JsonClass(generateAdapter = true) data class Product( @Json(name = "id") val id: String, @Json(name = "code") val code: String, @Json(name = "name") val name: String, ) +@JsonClass(generateAdapter = true) data class Notification( @Json(name = "type") val type: String, @Json(name = "title") val title: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ShopResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ShopResponse.kt index 6331011641..1c1c273265 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ShopResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/ShopResponse.kt @@ -1,6 +1,7 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass /** * Shop response @@ -9,6 +10,7 @@ import com.squareup.moshi.Json * [REDACTED_AUTHOR] */ +@JsonClass(generateAdapter = true) data class ShopResponse( @Json(name = "canOrder") val isOrderingAvailable: Boolean, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/StartReferralBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/StartReferralBody.kt index 8f2c933f19..d18541e7f2 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/StartReferralBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/StartReferralBody.kt @@ -1,8 +1,10 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass /** Body for make user referral */ +@JsonClass(generateAdapter = true) data class StartReferralBody( @Json(name = "walletId") val walletId: String, @Json(name = "networkId") val networkId: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UpdateUserTokensAccountBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UpdateUserTokensAccountBody.kt index 2413b85d2b..0ba0f997d5 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UpdateUserTokensAccountBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UpdateUserTokensAccountBody.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class UpdateUserTokensAccountBody( @Json(name = "accountTitle") val title: String, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensAccountResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensAccountResponse.kt index 0e8341612d..f4e75add0a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensAccountResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensAccountResponse.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class UserTokensAccountResponse( @Json(name = "accountId") val id: Int, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensResponse.kt index dcd3107e06..46432b2d8c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensResponse.kt @@ -1,8 +1,10 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.common.extensions.calculateHashCode +@JsonClass(generateAdapter = true) data class UserTokensResponse( @Json(name = "version") val version: Int = 0, @Json(name = "group") val group: GroupType, @@ -10,6 +12,7 @@ data class UserTokensResponse( @Json(name = "tokens") val tokens: List = emptyList(), ) { + @JsonClass(generateAdapter = true) data class Token( @Json(name = "id") val id: String? = null, @Json(name = "networkId") val networkId: String, @@ -36,6 +39,7 @@ data class UserTokensResponse( ) } + @JsonClass(generateAdapter = false) enum class GroupType { @Json(name = "none") NONE, @@ -47,6 +51,7 @@ data class UserTokensResponse( NETWORK, } + @JsonClass(generateAdapter = false) enum class SortType { @Json(name = "balance") BALANCE, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensSettingsResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensSettingsResponse.kt index 9d5a0554cf..84b17f2677 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensSettingsResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/UserTokensSettingsResponse.kt @@ -1,7 +1,9 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class UserTokensSettingsResponse( @Json(name = "group") val group: UserTokensResponse.GroupType, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/v2/UserTokensResponseV2.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/v2/UserTokensResponseV2.kt index fdb8a0df7c..e03b095d4e 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/v2/UserTokensResponseV2.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/v2/UserTokensResponseV2.kt @@ -1,13 +1,16 @@ package com.tangem.datasource.api.tangemTech.models.v2 import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.datasource.api.tangemTech.models.UserTokensResponse +@JsonClass(generateAdapter = true) data class UserTokensResponseV2( @Json(name = "accounts") val accounts: List, ) { + @JsonClass(generateAdapter = true) data class TokensAccount( @Json(name = "id") val id: Int, diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/card/UsedCardInfo.kt b/core/datasource/src/main/java/com/tangem/datasource/local/card/UsedCardInfo.kt index 0f619b1eec..2e0064720d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/card/UsedCardInfo.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/card/UsedCardInfo.kt @@ -1,8 +1,16 @@ package com.tangem.datasource.local.card +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) data class UsedCardInfo( + @Json(name = "cardId") val cardId: String, + @Json(name = "isScanned") val isScanned: Boolean = false, + @Json(name = "isActivationStarted") val isActivationStarted: Boolean = false, + @Json(name = "isActivationFinished") val isActivationFinished: Boolean = false, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/config/providers/models/ProviderModel.kt b/core/datasource/src/main/java/com/tangem/datasource/local/config/providers/models/ProviderModel.kt index 328618476a..88071995fe 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/config/providers/models/ProviderModel.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/config/providers/models/ProviderModel.kt @@ -1,6 +1,7 @@ package com.tangem.datasource.local.config.providers.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass /** Config provider model */ sealed class ProviderModel { @@ -12,6 +13,7 @@ sealed class ProviderModel { * "url": "https://example.com" * } */ + @JsonClass(generateAdapter = true) data class Public( @Json(name = "url") val url: String, ) : ProviderModel() @@ -23,6 +25,7 @@ sealed class ProviderModel { * "name": "nownodes" * } */ + @JsonClass(generateAdapter = true) data class Private( @Json(name = "name") val name: String, ) : ProviderModel() diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt index 5e82b60126..0b65dbcbf0 100644 --- a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt +++ b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt @@ -6,6 +6,7 @@ import com.tangem.datasource.BuildConfig import com.tangem.datasource.api.common.AuthProvider import com.tangem.datasource.api.common.config.* import com.tangem.datasource.api.common.config.ApiConfig.Companion.DEBUG_BUILD_TYPE +import com.tangem.datasource.api.common.config.ApiConfig.Companion.DEBUG_PG_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.EXTERNAL_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.INTERNAL_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.MOCKED_BUILD_TYPE @@ -95,7 +96,9 @@ internal class ProdApiConfigsManagerTest(private val model: Model) { private fun createExpressModel(): Model { val environment = when (BuildConfig.BUILD_TYPE) { - DEBUG_BUILD_TYPE -> ApiEnvironment.DEV + DEBUG_BUILD_TYPE, + DEBUG_PG_BUILD_TYPE, + -> ApiEnvironment.DEV INTERNAL_BUILD_TYPE, MOCKED_BUILD_TYPE, -> ApiEnvironment.STAGE @@ -110,7 +113,9 @@ internal class ProdApiConfigsManagerTest(private val model: Model) { expected = ApiEnvironmentConfig( environment = environment, baseUrl = when (BuildConfig.BUILD_TYPE) { - DEBUG_BUILD_TYPE -> "[REDACTED_ENV_URL]" + DEBUG_BUILD_TYPE, + DEBUG_PG_BUILD_TYPE, + -> "[REDACTED_ENV_URL]" INTERNAL_BUILD_TYPE, MOCKED_BUILD_TYPE, -> "[REDACTED_ENV_URL]" diff --git a/data/manage-tokens/build.gradle.kts b/data/manage-tokens/build.gradle.kts index d2ff6fbc92..a8373e38ff 100644 --- a/data/manage-tokens/build.gradle.kts +++ b/data/manage-tokens/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -44,4 +46,6 @@ dependencies { /** Other */ implementation(deps.moshi.kotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) } \ No newline at end of file diff --git a/data/markets/build.gradle.kts b/data/markets/build.gradle.kts index 632a570f78..e52469954f 100644 --- a/data/markets/build.gradle.kts +++ b/data/markets/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -39,5 +41,7 @@ dependencies { implementation(deps.moshi.kotlin) implementation(deps.timber) implementation(deps.tangem.blockchain) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) // endregion } diff --git a/data/onramp/build.gradle.kts b/data/onramp/build.gradle.kts index 8d28d658eb..ac0f5ce3e9 100644 --- a/data/onramp/build.gradle.kts +++ b/data/onramp/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -41,6 +43,10 @@ dependencies { implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) + implementation(deps.kotlin.serialization) + implementation(projects.libs.blockchainSdk) implementation(projects.libs.crypto) diff --git a/data/settings/build.gradle.kts b/data/settings/build.gradle.kts index 6856b1236f..7997b79d5c 100644 --- a/data/settings/build.gradle.kts +++ b/data/settings/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -31,5 +33,7 @@ dependencies { implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) // endregion } diff --git a/data/staking/build.gradle.kts b/data/staking/build.gradle.kts index f79c7c6109..e793d36c78 100644 --- a/data/staking/build.gradle.kts +++ b/data/staking/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -45,6 +47,8 @@ dependencies { implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) implementation(projects.libs.blockchainSdk) implementation(projects.libs.crypto) diff --git a/data/tokens/build.gradle.kts b/data/tokens/build.gradle.kts index bf90a79e76..b268688860 100644 --- a/data/tokens/build.gradle.kts +++ b/data/tokens/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -48,4 +50,6 @@ dependencies { implementation(deps.timber) implementation(deps.retrofit) // For HttpException implementation(deps.androidx.paging.runtime) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) } \ No newline at end of file diff --git a/data/visa/build.gradle.kts b/data/visa/build.gradle.kts index e552eb58b0..5a74bcefe0 100644 --- a/data/visa/build.gradle.kts +++ b/data/visa/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -37,6 +39,8 @@ dependencies { implementation(deps.timber) implementation(deps.androidx.paging.runtime) implementation(deps.moshi.kotlin) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) /** Libs - Tangem */ implementation(deps.tangem.blockchain) diff --git a/data/visa/src/debug/kotlin/com/tangem/data/visa/config/VisaConfig.kt b/data/visa/src/debug/kotlin/com/tangem/data/visa/config/VisaConfig.kt index 8c5dba275a..187f4ca9e6 100644 --- a/data/visa/src/debug/kotlin/com/tangem/data/visa/config/VisaConfig.kt +++ b/data/visa/src/debug/kotlin/com/tangem/data/visa/config/VisaConfig.kt @@ -1,7 +1,9 @@ package com.tangem.data.visa.config import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) internal data class VisaConfig( @Json(name = "testnet") val testnet: Addresses, @@ -11,6 +13,7 @@ internal data class VisaConfig( val header: Header, ) { + @JsonClass(generateAdapter = true) data class Addresses( @Json(name = "paymentAccountRegistry") val paymentAccountRegistry: String, @@ -18,6 +21,7 @@ internal data class VisaConfig( val bridgeProcessor: String, ) + @JsonClass(generateAdapter = true) data class Header( @Json(name = "x-asn") val xAsn: String, diff --git a/domain/analytics/build.gradle.kts b/domain/analytics/build.gradle.kts index e5e871ea2f..f649160e1e 100644 --- a/domain/analytics/build.gradle.kts +++ b/domain/analytics/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(deps.plugins.kotlin.jvm) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -9,4 +10,6 @@ dependencies { implementation(projects.core.utils) implementation(projects.domain.core) implementation(projects.domain.wallets.models) + implementation(deps.moshi.kotlin) + kapt(deps.moshi.kotlin.codegen) } \ No newline at end of file diff --git a/domain/analytics/src/main/kotlin/com/tangem/domain/analytics/model/WalletBalanceState.kt b/domain/analytics/src/main/kotlin/com/tangem/domain/analytics/model/WalletBalanceState.kt index e9cde413a2..fab29c07ac 100644 --- a/domain/analytics/src/main/kotlin/com/tangem/domain/analytics/model/WalletBalanceState.kt +++ b/domain/analytics/src/main/kotlin/com/tangem/domain/analytics/model/WalletBalanceState.kt @@ -1,5 +1,13 @@ package com.tangem.domain.analytics.model +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = false) enum class WalletBalanceState { - ToppedUp, Empty, Error, + @Json(name = "ToppedUp") ToppedUp, + + @Json(name = "Empty") Empty, + + @Json(name = "Error") Error, } \ No newline at end of file diff --git a/domain/core/src/main/kotlin/com/tangem/domain/core/serialization/BigDecimalSerializer.kt b/domain/core/src/main/kotlin/com/tangem/domain/core/serialization/BigDecimalSerializer.kt index ea7727681f..639de2993b 100644 --- a/domain/core/src/main/kotlin/com/tangem/domain/core/serialization/BigDecimalSerializer.kt +++ b/domain/core/src/main/kotlin/com/tangem/domain/core/serialization/BigDecimalSerializer.kt @@ -7,7 +7,7 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import java.math.BigDecimal -internal object BigDecimalSerializer : KSerializer { +object BigDecimalSerializer : KSerializer { override val descriptor = PrimitiveSerialDescriptor(serialName = "BigDecimal", PrimitiveKind.STRING) diff --git a/domain/legacy/build.gradle.kts b/domain/legacy/build.gradle.kts index ab9922a279..f87e9728c8 100644 --- a/domain/legacy/build.gradle.kts +++ b/domain/legacy/build.gradle.kts @@ -1,6 +1,9 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -38,6 +41,7 @@ dependencies { implementation(deps.moshi.kotlin) implementation(deps.reKotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) /** Testing libraries */ testImplementation(deps.test.junit) diff --git a/domain/legacy/proguard-rules.pro b/domain/legacy/proguard-rules.pro deleted file mode 100644 index ff59496d81..0000000000 --- a/domain/legacy/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/BlockchainNetwork.kt b/domain/legacy/src/main/java/com/tangem/domain/common/BlockchainNetwork.kt index 2b487680f9..a1a8cd1f18 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/BlockchainNetwork.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/BlockchainNetwork.kt @@ -1,5 +1,6 @@ package com.tangem.domain.common +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token @@ -8,8 +9,11 @@ import com.tangem.common.extensions.calculateHashCode @JsonClass(generateAdapter = true) @Deprecated("Use Network model") data class BlockchainNetwork( + @Json(name = "blockchain") val blockchain: Blockchain, + @Json(name = "derivationPath") val derivationPath: String?, + @Json(name = "tokens") val tokens: List, ) { diff --git a/domain/models/build.gradle.kts b/domain/models/build.gradle.kts index 717c52e49c..fec72be756 100644 --- a/domain/models/build.gradle.kts +++ b/domain/models/build.gradle.kts @@ -1,6 +1,9 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.kotlin.jvm) alias(deps.plugins.kotlin.serialization) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -11,4 +14,5 @@ dependencies { implementation(deps.moshi.kotlin) implementation(deps.moshi.adapters) implementation(deps.kotlin.serialization) + kapt(deps.moshi.kotlin.codegen) } \ No newline at end of file diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt index 706e05a1e5..721fbd04da 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt @@ -1,5 +1,6 @@ package com.tangem.domain.models.scan +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass import com.tangem.common.card.Card import com.tangem.common.card.CardWallet @@ -17,20 +18,35 @@ import com.tangem.common.card.FirmwareVersion as SdkFirmwareVersion * */ @JsonClass(generateAdapter = true) data class CardDTO( + @Json(name = "cardId") val cardId: String, + @Json(name = "batchId") val batchId: String, + @Json(name = "cardPublicKey") val cardPublicKey: ByteArray, + @Json(name = "firmwareVersion") val firmwareVersion: FirmwareVersion, + @Json(name = "manufacturer") val manufacturer: Manufacturer, + @Json(name = "issuer") val issuer: Issuer, + @Json(name = "settings") val settings: Settings, + @Json(name = "userSettings") val userSettings: UserSettings?, + @Json(name = "linkedTerminalStatus") val linkedTerminalStatus: LinkedTerminalStatus, + @Json(name = "isAccessCodeSet") val isAccessCodeSet: Boolean, + @Json(name = "isPasscodeSet") val isPasscodeSet: Boolean?, + @Json(name = "supportedCurves") val supportedCurves: List, + @Json(name = "wallets") val wallets: List, + @Json(name = "attestation") val attestation: Attestation, + @Json(name = "backupStatus") val backupStatus: BackupStatus?, ) { constructor(card: Card) : this( @@ -92,16 +108,27 @@ data class CardDTO( @JsonClass(generateAdapter = true) data class Settings( + @Json(name = "securityDelay") val securityDelay: Int, + @Json(name = "maxWalletsCount") val maxWalletsCount: Int, + @Json(name = "isSettingAccessCodeAllowed") val isSettingAccessCodeAllowed: Boolean, + @Json(name = "isSettingPasscodeAllowed") val isSettingPasscodeAllowed: Boolean, + @Json(name = "isResettingUserCodesAllowed") val isResettingUserCodesAllowed: Boolean, + @Json(name = "isLinkedTerminalEnabled") val isLinkedTerminalEnabled: Boolean, + @Json(name = "isBackupAllowed") val isBackupAllowed: Boolean, + @Json(name = "supportedEncryptionModes") val supportedEncryptionModes: List, + @Json(name = "isFilesAllowed") val isFilesAllowed: Boolean, + @Json(name = "isHDWalletAllowed") val isHDWalletAllowed: Boolean, + @Json(name = "isKeysImportAllowed") val isKeysImportAllowed: Boolean = false, ) { constructor(settings: Card.Settings) : this( @@ -121,6 +148,7 @@ data class CardDTO( @JsonClass(generateAdapter = true) data class UserSettings( + @Json(name = "isUserCodeRecoveryAllowed") val isUserCodeRecoveryAllowed: Boolean, ) { constructor(userSettings: com.tangem.common.card.UserSettings) : this( @@ -130,9 +158,13 @@ data class CardDTO( @JsonClass(generateAdapter = true) data class FirmwareVersion( + @Json(name = "major") val major: Int, + @Json(name = "minor") val minor: Int, + @Json(name = "patch") val patch: Int, + @Json(name = "type") val type: SdkFirmwareVersion.FirmwareType, ) : Comparable { val stringValue: String @@ -161,8 +193,11 @@ data class CardDTO( @JsonClass(generateAdapter = true) data class Manufacturer( + @Json(name = "name") val name: String, + @Json(name = "manufactureDate") val manufactureDate: Date, + @Json(name = "signature") val signature: ByteArray?, ) { constructor(manufacturer: Card.Manufacturer) : this( @@ -195,7 +230,9 @@ data class CardDTO( @JsonClass(generateAdapter = true) data class Issuer( + @Json(name = "name") val name: String, + @Json(name = "publicKey") val publicKey: ByteArray, ) { constructor(issuer: Card.Issuer) : this( @@ -220,16 +257,27 @@ data class CardDTO( @JsonClass(generateAdapter = true) data class Wallet( + @Json(name = "publicKey") val publicKey: ByteArray, + @Json(name = "chainCode") val chainCode: ByteArray?, + @Json(name = "curve") val curve: EllipticCurve, + @Json(name = "settings") val settings: CardWallet.Settings, + @Json(name = "totalSignedHashes") val totalSignedHashes: Int?, + @Json(name = "remainingSignatures") val remainingSignatures: Int?, + @Json(name = "index") val index: Int, + @Json(name = "hasBackup") val hasBackup: Boolean, + @Json(name = "derivedKeys") val derivedKeys: Map, + @Json(name = "extendedPublicKey") val extendedPublicKey: ExtendedPublicKey?, + @Json(name = "isImported") val isImported: Boolean = false, ) { constructor(wallet: CardWallet) : this( @@ -281,9 +329,15 @@ data class CardDTO( } } + @JsonClass(generateAdapter = false) enum class LinkedTerminalStatus { + @Json(name = "Current") Current, + + @Json(name = "Other") Other, + + @Json(name = "None") None, ; diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt index 98954e2c5c..44caa2dc29 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt @@ -28,6 +28,26 @@ data class ScanResponse( typealias KeyWalletPublicKey = ByteArrayKey +@JsonClass(generateAdapter = false) enum class ProductType { - Note, Twins, Wallet, Start2Coin, Wallet2, Ring, Visa, + @Json(name = "Note") + Note, + + @Json(name = "Twins") + Twins, + + @Json(name = "Wallet") + Wallet, + + @Json(name = "Start2Coin") + Start2Coin, + + @Json(name = "Wallet2") + Wallet2, + + @Json(name = "Ring") + Ring, + + @Json(name = "Visa") + Visa, } \ No newline at end of file diff --git a/domain/onramp/models/build.gradle.kts b/domain/onramp/models/build.gradle.kts index dc13a99957..b717a7ae41 100644 --- a/domain/onramp/models/build.gradle.kts +++ b/domain/onramp/models/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(deps.plugins.kotlin.jvm) alias(deps.plugins.kotlin.serialization) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -9,6 +10,8 @@ dependencies { implementation(projects.domain.tokens.models) implementation(projects.domain.wallets.models) + implementation(deps.moshi.kotlin) + kapt(deps.moshi.kotlin.codegen) implementation(deps.kotlin.serialization) implementation(deps.jodatime) } \ No newline at end of file diff --git a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampCurrency.kt b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampCurrency.kt index 8b5bdbf34b..ffb0107b88 100644 --- a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampCurrency.kt +++ b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampCurrency.kt @@ -1,12 +1,20 @@ package com.tangem.domain.onramp.model +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import kotlinx.serialization.Serializable @Serializable +@JsonClass(generateAdapter = true) data class OnrampCurrency( + @Json(name = "name") val name: String, + @Json(name = "code") val code: String, + @Json(name = "image") val image: String?, + @Json(name = "precision") val precision: Int, + @Json(name = "unit") val unit: String, ) \ No newline at end of file diff --git a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/cache/OnrampTransaction.kt b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/cache/OnrampTransaction.kt index 61c4d5798e..da977b2004 100644 --- a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/cache/OnrampTransaction.kt +++ b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/cache/OnrampTransaction.kt @@ -1,5 +1,7 @@ package com.tangem.domain.onramp.model.cache +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.domain.core.serialization.SerializedBigDecimal import com.tangem.domain.onramp.model.OnrampCurrency import com.tangem.domain.onramp.model.OnrampStatus @@ -24,21 +26,38 @@ import com.tangem.domain.wallets.models.UserWalletId * @property paymentMethod Transaction payment method * @property paymentMethod Residency country */ +@JsonClass(generateAdapter = true) data class OnrampTransaction( + @Json(name = "txId") val txId: String, + @Json(name = "userWalletId") val userWalletId: UserWalletId, + @Json(name = "fromAmount") val fromAmount: SerializedBigDecimal, + @Json(name = "fromCurrency") val fromCurrency: OnrampCurrency, + @Json(name = "toAmount") val toAmount: SerializedBigDecimal, + @Json(name = "toCurrencyId") val toCurrencyId: String, + @Json(name = "status") val status: OnrampStatus.Status, + @Json(name = "externalTxUrl") val externalTxUrl: String?, + @Json(name = "externalTxId") val externalTxId: String?, + @Json(name = "timestamp") val timestamp: Long, + @Json(name = "providerName") val providerName: String, // todo onramp fix after SwapProvider moved to own module + @Json(name = "providerImageUrl") val providerImageUrl: String, // todo onramp fix after SwapProvider moved to own module + @Json(name = "providerType") val providerType: String, // todo onramp fix after SwapProvider moved to own module + @Json(name = "redirectUrl") val redirectUrl: String, + @Json(name = "paymentMethod") val paymentMethod: String, + @Json(name = "residency") val residency: String, ) \ No newline at end of file diff --git a/domain/staking/models/build.gradle.kts b/domain/staking/models/build.gradle.kts index 7558c5ca61..68f2c9b6df 100644 --- a/domain/staking/models/build.gradle.kts +++ b/domain/staking/models/build.gradle.kts @@ -1,6 +1,9 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.kotlin.jvm) alias(deps.plugins.kotlin.serialization) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -9,4 +12,7 @@ dependencies { implementation(deps.kotlin.serialization) implementation(deps.jodatime) + + implementation(deps.moshi) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) } \ No newline at end of file diff --git a/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/UnsubmittedTransactionMetadata.kt b/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/UnsubmittedTransactionMetadata.kt index e57067b382..811b2ba5d1 100644 --- a/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/UnsubmittedTransactionMetadata.kt +++ b/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/UnsubmittedTransactionMetadata.kt @@ -1,6 +1,12 @@ package com.tangem.domain.staking.model +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) data class UnsubmittedTransactionMetadata( + @Json(name = "transactionHash") val transactionHash: String, + @Json(name = "transactionId") val transactionId: String, ) \ No newline at end of file diff --git a/domain/wallets/models/build.gradle.kts b/domain/wallets/models/build.gradle.kts index 1b3ce4dfaf..9c259ee6b6 100644 --- a/domain/wallets/models/build.gradle.kts +++ b/domain/wallets/models/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(deps.plugins.kotlin.jvm) alias(deps.plugins.kotlin.serialization) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -15,5 +16,8 @@ dependencies { // region Other libraries implementation(deps.kotlin.serialization) + implementation(deps.moshi.kotlin) + implementation(deps.timber) + kapt(deps.moshi.kotlin.codegen) // endregion } \ No newline at end of file diff --git a/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWallet.kt b/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWallet.kt index 4904076698..95b44fff95 100644 --- a/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWallet.kt +++ b/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWallet.kt @@ -1,5 +1,7 @@ package com.tangem.domain.wallets.models +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse @@ -14,13 +16,21 @@ import com.tangem.domain.models.scan.ScanResponse * @property isMultiCurrency Indicates whether this user wallet can work with more than one currency * @property scanResponse [ScanResponse] of primary user's wallet card. */ +@JsonClass(generateAdapter = true) data class UserWallet( + @Json(name = "name") val name: String, + @Json(name = "walletId") val walletId: UserWalletId, + @Json(name = "artworkUrl") val artworkUrl: String, + @Json(name = "cardsInWallet") val cardsInWallet: Set, + @Json(name = "isMultiCurrency") val isMultiCurrency: Boolean, + @Json(name = "hasBackupError") val hasBackupError: Boolean, + @Json(name = "scanResponse") val scanResponse: ScanResponse, // TODO: Replace with [com.tangem.domain.models.scan.CardDTO] ) { diff --git a/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWalletId.kt b/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWalletId.kt index 4ea8ab824c..49e01f0922 100644 --- a/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWalletId.kt +++ b/domain/wallets/models/src/main/java/com/tangem/domain/wallets/models/UserWalletId.kt @@ -1,11 +1,17 @@ package com.tangem.domain.wallets.models +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.common.extensions.hexToBytes import com.tangem.common.extensions.toHexString import kotlinx.serialization.Serializable @Serializable -data class UserWalletId(val stringValue: String) { +@JsonClass(generateAdapter = true) +data class UserWalletId( + @Json(name = "stringValue") + val stringValue: String, +) { val value = stringValue.hexToBytes() diff --git a/features/qr-scanning/impl/proguard-rules.pro b/features/qr-scanning/impl/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/features/qr-scanning/impl/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/features/swap/data/build.gradle.kts b/features/swap/data/build.gradle.kts index f9d6ff0013..805cd27a59 100644 --- a/features/swap/data/build.gradle.kts +++ b/features/swap/data/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -27,6 +29,8 @@ dependencies { implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.arrow.core) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) /** Domain */ implementation(projects.domain.tokens.models) diff --git a/features/swap/domain/build.gradle.kts b/features/swap/domain/build.gradle.kts index 55f5e6eea3..bbf66619e0 100644 --- a/features/swap/domain/build.gradle.kts +++ b/features/swap/domain/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -51,4 +53,5 @@ dependencies { implementation(deps.tangem.blockchain) implementation(deps.tangem.card.core) implementation(deps.moshi) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) } \ No newline at end of file diff --git a/features/swap/domain/models/build.gradle.kts b/features/swap/domain/models/build.gradle.kts index 431789f3d2..dd42b09ca2 100644 --- a/features/swap/domain/models/build.gradle.kts +++ b/features/swap/domain/models/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -21,5 +23,7 @@ dependencies { /** Other Libraries **/ implementation(deps.kotlin.serialization) implementation(deps.arrow.core) + implementation(deps.moshi.kotlin) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) } \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/Currency.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/Currency.kt deleted file mode 100644 index 40cf980a73..0000000000 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/Currency.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.tangem.feature.swap.domain.models.domain - -import kotlinx.serialization.Serializable - -@Serializable -sealed class Currency { - abstract val id: String - abstract val name: String - abstract val symbol: String - abstract val networkId: String - abstract val logoUrl: String - - @Serializable - data class NativeToken( - override val id: String, - override val name: String, - override val symbol: String, - override val networkId: String, - override val logoUrl: String, - ) : Currency() - - @Serializable - data class NonNativeToken( - override val id: String, - override val name: String, - override val symbol: String, - override val networkId: String, - override val logoUrl: String, - val contractAddress: String, - val decimalCount: Int, - ) : Currency() -} - -fun Currency.isNonNative(): Boolean { - return this is Currency.NonNativeToken -} \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt deleted file mode 100644 index 41d7826e07..0000000000 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.tangem.feature.swap.domain.models.domain - -data class ExchangeQuote( - val toAmount: String, - val allowanceContract: String?, -) \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt index 95cc0f4d22..161326f0bb 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt @@ -1,28 +1,67 @@ package com.tangem.feature.swap.domain.models.domain +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) data class ExchangeStatusModel( + @Json(name = "providerId") val providerId: String, + @Json(name = "status") val status: ExchangeStatus? = null, + @Json(name = "txId") val txId: String? = null, + @Json(name = "txExternalUrl") val txExternalUrl: String? = null, + @Json(name = "txExternalId") val txExternalId: String? = null, + @Json(name = "refundNetwork") val refundNetwork: String? = null, + @Json(name = "refundContractAddress") val refundContractAddress: String? = null, ) +@JsonClass(generateAdapter = false) enum class ExchangeStatus { + @Json(name = "New") New, + + @Json(name = "Waiting") Waiting, + + @Json(name = "WaitingTxHash") WaitingTxHash, + + @Json(name = "Confirming") Confirming, + + @Json(name = "Verifying") Verifying, + + @Json(name = "Exchanging") Exchanging, + + @Json(name = "Failed") Failed, + + @Json(name = "Sending") Sending, + + @Json(name = "Finished") Finished, + + @Json(name = "Refunded") Refunded, + + @Json(name = "Cancelled") Cancelled, + + @Json(name = "TxFailed") TxFailed, + + @Json(name = "Unknown") Unknown, + + @Json(name = "Paused") Paused, } \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedLastSwappedCryptoCurrency.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedLastSwappedCryptoCurrency.kt index 2db24c66eb..357ec53b20 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedLastSwappedCryptoCurrency.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedLastSwappedCryptoCurrency.kt @@ -1,6 +1,12 @@ package com.tangem.feature.swap.domain.models.domain +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) data class SavedLastSwappedCryptoCurrency( + @Json(name = "userWalletId") val userWalletId: String, + @Json(name = "cryptoCurrencyId") val cryptoCurrencyId: String, ) \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedSwapTransactionListModel.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedSwapTransactionListModel.kt index d771aa4ecb..39fc4ef525 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedSwapTransactionListModel.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SavedSwapTransactionListModel.kt @@ -1,5 +1,7 @@ package com.tangem.feature.swap.domain.models.domain +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.domain.tokens.model.CryptoCurrency import java.math.BigDecimal @@ -17,21 +19,35 @@ data class SavedSwapTransactionListModel( * IMPORTANT !!! * This is internal model for storing swap tx. It should not be used outside. */ +@JsonClass(generateAdapter = true) data class SavedSwapTransactionListModelInner( + @Json(name = "userWalletId") val userWalletId: String, + @Json(name = "fromCryptoCurrencyId") val fromCryptoCurrencyId: String, + @Json(name = "toCryptoCurrencyId") val toCryptoCurrencyId: String, + @Json(name = "fromTokensResponse") val fromTokensResponse: UserTokensResponse.Token? = null, + @Json(name = "toTokensResponse") val toTokensResponse: UserTokensResponse.Token? = null, + @Json(name = "transactions") val transactions: List, ) // TODO refactor to use separate models to store +@JsonClass(generateAdapter = true) data class SavedSwapTransactionModel( + @Json(name = "txId") val txId: String, + @Json(name = "timestamp") val timestamp: Long, + @Json(name = "fromCryptoAmount") val fromCryptoAmount: BigDecimal, + @Json(name = "toCryptoAmount") val toCryptoAmount: BigDecimal, + @Json(name = "provider") val provider: SwapProvider, + @Json(name = "status") val status: ExchangeStatusModel? = null, ) \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SwapPairLeast.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SwapPairLeast.kt index 561858f9f1..abbcf27ea2 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SwapPairLeast.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/SwapPairLeast.kt @@ -1,5 +1,7 @@ package com.tangem.feature.swap.domain.models.domain +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.domain.tokens.model.CryptoCurrencyStatus import java.math.BigDecimal @@ -31,22 +33,35 @@ data class CryptoCurrencySwapInfo( * Uses to store transaction data in datastore, when extends - should always add default value * to support backward compatibility */ +@JsonClass(generateAdapter = true) data class SwapProvider( + @Json(name = "providerId") val providerId: String, + @Json(name = "rateTypes") val rateTypes: List = emptyList(), + @Json(name = "name") val name: String, + @Json(name = "type") val type: ExchangeProviderType, + @Json(name = "imageLarge") val imageLarge: String, + @Json(name = "termsOfUse") val termsOfUse: String?, + @Json(name = "privacyPolicy") val privacyPolicy: String?, + @Json(name = "isRecommended") val isRecommended: Boolean = false, + @Json(name = "slippage") val slippage: BigDecimal?, ) +@JsonClass(generateAdapter = false) enum class ExchangeProviderType(val providerName: String) { - DEX("DEX"), - CEX("CEX"), - DEX_BRIDGE("DEX/Bridge"), + @Json(name = "DEX") DEX("DEX"), + + @Json(name = "CEX") CEX("CEX"), + + @Json(name = "DEX_BRIDGE") DEX_BRIDGE("DEX/Bridge"), } /** @@ -54,7 +69,9 @@ enum class ExchangeProviderType(val providerName: String) { * * Current implementation contains only float type, fixed will be supported later. */ +@JsonClass(generateAdapter = false) enum class RateType { - FLOAT, - FIXED, + @Json(name = "FLOAT") FLOAT, + + @Json(name = "FIXED") FIXED, } \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/TransactionModel.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/TransactionModel.kt deleted file mode 100644 index ac5b7b2b05..0000000000 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/TransactionModel.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.tangem.feature.swap.domain.models.domain - -/** - * Transaction model - * - * @property fromWalletAddress wallet from address (transactions will be sent from this address) - * @property toWalletAddress transactions will be sent to our(1inch) contract address - * @property data The encoded data to call the approve method on the swapped token contract - * @property value Native token value in WEI (for approve is always 0) - * @property gasPrice maximum amount of gas for a swap default: 11500000; max: 11500000 - * @property gas estimated amount of the gas limit, increase this value by 25% - */ -data class TransactionModel( - val fromWalletAddress: String, - val toWalletAddress: String, - val data: String, - val value: String, - val gasPrice: String, - val gas: String, -) \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataState.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataState.kt deleted file mode 100644 index 8d17d05808..0000000000 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataState.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.tangem.feature.swap.domain.models.ui - -import com.tangem.feature.swap.domain.models.domain.Currency - -data class TokensDataState( - val preselectTokens: PreselectTokens, - val foundTokensState: FoundTokensState, -) - -data class FoundTokensState( - val tokensInWallet: List, - val loadedTokens: List, -) - -data class PreselectTokens( - val fromToken: Currency, - val toToken: Currency, -) - -data class TokenWithBalance( - val token: Currency, - val tokenBalanceData: TokenBalanceData? = null, -) - -data class TokenBalanceData( - val amount: String?, - val amountEquivalent: String?, -) \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/VisaTxDetailsBottomSheet.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/VisaTxDetailsBottomSheet.kt index 441f6e8c56..4511cf32ef 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/VisaTxDetailsBottomSheet.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/VisaTxDetailsBottomSheet.kt @@ -107,32 +107,33 @@ private fun TransactionBlock(transaction: VisaTxDetailsBottomSheetConfig.Transac ) } +@Suppress("LongMethod") @Composable private fun BlockchainRequestBlock(request: VisaTxDetailsBottomSheetConfig.Request, modifier: Modifier = Modifier) { BlockContent( modifier = modifier, title = stringReference(value = "Blockchain request"), description = { - if (request.onExploreClick == null) return - - Row( - modifier = Modifier.clickable(onClick = request.onExploreClick), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(space = TangemTheme.dimens.spacing4), - ) { - Icon( - painter = painterResource(id = R.drawable.ic_compass_24), - contentDescription = null, - modifier = Modifier.size(size = TangemTheme.dimens.size18), - tint = TangemTheme.colors.icon.informative, - ) - Text( - text = "Explore", - color = TangemTheme.colors.text.tertiary, - style = TangemTheme.typography.caption1, - ) + if (request.onExploreClick != null) { + Row( + modifier = Modifier.clickable(onClick = request.onExploreClick), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(space = TangemTheme.dimens.spacing4), + ) { + Icon( + painter = painterResource(id = R.drawable.ic_compass_24), + contentDescription = null, + modifier = Modifier.size(size = TangemTheme.dimens.size18), + tint = TangemTheme.colors.icon.informative, + ) + Text( + text = "Explore", + color = TangemTheme.colors.text.tertiary, + style = TangemTheme.typography.caption1, + ) + } + SpacerW12() } - SpacerW12() }, content = { BlockItem( diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 476dbba56a..f78d65d4a1 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -57,11 +57,11 @@ kotlin-immutable-collections = "0.3.5" kotsonGsonExt = "2.5.0" lottie = "3.4.0" lottie-compose = "6.6.0" -moshi = "1.12.0" +moshi = "1.15.1" okhttp = "4.9.3" rekotlin = "1.0.4" -retrofit = "2.8.1" -retrofitMoshiConverter = "2.6.0" +retrofit = "2.11.0" +retrofitMoshiConverter = "2.9.0" spongycastleCryptoCore = "1.58.0.0" timber = "4.7.1" viewBindingDelegate = "1.5.9" @@ -238,11 +238,13 @@ material = { module = "com.google.android.material:material", version.ref = "goo moshi = { module = "com.squareup.moshi:moshi", version.ref = "moshi" } moshi-kotlin = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" } moshi-adapters = { module = "com.squareup.moshi:moshi-adapters", version.ref = "moshi" } +moshi-kotlin-codegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi" } okHttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } okHttp-prettyLogging = { module = "com.github.ihsanbal:LoggingInterceptor", version.ref = "okHttp-prettyLogging" } spongecastle-core = { module = "com.madgag.spongycastle:core", version.ref = "spongycastleCryptoCore" } reKotlin = { module = "org.rekotlin:rekotlin", version.ref = "rekotlin" } retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } +retrofit-response-type-keeper = { module = "com.squareup.retrofit2:response-type-keeper", version.ref = "retrofit" } retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "retrofitMoshiConverter" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } viewBindingDelegate = { module = "com.github.kirich1409:viewbindingpropertydelegate-noreflection", version.ref = "viewBindingDelegate" } diff --git a/libs/blockchain-sdk/build.gradle.kts b/libs/blockchain-sdk/build.gradle.kts index 96dcda0905..bdbb9dde4f 100644 --- a/libs/blockchain-sdk/build.gradle.kts +++ b/libs/blockchain-sdk/build.gradle.kts @@ -1,3 +1,5 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) @@ -31,6 +33,8 @@ dependencies { implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.timber) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) // endregion // region Firebase libraries diff --git a/libs/visa/build.gradle.kts b/libs/visa/build.gradle.kts index 8ef254a4e4..eb6f922306 100644 --- a/libs/visa/build.gradle.kts +++ b/libs/visa/build.gradle.kts @@ -1,6 +1,9 @@ +import com.tangem.plugin.configuration.configurations.extension.kaptForObfuscatingVariants + plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) + alias(deps.plugins.kotlin.kapt) id("configuration") } @@ -21,6 +24,8 @@ dependencies { implementation(deps.okHttp.prettyLogging) implementation(deps.retrofit) implementation(deps.retrofit.moshi) + kaptForObfuscatingVariants(deps.moshi.kotlin.codegen) + kaptForObfuscatingVariants(deps.retrofit.response.type.keeper) /** Libs - Other */ implementation(deps.web3j.core) diff --git a/libs/visa/src/main/kotlin/com/tangem/lib/visa/model/VisaTxHistoryResponse.kt b/libs/visa/src/main/kotlin/com/tangem/lib/visa/model/VisaTxHistoryResponse.kt index dcec060570..bf722ca7bf 100644 --- a/libs/visa/src/main/kotlin/com/tangem/lib/visa/model/VisaTxHistoryResponse.kt +++ b/libs/visa/src/main/kotlin/com/tangem/lib/visa/model/VisaTxHistoryResponse.kt @@ -1,9 +1,11 @@ package com.tangem.lib.visa.model import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import org.joda.time.DateTime import java.math.BigDecimal +@JsonClass(generateAdapter = true) data class VisaTxHistoryResponse( @Json(name = "card_wallet_address") val cardWalletAddress: String, @@ -11,6 +13,7 @@ data class VisaTxHistoryResponse( val transactions: List, ) { + @JsonClass(generateAdapter = true) data class Transaction( @Json(name = "auth_code") val authCode: String?, @@ -52,6 +55,7 @@ data class VisaTxHistoryResponse( val transactionType: String, ) { + @JsonClass(generateAdapter = true) data class Request( @Json(name = "billing_amount") val billingAmount: BigDecimal, diff --git a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/AppExtensionConfigurations.kt b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/AppExtensionConfigurations.kt index fb3e3e15a1..a4bc580673 100644 --- a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/AppExtensionConfigurations.kt +++ b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/AppExtensionConfigurations.kt @@ -71,12 +71,15 @@ private fun AndroidBuildType.configureBuildVariant(appExtension: AppExtension, b when (buildType) { BuildType.Release -> { isDebuggable = false - isMinifyEnabled = false - proguardFiles(appExtension.getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") } BuildType.Debug -> { isDebuggable = true - isMinifyEnabled = false + } + BuildType.DebugPG -> { + // build is not debuggable to let R8 make optimizations + // otherwise, only shrinking will be applied + matchingFallbacks.add(BuildType.Debug.id) + signingConfig = appExtension.signingConfigs.getByName(BuildType.Debug.id) } BuildType.Internal, BuildType.External, @@ -95,6 +98,9 @@ private fun AndroidBuildType.configureBuildVariant(appExtension: AppExtension, b versionNameSuffix = buildType.versionSuffix?.let { "-$it" } applicationIdSuffix = buildType.appIdSuffix?.let { ".$it" } + isMinifyEnabled = buildType.obfuscating + isShrinkResources = buildType.obfuscating + proguardFiles("proguard-rules.pro", appExtension.getDefaultProguardFile("proguard-android.txt")) } private fun AppExtension.configurePackagingOptions() { @@ -104,6 +110,7 @@ private fun AppExtension.configurePackagingOptions() { excludes += "lib/x86_64/freebsd/libscrypt.so" excludes += "lib/x86_64/linux/libscrypt.so" excludes += "META-INF/gradle/incremental.annotation.processors" + pickFirsts += "google/protobuf/*" merges += "paymentrequest.proto" } diff --git a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/DependencyHandler.kt b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/DependencyHandler.kt new file mode 100644 index 0000000000..c6a34d5600 --- /dev/null +++ b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/DependencyHandler.kt @@ -0,0 +1,25 @@ +package com.tangem.plugin.configuration.configurations.extension + +import com.android.build.gradle.internal.plugins.AppPlugin +import com.android.build.gradle.internal.plugins.LibraryPlugin +import com.tangem.plugin.configuration.model.BuildType +import org.gradle.api.Project + +fun Project.kaptForObfuscatingVariants(dependencyNotation: Any) { + plugins.all { + when (this) { + is AppPlugin -> { + BuildType.values().filter { it.obfuscating }.forEach { + dependencies.add(it.createKaptConfiguration(), dependencyNotation) + } + } + is LibraryPlugin -> { + BuildType.values().filter { it.obfuscating }.forEach { + dependencies.add(it.createKaptConfiguration(), dependencyNotation) + } + } + } + } +} + +private fun BuildType.createKaptConfiguration() = "kapt" + name.replaceFirstChar(Char::titlecase) \ No newline at end of file diff --git a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/LibraryExtensionConfigurations.kt b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/LibraryExtensionConfigurations.kt index f82cfcf71e..572a39af72 100644 --- a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/LibraryExtensionConfigurations.kt +++ b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/configurations/extension/LibraryExtensionConfigurations.kt @@ -45,6 +45,7 @@ private fun LibraryExtension.configurePackagingOptions() { excludes += "lib/x86_64/freebsd/libscrypt.so" excludes += "lib/x86_64/linux/libscrypt.so" excludes += "META-INF/gradle/incremental.annotation.processors" + pickFirsts += "google/protobuf/*" } } } \ No newline at end of file diff --git a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/model/BuildType.kt b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/model/BuildType.kt index 27271c7cea..1ca95f8b20 100644 --- a/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/model/BuildType.kt +++ b/plugins/configuration/src/main/kotlin/com/tangem/plugin/configuration/model/BuildType.kt @@ -4,6 +4,7 @@ internal enum class BuildType( val id: String, val appIdSuffix: String? = null, val versionSuffix: String? = null, + val obfuscating: Boolean = false, val configFields: List, ) { @@ -31,6 +32,19 @@ internal enum class BuildType( ), ), + DebugPG( + id = "debugPG", + appIdSuffix = "debug", + obfuscating = true, + configFields = listOf( + BuildConfigField.Environment(value = "dev"), + BuildConfigField.TestActionEnabled(isEnabled = true), + BuildConfigField.LogEnabled(isEnabled = true), + BuildConfigField.TesterMenuAvailability(isEnabled = true), + BuildConfigField.MockDataSource(isEnabled = false), + ), + ), + /** * Build type for QA and business *