Added logic to redesigned home

(partially)
This commit is contained in:
Viktor De Pasquale
2019-10-04 19:36:26 +02:00
parent 277d8773f2
commit 6afcc83955
4 changed files with 73 additions and 5 deletions

View File

@@ -30,5 +30,5 @@ val viewModelModules = module {
// redesign
viewModel { RedesignViewModel() }
viewModel { RedesignHomeViewModel() }
viewModel { RedesignHomeViewModel(get()) }
}

View File

@@ -1,13 +1,69 @@
package com.topjohnwu.magisk.redesign.home
import com.skoumal.teanity.extensions.subscribeK
import com.skoumal.teanity.util.KObservableField
import com.topjohnwu.magisk.BuildConfig
import com.topjohnwu.magisk.Info
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.data.repository.MagiskRepository
import com.topjohnwu.magisk.extensions.res
import com.topjohnwu.magisk.model.entity.MagiskJson
import com.topjohnwu.magisk.model.entity.ManagerJson
import com.topjohnwu.magisk.model.entity.UpdateInfo
import com.topjohnwu.magisk.model.observer.Observer
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
import com.topjohnwu.magisk.ui.home.MagiskState
class HomeViewModel : CompatViewModel() {
class HomeViewModel(
private val repoMagisk: MagiskRepository
) : CompatViewModel() {
val stateTextMagisk = KObservableField("is up to date")
val stateTextManager = KObservableField("is up to date")
val stateMagisk = KObservableField(MagiskState.LOADING)
val stateManager = KObservableField(MagiskState.LOADING)
val stateTextMagisk = Observer(stateMagisk) {
when (stateMagisk.value) {
MagiskState.NOT_INSTALLED -> R.string.magisk_version_error.res()
MagiskState.UP_TO_DATE -> R.string.magisk_up_to_date.res()
MagiskState.LOADING -> R.string.checking_for_updates.res()
MagiskState.OBSOLETE -> R.string.magisk_update_title.res()
}
}
val stateTextManager = Observer(stateManager) {
when (stateManager.value) {
MagiskState.NOT_INSTALLED -> R.string.invalid_update_channel.res()
MagiskState.UP_TO_DATE -> R.string.manager_up_to_date.res()
MagiskState.LOADING -> R.string.checking_for_updates.res()
MagiskState.OBSOLETE -> R.string.manager_update_title.res()
}
}
override fun refresh() = repoMagisk.fetchUpdate()
.subscribeK { updateBy(it) }
private fun updateBy(info: UpdateInfo) {
stateMagisk.value = when {
!info.magisk.isInstalled -> MagiskState.NOT_INSTALLED
info.magisk.isObsolete -> MagiskState.OBSOLETE
else -> MagiskState.UP_TO_DATE
}
stateManager.value = when {
!info.app.isUpdateChannelCorrect -> MagiskState.NOT_INSTALLED
info.app.isObsolete -> MagiskState.OBSOLETE
else -> MagiskState.UP_TO_DATE
}
}
fun onDeletePressed() {}
}
}
@Suppress("unused")
val MagiskJson.isInstalled
get() = Info.magiskVersionCode > 0
val MagiskJson.isObsolete
get() = Info.magiskVersionCode < versionCode
val ManagerJson.isUpdateChannelCorrect
get() = versionCode > 0
val ManagerJson.isObsolete
get() = BuildConfig.VERSION_CODE < versionCode