Skip to content

Commit cc5a556

Browse files
feat: improve su detection
1 parent 3d857a8 commit cc5a556

3 files changed

Lines changed: 18 additions & 12 deletions

File tree

app/src/main/java/com/rk/Daemon.kt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import androidx.compose.runtime.getValue
55
import androidx.compose.runtime.mutableStateOf
66
import androidx.compose.runtime.setValue
7+
import androidx.compose.ui.graphics.Paint
78
import androidx.compose.ui.util.fastJoinToString
89
import com.rk.DaemonServer.received_messages
910
import com.rk.taskmanager.TaskManager
@@ -187,7 +188,7 @@ enum class DaemonResult(var message: String?) {
187188
OK(null),
188189
SHIZUKU_PERMISSION_DENIED(strings.shizuku_permission_denied.getString()),
189190
SHIZUKU_NOT_RUNNING(if (ShizukuShell.isShizukuInstalled()) strings.shizuku_not_running.getString() else strings.shizuku_not_installed.getString()),
190-
SU_NOT_IN_PATH(strings.su_not_in_path.getString()),
191+
SU_FAILED(strings.su_not_in_path.getString()),
191192
UNKNOWN_ERROR(null),
192193
DAEMON_REFUSED(strings.daemon_not_started.getString()),
193194
DAEMON_ALREADY_BEING_STARTED(null)
@@ -255,8 +256,10 @@ suspend fun startDaemon(
255256
}
256257

257258
WorkingMode.ROOT.id -> {
258-
if (!isSuInPath()) {
259-
return@withContext DaemonResult.SU_NOT_IN_PATH
259+
val suCheck = isSuWorking()
260+
261+
if (!suCheck.first){
262+
return@withContext DaemonResult.SU_FAILED.also { it.message = suCheck.second?.message ?: "unknown error" }
260263
}
261264

262265
//val cmd = arrayOf("su", "-c", daemonFile.absolutePath, "-p", port.toString(), "-D")
@@ -287,16 +290,19 @@ suspend fun startDaemon(
287290
return result
288291
}
289292

290-
suspend fun isSuInPath(): Boolean = withContext(Dispatchers.IO) {
291-
return@withContext try {
292-
val process = Runtime.getRuntime().exec(arrayOf("which", "su"))
293-
val result = process.inputStream.bufferedReader().readLine()
294-
result != null
293+
suspend fun isSuWorking(): Pair<Boolean, Exception?> = withContext(Dispatchers.IO) {
294+
try {
295+
val process = Runtime.getRuntime().exec(arrayOf("su", "-c", "id -u"))
296+
val output = process.inputStream.bufferedReader().readLine()
297+
process.waitFor()
298+
Pair(output == "0",null)
295299
} catch (e: Exception) {
296-
false
300+
e.printStackTrace()
301+
Pair(false,e)
297302
}
298303
}
299304

305+
300306
private suspend fun newProcess(
301307
cmd: Array<String>,
302308
env: Array<String>,

app/src/main/java/com/rk/taskmanager/screens/SelectWorkingMode.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import com.rk.components.InfoBlock
2525
import com.rk.components.SettingsToggle
2626
import com.rk.components.compose.preferences.base.PreferenceGroup
2727
import com.rk.components.compose.preferences.base.PreferenceLayout
28-
import com.rk.isSuInPath
28+
import com.rk.isSuWorking
2929
import com.rk.startDaemon
3030
import com.rk.taskmanager.SettingsRoutes
3131
import com.rk.taskmanager.settings.Settings
@@ -51,7 +51,7 @@ fun SelectedWorkingMode(modifier: Modifier = Modifier, navController: NavControl
5151
var isNoob by remember { mutableStateOf(false) }
5252

5353
LaunchedEffect(Unit) {
54-
isNoob = isSuInPath().not() && ShizukuShell.isShizukuInstalled().not()
54+
isNoob = isSuWorking().first.not() && ShizukuShell.isShizukuInstalled().not()
5555
}
5656

5757
PreferenceLayout(

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<string name="shizuku_permission_denied">Shizuku permission denied, grant permission manually</string>
66
<string name="shizuku_not_running">Shizuku not running</string>
77
<string name="shizuku_not_installed">Shizuku not installed</string>
8-
<string name="su_not_in_path">su not available in \$PATH</string>
8+
<string name="su_not_in_path">\'su\' does not exists or not working properly</string>
99
<string name="daemon_not_started">Daemon failed to start</string>
1010
<string name="port_busy">"Unable to get a open port : got %port"</string>
1111
<string name="starting_daemon">Starting daemon…</string>

0 commit comments

Comments
 (0)