diff --git a/app/src/main/java/com/topjohnwu/magisk/Info.kt b/app/src/main/java/com/topjohnwu/magisk/Info.kt index 317a6357c..fd1120ee3 100644 --- a/app/src/main/java/com/topjohnwu/magisk/Info.kt +++ b/app/src/main/java/com/topjohnwu/magisk/Info.kt @@ -36,20 +36,21 @@ object Info { val str = ShellUtils.fastCmd("magisk -v").split(":".toRegex())[0] val code = ShellUtils.fastCmd("magisk -V").toInt() val hide = Shell.su("magiskhide --status").exec().isSuccess - Env(code, str, hide) + Env(str, code, hide) }.getOrElse { Env() } class Env( - code: Int = -1, val magiskVersionString: String = "", + code: Int = -1, hide: Boolean = false ) { val magiskHide get() = Config.magiskHide val magiskVersionCode = when (code) { in Int.MIN_VALUE..Const.Version.MIN_VERCODE -> -1 - else -> code + else -> if(Shell.rootAccess()) code else -1 } - val unsupported = code > 0 && code < Const.Version.MIN_VERCODE + val isUnsupported = code > 0 && code < Const.Version.MIN_VERCODE + val isActive = magiskVersionCode >= 0 init { Config.magiskHide = hide diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt index 60f26422e..e1d83a2a5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt @@ -31,7 +31,6 @@ import com.topjohnwu.magisk.ui.module.ReposFragment import com.topjohnwu.magisk.ui.settings.SettingsFragment import com.topjohnwu.magisk.ui.superuser.SuperuserFragment import com.topjohnwu.magisk.utils.Utils -import com.topjohnwu.superuser.Shell import org.koin.androidx.viewmodel.ext.android.viewModel import timber.log.Timber import kotlin.reflect.KClass @@ -68,7 +67,7 @@ open class MainActivity : BaseActivity(), Na super.onCreate(savedInstanceState) - if (Info.env.unsupported && !viewModel.shownUnsupportedDialog) { + if (Info.env.isUnsupported && !viewModel.shownUnsupportedDialog) { viewModel.shownUnsupportedDialog = true AlertDialog.Builder(this) .setTitle(R.string.unsupport_magisk_title) @@ -164,16 +163,11 @@ open class MainActivity : BaseActivity(), Na private fun checkHideSection() { val menu = binding.navView.menu - menu.findItem(R.id.magiskHideFragment).isVisible = - Shell.rootAccess() && Info.env.magiskHide - menu.findItem(R.id.modulesFragment).isVisible = - Shell.rootAccess() && Info.env.magiskVersionCode >= 0 - menu.findItem(R.id.reposFragment).isVisible = - (viewModel.isConnected.value && Shell.rootAccess() && Info.env.magiskVersionCode >= 0) - menu.findItem(R.id.logFragment).isVisible = - Shell.rootAccess() - menu.findItem(R.id.superuserFragment).isVisible = - Utils.showSuperUser() + menu.findItem(R.id.magiskHideFragment).isVisible = Info.env.isActive && Info.env.magiskHide + menu.findItem(R.id.modulesFragment).isVisible = Info.env.isActive + menu.findItem(R.id.reposFragment).isVisible = Info.isConnected.value && Info.env.isActive + menu.findItem(R.id.logFragment).isVisible = Info.env.isActive + menu.findItem(R.id.superuserFragment).isVisible = Utils.showSuperUser() } private fun FragNavTransactionOptions.Builder.customAnimations(options: MagiskAnimBuilder) = diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt index a84b5c2fe..2b8fc887f 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt @@ -92,7 +92,7 @@ class HomeViewModel( } } - val hasRoot = KObservableField(false) + val isActive = KObservableField(false) private var shownDialog = false @@ -175,7 +175,7 @@ class HomeViewModel( if (invalidate) Info.envRef.invalidate() - hasRoot.value = Shell.rootAccess() + isActive.value = Info.env.isActive val fetchUpdate = if (isConnected.value) magiskRepo.fetchUpdate().ignoreElement() diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt index 88239ff4c..04a3485a1 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt @@ -61,7 +61,7 @@ class SettingsFragment : BasePreferenceFragment() { nsConfig = findPreference(Config.Key.SU_MNT_NS)!! val reauth = findPreference(Config.Key.SU_REAUTH)!! val biometric = findPreference(Config.Key.SU_BIOMETRIC)!! - val generalCatagory = findPreference("general")!! + val generalCategory = findPreference("general")!! val magiskCategory = findPreference("magisk")!! val suCategory = findPreference("superuser")!! val hideManager = findPreference("hide")!! @@ -94,9 +94,9 @@ class SettingsFragment : BasePreferenceFragment() { biometric.setSummary(R.string.no_biometric) } - if (Const.USER_ID == 0 && Info.isConnected.value && Shell.rootAccess()) { + if (Const.USER_ID == 0 && Info.isConnected.value && Info.env.isActive) { if (activity.packageName == BuildConfig.APPLICATION_ID) { - generalCatagory.removePreference(restoreManager) + generalCategory.removePreference(restoreManager) hideManager.setOnPreferenceClickListener { showManagerNameDialog { PatchAPK.hideManager(requireContext(), it) @@ -104,7 +104,7 @@ class SettingsFragment : BasePreferenceFragment() { true } } else { - generalCatagory.removePreference(hideManager) + generalCategory.removePreference(hideManager) restoreManager.setOnPreferenceClickListener { DownloadService(requireContext()) { subject = DownloadSubject.Manager(Configuration.APK.Restore) @@ -114,25 +114,32 @@ class SettingsFragment : BasePreferenceFragment() { } } else { // Remove if not primary user, no connection, or no root - generalCatagory.removePreference(restoreManager) - generalCatagory.removePreference(hideManager) + generalCategory.removePreference(restoreManager) + generalCategory.removePreference(hideManager) } if (!Utils.showSuperUser()) { preferenceScreen.removePreference(suCategory) } - if (!Shell.rootAccess()) { + if (!Info.env.isActive) { preferenceScreen.removePreference(magiskCategory) - generalCatagory.removePreference(hideManager) + generalCategory.removePreference(hideManager) } - findPreference("clear")?.setOnPreferenceClickListener { - Completable.fromAction { repoDB.clear() }.subscribeK { - Utils.toast(R.string.repo_cache_cleared, Toast.LENGTH_SHORT) + findPreference("clear")?.also { + if (Info.env.isActive) { + it.setOnPreferenceClickListener { + Completable.fromAction { repoDB.clear() }.subscribeK { + Utils.toast(R.string.repo_cache_cleared, Toast.LENGTH_SHORT) + } + true + } + } else { + generalCategory.removePreference(it) } - true } + findPreference("hosts")?.setOnPreferenceClickListener { Shell.su("add_hosts_module").submit { Utils.toast(R.string.settings_hosts_toast, Toast.LENGTH_SHORT) @@ -142,20 +149,21 @@ class SettingsFragment : BasePreferenceFragment() { findPreference(Config.Key.DOWNLOAD_PATH)?.apply { summary = Config.downloadPath - }?.setOnPreferenceClickListener { preference -> - activity.withExternalRW { - onSuccess { - showDownloadDialog { - Config.downloadPath = it - preference.summary = it + setOnPreferenceClickListener { pref -> + activity.withExternalRW { + onSuccess { + showDownloadDialog { + Config.downloadPath = it + pref.summary = it + } } } + true } - true } updateChannel.setOnPreferenceChangeListener { _, value -> - val channel = Integer.parseInt(value as String) + val channel = value.toString().toInt() val previous = Config.updateChannel if (channel == Config.Value.CUSTOM_CHANNEL) { diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.kt b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.kt index 252b7b6d8..810b9eba6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.kt @@ -11,7 +11,6 @@ import com.topjohnwu.magisk.* import com.topjohnwu.magisk.R import com.topjohnwu.magisk.extensions.get import com.topjohnwu.magisk.model.update.UpdateCheckService -import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.internal.UiThreadHandler import java.io.File import java.util.concurrent.TimeUnit @@ -34,7 +33,7 @@ object Utils { } fun showSuperUser(): Boolean { - return Shell.rootAccess() && (Const.USER_ID == 0 + return Info.env.isActive && (Const.USER_ID == 0 || Config.suMultiuserMode != Config.Value.MULTIUSER_MODE_OWNER_MANAGED) } diff --git a/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt b/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt index 5dfd051c3..829cb5e8c 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt +++ b/app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt @@ -14,7 +14,6 @@ import com.topjohnwu.magisk.* import com.topjohnwu.magisk.extensions.getBitmap import com.topjohnwu.magisk.ui.SplashActivity import com.topjohnwu.magisk.utils.Utils -import com.topjohnwu.superuser.Shell object Shortcuts { @@ -28,7 +27,6 @@ object Shortcuts { @RequiresApi(api = 25) private fun getShortCuts(context: Context): List { val shortCuts = mutableListOf() - val root = Shell.rootAccess() val intent = context.intent() fun getIcon(id: Int): Icon { @@ -53,7 +51,7 @@ object Shortcuts { .build() ) } - if (root && Info.env.magiskHide) { + if (Info.env.magiskHide) { shortCuts.add( ShortcutInfo.Builder(context, "magiskhide") .setShortLabel(context.getString(R.string.magiskhide)) @@ -68,7 +66,7 @@ object Shortcuts { .build() ) } - if (!Config.coreOnly && root && Info.env.magiskVersionCode >= 0) { + if (!Config.coreOnly && Info.env.isActive) { shortCuts.add( ShortcutInfo.Builder(context, "modules") .setShortLabel(context.getString(R.string.modules)) diff --git a/app/src/main/res/layout/fragment_magisk.xml b/app/src/main/res/layout/fragment_magisk.xml index 366867ead..70b580dca 100644 --- a/app/src/main/res/layout/fragment_magisk.xml +++ b/app/src/main/res/layout/fragment_magisk.xml @@ -201,7 +201,7 @@ @@ -482,13 +482,13 @@