hienlt0610
3/20/2020 - 9:41 AM

[Kotlin] Extension Collections

val Int.dp: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt()
val Int.px: Int get() = (this * Resources.getSystem().displayMetrics.density).toInt()
/* ===================================================================================== */
inline fun <reified T> Gson.fromJson(json: String): T =
    this.fromJson<T>(json, T::class.java)
/* ===================================================================================== */
fun Dialog.dismissWith(
    owner: LifecycleOwner,
    event: Lifecycle.Event = Lifecycle.Event.ON_DESTROY
): Dialog {
    owner.lifecycle.addObserver(object : DefaultLifecycleObserver, LifecycleObserver {

        override fun onPause(owner: LifecycleOwner) {
            if (event == Lifecycle.Event.ON_PAUSE) {
                removeObserverAndDismiss(owner)
            }
        }

        override fun onStop(owner: LifecycleOwner) {
            if (event == Lifecycle.Event.ON_STOP) {
                removeObserverAndDismiss(owner)
            }
        }

        override fun onDestroy(owner: LifecycleOwner) {
            if (event == Lifecycle.Event.ON_DESTROY) {
                removeObserverAndDismiss(owner)
            }
        }

        fun removeObserverAndDismiss(owner: LifecycleOwner) {
            owner.lifecycle.removeObserver(this)
            dismiss()
        }
    })
    return this
}