Skip to content

Instantly share code, notes, and snippets.

@vinaysshenoy
Last active November 24, 2017 09:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vinaysshenoy/c2174059f7bd4e02570107a324b2593b to your computer and use it in GitHub Desktop.
Save vinaysshenoy/c2174059f7bd4e02570107a324b2593b to your computer and use it in GitHub Desktop.
Reactive Activity Lifecycles
package com.vinaysshenoy.android.arch
import com.vinaysshenoy.android.arch.Event.DESTROY
import com.vinaysshenoy.android.arch.Event.PAUSE
import com.vinaysshenoy.android.arch.Event.RESUME
import com.vinaysshenoy.android.arch.Event.START
import com.vinaysshenoy.android.arch.Event.STOP
import io.reactivex.Observable
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.subjects.PublishSubject
/**
* Created by vinaysshenoy on 22/11/17.
*/
sealed class Event
object Start : Event()
object Resume : Event()
object Pause : Event()
object Stop : Event()
object Destroy : Event()
data class ActivityResult(val requestCode: Int, val resultCode: Int, val data: Intent?) : Event()
class RxActivityLifecycle {
private val disposables = CompositeDisposable()
private val eventPublisher = PublishSubject.create<Event>()
val starts: Observable<Start>
get() = eventPublisher
.filter { it is Start }
.cast(Start::class.java)
.doOnSubscribe { disposables.add(it) }
val resumes: Observable<Resume>
get() = eventPublisher
.filter { it is Resume }
.cast(Resume::class.java)
.doOnSubscribe { disposables.add(it) }
val pauses: Observable<Pause>
get() = eventPublisher
.filter { it is Pause }
.cast(Pause::class.java)
.doOnSubscribe { disposables.add(it) }
val stops: Observable<Stop>
get() = eventPublisher
.filter { it is Stop }
.cast(Stop::class.java)
.doOnSubscribe { disposables.add(it) }
val destroy: Observable<Destroy>
get() = eventPublisher
.filter { it is Destroy }
.cast(Destroy::class.java)
.doOnSubscribe { disposables.add(it) }
val activityResults: Observable<ActivityResult>
get() = eventPublisher
.filter { it is ActivityResult }
.cast(ActivityResult::class.java)
.doOnSubscribe { disposables.add(it) }
val events: Observable<Event>
get() = eventPublisher
.doOnSubscribe { disposables.add(it) }
fun onActivityStart() {
eventPublisher.onNext(Start)
}
fun onActivityResume() {
eventPublisher.onNext(Resume)
}
fun onActivityPause() {
eventPublisher.onNext(Pause)
}
fun onActivityStop() {
eventPublisher.onNext(Stop)
}
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
eventPublisher.onNext(ActivityResult(requestCode, resultCode, data))
}
fun onActivityDestroy() {
eventPublisher.onNext(Destroy)
disposables.dispose()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment