Created
December 13, 2016 15:47
-
-
Save ZakTaccardi/dac635d6943643980b1b251f130f7c12 to your computer and use it in GitHub Desktop.
RxActivity
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Observe the activity events! | |
*/ | |
class RxActivityDelegate : RxActivity { | |
private val relay = BehaviorRelay.create<ActivityLifecycleEvent>().toSerialized() | |
fun onCreate() { | |
relay.call(CREATE) | |
log("onCreate") | |
} | |
fun onStart() { | |
relay.call(START) | |
log("onStart") | |
} | |
fun onResume() { | |
relay.call(RESUME) | |
log("onResume") | |
} | |
fun onStop() { | |
relay.call(STOP) | |
log("onStop") | |
} | |
fun onPause() { | |
relay.call(PAUSE) | |
log("onPause") | |
} | |
fun onDestroy() { | |
relay.call(DESTROY) | |
log("onDestroy") | |
} | |
override fun observe(): Observable<ActivityLifecycleEvent> { | |
return relay.asObservable() | |
.doOnNext { Timber.d("emitted ${it.name}") } | |
} | |
private fun log(lifecycleMethod: String) { | |
Timber.d("$this: $lifecycleMethod") | |
} | |
} | |
interface RxActivity { | |
fun observe(): Observable<ActivityLifecycleEvent> | |
} | |
/** | |
* Lifecycle event | |
*/ | |
enum class ActivityLifecycleEvent( | |
val isCreated: Boolean, | |
val isStarted: Boolean, | |
val isResumed: Boolean | |
) { | |
CREATE( | |
isCreated = true, | |
isStarted = false, | |
isResumed = false | |
), | |
START( | |
isCreated = true, | |
isStarted = true, | |
isResumed = false | |
), | |
RESUME( | |
isCreated = true, | |
isStarted = true, | |
isResumed = true | |
), | |
PAUSE( | |
isCreated = true, | |
isStarted = true, | |
isResumed = false | |
), | |
STOP( | |
isCreated = true, | |
isStarted = false, | |
isResumed = false | |
), | |
DESTROY( | |
isCreated = false, | |
isStarted = false, | |
isResumed = false | |
); | |
fun isDestroyed(): Boolean { | |
return this == DESTROY | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment