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
}