Updated on 2026-08-14
This commit is contained in:
parent
b350717cd0
commit
8377208383
5 changed files with 7 additions and 105 deletions
|
|
@ -6,14 +6,13 @@ import android.net.Uri
|
|||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface Disclaimer {
|
||||
fun type(): DisclaimerType
|
||||
fun getUri(): Uri
|
||||
suspend fun accept()
|
||||
suspend fun isAccepted(): Boolean
|
||||
}
|
||||
|
||||
abstract class BaseDisclaimer(
|
||||
protected val dataProvider: DisclaimerDataProvider,
|
||||
private val dataProvider: DisclaimerDataProvider,
|
||||
) : Disclaimer {
|
||||
|
||||
val baseUrl = "https://tangem.com"
|
||||
|
|
@ -26,46 +25,11 @@ abstract class BaseDisclaimer(
|
|||
}
|
||||
|
||||
class DummyDisclaimer : Disclaimer {
|
||||
override fun type(): DisclaimerType = DisclaimerType.Tangem
|
||||
override fun getUri(): Uri = Uri.parse("https://tangem.com/tangem_tos.html")
|
||||
override suspend fun accept() {}
|
||||
override suspend fun isAccepted(): Boolean = false
|
||||
}
|
||||
|
||||
class TangemDisclaimer(dataProvider: DisclaimerDataProvider) : BaseDisclaimer(dataProvider) {
|
||||
override fun type(): DisclaimerType = DisclaimerType.Tangem
|
||||
override fun getUri(): Uri = Uri.parse("$baseUrl/tangem_tos.html")
|
||||
}
|
||||
|
||||
class Start2CoinDisclaimer(dataProvider: DisclaimerDataProvider) : BaseDisclaimer(dataProvider) {
|
||||
override fun type(): DisclaimerType = DisclaimerType.Start2Coin
|
||||
override fun getUri(): Uri = Uri.parse("$baseUrl/" + filename(dataProvider.getLanguage(), getRegion()))
|
||||
|
||||
@Suppress("ComplexMethod")
|
||||
private fun filename(languageCode: String, regionCode: String?): String {
|
||||
return when {
|
||||
languageCode == "fr" && regionCode == "ch" -> "start2coin-fr-ch-tangem.html"
|
||||
languageCode == "de" && regionCode == "ch" -> "start2coin-de-ch-tangem.html"
|
||||
languageCode == "en" && regionCode == "ch" -> "start2coin-en-ch-tangem.html"
|
||||
languageCode == "it" && regionCode == "ch" -> "start2coin-it-ch-tangem.html"
|
||||
languageCode == "fr" && regionCode == "fr" -> "start2coin-fr-fr-tangem.html"
|
||||
languageCode == "de" && regionCode == "at" -> "start2coin-de-at-tangem.html"
|
||||
regionCode == "fr" -> "start2coin-fr-fr-tangem.html"
|
||||
regionCode == "ch" -> "start2coin-en-ch-tangem.html"
|
||||
regionCode == "at" -> "start2coin-de-at-tangem.html"
|
||||
else -> "start2coin-fr-fr-tangem.html"
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRegion(): String? {
|
||||
val cardId = dataProvider.getCardId()
|
||||
if (cardId.isEmpty()) return null
|
||||
|
||||
return when (cardId[1]) {
|
||||
'0' -> "fr"
|
||||
'1' -> "ch"
|
||||
'2' -> "at"
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,58 +1,28 @@
|
|||
package com.tangem.tap.features.disclaimer
|
||||
|
||||
import com.tangem.domain.common.TapWorkarounds.isStart2Coin
|
||||
import com.tangem.domain.models.scan.CardDTO
|
||||
import com.tangem.tap.common.extensions.inject
|
||||
import com.tangem.tap.proxy.redux.DaggerGraphState
|
||||
import com.tangem.tap.store
|
||||
import java.util.Locale
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
enum class DisclaimerType {
|
||||
Tangem,
|
||||
Start2Coin,
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun get(cardDTO: CardDTO): DisclaimerType {
|
||||
return when {
|
||||
cardDTO.isStart2Coin -> Start2Coin
|
||||
else -> Tangem
|
||||
}
|
||||
}
|
||||
}
|
||||
fun CardDTO.createDisclaimer(): Disclaimer {
|
||||
val dataProvider = provideDisclaimerDataProvider(cardId)
|
||||
return TangemDisclaimer(dataProvider)
|
||||
}
|
||||
|
||||
fun DisclaimerType.createDisclaimer(cardDTO: CardDTO): Disclaimer {
|
||||
val dataProvider = provideDisclaimerDataProvider(cardDTO.cardId, this)
|
||||
return when (this) {
|
||||
DisclaimerType.Tangem -> TangemDisclaimer(dataProvider)
|
||||
DisclaimerType.Start2Coin -> Start2CoinDisclaimer(dataProvider)
|
||||
}
|
||||
}
|
||||
|
||||
fun CardDTO.createDisclaimer(): Disclaimer = DisclaimerType.get(this).createDisclaimer(this)
|
||||
|
||||
private fun provideDisclaimerDataProvider(cardId: String, disclaimerType: DisclaimerType): DisclaimerDataProvider {
|
||||
private fun provideDisclaimerDataProvider(cardId: String): DisclaimerDataProvider {
|
||||
val cardRepository = store.inject(DaggerGraphState::cardRepository)
|
||||
return object : DisclaimerDataProvider {
|
||||
override fun getLanguage(): String = Locale.getDefault().language
|
||||
override fun getCardId(): String = cardId
|
||||
|
||||
override suspend fun accept() {
|
||||
when (disclaimerType) {
|
||||
DisclaimerType.Tangem -> cardRepository.acceptTangemTOS()
|
||||
DisclaimerType.Start2Coin -> cardRepository.acceptStart2CoinTOS(cardId)
|
||||
}
|
||||
cardRepository.acceptTangemTOS()
|
||||
}
|
||||
|
||||
override suspend fun isAccepted(): Boolean {
|
||||
return when (disclaimerType) {
|
||||
DisclaimerType.Tangem -> cardRepository.isTangemTOSAccepted()
|
||||
DisclaimerType.Start2Coin -> cardRepository.isStart2CoinTOSAccepted(cardId)
|
||||
}
|
||||
return cardRepository.isTangemTOSAccepted()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -95,8 +95,6 @@ object PreferencesKeys {
|
|||
booleanPreferencesKey(name = "isTokenSwapPromoOkxShown")
|
||||
}
|
||||
|
||||
fun getStart2CoinTOSAcceptedKey(region: String?) = booleanPreferencesKey(name = "start2Coin_tos_accepted_$region")
|
||||
|
||||
// region Permission
|
||||
fun getShouldShowPermission(permission: String) = booleanPreferencesKey("shouldShowPushPermission_$permission")
|
||||
|
||||
|
|
|
|||
|
|
@ -80,24 +80,10 @@ internal class DefaultCardRepository(
|
|||
return appPreferencesStore.getSyncOrDefault(key = PreferencesKeys.IS_TANGEM_TOS_ACCEPTED_KEY, default = false)
|
||||
}
|
||||
|
||||
override suspend fun isStart2CoinTOSAccepted(cardId: String): Boolean {
|
||||
return appPreferencesStore.getSyncOrDefault(
|
||||
key = PreferencesKeys.getStart2CoinTOSAcceptedKey(region = getRegion(cardId)),
|
||||
default = false,
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun acceptTangemTOS() {
|
||||
return appPreferencesStore.store(key = PreferencesKeys.IS_TANGEM_TOS_ACCEPTED_KEY, true)
|
||||
}
|
||||
|
||||
override suspend fun acceptStart2CoinTOS(cardId: String) {
|
||||
appPreferencesStore.store(
|
||||
key = PreferencesKeys.getStart2CoinTOSAcceptedKey(region = getRegion(cardId)),
|
||||
value = true,
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun AppPreferencesStore.editUsedCards(cardId: String, update: (UsedCardInfo) -> UsedCardInfo) {
|
||||
editData { mutablePreferences ->
|
||||
val usedCards = mutablePreferences.getUsedCards()
|
||||
|
|
@ -127,16 +113,5 @@ internal class DefaultCardRepository(
|
|||
.firstOrNull { it.cardId == cardId }
|
||||
}
|
||||
|
||||
private fun getRegion(cardId: String): String? {
|
||||
if (cardId.isEmpty()) return null
|
||||
|
||||
return when (cardId[1]) {
|
||||
'0' -> "fr"
|
||||
'1' -> "ch"
|
||||
'2' -> "at"
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
private fun createDefaultUsedCardInfo(cardId: String) = UsedCardInfo(cardId = cardId)
|
||||
}
|
||||
|
|
@ -26,10 +26,5 @@ interface CardRepository {
|
|||
@Throws
|
||||
suspend fun isTangemTOSAccepted(): Boolean
|
||||
|
||||
@Throws
|
||||
suspend fun isStart2CoinTOSAccepted(cardId: String): Boolean
|
||||
|
||||
suspend fun acceptTangemTOS()
|
||||
|
||||
suspend fun acceptStart2CoinTOS(cardId: String)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue