Skip to content

Commit 370807b

Browse files
committed
fix: ignore a11y event from other display (#1350)
1 parent fa7eaac commit 370807b

6 files changed

Lines changed: 28 additions & 5 deletions

File tree

app/src/main/kotlin/li/songe/gkd/a11y/A11yRuleEngine.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package li.songe.gkd.a11y
33
import android.accessibilityservice.AccessibilityService
44
import android.graphics.Bitmap
55
import android.util.Log
6+
import android.view.Display
67
import android.view.KeyEvent
78
import android.view.accessibility.AccessibilityEvent
89
import android.view.accessibility.AccessibilityNodeInfo
@@ -33,6 +34,7 @@ import li.songe.gkd.shizuku.shizukuContextFlow
3334
import li.songe.gkd.shizuku.uiAutomationFlow
3435
import li.songe.gkd.store.actualBlockA11yAppList
3536
import li.songe.gkd.store.storeFlow
37+
import li.songe.gkd.util.AndroidTarget
3638
import li.songe.gkd.util.AutomatorModeOption
3739
import li.songe.gkd.util.launchTry
3840
import li.songe.gkd.util.runMainPost
@@ -106,6 +108,8 @@ class A11yRuleEngine(val service: A11yCommonImpl) {
106108
fun onA11yEvent(event: AccessibilityEvent?) {
107109
if (!effective) return
108110
if (!event.isUseful()) return
111+
// 拒绝副屏无障碍事件
112+
if (AndroidTarget.TIRAMISU && event.displayId != Display.DEFAULT_DISPLAY) return
109113
onA11yFeatEvent(event)
110114
if (event.eventType == CONTENT_CHANGED) {
111115
if (!isInteractive) return // 屏幕关闭后仍然有无障碍事件 type:2048, time:8094, app:com.miui.aod, cls:android.widget.TextView

app/src/main/kotlin/li/songe/gkd/shizuku/ActivityTaskManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class SafeActivityTaskManager(private val value: IActivityTaskManager) {
2121
when (HiddenApiType.getTasks) {
2222
1 -> value.getTasks(maxNum)
2323
2 -> value.getTasks(maxNum, false, false)
24-
3 -> value.getTasks(maxNum, false, false, Display.INVALID_DISPLAY)
24+
3 -> value.getTasks(maxNum, false, false, Display.DEFAULT_DISPLAY)
2525
else -> value.getTasks(maxNum)
2626
}
2727
}

app/src/main/kotlin/li/songe/gkd/shizuku/HiddenCast.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ package li.songe.gkd.shizuku
44

55
import android.accessibilityservice.AccessibilityServiceInfo
66
import android.accessibilityservice.AccessibilityServiceInfoHidden
7+
import android.app.ActivityManager
8+
import android.app.TaskInfoHidden
79
import android.app.UiAutomation
810
import android.app.UiAutomationHidden
911
import android.content.pm.PackageInfo
@@ -29,3 +31,5 @@ inline val KeyEvent.casted get() = this as KeyEventHidden
2931
inline val MotionEvent.casted get() = this as MotionEventHidden
3032

3133
inline val PackageInfo.casted get() = this as PackageInfoHidden
34+
35+
inline val ActivityManager.RunningTaskInfo.casted get() = this as TaskInfoHidden

app/src/main/kotlin/li/songe/gkd/shizuku/ShizukuApi.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package li.songe.gkd.shizuku
22

33

4+
import android.app.ActivityManager
45
import android.content.ComponentName
56
import android.content.pm.PackageManager
67
import androidx.annotation.WorkerThread
@@ -125,11 +126,14 @@ class ShizukuContext(
125126
) != null)
126127
}
127128

128-
fun topCpn(): ComponentName? {
129-
return (activityTaskManager?.getTasks()
130-
?: activityManager?.getTasks())?.firstOrNull()?.topActivity
129+
fun getTasks(maxNum: Int = 1): List<ActivityManager.RunningTaskInfo> {
130+
return activityTaskManager?.getTasks(maxNum)
131+
?: activityManager?.getTasks(maxNum)
132+
?: emptyList()
131133
}
132134

135+
fun topCpn(): ComponentName? = getTasks().firstOrNull()?.topActivity
136+
133137
init {
134138
if (activityTaskManager != null) {
135139
activityTaskManager.registerDefault()

app/src/main/kotlin/li/songe/gkd/shizuku/TaskStackListener.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import android.app.ActivityManager
44
import android.app.ITaskStackListener
55
import android.content.ComponentName
66
import android.os.Parcel
7+
import android.view.Display
78
import li.songe.gkd.a11y.ActivityScene
89
import li.songe.gkd.a11y.updateTopActivity
10+
import li.songe.gkd.util.AndroidTarget
911

1012
object FixedTaskStackListener : ITaskStackListener.Stub() {
1113

@@ -46,10 +48,18 @@ object FixedTaskStackListener : ITaskStackListener.Stub() {
4648
}
4749

4850
override fun onTaskMovedToFront(taskId: Int) {
49-
onTaskMovedToFrontCompat()
51+
val taskInfo = shizukuContextFlow.value.getTasks().firstOrNull() ?: return
52+
@Suppress("DEPRECATION")
53+
if (taskInfo.id != taskId) {
54+
return
55+
}
56+
onTaskMovedToFrontCompat(taskInfo.topActivity)
5057
}
5158

5259
override fun onTaskMovedToFront(taskInfo: ActivityManager.RunningTaskInfo) {
60+
if (AndroidTarget.Q && taskInfo.casted.displayId != Display.DEFAULT_DISPLAY) {
61+
return
62+
}
5363
onTaskMovedToFrontCompat(taskInfo.topActivity)
5464
}
5565
}

hidden_api/src/main/java/android/app/TaskInfoHidden.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
@RequiresApi(Build.VERSION_CODES.Q)
1515
public class TaskInfoHidden {
1616
public Configuration configuration;
17+
public int displayId;
1718
}

0 commit comments

Comments
 (0)