diff --git a/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt b/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt index 23cfae038..65095304e 100644 --- a/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt +++ b/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt @@ -71,19 +71,30 @@ class AppProcessInfo( private fun Array?.toProcessList() = orEmpty().map { createProcess(it.getProcName()) } - private fun Array?.toProcessList() = orEmpty().map { - if (it.isIsolated) { - if (it.useAppZygote) { - val proc = info.processName ?: info.packageName - createProcess("${proc}_zygote") + private fun Array?.toProcessList(): List { + if (this == null) return emptyList() + val result = mutableListOf() + var hasIsolated = false + for (si in this) { + if (si.isIsolated) { + if (si.useAppZygote) { + val proc = info.processName ?: info.packageName + result.add(createProcess("${proc}_zygote")) + } else { + hasIsolated = true + } } else { - val proc = if (SDK_INT >= Build.VERSION_CODES.Q) - "${it.getProcName()}:${it.name}" else it.getProcName() - createProcess(proc, ISOLATED_MAGIC) + result.add(createProcess(si.getProcName())) } - } else { - createProcess(it.getProcName()) } + if (hasIsolated) { + val prefix = "${info.processName ?: info.packageName}:" + val isEnabled = denyList.any { + it.packageName == ISOLATED_MAGIC && it.process.startsWith(prefix) + } + result.add(ProcessInfo(prefix, ISOLATED_MAGIC, isEnabled)) + } + return result } private fun fetchProcesses(pm: PackageManager): Collection { diff --git a/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt b/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt index f4e2547ab..a0cb244cf 100644 --- a/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt +++ b/app/apk/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt @@ -133,10 +133,7 @@ class DenyAppState(val info: AppProcessInfo) : Comparable { } } } else { - processes - .filterNot { it.isEnabled } - .filter { if (isExpanded) true else it.defaultSelection } - .forEach { it.toggle() } + processes.filterNot { it.isEnabled }.forEach { it.toggle() } } } @@ -153,11 +150,8 @@ class DenyAppState(val info: AppProcessInfo) : Comparable { class DenyProcessState(val process: ProcessInfo) { var isEnabled by mutableStateOf(process.isEnabled) - val defaultSelection get() = - process.isIsolated || process.isAppZygote || process.name == process.packageName - val displayName: String = - if (process.isIsolated) "(isolated) ${process.name}" else process.name + if (process.isIsolated) "(isolated) ${process.name}*" else process.name fun toggle() { isEnabled = !isEnabled