2019-11-27 06:24:00 -08:00
|
|
|
package cash.z.ecc.android.ext
|
|
|
|
|
|
|
|
import android.view.View
|
|
|
|
import android.view.View.*
|
|
|
|
import cash.z.ecc.android.ui.MainActivity
|
2019-12-18 08:09:13 -08:00
|
|
|
import kotlinx.coroutines.channels.awaitClose
|
|
|
|
import kotlinx.coroutines.flow.channelFlow
|
2019-11-27 06:24:00 -08:00
|
|
|
|
2020-01-09 09:58:57 -08:00
|
|
|
fun View.gone() = goneIf(true)
|
|
|
|
|
|
|
|
fun View.invisible() = invisibleIf(true)
|
|
|
|
|
2019-11-27 06:24:00 -08:00
|
|
|
fun View.goneIf(isGone: Boolean) {
|
|
|
|
visibility = if (isGone) GONE else VISIBLE
|
|
|
|
}
|
|
|
|
|
|
|
|
fun View.invisibleIf(isInvisible: Boolean) {
|
|
|
|
visibility = if (isInvisible) INVISIBLE else VISIBLE
|
|
|
|
}
|
|
|
|
|
2019-12-23 11:16:00 -08:00
|
|
|
fun View.disabledIf(isDisabled: Boolean) {
|
|
|
|
isEnabled = !isDisabled
|
|
|
|
}
|
|
|
|
|
2019-11-27 06:24:00 -08:00
|
|
|
fun View.onClickNavTo(navResId: Int) {
|
|
|
|
setOnClickListener {
|
2020-02-12 04:58:41 -08:00
|
|
|
(context as? MainActivity)?.safeNavigate(navResId)
|
2019-11-27 06:24:00 -08:00
|
|
|
?: throw IllegalStateException("Cannot navigate from this activity. " +
|
|
|
|
"Expected MainActivity but found ${context.javaClass.simpleName}")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun View.onClickNavUp() {
|
|
|
|
setOnClickListener {
|
|
|
|
(context as? MainActivity)?.navController?.navigateUp()
|
|
|
|
?: throw IllegalStateException(
|
|
|
|
"Cannot navigate from this activity. " +
|
|
|
|
"Expected MainActivity but found ${context.javaClass.simpleName}"
|
|
|
|
)
|
|
|
|
}
|
2019-12-18 08:09:13 -08:00
|
|
|
}
|
|
|
|
|
2019-12-23 11:16:00 -08:00
|
|
|
fun View.onClickNavBack() {
|
|
|
|
setOnClickListener {
|
|
|
|
(context as? MainActivity)?.navController?.popBackStack()
|
|
|
|
?: throw IllegalStateException(
|
|
|
|
"Cannot navigate from this activity. " +
|
|
|
|
"Expected MainActivity but found ${context.javaClass.simpleName}"
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-12-18 08:09:13 -08:00
|
|
|
fun View.clicks() = channelFlow<View> {
|
|
|
|
setOnClickListener {
|
|
|
|
offer(this@clicks)
|
|
|
|
}
|
|
|
|
awaitClose {
|
|
|
|
setOnClickListener(null)
|
|
|
|
}
|
2019-11-27 06:24:00 -08:00
|
|
|
}
|