Commit c0981174 authored by topjohnwu's avatar topjohnwu

Use LiveData instead of Observable

parent 0b5f973b
...@@ -24,7 +24,7 @@ abstract class BaseFragment<Binding : ViewDataBinding> : Fragment(), ViewModelHo ...@@ -24,7 +24,7 @@ abstract class BaseFragment<Binding : ViewDataBinding> : Fragment(), ViewModelHo
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
startObserveEvents() startObserveLiveData()
} }
override fun onCreateView( override fun onCreateView(
......
...@@ -4,9 +4,7 @@ import android.Manifest.permission.REQUEST_INSTALL_PACKAGES ...@@ -4,9 +4,7 @@ import android.Manifest.permission.REQUEST_INSTALL_PACKAGES
import android.Manifest.permission.WRITE_EXTERNAL_STORAGE import android.Manifest.permission.WRITE_EXTERNAL_STORAGE
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import androidx.annotation.CallSuper
import androidx.databinding.Bindable import androidx.databinding.Bindable
import androidx.databinding.Observable
import androidx.databinding.PropertyChangeRegistry import androidx.databinding.PropertyChangeRegistry
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
...@@ -15,7 +13,6 @@ import androidx.lifecycle.viewModelScope ...@@ -15,7 +13,6 @@ import androidx.lifecycle.viewModelScope
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.BR
import com.topjohnwu.magisk.R import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.core.Info
import com.topjohnwu.magisk.databinding.ObservableHost import com.topjohnwu.magisk.databinding.ObservableHost
import com.topjohnwu.magisk.databinding.set import com.topjohnwu.magisk.databinding.set
import com.topjohnwu.magisk.events.BackPressEvent import com.topjohnwu.magisk.events.BackPressEvent
...@@ -41,7 +38,6 @@ abstract class BaseViewModel( ...@@ -41,7 +38,6 @@ abstract class BaseViewModel(
@get:Bindable @get:Bindable
val loadFailed get() = state == State.LOADING_FAILED val loadFailed get() = state == State.LOADING_FAILED
val isConnected get() = Info.isConnected
val viewEvents: LiveData<ViewEvent> get() = _viewEvents val viewEvents: LiveData<ViewEvent> get() = _viewEvents
var state= initialState var state= initialState
...@@ -49,15 +45,6 @@ abstract class BaseViewModel( ...@@ -49,15 +45,6 @@ abstract class BaseViewModel(
private val _viewEvents = MutableLiveData<ViewEvent>() private val _viewEvents = MutableLiveData<ViewEvent>()
private var runningJob: Job? = null private var runningJob: Job? = null
private val refreshCallback = object : Observable.OnPropertyChangedCallback() {
override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
requestRefresh()
}
}
init {
isConnected.addOnPropertyChangedCallback(refreshCallback)
}
open fun onSaveState(state: Bundle) {} open fun onSaveState(state: Bundle) {}
open fun onRestoreState(state: Bundle) {} open fun onRestoreState(state: Bundle) {}
...@@ -73,12 +60,6 @@ abstract class BaseViewModel( ...@@ -73,12 +60,6 @@ abstract class BaseViewModel(
protected open fun refresh(): Job? = null protected open fun refresh(): Job? = null
@CallSuper
override fun onCleared() {
isConnected.removeOnPropertyChangedCallback(refreshCallback)
super.onCleared()
}
fun withPermission(permission: String, callback: (Boolean) -> Unit) { fun withPermission(permission: String, callback: (Boolean) -> Unit) {
PermissionEvent(permission, callback).publish() PermissionEvent(permission, callback).publish()
} }
......
...@@ -36,7 +36,7 @@ abstract class UIActivity<Binding : ViewDataBinding> : BaseActivity(), ViewModel ...@@ -36,7 +36,7 @@ abstract class UIActivity<Binding : ViewDataBinding> : BaseActivity(), ViewModel
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
startObserveEvents() startObserveLiveData()
// We need to set the window background explicitly since for whatever reason it's not // We need to set the window background explicitly since for whatever reason it's not
// propagated upstream // propagated upstream
......
...@@ -4,6 +4,7 @@ import androidx.lifecycle.LifecycleOwner ...@@ -4,6 +4,7 @@ import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner import androidx.lifecycle.ViewModelStoreOwner
import com.topjohnwu.magisk.core.Info
import com.topjohnwu.magisk.core.di.ServiceLocator import com.topjohnwu.magisk.core.di.ServiceLocator
import com.topjohnwu.magisk.ui.home.HomeViewModel import com.topjohnwu.magisk.ui.home.HomeViewModel
import com.topjohnwu.magisk.ui.install.InstallViewModel import com.topjohnwu.magisk.ui.install.InstallViewModel
...@@ -15,10 +16,13 @@ interface ViewModelHolder : LifecycleOwner, ViewModelStoreOwner { ...@@ -15,10 +16,13 @@ interface ViewModelHolder : LifecycleOwner, ViewModelStoreOwner {
val viewModel: BaseViewModel val viewModel: BaseViewModel
fun startObserveEvents() { fun startObserveLiveData() {
viewModel.viewEvents.observe(this) { viewModel.viewEvents.observe(this) {
onEventDispatched(it) onEventDispatched(it)
} }
Info.isConnected.observe(this) {
viewModel.requestRefresh()
}
} }
/** /**
......
package com.topjohnwu.magisk.core package com.topjohnwu.magisk.core
import android.os.Build import android.os.Build
import androidx.databinding.ObservableBoolean import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.topjohnwu.magisk.StubApk import com.topjohnwu.magisk.StubApk
import com.topjohnwu.magisk.core.di.AppContext import com.topjohnwu.magisk.core.di.AppContext
import com.topjohnwu.magisk.core.model.UpdateInfo import com.topjohnwu.magisk.core.model.UpdateInfo
...@@ -43,10 +44,10 @@ object Info { ...@@ -43,10 +44,10 @@ object Info {
getProperty("ro.kernel.qemu", "0") == "1" || getProperty("ro.kernel.qemu", "0") == "1" ||
getProperty("ro.boot.qemu", "0") == "1" getProperty("ro.boot.qemu", "0") == "1"
val isConnected by lazy { val isConnected: LiveData<Boolean> by lazy {
ObservableBoolean(false).also { field -> MutableLiveData(false).also { field ->
NetworkObserver.observe(AppContext) { NetworkObserver.observe(AppContext) {
UiThreadHandler.run { field.set(it) } UiThreadHandler.run { field.value = it }
} }
} }
} }
......
...@@ -70,7 +70,7 @@ class ModuleViewModel : BaseViewModel() { ...@@ -70,7 +70,7 @@ class ModuleViewModel : BaseViewModel() {
} }
fun downloadPressed(item: OnlineModule?) = fun downloadPressed(item: OnlineModule?) =
if (item != null && isConnected.get()) { if (item != null && Info.isConnected.value == true) {
withExternalRW { ModuleInstallDialog(item).publish() } withExternalRW { ModuleInstallDialog(item).publish() }
} else { } else {
SnackbarEvent(R.string.no_connection).publish() SnackbarEvent(R.string.no_connection).publish()
......
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