mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-05-05 19:00:49 +00:00
56 lines
1.3 KiB
Kotlin
56 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
|
|
import com.topjohnwu.magisk.extensions.get
|
|
|
|
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(get())
|
|
}
|
|
|
|
@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
|
|
fun TextView.getTransitiveText() = text.asTransitive()
|