Last active
September 30, 2021 20:51
-
-
Save maxirosson/47aa53c5ea679d06868708ab5d8a59da to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.dipien.firebase.remoteconfig | |
import android.content.Context | |
import android.util.Log | |
import com.google.firebase.crashlytics.FirebaseCrashlytics | |
import com.google.firebase.ktx.Firebase | |
import com.google.firebase.remoteconfig.FirebaseRemoteConfig | |
import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue | |
import com.google.firebase.remoteconfig.ktx.remoteConfig | |
open class FirebaseRemoteConfigLoader( | |
private val applicationContext: Context, | |
private val remoteConfigParameters: Set<RemoteConfigParameter> | |
) { | |
companion object { | |
private val TAG = FirebaseRemoteConfigLoader::class.simpleName | |
} | |
private val remoteConfig: FirebaseRemoteConfig by lazy { | |
Firebase.remoteConfig.apply { | |
val defaults = mutableMapOf<String, Any>() | |
remoteConfigParameters.forEach { | |
defaults[it.getKey()] = it.getDefaultValue() | |
} | |
setDefaultsAsync(defaults) | |
} | |
} | |
override fun getString(remoteConfigParameter: RemoteConfigParameter): String { | |
return getValue(remoteConfigParameter).asString() | |
} | |
override fun getStringList(remoteConfigParameter: RemoteConfigParameter): List<String> { | |
return getString(remoteConfigParameter).split(STRING_LIST_SEPARATOR) | |
} | |
override fun getBoolean(remoteConfigParameter: RemoteConfigParameter): Boolean { | |
return getValue(remoteConfigParameter).asBoolean() | |
} | |
override fun getLong(remoteConfigParameter: RemoteConfigParameter): Long { | |
return getValue(remoteConfigParameter).asLong() | |
} | |
override fun getDouble(remoteConfigParameter: RemoteConfigParameter): Double { | |
return getValue(remoteConfigParameter).asDouble() | |
} | |
private fun getValue(parameter: RemoteConfigParameter): FirebaseRemoteConfigValue { | |
if (!remoteConfigParameters.contains(parameter)) { | |
val message = "The Firebase Remote Config Parameter [${parameter.getKey()}] default value is not registered" | |
Log.e(TAG, message) | |
FirebaseCrashlytics.getInstance().recordException(RuntimeException(message)) | |
} | |
var configValue = remoteConfig.getValue(parameter.getKey()) | |
if (configValue.source == FirebaseRemoteConfig.VALUE_SOURCE_STATIC) { | |
configValue = StaticFirebaseRemoteConfigValue(parameter) | |
} | |
Log.i(TAG, "Read Firebase Remote Config Parameter. Key [${parameter.getKey()}] | Value [${configValue.asString()}] | Source [${configValue.source}]") | |
return configValue | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment