Updated on 2026-08-14

This commit is contained in:
Tangem 2020-12-13 18:28:36 +00:00
commit 766730b1cd
5 changed files with 52 additions and 85 deletions

View file

@ -1,14 +1,5 @@
[
{
"name": "isWalletPayIdEnabled",
"value": true
},
{
"name": "isTopUpEnabled",
"value": true
},
{
"name": "isCreatingTwinCardsAllowed",
"value": false
}
]
{
"isWalletPayIdEnabled": true,
"isTopUpEnabled": true,
"isCreatingTwinCardsAllowed": false
}

View file

@ -1,14 +1,5 @@
[
{
"name": "isWalletPayIdEnabled",
"value": false
},
{
"name": "isTopUpEnabled",
"value": false
},
{
"name": "isCreatingTwinCardsAllowed",
"value": true
}
]
{
"isWalletPayIdEnabled": false,
"isTopUpEnabled": false,
"isCreatingTwinCardsAllowed": true
}

View file

@ -6,7 +6,6 @@ import com.google.firebase.ktx.Firebase
import com.google.firebase.remoteconfig.ktx.remoteConfig
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import com.tangem.wallet.BuildConfig
import timber.log.Timber
@ -30,16 +29,13 @@ class LocalLoader(
override fun loadConfig(onComplete: (ConfigModel) -> Unit) {
val config = try {
val featureType = Types.newParameterizedType(List::class.java, FeatureModel::class.java)
val featureAdapter: JsonAdapter<List<FeatureModel>> = moshi.adapter(featureType)
val valuesType = Types.newParameterizedType(List::class.java, ConfigValueModel::class.java)
val valuesAdapter: JsonAdapter<List<ConfigValueModel>> = moshi.adapter(valuesType)
val featureAdapter: JsonAdapter<FeatureModel> = moshi.adapter(FeatureModel::class.java)
val valuesAdapter: JsonAdapter<ConfigValueModel> = moshi.adapter(ConfigValueModel::class.java)
val jsonFeatures = readAssetAsString(ConfigLoader.featuresName)
val jsonConfigValues = readAssetAsString(ConfigLoader.configValuesName)
ConfigModel(featureAdapter.fromJson(jsonFeatures) ?: listOf(),
valuesAdapter.fromJson(jsonConfigValues) ?: listOf())
ConfigModel(featureAdapter.fromJson(jsonFeatures), valuesAdapter.fromJson(jsonConfigValues))
} catch (ex: Exception) {
Timber.e(ex)
ConfigModel.empty()
@ -67,9 +63,8 @@ class RemoteLoader(
onComplete(emptyConfig)
return@addOnCompleteListener
}
val featureType = Types.newParameterizedType(List::class.java, FeatureModel::class.java)
val featureAdapter: JsonAdapter<List<FeatureModel>> = moshi.adapter(featureType)
onComplete(ConfigModel(featureAdapter.fromJson(jsonConfig) ?: listOf(), listOf()))
val featureAdapter: JsonAdapter<FeatureModel> = moshi.adapter(FeatureModel::class.java)
onComplete(ConfigModel(featureAdapter.fromJson(jsonConfig), null))
} else {
onComplete(emptyConfig)
}

View file

@ -26,11 +26,11 @@ class ConfigManager(
fun load(onComplete: VoidCallback? = null) {
localLoader.loadConfig { config ->
config.features?.forEach { setupFeature(it.name, it.value) }
config.configValues?.forEach { setupKey(it.name, it.value) }
setupFeature(config.features)
setupKey(config.configValues)
}
remoteLoader.loadConfig { config ->
config.features?.forEach { setupFeature(it.name, it.value) }
setupFeature(config.features)
onComplete?.invoke()
}
}
@ -52,40 +52,33 @@ class ConfigManager(
}
}
private fun setupFeature(name: String, value: Boolean) {
val newValue = value ?: return
private fun setupFeature(featureModel: FeatureModel?) {
val model = featureModel ?: return
when (name) {
isWalletPayIdEnabled -> {
config = config.copy(isWalletPayIdEnabled = newValue)
defaultConfig = defaultConfig.copy(isWalletPayIdEnabled = newValue)
}
isTopUpEnabled -> {
config = config.copy(isTopUpEnabled = newValue)
defaultConfig = defaultConfig.copy(isTopUpEnabled = newValue)
}
isCreatingTwinCardsAllowed -> {
config = config.copy(isCreatingTwinCardsAllowed = newValue)
defaultConfig = defaultConfig.copy(isCreatingTwinCardsAllowed = newValue)
}
}
config = config.copy(
isWalletPayIdEnabled = model.isWalletPayIdEnabled,
isTopUpEnabled = model.isTopUpEnabled,
isCreatingTwinCardsAllowed = model.isCreatingTwinCardsAllowed
)
defaultConfig = defaultConfig.copy(
isWalletPayIdEnabled = model.isWalletPayIdEnabled,
isTopUpEnabled = model.isTopUpEnabled,
isCreatingTwinCardsAllowed = model.isCreatingTwinCardsAllowed
)
}
private fun setupKey(name: String, value: String) {
when (name) {
coinMarketCapKey -> {
config = config.copy(coinMarketCapKey = value)
defaultConfig = defaultConfig.copy(coinMarketCapKey = value)
}
moonPayApiKey -> {
config = config.copy(moonPayApiKey = value)
defaultConfig = defaultConfig.copy(moonPayApiKey = value)
}
moonPayApiSecretKey -> {
config = config.copy(moonPayApiSecretKey = value)
defaultConfig = defaultConfig.copy(moonPayApiSecretKey = value)
}
}
private fun setupKey(configValues: ConfigValueModel?) {
val values = configValues ?: return
config = config.copy(
coinMarketCapKey = values.coinMarketCapKey,
moonPayApiKey = values.moonPayApiKey,
moonPayApiSecretKey = values.moonPayApiSecretKey
)
defaultConfig = defaultConfig.copy(
coinMarketCapKey = values.coinMarketCapKey,
moonPayApiKey = values.moonPayApiKey,
moonPayApiSecretKey = values.moonPayApiSecretKey
)
}
companion object {

View file

@ -4,23 +4,20 @@ package com.tangem.tap.domain.config
[REDACTED_AUTHOR]
*/
interface BaseConfigModel<V> {
val name: String
val value: V?
}
class FeatureModel(
override val name: String,
override val value: Boolean
) : BaseConfigModel<Boolean>
val isWalletPayIdEnabled: Boolean,
val isTopUpEnabled: Boolean,
val isCreatingTwinCardsAllowed: Boolean,
)
class ConfigValueModel(
override val name: String,
override val value: String
) : BaseConfigModel<String>
val coinMarketCapKey: String,
val moonPayApiKey: String,
val moonPayApiSecretKey: String,
)
class ConfigModel(val features: List<FeatureModel>?, val configValues: List<ConfigValueModel>?) {
class ConfigModel(val features: FeatureModel?, val configValues: ConfigValueModel?) {
companion object {
fun empty(): ConfigModel = ConfigModel(listOf(), listOf())
fun empty(): ConfigModel = ConfigModel(null, null)
}
}