Commit cad189d2 authored by topjohnwu's avatar topjohnwu

Remove unnecessary indirection

parent 7cf3da1b
package com.topjohnwu.magisk.databinding package com.topjohnwu.magisk.databinding
import androidx.annotation.CallSuper import androidx.annotation.CallSuper
import androidx.databinding.PropertyChangeRegistry
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.BR
import com.topjohnwu.magisk.utils.DiffObservableList import com.topjohnwu.magisk.utils.DiffObservableList
...@@ -48,4 +49,6 @@ abstract class ComparableRvItem<in T> : RvItem() { ...@@ -48,4 +49,6 @@ abstract class ComparableRvItem<in T> : RvItem() {
} }
} }
abstract class ObservableItem<T> : ComparableRvItem<T>(), ObservableHost by ObservableHost.impl abstract class ObservableItem<T> : ComparableRvItem<T>(), ObservableHost {
override var callbacks: PropertyChangeRegistry? = null
}
...@@ -5,6 +5,7 @@ import androidx.annotation.CallSuper ...@@ -5,6 +5,7 @@ import androidx.annotation.CallSuper
import androidx.core.graphics.Insets import androidx.core.graphics.Insets
import androidx.databinding.Bindable import androidx.databinding.Bindable
import androidx.databinding.Observable import androidx.databinding.Observable
import androidx.databinding.PropertyChangeRegistry
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
...@@ -22,7 +23,9 @@ import org.koin.core.KoinComponent ...@@ -22,7 +23,9 @@ import org.koin.core.KoinComponent
abstract class BaseViewModel( abstract class BaseViewModel(
initialState: State = State.LOADING initialState: State = State.LOADING
) : ViewModel(), ObservableHost by ObservableHost.impl, KoinComponent { ) : ViewModel(), ObservableHost, KoinComponent {
override var callbacks: PropertyChangeRegistry? = null
enum class State { enum class State {
LOADED, LOADING, LOADING_FAILED LOADED, LOADING, LOADING_FAILED
......
...@@ -14,30 +14,29 @@ import kotlin.reflect.KProperty ...@@ -14,30 +14,29 @@ import kotlin.reflect.KProperty
* */ * */
interface ObservableHost : Observable { interface ObservableHost : Observable {
var callbacks: PropertyChangeRegistry?
/** /**
* Notifies all observers that something has changed. By default implementation this method is * Notifies all observers that something has changed. By default implementation this method is
* synchronous, hence observers will never be notified in undefined order. Observers might * synchronous, hence observers will never be notified in undefined order. Observers might
* choose to refresh the view completely, which is beyond the scope of this function. * choose to refresh the view completely, which is beyond the scope of this function.
* */ * */
fun notifyChange(host: Observable = this) fun notifyChange() {
synchronized(this) {
callbacks ?: return
}.notifyCallbacks(this, 0, null)
}
/** /**
* Notifies all observers about field with [fieldId] has been changed. This will happen * Notifies all observers about field with [fieldId] has been changed. This will happen
* synchronously before or after [notifyChange] has been called. It will never be called during * synchronously before or after [notifyChange] has been called. It will never be called during
* the execution of aforementioned method. * the execution of aforementioned method.
* */ * */
fun notifyPropertyChanged(fieldId: Int, host: Observable = this) fun notifyPropertyChanged(fieldId: Int) {
synchronized(this) {
companion object { callbacks ?: return
}.notifyCallbacks(this, fieldId, null)
val impl: ObservableHost get() = ObservableHostImpl()
} }
}
private class ObservableHostImpl : ObservableHost {
private var callbacks: PropertyChangeRegistry? = null
override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) { override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) {
synchronized(this) { synchronized(this) {
...@@ -50,19 +49,6 @@ private class ObservableHostImpl : ObservableHost { ...@@ -50,19 +49,6 @@ private class ObservableHostImpl : ObservableHost {
callbacks ?: return callbacks ?: return
}.remove(callback) }.remove(callback)
} }
override fun notifyChange(host: Observable) {
synchronized(this) {
callbacks ?: return
}.notifyCallbacks(host, 0, null)
}
override fun notifyPropertyChanged(fieldId: Int, host: Observable) {
synchronized(this) {
callbacks ?: return
}.notifyCallbacks(host, fieldId, null)
}
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment