mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-05-07 09:46:58 +00:00
54 lines
1.3 KiB
Kotlin
54 lines
1.3 KiB
Kotlin
![]() |
package com.topjohnwu.magisk.utils
|
||
|
|
||
|
import android.content.res.Resources
|
||
|
import android.widget.TextView
|
||
|
import androidx.databinding.BindingAdapter
|
||
|
import androidx.databinding.InverseBindingAdapter
|
||
|
|
||
|
sealed class TransitiveText {
|
||
|
|
||
|
abstract val isEmpty: Boolean
|
||
|
abstract fun getText(resources: Resources): CharSequence
|
||
|
|
||
|
// ---
|
||
|
|
||
|
class String(
|
||
|
private val value: CharSequence
|
||
|
) : TransitiveText() {
|
||
|
|
||
|
override val isEmpty = value.isEmpty()
|
||
|
override fun getText(resources: Resources) = value
|
||
|
|
||
|
}
|
||
|
|
||
|
class Res(
|
||
|
private val value: Int,
|
||
|
private vararg val params: Any
|
||
|
) : TransitiveText() {
|
||
|
|
||
|
override val isEmpty = value == 0
|
||
|
override fun getText(resources: Resources) =
|
||
|
resources.getString(value, *params)
|
||
|
|
||
|
}
|
||
|
|
||
|
// ---
|
||
|
|
||
|
companion object {
|
||
|
val empty = String("")
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
fun Int.asTransitive(vararg params: Any) = TransitiveText.Res(this, *params)
|
||
|
fun CharSequence.asTransitive() = TransitiveText.String(this)
|
||
|
|
||
|
|
||
|
@BindingAdapter("android:text")
|
||
|
fun TextView.setText(text: TransitiveText) {
|
||
|
this.text = text.getText(resources)
|
||
|
}
|
||
|
|
||
|
@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
|
||
|
fun TextView.getTransitiveText() = text.asTransitive()
|