Skip to content

Instantly share code, notes, and snippets.

@MrOnyszko
Created September 10, 2017 06:54
Show Gist options
  • Save MrOnyszko/45d1bc151603748cffcc71040988a7f4 to your computer and use it in GitHub Desktop.
Save MrOnyszko/45d1bc151603748cffcc71040988a7f4 to your computer and use it in GitHub Desktop.
import android.app.Activity
import android.app.Application
import android.content.Context
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.view.View
fun Application.registerActivityLifecycleCallbacks(
onActivityPaused: ((Activity) -> Unit?)? = null,
onActivityResumed: ((Activity) -> Unit?)? = null,
onActivityStarted: ((Activity) -> Unit?)? = null,
onActivityDestroyed: ((Activity) -> Unit?)? = null,
onActivitySaveInstanceState: ((Activity, Bundle?) -> Unit?)? = null,
onActivityStopped: ((Activity) -> Unit?)? = null,
onActivityCreated: ((Activity, Bundle?) -> Unit?)? = null
): Application.ActivityLifecycleCallbacks {
val callbacks = object : Application.ActivityLifecycleCallbacks {
override fun onActivityPaused(activity: Activity) {
onActivityPaused?.invoke(activity)
}
override fun onActivityResumed(activity: Activity) {
onActivityResumed?.invoke(activity)
}
override fun onActivityStarted(activity: Activity) {
onActivityStarted?.invoke(activity)
}
override fun onActivityDestroyed(activity: Activity) {
onActivityDestroyed?.invoke(activity)
}
override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle?) {
onActivitySaveInstanceState?.invoke(activity, bundle)
}
override fun onActivityStopped(activity: Activity) {
onActivityStopped?.invoke(activity)
}
override fun onActivityCreated(activity: Activity, bundle: Bundle?) {
onActivityCreated?.invoke(activity, bundle)
}
}
this.registerActivityLifecycleCallbacks(callbacks)
return callbacks
}
fun FragmentManager.registerFragmentLifecycleCallbacks(
recursive: Boolean = true,
onFragmentViewCreated: ((fm: FragmentManager, f: Fragment, v: View?, savedInstanceState: Bundle?) -> Unit?)? = null,
onFragmentStopped: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null,
onFragmentCreated: ((fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) -> Unit?)? = null,
onFragmentResumed: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null,
onFragmentAttached: ((fm: FragmentManager, f: Fragment, context: Context) -> Unit?)? = null,
onFragmentPreAttached: ((fm: FragmentManager, f: Fragment, context: Context) -> Unit?)? = null,
onFragmentDestroyed: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null,
onFragmentSaveInstanceState: ((fm: FragmentManager, f: Fragment, outState: Bundle?) -> Unit?)? = null,
onFragmentStarted: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null,
onFragmentViewDestroyed: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null,
onFragmentPreCreated: ((fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) -> Unit?)? = null,
onFragmentActivityCreated: ((fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) -> Unit?)? = null,
onFragmentPaused: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null,
onFragmentDetached: ((fm: FragmentManager, f: Fragment) -> Unit?)? = null
): FragmentManager.FragmentLifecycleCallbacks {
val callbacks = object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentViewCreated(fm: FragmentManager, f: Fragment, v: View?, savedInstanceState: Bundle?) {
onFragmentViewCreated?.invoke(fm, f, v, savedInstanceState)
}
override fun onFragmentStopped(fm: FragmentManager, f: Fragment) {
onFragmentStopped?.invoke(fm, f)
}
override fun onFragmentCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
onFragmentCreated?.invoke(fm, f, savedInstanceState)
}
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
onFragmentResumed?.invoke(fm, f)
}
override fun onFragmentAttached(fm: FragmentManager, f: Fragment, context: Context) {
onFragmentAttached?.invoke(fm, f, context)
}
override fun onFragmentPreAttached(fm: FragmentManager, f: Fragment, context: Context) {
onFragmentPreAttached?.invoke(fm, f, context)
}
override fun onFragmentDestroyed(fm: FragmentManager, f: Fragment) {
onFragmentDestroyed?.invoke(fm, f)
}
override fun onFragmentSaveInstanceState(fm: FragmentManager, f: Fragment, outState: Bundle?) {
onFragmentSaveInstanceState?.invoke(fm, f, outState)
}
override fun onFragmentStarted(fm: FragmentManager, f: Fragment) {
onFragmentStarted?.invoke(fm, f)
}
override fun onFragmentViewDestroyed(fm: FragmentManager, f: Fragment) {
onFragmentViewDestroyed?.invoke(fm, f)
}
override fun onFragmentPreCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
onFragmentPreCreated?.invoke(fm, f, savedInstanceState)
}
override fun onFragmentActivityCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
onFragmentActivityCreated?.invoke(fm, f, savedInstanceState)
}
override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
onFragmentPaused?.invoke(fm, f)
}
override fun onFragmentDetached(fm: FragmentManager, f: Fragment) {
onFragmentDetached?.invoke(fm, f)
}
}
this.registerFragmentLifecycleCallbacks(callbacks, recursive)
return callbacks
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment