39 lines
1.1 KiB
Kotlin
39 lines
1.1 KiB
Kotlin
package co.electriccoin.zcash.crash.android.internal.firebase
|
|
|
|
import android.content.Context
|
|
import com.google.firebase.FirebaseApp
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.sync.Mutex
|
|
import kotlinx.coroutines.sync.withLock
|
|
import kotlinx.coroutines.withContext
|
|
|
|
object FirebaseAppCache {
|
|
private val mutex = Mutex()
|
|
|
|
@Volatile
|
|
private var cachedFirebaseApp: FirebaseAppContainer? = null
|
|
|
|
fun peekFirebaseApp(): FirebaseApp? = cachedFirebaseApp?.firebaseApp
|
|
|
|
suspend fun getFirebaseApp(context: Context): FirebaseApp? {
|
|
mutex.withLock {
|
|
peekFirebaseApp()?.let {
|
|
return it
|
|
}
|
|
|
|
val firebaseAppContainer = getFirebaseAppContainer(context)
|
|
|
|
cachedFirebaseApp = firebaseAppContainer
|
|
}
|
|
|
|
return peekFirebaseApp()
|
|
}
|
|
}
|
|
|
|
private suspend fun getFirebaseAppContainer(context: Context): FirebaseAppContainer = withContext(Dispatchers.IO) {
|
|
val firebaseApp = FirebaseApp.initializeApp(context)
|
|
FirebaseAppContainer(firebaseApp)
|
|
}
|
|
|
|
private class FirebaseAppContainer(val firebaseApp: FirebaseApp?)
|