Skip to content

Instantly share code, notes, and snippets.

@johnGachihi
Last active March 11, 2021 16:30
Show Gist options
  • Save johnGachihi/6590de6e845e2089eca33e53e426bc9d to your computer and use it in GitHub Desktop.
Save johnGachihi/6590de6e845e2089eca33e53e426bc9d to your computer and use it in GitHub Desktop.
package com.android254.droidconke19.models
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
data class WifiDetailsModel(
var wifiSsid: String,
var wifiPassword: String
)
//////////////////////////////////////////////////////////////////
// Could be separate file
private val WifiDetailsModel.isPropertiesNotEmpty
get() = wifiSsid.isNotEmpty() and wifiPassword.isNotEmpty()
object WifiDetailsModelFactory {
fun createUsingFirebaseRemoteConfigData(firebaseRemoteConfig: FirebaseRemoteConfig): WifiDetailsModel {
val wifiDetailsModel = WifiDetailsModel(
firebaseRemoteConfig.getString("wifi_ssid"),
firebaseRemoteConfig.getString("wifi_password")
)
if (!wifiDetailsModel.isPropertiesNotEmpty)
throw Exception("No Firebase RemoteConfig default values provided for wifi details")
return wifiDetailsModel
}
}
package com.android254.droidconke19.repository
import com.android254.droidconke19.datastates.FirebaseResult
import com.android254.droidconke19.models.WifiDetailsModel
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.android254.droidconke19.datastates.runCatching
import com.android254.droidconke19.models.WifiDetailsModelFactory
import kotlinx.coroutines.tasks.await
interface WifiDetailsRepo {
suspend fun fetchWifiDetails(): FirebaseResult<WifiDetailsModel>
}
class WifiDetailsRepoImpl(private val firebaseRemoteConfig: FirebaseRemoteConfig) : WifiDetailsRepo {
override suspend fun fetchWifiDetails(): FirebaseResult<WifiDetailsModel> =
runCatching {
// Fetch Firebase RemoteConfig values
firebaseRemoteConfig.fetchAndActivate().await()
// Create an instance of WifiDetailsModels from active Firebase RemoteConfig values
WifiDetailsModelFactory.createUsingFirebaseRemoteConfigData(firebaseRemoteConfig)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment