Move LifecycleDisposable to core-util.

This commit is contained in:
Alex Hart
2023-04-13 10:01:39 -03:00
committed by Greyson Parrelli
parent b51973f1d5
commit 3451ac4504
87 changed files with 87 additions and 96 deletions

View File

@@ -0,0 +1,46 @@
package org.signal.core.util.concurrent
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.disposables.Disposable
/**
* A lifecycle-aware [Disposable] that, after being bound to a lifecycle, will automatically dispose all contained disposables at the proper time.
*/
class LifecycleDisposable : DefaultLifecycleObserver {
val disposables: CompositeDisposable = CompositeDisposable()
fun bindTo(lifecycleOwner: LifecycleOwner): LifecycleDisposable {
return bindTo(lifecycleOwner.lifecycle)
}
fun bindTo(lifecycle: Lifecycle): LifecycleDisposable {
lifecycle.addObserver(this)
return this
}
fun add(disposable: Disposable): LifecycleDisposable {
disposables.add(disposable)
return this
}
fun addAll(vararg disposable: Disposable): LifecycleDisposable {
disposables.addAll(*disposable)
return this
}
fun clear() {
disposables.clear()
}
override fun onDestroy(owner: LifecycleOwner) {
owner.lifecycle.removeObserver(this)
disposables.clear()
}
operator fun plusAssign(disposable: Disposable) {
add(disposable)
}
}