mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-11-28 04:25:27 +00:00
Added logic to redesigned home
(partially)
This commit is contained in:
parent
277d8773f2
commit
6afcc83955
@ -30,5 +30,5 @@ val viewModelModules = module {
|
||||
// redesign
|
||||
|
||||
viewModel { RedesignViewModel() }
|
||||
viewModel { RedesignHomeViewModel() }
|
||||
viewModel { RedesignHomeViewModel(get()) }
|
||||
}
|
||||
|
@ -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
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="?colorError" android:state_selected="true" />
|
||||
<item android:color="?colorDisabled" android:state_enabled="false" />
|
||||
<item android:color="?colorPrimary" />
|
||||
</selector>
|
@ -5,6 +5,8 @@
|
||||
|
||||
<data>
|
||||
|
||||
<import type="com.topjohnwu.magisk.ui.home.MagiskState" />
|
||||
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="com.topjohnwu.magisk.redesign.home.HomeViewModel" />
|
||||
@ -32,6 +34,7 @@
|
||||
android:id="@+id/home_magisk_wrapper"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:animateLayoutChanges="true"
|
||||
app:layout_constraintEnd_toStartOf="@+id/home_manager_wrapper"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
@ -39,6 +42,7 @@
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/home_magisk_icon"
|
||||
style="?styleIconPrimary"
|
||||
isEnabled="@{viewModel.stateMagisk != MagiskState.LOADING}"
|
||||
onSelectClick="@{() -> viewModel.onDeletePressed()}"
|
||||
onSelectReset="@{10000L}"
|
||||
android:padding="@dimen/l_25"
|
||||
@ -71,15 +75,18 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/home_magisk_title" />
|
||||
|
||||
<FrameLayout
|
||||
gone="@{viewModel.stateMagisk == MagiskState.LOADING}"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/l1"
|
||||
android:animateLayoutChanges="true"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/home_magisk_status">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="?styleButtonDefault"
|
||||
gone="@{viewModel.stateMagisk != MagiskState.OBSOLETE}"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/update"
|
||||
@ -91,6 +98,7 @@
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="?styleButtonText"
|
||||
gone="@{viewModel.stateMagisk == MagiskState.OBSOLETE}"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/install"
|
||||
@ -147,6 +155,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/l1"
|
||||
gone="@{viewModel.stateManager == MagiskState.LOADING}"
|
||||
app:layout_constraintTop_toBottomOf="@+id/home_manager_status">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
@ -154,6 +163,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/update"
|
||||
gone="@{viewModel.stateManager != MagiskState.OBSOLETE}"
|
||||
app:icon="@drawable/ic_update_md2"
|
||||
app:iconGravity="textEnd"
|
||||
app:iconPadding="@dimen/l_50"
|
||||
@ -164,6 +174,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/install"
|
||||
gone="@{viewModel.stateManager == MagiskState.OBSOLETE}"
|
||||
app:icon="@drawable/ic_install"
|
||||
app:iconGravity="textEnd"
|
||||
app:iconPadding="@dimen/l_50"
|
||||
|
Loading…
Reference in New Issue
Block a user