diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/BackupRestore.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/BackupRestore.kt index 9633939f..f487204b 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/BackupRestore.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/BackupRestore.kt @@ -165,9 +165,7 @@ fun BackupRestoreScreen(navigator: DestinationsNavigator) { val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE) var useOverlayFs by rememberSaveable { - mutableStateOf( - prefs.getBoolean("use_overlay_fs", false) - ) + mutableStateOf(readMountSystemFile()) } val moduleRestore = stringResource(id = R.string.module_restore) diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt index e186583a..44d63d53 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt @@ -224,9 +224,11 @@ fun SettingScreen(navigator: DestinationsNavigator) { } var useOverlayFs by rememberSaveable { - mutableStateOf( - prefs.getBoolean("use_overlay_fs", false) - ) + mutableStateOf(readMountSystemFile()) + } + + LaunchedEffect(Unit) { + useOverlayFs = readMountSystemFile() } var showRebootDialog by remember { mutableStateOf(false) } @@ -244,8 +246,10 @@ fun SettingScreen(navigator: DestinationsNavigator) { useOverlayFs = it if (useOverlayFs) { moduleBackup() + updateMountSystemFile(true) } else { moduleMigration() + updateMountSystemFile(false) } if (isManager) install() showRebootDialog = true diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt index d9dd7117..3771eb33 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt @@ -37,10 +37,16 @@ private fun ksuDaemonOverlayfsPath(): String { return ksuApp.applicationInfo.nativeLibraryDir + File.separator + "libksud_overlayfs.so" } +fun readMountSystemFile(): Boolean { + val shell = getRootShell() + val filePath = "/data/adb/ksu/mount_system" + val result = ShellUtils.fastCmd(shell, "cat $filePath").trim() + return result == "OVERLAYFS" +} + // Get the path based on the user's choice fun getKsuDaemonPath(): String { - val prefs = ksuApp.getSharedPreferences("settings", Context.MODE_PRIVATE) - val useOverlayFs = prefs.getBoolean("use_overlay_fs", false) + val useOverlayFs = readMountSystemFile() return if (useOverlayFs) { ksuDaemonOverlayfsPath() @@ -49,6 +55,16 @@ fun getKsuDaemonPath(): String { } } +fun updateMountSystemFile(useOverlayFs: Boolean) { + val shell = getRootShell() + val filePath = "/data/adb/ksu/mount_system" + if (useOverlayFs) { + ShellUtils.fastCmd(shell, "echo -n OVERLAYFS > $filePath") + } else { + ShellUtils.fastCmd(shell, "echo -n MAGIC_MOUNT > $filePath") + } +} + data class FlashResult(val code: Int, val err: String, val showReboot: Boolean) { constructor(result: Shell.Result, showReboot: Boolean) : this(result.code, result.err.joinToString("\n"), showReboot) constructor(result: Shell.Result) : this(result, result.isSuccess)