From 834a7e40c55749e0a7dc3b3561f3a61aaab8af7e Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 21 Nov 2022 20:39:13 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../details/ui/details/DetailsScreenState.kt | 4 ++-- .../details/ui/details/DetailsViewModel.kt | 3 +++ .../tap/network/auth/AuthProviderImpl.kt | 6 ++++- app/src/main/res/drawable/ic_add_friends.xml | 9 ++++++++ .../datasource/api/AuthHeaderInterceptor.kt | 11 +++++----- .../datasource/api/referral/ReferralApi.kt | 7 +++--- .../api/referral/models/ReferralResponse.kt | 13 +++++------ .../com/tangem/datasource/di/NetworkModule.kt | 16 +++++++++----- .../main/java/com/tangem/utils/Extensions.kt | 9 ++++++++ .../referral/converters/ReferralConverter.kt | 10 ++++++--- .../feature/referral/ui/ReferralScreen.kt | 2 +- .../referral/viewmodels/ReferralViewModel.kt | 22 ++++++++++++------- .../java/com/tangem/lib/auth/AuthProvider.kt | 4 +++- 13 files changed, 78 insertions(+), 38 deletions(-) create mode 100644 app/src/main/res/drawable/ic_add_friends.xml create mode 100644 core/utils/src/main/java/com/tangem/utils/Extensions.kt diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt index a92efc7e2b..470b9b9454 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt @@ -20,14 +20,14 @@ enum class SettingsElement( WalletConnect(R.drawable.ic_walletconnect, R.string.wallet_connect_title), Chat(R.drawable.ic_chat, R.string.details_ask_a_question), SendFeedback(R.drawable.ic_comment, R.string.details_row_title_send_feedback), + ReferralProgram(R.drawable.ic_add_friends, R.string.details_referral_title), CardSettings(R.drawable.ic_card_settings, R.string.card_settings_title), AppCurrency(R.drawable.ic_currency, R.string.details_row_title_currency), AppSettings(R.drawable.ic_settings, R.string.app_settings_title), LinkMoreCards(R.drawable.ic_more_cards, R.string.details_row_title_create_backup), TermsOfService(R.drawable.ic_text, R.string.disclaimer_title), // General Terms of Service of the App TermsOfUse(R.drawable.ic_text, R.string.details_row_title_card_tou), // Terms of Use for S2C cards only - PrivacyPolicy(R.drawable.ic_lock, R.string.details_row_privacy_policy), - ; + PrivacyPolicy(R.drawable.ic_lock, R.string.details_row_privacy_policy); } data class SocialNetworkLink( diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt index c48aeab31d..98777628d8 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt @@ -95,6 +95,9 @@ class DetailsViewModel(private val store: Store) { SettingsElement.PrivacyPolicy -> { // TODO: To be available later } + SettingsElement.ReferralProgram -> { + store.dispatch(NavigationAction.NavigateTo(AppScreen.ReferralProgram)) + } } } diff --git a/app/src/main/java/com/tangem/tap/network/auth/AuthProviderImpl.kt b/app/src/main/java/com/tangem/tap/network/auth/AuthProviderImpl.kt index 57156ad5fa..d4bbdd61bd 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/AuthProviderImpl.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/AuthProviderImpl.kt @@ -6,7 +6,11 @@ import com.tangem.tap.proxy.AppStateHolder class AuthProviderImpl(private val appStateHolder: AppStateHolder) : AuthProvider { - override fun getAuthToken(): String { + override fun getCardPublicKey(): String { return appStateHolder.scanResponse?.card?.cardPublicKey?.toHexString() ?: "" } + + override fun getCardId(): String { + return appStateHolder.scanResponse?.card?.cardId ?: "" + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_friends.xml b/app/src/main/res/drawable/ic_add_friends.xml new file mode 100644 index 0000000000..d1457f8210 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_friends.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/AuthHeaderInterceptor.kt b/core/datasource/src/main/java/com/tangem/datasource/api/AuthHeaderInterceptor.kt index e4d60edceb..5a50c5215e 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/AuthHeaderInterceptor.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/AuthHeaderInterceptor.kt @@ -9,16 +9,17 @@ class AuthHeaderInterceptor( ) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { - val request = chain.request().newBuilder().apply { - addHeader( - HEADER_CARD_KEY, authProvider.getAuthToken(), - ) - }.build() + val request = chain.request() + .newBuilder() + .addHeader(HEADER_CARD_KEY, authProvider.getCardPublicKey()) + .addHeader(HEADER_CARD_ID, authProvider.getCardId()) + .build() return chain.proceed(request) } companion object { const val HEADER_CARD_KEY = "card_public_key" + const val HEADER_CARD_ID = "card_id" } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt index e7eaf31343..c3b7ff2200 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt @@ -5,17 +5,16 @@ import com.tangem.datasource.api.referral.models.StartReferralBody import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.POST -import retrofit2.http.Query +import retrofit2.http.Path /** * Api for referral feature */ -interface -ReferralApi { +interface ReferralApi { /** Returns referral status by [walletId] */ @GET("referral/{walletId}") - suspend fun getReferralStatus(@Query("name") walletId: String): ReferralResponse + suspend fun getReferralStatus(@Path("walletId") walletId: String): ReferralResponse /** Make user referral, requires [StartReferralBody] */ @POST("referral") diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/referral/models/ReferralResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/referral/models/ReferralResponse.kt index a21aee2286..3066ab45a7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/referral/models/ReferralResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/referral/models/ReferralResponse.kt @@ -1,6 +1,7 @@ package com.tangem.datasource.api.referral.models import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import org.joda.time.DateTime /** @@ -21,7 +22,7 @@ data class Conditions( data class Discount( @Json(name = "amount") val amount: Int, - @Json(name = "discountType") val discountType: DiscountType, + @Json(name = "type") val discountType: String, ) data class Award( @@ -41,11 +42,7 @@ data class Token( data class Referral( @Json(name = "shareLink") val shareLink: String, @Json(name = "address") val address: String, - @Json(name = "promocode") val promocode: String, + @Json(name = "promoCode") val promocode: String, @Json(name = "walletsPurchased") val walletsPurchased: Int, - @Json(name = "termsAcceptedAt") val termsAcceptedAt: DateTime?, -) - -enum class DiscountType { - PERCENTAGE, VALUE -} \ No newline at end of file + @Json(name = "termsAcceptedAt") val termsAcceptedAt: String?, +) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt index fd14d8802a..6fed866ecc 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt @@ -1,5 +1,7 @@ package com.tangem.datasource.di +import com.squareup.moshi.Moshi +import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import com.tangem.datasource.api.AuthHeaderInterceptor import com.tangem.datasource.api.referral.ReferralApi import com.tangem.lib.auth.AuthProvider @@ -22,7 +24,11 @@ class NetworkModule { fun provideReferralApi(okHttpClient: OkHttpClient): ReferralApi { return Retrofit.Builder() .addConverterFactory( - MoshiConverterFactory.create(), + MoshiConverterFactory.create( + Moshi.Builder() + .addLast(KotlinJsonAdapterFactory()) + .build(), + ), ) .baseUrl(PROD_REFERRAL_BASE_URL) .client(okHttpClient) @@ -34,14 +40,14 @@ class NetworkModule { @Singleton fun provideOkHttpClient(authProvider: AuthProvider): OkHttpClient { return OkHttpClient.Builder() - .addInterceptor( - HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC), - ) .addInterceptor(AuthHeaderInterceptor(authProvider)) + .addInterceptor( + HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY), + ) .build() } private companion object { - const val PROD_REFERRAL_BASE_URL = "https://api.tangem-tech.com/v1/" + const val PROD_REFERRAL_BASE_URL = "https://devapi.tangem-tech.com/v1/"//"https://api.tangem-tech.com/v1/" } } \ No newline at end of file diff --git a/core/utils/src/main/java/com/tangem/utils/Extensions.kt b/core/utils/src/main/java/com/tangem/utils/Extensions.kt new file mode 100644 index 0000000000..de72e53d54 --- /dev/null +++ b/core/utils/src/main/java/com/tangem/utils/Extensions.kt @@ -0,0 +1,9 @@ +package com.tangem.utils + +inline fun > safeValueOf(type: String, default: T): T { + return try { + java.lang.Enum.valueOf(T::class.java, type) + } catch (e: IllegalArgumentException) { + default + } +} \ No newline at end of file diff --git a/features/referral/data/src/main/java/com/tangem/feature/referral/converters/ReferralConverter.kt b/features/referral/data/src/main/java/com/tangem/feature/referral/converters/ReferralConverter.kt index bbd136e5f2..7e468c0500 100644 --- a/features/referral/data/src/main/java/com/tangem/feature/referral/converters/ReferralConverter.kt +++ b/features/referral/data/src/main/java/com/tangem/feature/referral/converters/ReferralConverter.kt @@ -7,6 +7,8 @@ import com.tangem.feature.referral.domain.models.ReferralData import com.tangem.feature.referral.domain.models.ReferralInfo import com.tangem.feature.referral.domain.models.TokenData import com.tangem.utils.converter.Converter +import com.tangem.utils.safeValueOf +import org.joda.time.format.ISODateTimeFormat import javax.inject.Inject class ReferralConverter @Inject constructor() : Converter { @@ -19,7 +21,7 @@ class ReferralConverter @Inject constructor() : Converter