Skip to content

Instantly share code, notes, and snippets.

@maxirosson
Last active September 30, 2021 20:51
Show Gist options
  • Save maxirosson/47aa53c5ea679d06868708ab5d8a59da to your computer and use it in GitHub Desktop.
Save maxirosson/47aa53c5ea679d06868708ab5d8a59da to your computer and use it in GitHub Desktop.
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