mirror of
https://github.com/topjohnwu/Magisk.git
synced 2026-07-03 14:08:39 +02:00
Simplify denylist isolated process handling with wildcard matching
Use a single prefix entry (e.g. "com.example:") to match all isolated processes of a package instead of listing each service individually. This avoids needing to reselect isolated processes after app updates. Also simplify the package-level toggle to always select all processes. Made-with: Cursor
This commit is contained in:
@@ -71,19 +71,30 @@ class AppProcessInfo(
|
||||
private fun Array<out ComponentInfo>?.toProcessList() =
|
||||
orEmpty().map { createProcess(it.getProcName()) }
|
||||
|
||||
private fun Array<ServiceInfo>?.toProcessList() = orEmpty().map {
|
||||
if (it.isIsolated) {
|
||||
if (it.useAppZygote) {
|
||||
val proc = info.processName ?: info.packageName
|
||||
createProcess("${proc}_zygote")
|
||||
private fun Array<ServiceInfo>?.toProcessList(): List<ProcessInfo> {
|
||||
if (this == null) return emptyList()
|
||||
val result = mutableListOf<ProcessInfo>()
|
||||
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<ProcessInfo> {
|
||||
|
||||
@@ -133,10 +133,7 @@ class DenyAppState(val info: AppProcessInfo) : Comparable<DenyAppState> {
|
||||
}
|
||||
}
|
||||
} 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<DenyAppState> {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user