mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-18 05:58:30 +00:00
Remove unnecessary indirection
This commit is contained in:
parent
7cf3da1b3b
commit
cad189d2dc
@ -1,6 +1,7 @@
|
|||||||
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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
* */
|
* */
|
||||||
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 {
|
|||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user