mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-25 21:57:39 +00:00
Added env check to homepage
This commit is contained in:
parent
23978ef4d2
commit
38019f7f42
@ -0,0 +1,77 @@
|
|||||||
|
package com.topjohnwu.magisk.model.events.dialog
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.DialogInterface
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import com.topjohnwu.magisk.Info
|
||||||
|
import com.topjohnwu.magisk.R
|
||||||
|
import com.topjohnwu.magisk.extensions.cachedFile
|
||||||
|
import com.topjohnwu.magisk.extensions.reboot
|
||||||
|
import com.topjohnwu.magisk.net.Networking
|
||||||
|
import com.topjohnwu.magisk.tasks.MagiskInstaller
|
||||||
|
import com.topjohnwu.magisk.utils.Utils
|
||||||
|
import com.topjohnwu.magisk.view.MagiskDialog
|
||||||
|
import com.topjohnwu.superuser.Shell
|
||||||
|
import com.topjohnwu.superuser.ShellUtils
|
||||||
|
import com.topjohnwu.superuser.internal.UiThreadHandler
|
||||||
|
import com.topjohnwu.superuser.io.SuFile
|
||||||
|
import org.koin.core.KoinComponent
|
||||||
|
import org.koin.core.get
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
class EnvFixDialog : DialogEvent() {
|
||||||
|
|
||||||
|
override fun build(dialog: MagiskDialog) = dialog
|
||||||
|
.applyTitle(R.string.env_fix_title)
|
||||||
|
.applyMessage(R.string.env_fix_msg)
|
||||||
|
.applyButton(MagiskDialog.ButtonType.POSITIVE) {
|
||||||
|
titleRes = R.string.yes
|
||||||
|
preventDismiss = true
|
||||||
|
onClick {
|
||||||
|
dialog.applyTitle(R.string.setup_title)
|
||||||
|
.applyMessage(R.string.setup_msg)
|
||||||
|
.applyButton(MagiskDialog.ButtonType.POSITIVE) {
|
||||||
|
title = ""
|
||||||
|
}
|
||||||
|
.applyButton(MagiskDialog.ButtonType.NEGATIVE) {
|
||||||
|
title = ""
|
||||||
|
}
|
||||||
|
.cancellable(false)
|
||||||
|
fixEnv(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.applyButton(MagiskDialog.ButtonType.NEGATIVE) {
|
||||||
|
titleRes = R.string.no_thanks
|
||||||
|
}
|
||||||
|
.let { Unit }
|
||||||
|
|
||||||
|
private fun fixEnv(dialog: DialogInterface) {
|
||||||
|
object : MagiskInstaller(), KoinComponent {
|
||||||
|
override fun operations(): Boolean {
|
||||||
|
val context = get<Context>()
|
||||||
|
val zip: File = context.cachedFile("magisk.zip")
|
||||||
|
|
||||||
|
installDir = SuFile("/data/adb/magisk")
|
||||||
|
Shell.su("rm -rf /data/adb/magisk/*").exec()
|
||||||
|
|
||||||
|
if (!ShellUtils.checkSum("MD5", zip, Info.remote.magisk.md5))
|
||||||
|
Networking.get(Info.remote.magisk.link).execForFile(zip)
|
||||||
|
|
||||||
|
zipUri = zip.toUri()
|
||||||
|
return extractZip() && Shell.su("fix_env").exec().isSuccess
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResult(success: Boolean) {
|
||||||
|
dialog.dismiss()
|
||||||
|
Utils.toast(
|
||||||
|
if (success) R.string.reboot_delay_toast else R.string.setup_fail,
|
||||||
|
Toast.LENGTH_LONG
|
||||||
|
)
|
||||||
|
if (success)
|
||||||
|
UiThreadHandler.handler.postDelayed({ reboot() }, 5000)
|
||||||
|
}
|
||||||
|
}.exec()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -5,21 +5,20 @@ import com.topjohnwu.magisk.Info
|
|||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.data.repository.MagiskRepository
|
import com.topjohnwu.magisk.data.repository.MagiskRepository
|
||||||
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
||||||
import com.topjohnwu.magisk.extensions.packageName
|
import com.topjohnwu.magisk.extensions.*
|
||||||
import com.topjohnwu.magisk.extensions.replaceRandomWithSpecial
|
|
||||||
import com.topjohnwu.magisk.extensions.res
|
|
||||||
import com.topjohnwu.magisk.extensions.subscribeK
|
|
||||||
import com.topjohnwu.magisk.model.entity.MagiskJson
|
import com.topjohnwu.magisk.model.entity.MagiskJson
|
||||||
import com.topjohnwu.magisk.model.entity.ManagerJson
|
import com.topjohnwu.magisk.model.entity.ManagerJson
|
||||||
import com.topjohnwu.magisk.model.entity.UpdateInfo
|
import com.topjohnwu.magisk.model.entity.UpdateInfo
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.HomeItem
|
import com.topjohnwu.magisk.model.entity.recycler.HomeItem
|
||||||
import com.topjohnwu.magisk.model.events.OpenInappLinkEvent
|
import com.topjohnwu.magisk.model.events.OpenInappLinkEvent
|
||||||
|
import com.topjohnwu.magisk.model.events.dialog.EnvFixDialog
|
||||||
import com.topjohnwu.magisk.model.events.dialog.MagiskInstallDialog
|
import com.topjohnwu.magisk.model.events.dialog.MagiskInstallDialog
|
||||||
import com.topjohnwu.magisk.model.events.dialog.ManagerInstallDialog
|
import com.topjohnwu.magisk.model.events.dialog.ManagerInstallDialog
|
||||||
import com.topjohnwu.magisk.model.observer.Observer
|
import com.topjohnwu.magisk.model.observer.Observer
|
||||||
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
|
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
|
||||||
import com.topjohnwu.magisk.ui.home.MagiskState
|
import com.topjohnwu.magisk.ui.home.MagiskState
|
||||||
import com.topjohnwu.magisk.utils.KObservableField
|
import com.topjohnwu.magisk.utils.KObservableField
|
||||||
|
import com.topjohnwu.superuser.Shell
|
||||||
import me.tatarka.bindingcollectionadapter2.BR
|
import me.tatarka.bindingcollectionadapter2.BR
|
||||||
import me.tatarka.bindingcollectionadapter2.ItemBinding
|
import me.tatarka.bindingcollectionadapter2.ItemBinding
|
||||||
import me.tatarka.bindingcollectionadapter2.OnItemBind
|
import me.tatarka.bindingcollectionadapter2.OnItemBind
|
||||||
@ -69,6 +68,8 @@ class HomeViewModel(
|
|||||||
it.bindExtra(BR.viewModel, this)
|
it.bindExtra(BR.viewModel, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var shownDialog = false
|
||||||
|
|
||||||
override fun refresh() = repoMagisk.fetchUpdate()
|
override fun refresh() = repoMagisk.fetchUpdate()
|
||||||
.onErrorReturn { Info.remote }
|
.onErrorReturn { Info.remote }
|
||||||
.subscribeK { updateBy(it) }
|
.subscribeK { updateBy(it) }
|
||||||
@ -101,6 +102,8 @@ class HomeViewModel(
|
|||||||
)
|
)
|
||||||
else -> ""
|
else -> ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ensureEnv()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onLinkPressed(link: String) = OpenInappLinkEvent(link).publish()
|
fun onLinkPressed(link: String) = OpenInappLinkEvent(link).publish()
|
||||||
@ -111,6 +114,27 @@ class HomeViewModel(
|
|||||||
|
|
||||||
fun onMagiskPressed() = MagiskInstallDialog().publish()
|
fun onMagiskPressed() = MagiskInstallDialog().publish()
|
||||||
|
|
||||||
|
private fun ensureEnv() {
|
||||||
|
val invalidStates = listOf(
|
||||||
|
MagiskState.NOT_INSTALLED,
|
||||||
|
MagiskState.LOADING
|
||||||
|
)
|
||||||
|
|
||||||
|
// Don't bother checking env when magisk is not installed, loading or already has been shown
|
||||||
|
if (invalidStates.any { it == stateMagisk.value } || shownDialog) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Shell.su("env_check")
|
||||||
|
.toSingle()
|
||||||
|
.map { it.exec() }
|
||||||
|
.filter { !it.isSuccess }
|
||||||
|
.subscribeK {
|
||||||
|
shownDialog = true
|
||||||
|
EnvFixDialog().publish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user