yshrsmz
06/21/2019, 7:33 AMoffer
is called directly inside frozen Query.Listener
.yshrsmz
06/21/2019, 7:35 AMfun <T : Any> Query<T>.asFlow(): Flow<Query<T>> = callbackFlow<Query<T>> {
val listenerHolder = ThreadLocalRef<() -> Unit>()
listenerHolder.value = { offer(this@asFlow) }
val listener = object : Query.Listener {
override fun queryResultsChanged() {
listenerHolder.value?.invoke()
}
}
addListener(listener)
offer(this@asFlow)
awaitClose {
removeListener(listener)
}
}.conflate()
yshrsmz
06/21/2019, 7:36 AM