@@ -17,9 +17,18 @@ import android.content.Context
17
17
import androidx.annotation.Keep
18
18
import com.google.firebase.FirebaseApp
19
19
import com.google.firebase.FirebaseOptions
20
+ import com.google.firebase.annotations.concurrent.Background
21
+ import com.google.firebase.annotations.concurrent.Blocking
22
+ import com.google.firebase.annotations.concurrent.Lightweight
23
+ import com.google.firebase.annotations.concurrent.UiThread
20
24
import com.google.firebase.components.Component
21
25
import com.google.firebase.components.ComponentRegistrar
26
+ import com.google.firebase.components.Dependency
27
+ import com.google.firebase.components.Qualified
22
28
import com.google.firebase.platforminfo.LibraryVersionComponent
29
+ import java.util.concurrent.Executor
30
+ import kotlinx.coroutines.CoroutineDispatcher
31
+ import kotlinx.coroutines.asCoroutineDispatcher
23
32
24
33
/* *
25
34
* Single access point to all firebase SDKs from Kotlin.
@@ -40,11 +49,11 @@ fun Firebase.initialize(context: Context): FirebaseApp? = FirebaseApp.initialize
40
49
41
50
/* * Initializes and returns a FirebaseApp. */
42
51
fun Firebase.initialize (context : Context , options : FirebaseOptions ): FirebaseApp =
43
- FirebaseApp .initializeApp(context, options)
52
+ FirebaseApp .initializeApp(context, options)
44
53
45
54
/* * Initializes and returns a FirebaseApp. */
46
55
fun Firebase.initialize (context : Context , options : FirebaseOptions , name : String ): FirebaseApp =
47
- FirebaseApp .initializeApp(context, options, name)
56
+ FirebaseApp .initializeApp(context, options, name)
48
57
49
58
/* * Returns options of default FirebaseApp */
50
59
val Firebase .options: FirebaseOptions
@@ -57,6 +66,27 @@ internal const val LIBRARY_NAME: String = "fire-core-ktx"
57
66
class FirebaseCommonKtxRegistrar : ComponentRegistrar {
58
67
override fun getComponents (): List <Component <* >> {
59
68
return listOf (
60
- LibraryVersionComponent .create(LIBRARY_NAME , BuildConfig .VERSION_NAME ))
69
+ LibraryVersionComponent .create(LIBRARY_NAME , BuildConfig .VERSION_NAME ),
70
+ coroutineDispatcher<Background >(),
71
+ coroutineDispatcher<Lightweight >(),
72
+ coroutineDispatcher<Blocking >(),
73
+ coroutineDispatcher<UiThread >()
74
+ )
61
75
}
62
76
}
77
+
78
+ private inline fun <reified T : Annotation > coroutineDispatcher (): Component <CoroutineDispatcher > =
79
+ Component .builder(
80
+ Qualified .qualified(T ::class .java, CoroutineDispatcher ::class .java)
81
+ ).add(
82
+ Dependency .required(
83
+ Qualified .qualified(
84
+ T ::class .java,
85
+ Executor ::class .java
86
+ )
87
+ )
88
+ ).factory { c ->
89
+ c.get(
90
+ Qualified .qualified(T ::class .java, Executor ::class .java)
91
+ ).asCoroutineDispatcher()
92
+ }.build()
0 commit comments