Skip to content

Instantly share code, notes, and snippets.

@togramago
Created March 29, 2019 15:24
Show Gist options
  • Save togramago/5cbf290245e4fc8d162e154e8ea21a5a to your computer and use it in GitHub Desktop.
Save togramago/5cbf290245e4fc8d162e154e8ea21a5a to your computer and use it in GitHub Desktop.
open class PresenceMaintainer(
networkingModule: NetworkingModule,
) : Application.ActivityLifecycleCallbacks {
internal val presenceService =
networkingModule.createSecureServiceEndpoint(PresenceService::class.java)
private val foregroundSubject = PublishSubject.create<Boolean>()
private val polling = presenceService.sendHeartbeat()
.subscribeOn(Schedulers.io())
private var connected by Delegates.observable(false) { … }
init {
foregroundSubject
.debounce(TIMEOUT, TimeUnit.SECONDS)
.distinctUntilChanged()
.switchMap {
if (it && connected) polling.toObservable<Unit>() else Observable.never()
}
.subscribe()
}
override fun onActivityPaused(activity: Activity?) {
foregroundSubject.onNext(false)
}
override fun onActivityResumed(activity: Activity?) {
foregroundSubject.onNext(true)
}
override fun onActivityStarted(activity: Activity?) = Unit
override fun onActivityDestroyed(activity: Activity?) = Unit
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) = Unit
override fun onActivityStopped(activity: Activity?) = Unit
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) = Unit
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment