@@ -13,6 +13,7 @@ import android.graphics.Point
1313import android.os.Build
1414import android.view.KeyEvent
1515import android.view.accessibility.AccessibilityEvent
16+ import android.view.accessibility.AccessibilityNodeInfo
1617import android.view.inputmethod.EditorInfo
1718import androidx.annotation.RequiresApi
1819import 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