diff --git a/app/src/main/java/com/topjohnwu/magisk/Config.kt b/app/src/main/java/com/topjohnwu/magisk/Config.kt index 845521236..22a1ef47b 100644 --- a/app/src/main/java/com/topjohnwu/magisk/Config.kt +++ b/app/src/main/java/com/topjohnwu/magisk/Config.kt @@ -48,6 +48,7 @@ object Config : PreferenceModel, DBConfig { const val REPO_ORDER = "repo_order" const val SHOW_SYSTEM_APP = "show_system" const val DOWNLOAD_PATH = "download_path" + const val BOOT_ID = "boot_id" // system state const val MAGISKHIDE = "magiskhide" @@ -105,6 +106,8 @@ object Config : PreferenceModel, DBConfig { } else Value.DEFAULT_CHANNEL + var bootId by preference(Key.BOOT_ID, "") + var downloadPath by preference(Key.DOWNLOAD_PATH, Environment.DIRECTORY_DOWNLOADS) var repoOrder by preference(Key.REPO_ORDER, Value.ORDER_DATE) diff --git a/app/src/main/java/com/topjohnwu/magisk/Info.kt b/app/src/main/java/com/topjohnwu/magisk/Info.kt index fd1120ee3..b95834dc0 100644 --- a/app/src/main/java/com/topjohnwu/magisk/Info.kt +++ b/app/src/main/java/com/topjohnwu/magisk/Info.kt @@ -8,6 +8,8 @@ import com.topjohnwu.magisk.utils.CachedValue import com.topjohnwu.magisk.utils.KObservableField import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.ShellUtils +import java.io.FileInputStream +import java.io.IOException 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 { val str = ShellUtils.fastCmd("magisk -v").split(":".toRegex())[0] val code = ShellUtils.fastCmd("magisk -V").toInt() diff --git a/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt b/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt index ff73b6cb7..653b12e7a 100644 --- a/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt +++ b/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt @@ -3,8 +3,8 @@ package com.topjohnwu.magisk.data.database import android.content.Context import android.content.pm.PackageManager 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.Delete import com.topjohnwu.magisk.data.database.magiskdb.Replace import com.topjohnwu.magisk.data.database.magiskdb.Select import com.topjohnwu.magisk.extensions.now diff --git a/app/src/main/java/com/topjohnwu/magisk/data/database/SettingsDao.kt b/app/src/main/java/com/topjohnwu/magisk/data/database/SettingsDao.kt index c2b4a2701..fdc00d520 100644 --- a/app/src/main/java/com/topjohnwu/magisk/data/database/SettingsDao.kt +++ b/app/src/main/java/com/topjohnwu/magisk/data/database/SettingsDao.kt @@ -1,7 +1,7 @@ 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.Delete import com.topjohnwu.magisk.data.database.magiskdb.Replace import com.topjohnwu.magisk.data.database.magiskdb.Select diff --git a/app/src/main/java/com/topjohnwu/magisk/data/database/StringDao.kt b/app/src/main/java/com/topjohnwu/magisk/data/database/StringDao.kt index 92b8c458b..24eab0564 100644 --- a/app/src/main/java/com/topjohnwu/magisk/data/database/StringDao.kt +++ b/app/src/main/java/com/topjohnwu/magisk/data/database/StringDao.kt @@ -1,7 +1,7 @@ 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.Delete import com.topjohnwu.magisk.data.database.magiskdb.Replace import com.topjohnwu.magisk.data.database.magiskdb.Select diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt index bdc63cff5..3a4555976 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt @@ -3,14 +3,12 @@ package com.topjohnwu.magisk.ui import android.app.Activity import android.content.Context import android.os.Bundle -import com.topjohnwu.magisk.BuildConfig -import com.topjohnwu.magisk.Config -import com.topjohnwu.magisk.intent +import com.topjohnwu.magisk.* import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.view.Notifications import com.topjohnwu.magisk.view.Shortcuts -import com.topjohnwu.magisk.wrap import com.topjohnwu.superuser.Shell +import com.topjohnwu.superuser.ShellUtils 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 Config.initialize() @@ -49,9 +51,13 @@ open class SplashActivity : Activity() { // Setup shortcuts Shortcuts.setup(this) - Shell.su("mm_patch_dtb").submit { - if (it.isSuccess) - Notifications.dtboPatched(this) + if (Info.isNewReboot) { + val shell = Shell.newInstance() + shell.newJob().add("mm_patch_dtb").submit { + if (it.isSuccess) + Notifications.dtboPatched(this) + shell.close() + } } DONE = true diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/RootInit.kt b/app/src/main/java/com/topjohnwu/magisk/utils/RootInit.kt index bf06c33e4..92d5a2729 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/RootInit.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/RootInit.kt @@ -2,12 +2,10 @@ package com.topjohnwu.magisk.utils import android.content.Context import com.topjohnwu.magisk.Const -import com.topjohnwu.magisk.Info import com.topjohnwu.magisk.R import com.topjohnwu.magisk.extensions.rawResource import com.topjohnwu.magisk.wrap import com.topjohnwu.superuser.Shell -import com.topjohnwu.superuser.ShellUtils import com.topjohnwu.superuser.io.SuFile class RootInit : Shell.Initializer() { @@ -17,9 +15,6 @@ class RootInit : Shell.Initializer() { } fun init(context: Context, shell: Shell): Boolean { - // Invalidate env state if shell is recreated - Info.envRef.invalidate() - val job = shell.newJob() if (shell.isRoot) { job.add(context.rawResource(R.raw.util_functions)) @@ -36,10 +31,6 @@ class RootInit : Shell.Initializer() { "export BOOTMODE=true" ).exec() - Info.keepVerity = ShellUtils.fastCmd("echo \$KEEPVERITY").toBoolean() - Info.keepEnc = ShellUtils.fastCmd("echo \$KEEPFORCEENCRYPT").toBoolean() - Info.recovery = ShellUtils.fastCmd("echo \$RECOVERYMODE").toBoolean() - return true } }