@@ -19,19 +19,33 @@ package io.github.ratul.topactivity.services
1919import android.accessibilityservice.AccessibilityService
2020import android.annotation.SuppressLint
2121import android.content.Intent
22+ import android.util.LruCache
2223import android.view.accessibility.AccessibilityEvent
24+ import io.github.ratul.topactivity.extensions.isActivity
2325import io.github.ratul.topactivity.repository.DataRepository
2426
2527@SuppressLint(" AccessibilityPolicy" )
2628class AccessibilityMonitoringService : AccessibilityService () {
2729
30+ private val activityCache = LruCache <String , Boolean >(500 )
31+
2832 override fun onAccessibilityEvent (event : AccessibilityEvent ) {
2933 if (! DataRepository .appState.value.running) return
3034
31- val pkgName = event.packageName?.toString() ? : return
32- val className = event.className?.toString() ? : return
35+ val pkg = event.packageName?.toString() ? : return
36+ val cls = event.className?.toString() ? : return
37+ val cacheKey = " $pkg /$cls "
38+
39+ val isCachedActivity = activityCache[cacheKey]
40+ if (isCachedActivity != null ) {
41+ if (isCachedActivity) DataRepository .updateData(pkg, cls)
42+ return
43+ }
44+
45+ val isActivity = packageManager.isActivity(pkg, cls)
46+ activityCache.put(cacheKey, isActivity)
3347
34- DataRepository .updateData(pkgName, className )
48+ if (isActivity) DataRepository .updateData(pkg, cls )
3549 }
3650
3751 override fun onInterrupt () {}
@@ -51,6 +65,11 @@ class AccessibilityMonitoringService : AccessibilityService() {
5165 return true
5266 }
5367
68+ override fun onDestroy () {
69+ instance = null
70+ super .onDestroy()
71+ }
72+
5473 companion object {
5574 var instance: AccessibilityMonitoringService ? = null
5675 private set
0 commit comments