Skip to content

Commit c79f59c

Browse files
committed
fix: call getRootInActiveWindow() more safely in the accessibility service
1 parent 915ed6a commit c79f59c

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.graphics.Point
1313
import android.os.Build
1414
import android.view.KeyEvent
1515
import android.view.accessibility.AccessibilityEvent
16+
import android.view.accessibility.AccessibilityNodeInfo
1617
import android.view.inputmethod.EditorInfo
1718
import androidx.annotation.RequiresApi
1819
import androidx.core.content.getSystemService
@@ -64,7 +65,11 @@ abstract class BaseAccessibilityService :
6465

6566
override val rootNode: AccessibilityNodeModel?
6667
get() {
67-
return rootInActiveWindow?.toModel()
68+
return try {
69+
rootInActiveWindow?.toModel()
70+
} catch (e: Exception) {
71+
null
72+
}
6873
}
6974

7075
override val activeWindowPackageNames: List<String>
@@ -246,7 +251,15 @@ abstract class BaseAccessibilityService :
246251
event ?: return
247252

248253
if (event.eventType == AccessibilityEvent.TYPE_WINDOWS_CHANGED) {
249-
_activeWindowPackage.update { rootInActiveWindow?.packageName?.toString() }
254+
// Catch exceptions because there is a crash report where
255+
// getRootInActivityWindow() fails internally inside the AccessibilityService.
256+
val rootNode: AccessibilityNodeInfo? = try {
257+
rootInActiveWindow
258+
} catch (_: Exception) {
259+
null
260+
}
261+
262+
_activeWindowPackage.update { rootNode?.packageName?.toString() }
250263
}
251264

252265
getController()?.onAccessibilityEvent(event)
@@ -503,7 +516,7 @@ abstract class BaseAccessibilityService :
503516
findNode: (node: AccessibilityNodeModel) -> Boolean,
504517
performAction: (node: AccessibilityNodeModel) -> AccessibilityNodeAction?,
505518
): KMResult<*> {
506-
val node = rootInActiveWindow.findNodeRecursively {
519+
val node = rootInActiveWindow?.findNodeRecursively {
507520
findNode(it.toModel())
508521
}
509522

0 commit comments

Comments
 (0)