Make sure shell command won't block
This commit is contained in:
parent
3c2041933f
commit
b3328a0ec2
@ -48,6 +48,7 @@ object Config : PreferenceModel, DBConfig {
|
|||||||
const val REPO_ORDER = "repo_order"
|
const val REPO_ORDER = "repo_order"
|
||||||
const val SHOW_SYSTEM_APP = "show_system"
|
const val SHOW_SYSTEM_APP = "show_system"
|
||||||
const val DOWNLOAD_PATH = "download_path"
|
const val DOWNLOAD_PATH = "download_path"
|
||||||
|
const val BOOT_ID = "boot_id"
|
||||||
|
|
||||||
// system state
|
// system state
|
||||||
const val MAGISKHIDE = "magiskhide"
|
const val MAGISKHIDE = "magiskhide"
|
||||||
@ -105,6 +106,8 @@ object Config : PreferenceModel, DBConfig {
|
|||||||
}
|
}
|
||||||
else Value.DEFAULT_CHANNEL
|
else Value.DEFAULT_CHANNEL
|
||||||
|
|
||||||
|
var bootId by preference(Key.BOOT_ID, "")
|
||||||
|
|
||||||
var downloadPath by preference(Key.DOWNLOAD_PATH, Environment.DIRECTORY_DOWNLOADS)
|
var downloadPath by preference(Key.DOWNLOAD_PATH, Environment.DIRECTORY_DOWNLOADS)
|
||||||
var repoOrder by preference(Key.REPO_ORDER, Value.ORDER_DATE)
|
var repoOrder by preference(Key.REPO_ORDER, Value.ORDER_DATE)
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ import com.topjohnwu.magisk.utils.CachedValue
|
|||||||
import com.topjohnwu.magisk.utils.KObservableField
|
import com.topjohnwu.magisk.utils.KObservableField
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.topjohnwu.superuser.ShellUtils
|
import com.topjohnwu.superuser.ShellUtils
|
||||||
|
import java.io.FileInputStream
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
val isRunningAsStub get() = Info.stub != null
|
val isRunningAsStub get() = Info.stub != null
|
||||||
|
|
||||||
@ -32,6 +34,22 @@ object Info {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val isNewReboot by lazy {
|
||||||
|
try {
|
||||||
|
FileInputStream("/proc/sys/kernel/random/boot_id").bufferedReader().use {
|
||||||
|
val id = it.readLine()
|
||||||
|
if (id != Config.bootId) {
|
||||||
|
Config.bootId = id
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: IOException) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun loadState() = runCatching {
|
private fun loadState() = runCatching {
|
||||||
val str = ShellUtils.fastCmd("magisk -v").split(":".toRegex())[0]
|
val str = ShellUtils.fastCmd("magisk -v").split(":".toRegex())[0]
|
||||||
val code = ShellUtils.fastCmd("magisk -V").toInt()
|
val code = ShellUtils.fastCmd("magisk -V").toInt()
|
||||||
|
@ -3,8 +3,8 @@ package com.topjohnwu.magisk.data.database
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import com.topjohnwu.magisk.Const
|
import com.topjohnwu.magisk.Const
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Delete
|
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.BaseDao
|
import com.topjohnwu.magisk.data.database.magiskdb.BaseDao
|
||||||
|
import com.topjohnwu.magisk.data.database.magiskdb.Delete
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Replace
|
import com.topjohnwu.magisk.data.database.magiskdb.Replace
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Select
|
import com.topjohnwu.magisk.data.database.magiskdb.Select
|
||||||
import com.topjohnwu.magisk.extensions.now
|
import com.topjohnwu.magisk.extensions.now
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.topjohnwu.magisk.data.database
|
package com.topjohnwu.magisk.data.database
|
||||||
|
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Delete
|
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.BaseDao
|
import com.topjohnwu.magisk.data.database.magiskdb.BaseDao
|
||||||
|
import com.topjohnwu.magisk.data.database.magiskdb.Delete
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Replace
|
import com.topjohnwu.magisk.data.database.magiskdb.Replace
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Select
|
import com.topjohnwu.magisk.data.database.magiskdb.Select
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.topjohnwu.magisk.data.database
|
package com.topjohnwu.magisk.data.database
|
||||||
|
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Delete
|
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.BaseDao
|
import com.topjohnwu.magisk.data.database.magiskdb.BaseDao
|
||||||
|
import com.topjohnwu.magisk.data.database.magiskdb.Delete
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Replace
|
import com.topjohnwu.magisk.data.database.magiskdb.Replace
|
||||||
import com.topjohnwu.magisk.data.database.magiskdb.Select
|
import com.topjohnwu.magisk.data.database.magiskdb.Select
|
||||||
|
|
||||||
|
@ -3,14 +3,12 @@ package com.topjohnwu.magisk.ui
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.topjohnwu.magisk.BuildConfig
|
import com.topjohnwu.magisk.*
|
||||||
import com.topjohnwu.magisk.Config
|
|
||||||
import com.topjohnwu.magisk.intent
|
|
||||||
import com.topjohnwu.magisk.utils.Utils
|
import com.topjohnwu.magisk.utils.Utils
|
||||||
import com.topjohnwu.magisk.view.Notifications
|
import com.topjohnwu.magisk.view.Notifications
|
||||||
import com.topjohnwu.magisk.view.Shortcuts
|
import com.topjohnwu.magisk.view.Shortcuts
|
||||||
import com.topjohnwu.magisk.wrap
|
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
|
import com.topjohnwu.superuser.ShellUtils
|
||||||
|
|
||||||
open class SplashActivity : Activity() {
|
open class SplashActivity : Activity() {
|
||||||
|
|
||||||
@ -37,6 +35,10 @@ open class SplashActivity : Activity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Info.keepVerity = ShellUtils.fastCmd("echo \$KEEPVERITY").toBoolean()
|
||||||
|
Info.keepEnc = ShellUtils.fastCmd("echo \$KEEPFORCEENCRYPT").toBoolean()
|
||||||
|
Info.recovery = ShellUtils.fastCmd("echo \$RECOVERYMODE").toBoolean()
|
||||||
|
|
||||||
// Set default configs
|
// Set default configs
|
||||||
Config.initialize()
|
Config.initialize()
|
||||||
|
|
||||||
@ -49,9 +51,13 @@ open class SplashActivity : Activity() {
|
|||||||
// Setup shortcuts
|
// Setup shortcuts
|
||||||
Shortcuts.setup(this)
|
Shortcuts.setup(this)
|
||||||
|
|
||||||
Shell.su("mm_patch_dtb").submit {
|
if (Info.isNewReboot) {
|
||||||
|
val shell = Shell.newInstance()
|
||||||
|
shell.newJob().add("mm_patch_dtb").submit {
|
||||||
if (it.isSuccess)
|
if (it.isSuccess)
|
||||||
Notifications.dtboPatched(this)
|
Notifications.dtboPatched(this)
|
||||||
|
shell.close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DONE = true
|
DONE = true
|
||||||
|
@ -2,12 +2,10 @@ package com.topjohnwu.magisk.utils
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.topjohnwu.magisk.Const
|
import com.topjohnwu.magisk.Const
|
||||||
import com.topjohnwu.magisk.Info
|
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.extensions.rawResource
|
import com.topjohnwu.magisk.extensions.rawResource
|
||||||
import com.topjohnwu.magisk.wrap
|
import com.topjohnwu.magisk.wrap
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.topjohnwu.superuser.ShellUtils
|
|
||||||
import com.topjohnwu.superuser.io.SuFile
|
import com.topjohnwu.superuser.io.SuFile
|
||||||
|
|
||||||
class RootInit : Shell.Initializer() {
|
class RootInit : Shell.Initializer() {
|
||||||
@ -17,9 +15,6 @@ class RootInit : Shell.Initializer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun init(context: Context, shell: Shell): Boolean {
|
fun init(context: Context, shell: Shell): Boolean {
|
||||||
// Invalidate env state if shell is recreated
|
|
||||||
Info.envRef.invalidate()
|
|
||||||
|
|
||||||
val job = shell.newJob()
|
val job = shell.newJob()
|
||||||
if (shell.isRoot) {
|
if (shell.isRoot) {
|
||||||
job.add(context.rawResource(R.raw.util_functions))
|
job.add(context.rawResource(R.raw.util_functions))
|
||||||
@ -36,10 +31,6 @@ class RootInit : Shell.Initializer() {
|
|||||||
"export BOOTMODE=true"
|
"export BOOTMODE=true"
|
||||||
).exec()
|
).exec()
|
||||||
|
|
||||||
Info.keepVerity = ShellUtils.fastCmd("echo \$KEEPVERITY").toBoolean()
|
|
||||||
Info.keepEnc = ShellUtils.fastCmd("echo \$KEEPFORCEENCRYPT").toBoolean()
|
|
||||||
Info.recovery = ShellUtils.fastCmd("echo \$RECOVERYMODE").toBoolean()
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user