Fix status report UI

This commit is contained in:
topjohnwu 2019-09-30 15:32:28 -04:00
parent 6352fbb3b2
commit 5b7ddbbb01
2 changed files with 27 additions and 27 deletions

View File

@ -17,7 +17,7 @@ abstract class BaseViewModel(
initialState: State = State.LOADING initialState: State = State.LOADING
) : LoadingViewModel(initialState) { ) : LoadingViewModel(initialState) {
val isConnected = KObservableField(true) val isConnected = KObservableField(false)
init { init {
ReactiveNetwork.observeNetworkConnectivity(get()) ReactiveNetwork.observeNetworkConnectivity(get())

View File

@ -10,13 +10,14 @@ import com.topjohnwu.magisk.model.observer.Observer
import com.topjohnwu.magisk.utils.KObservableField import com.topjohnwu.magisk.utils.KObservableField
import com.topjohnwu.magisk.utils.SafetyNetHelper import com.topjohnwu.magisk.utils.SafetyNetHelper
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import io.reactivex.Completable
enum class SafetyNetState { enum class SafetyNetState {
LOADING, PASS, FAILED, IDLE LOADING, PASS, FAILED, IDLE
} }
enum class MagiskState { enum class MagiskState {
NO_ROOT, NOT_INSTALLED, UP_TO_DATE, OBSOLETE, LOADING NOT_INSTALLED, UP_TO_DATE, OBSOLETE, LOADING
} }
enum class MagiskItem { enum class MagiskItem {
@ -37,13 +38,9 @@ class HomeViewModel(
val isKeepVerity = KObservableField(Info.keepVerity) val isKeepVerity = KObservableField(Info.keepVerity)
val isRecovery = KObservableField(Info.recovery) val isRecovery = KObservableField(Info.recovery)
private val _magiskState = KObservableField(MagiskState.LOADING) val magiskState = KObservableField(MagiskState.LOADING)
val magiskState = Observer(_magiskState, isConnected) {
if (isConnected.value) _magiskState.value else MagiskState.UP_TO_DATE
}
val magiskStateText = Observer(magiskState) { val magiskStateText = Observer(magiskState) {
when (magiskState.value) { when (magiskState.value) {
MagiskState.NO_ROOT -> TODO()
MagiskState.NOT_INSTALLED -> R.string.magisk_version_error.res() MagiskState.NOT_INSTALLED -> R.string.magisk_version_error.res()
MagiskState.UP_TO_DATE -> R.string.magisk_up_to_date.res() MagiskState.UP_TO_DATE -> R.string.magisk_up_to_date.res()
MagiskState.LOADING -> R.string.checking_for_updates.res() MagiskState.LOADING -> R.string.checking_for_updates.res()
@ -65,7 +62,6 @@ class HomeViewModel(
} }
val managerStateText = Observer(managerState) { val managerStateText = Observer(managerState) {
when (managerState.value) { when (managerState.value) {
MagiskState.NO_ROOT -> "wtf"
MagiskState.NOT_INSTALLED -> R.string.invalid_update_channel.res() MagiskState.NOT_INSTALLED -> R.string.invalid_update_channel.res()
MagiskState.UP_TO_DATE -> R.string.manager_up_to_date.res() MagiskState.UP_TO_DATE -> R.string.manager_up_to_date.res()
MagiskState.LOADING -> R.string.checking_for_updates.res() MagiskState.LOADING -> R.string.checking_for_updates.res()
@ -175,24 +171,28 @@ class HomeViewModel(
} }
fun refresh() { fun refresh() {
refreshVersions()
magiskRepo.fetchUpdate()
.applyViewModel(this)
.doOnSubscribeUi {
_magiskState.value = MagiskState.LOADING
_managerState.value = MagiskState.LOADING
ctsState.value = SafetyNetState.IDLE
basicIntegrityState.value = SafetyNetState.IDLE
safetyNetTitle.value = R.string.safetyNet_check_text
}
.subscribeK {
updateSelf()
ensureEnv()
refreshVersions()
}
hasRoot.value = Shell.rootAccess() hasRoot.value = Shell.rootAccess()
val fetchUpdate = if (isConnected.value)
magiskRepo.fetchUpdate().ignoreElement()
else
Completable.complete()
Completable.fromAction {
Info.loadMagiskInfo()
}.andThen(fetchUpdate)
.applyViewModel(this)
.doOnSubscribeUi {
magiskState.value = MagiskState.LOADING
_managerState.value = MagiskState.LOADING
ctsState.value = SafetyNetState.IDLE
basicIntegrityState.value = SafetyNetState.IDLE
safetyNetTitle.value = R.string.safetyNet_check_text
}.subscribeK {
updateSelf()
ensureEnv()
refreshVersions()
}
} }
private fun refreshVersions() { private fun refreshVersions() {
@ -207,7 +207,7 @@ class HomeViewModel(
} }
private fun updateSelf() { private fun updateSelf() {
_magiskState.value = when (Info.magiskVersionCode) { magiskState.value = when (Info.magiskVersionCode) {
in Int.MIN_VALUE until 0 -> MagiskState.NOT_INSTALLED in Int.MIN_VALUE until 0 -> MagiskState.NOT_INSTALLED
!in Info.remote.magisk.versionCode..Int.MAX_VALUE -> MagiskState.OBSOLETE !in Info.remote.magisk.versionCode..Int.MAX_VALUE -> MagiskState.OBSOLETE
else -> MagiskState.UP_TO_DATE else -> MagiskState.UP_TO_DATE
@ -228,7 +228,7 @@ class HomeViewModel(
private fun ensureEnv() { private fun ensureEnv() {
val invalidStates = val invalidStates =
listOf(MagiskState.NOT_INSTALLED, MagiskState.NO_ROOT, MagiskState.LOADING) listOf(MagiskState.NOT_INSTALLED, MagiskState.LOADING)
// Don't bother checking env when magisk is not installed, loading or already has been shown // Don't bother checking env when magisk is not installed, loading or already has been shown
if (invalidStates.any { it == magiskState.value } || shownDialog) return if (invalidStates.any { it == magiskState.value } || shownDialog) return