Skip to content

Commit 5f4577d

Browse files
committed
fix: do not allow force stopping SystemUI or key mapper app
1 parent 1e38f70 commit 5f4577d

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

base/src/main/java/io/github/sds100/keymapper/base/actions/PerformActionsUseCase.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -929,9 +929,15 @@ class PerformActionsUseCaseImpl @AssistedInject constructor(
929929
}
930930

931931
ActionData.ForceStopApp -> {
932-
val packageName = service.rootNode!!.packageName
932+
val packageName = service.activeWindowPackageNames
933+
.firstOrNull {
934+
!it.contains("io.github.sds100.keymapper") &&
935+
it != "com.android.systemui"
936+
}
933937

934-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
938+
if (packageName == null) {
939+
result = KMError.Exception(Exception("No foreground app found to kill"))
940+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
935941
result = systemBridgeConnectionManager.run { systemBridge ->
936942
systemBridge.forceStopPackage(packageName)
937943
}
@@ -941,9 +947,13 @@ class PerformActionsUseCaseImpl @AssistedInject constructor(
941947
}
942948

943949
ActionData.ClearRecentApp -> {
944-
val packageName = service.rootNode!!.packageName
950+
val packageName = service.activeWindowPackageNames
951+
.firstOrNull { it != "com.android.systemui" }
945952

946-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
953+
if (packageName == null) {
954+
result =
955+
KMError.Exception(Exception("No foreground app found to clear from recents"))
956+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
947957
result = systemBridgeConnectionManager.run { systemBridge ->
948958
systemBridge.removeTasks(packageName)
949959
}

base/src/main/java/io/github/sds100/keymapper/base/system/accessibility/BaseAccessibilityService.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ abstract class BaseAccessibilityService :
6767
return rootInActiveWindow?.toModel()
6868
}
6969

70+
override val activeWindowPackageNames: List<String>
71+
get() = windows
72+
?.filter { it.isActive }
73+
?.mapNotNull { it.root?.packageName?.toString() }
74+
?.toList() ?: emptyList()
75+
7076
private val _activeWindowPackage: MutableStateFlow<String?> = MutableStateFlow(null)
7177
override val activeWindowPackage: Flow<String?> = _activeWindowPackage
7278

base/src/main/java/io/github/sds100/keymapper/base/system/accessibility/IAccessibilityService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ interface IAccessibilityService : SwitchImeInterface {
4545

4646
val rootNode: AccessibilityNodeModel?
4747
val activeWindowPackage: Flow<String?>
48+
val activeWindowPackageNames: List<String>
4849

4950
fun hideKeyboard()
5051
fun showKeyboard()

0 commit comments

Comments
 (0)