Reduce usage of ObservableField

This commit is contained in:
topjohnwu
2020-07-15 02:52:15 -07:00
parent 6c6368fd81
commit ec2d7d77eb
11 changed files with 130 additions and 148 deletions
@@ -15,7 +15,8 @@ import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatDialog
import androidx.core.view.ViewCompat
import androidx.core.view.updatePadding
import androidx.databinding.ObservableField
import androidx.databinding.Bindable
import androidx.databinding.PropertyChangeRegistry
import androidx.databinding.ViewDataBinding
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@@ -23,8 +24,9 @@ import com.topjohnwu.magisk.BR
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.databinding.ComparableRvItem
import com.topjohnwu.magisk.databinding.DialogMagiskBaseBinding
import com.topjohnwu.magisk.ktx.value
import com.topjohnwu.magisk.ui.base.itemBindingOf
import com.topjohnwu.magisk.utils.ObservableHost
import com.topjohnwu.magisk.utils.set
import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapters
import me.tatarka.bindingcollectionadapter2.ItemBinding
@@ -71,11 +73,24 @@ class MagiskDialog(
binding.dialogBaseOutsideContainer.setOnClickListener(listener)
}
inner class Data {
val icon = ObservableField(0)
val iconRaw = ObservableField(null as Drawable?)
val title = ObservableField<CharSequence>("")
val message = ObservableField<CharSequence>("")
inner class Data: ObservableHost {
override var callbacks: PropertyChangeRegistry? = null
@get:Bindable
var icon = 0
set(value) = set(value, field, { field = it }, BR.icon)
@get:Bindable
var iconRaw: Drawable? = null
set(value) = set(value, field, { field = it }, BR.iconRaw)
@get:Bindable
var title: CharSequence = ""
set(value) = set(value, field, { field = it }, BR.title)
@get:Bindable
var message : CharSequence = ""
set(value) = set(value, field, { field = it }, BR.message)
val buttonPositive = Button()
val buttonNeutral = Button()
@@ -87,10 +102,20 @@ class MagiskDialog(
POSITIVE, NEUTRAL, NEGATIVE, IDGAF
}
inner class Button {
val icon = ObservableField(0)
val title = ObservableField<CharSequence>("")
val isEnabled = ObservableField(true)
inner class Button: ObservableHost {
override var callbacks: PropertyChangeRegistry? = null
@get:Bindable
var icon = 0
set(value) = set(value, field, { field = it }, BR.icon)
@get:Bindable
var title: CharSequence = ""
set(value) = set(value, field, { field = it }, BR.title)
@get:Bindable
var isEnabled = true
set(value) = set(value, field, { field = it }, BR.enabled)
var onClickAction: OnDialogButtonClickListener = {}
var preventDismiss = false
@@ -117,24 +142,24 @@ class MagiskDialog(
inner class ButtonBuilder(private val button: Button) {
var icon: Int
get() = button.icon.value
get() = button.icon
set(value) {
button.icon.value = value
button.icon = value
}
var title: CharSequence
get() = button.title.value
get() = button.title
set(value) {
button.title.value = value
button.title = value
}
var titleRes: Int
get() = 0
set(value) {
button.title.value = context.getString(value)
button.title = context.getString(value)
}
var isEnabled: Boolean
get() = button.isEnabled.value
get() = button.isEnabled
set(value) {
button.isEnabled.value = value
button.isEnabled = value
}
var preventDismiss: Boolean
get() = button.preventDismiss
@@ -148,22 +173,22 @@ class MagiskDialog(
}
fun applyTitle(@StringRes stringRes: Int) =
apply { data.title.value = context.getString(stringRes) }
apply { data.title = context.getString(stringRes) }
fun applyTitle(title: CharSequence) =
apply { data.title.value = title }
apply { data.title = title }
fun applyMessage(@StringRes stringRes: Int, vararg args: Any) =
apply { data.message.value = context.getString(stringRes, *args) }
apply { data.message = context.getString(stringRes, *args) }
fun applyMessage(message: CharSequence) =
apply { data.message.value = message }
apply { data.message = message }
fun applyIcon(@DrawableRes drawableRes: Int) =
apply { data.icon.value = drawableRes }
apply { data.icon = drawableRes }
fun applyIcon(drawable: Drawable) =
apply { data.iconRaw.value = drawable }
apply { data.iconRaw = drawable }
fun applyButton(buttonType: ButtonType, builder: ButtonBuilder.() -> Unit) = apply {
val button = when (buttonType) {