Skip to content

Instantly share code, notes, and snippets.

@kassim
Created November 23, 2017 09:39
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kassim/4fb60b0fe61429008b32f5edea7b8d2c to your computer and use it in GitHub Desktop.
Save kassim/4fb60b0fe61429008b32f5edea7b8d2c to your computer and use it in GitHub Desktop.
an addition to RxLifecycle for a BottomSheetDialogFragment
import android.os.Bundle
import android.support.annotation.CallSuper
import android.support.annotation.CheckResult
import android.support.design.widget.BottomSheetDialogFragment
import android.view.View
import com.trello.rxlifecycle2.LifecycleProvider
import com.trello.rxlifecycle2.LifecycleTransformer
import com.trello.rxlifecycle2.RxLifecycle
import com.trello.rxlifecycle2.android.FragmentEvent
import com.trello.rxlifecycle2.android.RxLifecycleAndroid
import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject
public abstract class RxBottomSheetDialogFragment : BottomSheetDialogFragment(), LifecycleProvider<FragmentEvent> {
private val lifecycleSubject = BehaviorSubject.create<FragmentEvent>()
@CheckResult
override fun lifecycle(): Observable<FragmentEvent> {
return lifecycleSubject.hide()
}
@CheckResult
override fun <T> bindUntilEvent(event: FragmentEvent): LifecycleTransformer<T> {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event)
}
@CheckResult
override fun <T> bindToLifecycle(): LifecycleTransformer<T> {
return RxLifecycleAndroid.bindFragment(lifecycleSubject)
}
@CallSuper
override fun onAttach(activity: android.app.Activity) {
super.onAttach(activity)
lifecycleSubject.onNext(FragmentEvent.ATTACH)
}
@CallSuper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleSubject.onNext(FragmentEvent.CREATE)
}
@CallSuper
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW)
}
@CallSuper
override fun onStart() {
super.onStart()
lifecycleSubject.onNext(FragmentEvent.START)
}
@CallSuper
override fun onResume() {
super.onResume()
lifecycleSubject.onNext(FragmentEvent.RESUME)
}
@CallSuper
override fun onPause() {
lifecycleSubject.onNext(FragmentEvent.PAUSE)
super.onPause()
}
@CallSuper
override fun onStop() {
lifecycleSubject.onNext(FragmentEvent.STOP)
super.onStop()
}
@CallSuper
override fun onDestroyView() {
lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW)
super.onDestroyView()
}
@CallSuper
override fun onDestroy() {
lifecycleSubject.onNext(FragmentEvent.DESTROY)
super.onDestroy()
}
@CallSuper
override fun onDetach() {
lifecycleSubject.onNext(FragmentEvent.DETACH)
super.onDetach()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment