-
Notifications
You must be signed in to change notification settings - Fork 5
/
RxLifecycleHandler.kt
49 lines (42 loc) · 1.32 KB
/
RxLifecycleHandler.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.gitlab.sample.presentation.common
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Lifecycle.State.DESTROYED
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.OnLifecycleEvent
import io.reactivex.Flowable
import io.reactivex.disposables.Disposable
class RxLifecycleHandler<T>(
owner: LifecycleOwner,
private val flowable: Flowable<T>,
private val observer: (T) -> Unit
) : LifecycleObserver {
private val lifecycle = owner.lifecycle
private var disposable: Disposable? = null
init {
if (lifecycle.currentState != DESTROYED) {
owner.lifecycle.addObserver(this)
observeIfPossible()
}
}
private fun observeIfPossible() {
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
disposable ?: let {
disposable = flowable.subscribe { data -> observer(data) }
}
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
observeIfPossible()
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
disposable?.dispose()
disposable = null
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
lifecycle.removeObserver(this)
}
}