新增 手势监听功能(效果不佳不启用)

This commit is contained in:
hyb1996
2018-12-01 17:46:57 +08:00
parent 708cde848c
commit 4bf237a499
23 changed files with 168 additions and 115 deletions

View File

@@ -22,9 +22,11 @@ class BoundsFilter(private val mBounds: Rect, private val mType: Int) : DfsFilte
}
override fun toString(): String {
return String.format(Locale.getDefault(), "bounds%s(%d, %d, %d, %d)", if (mType == TYPE_EQUALS)
""
else if (mType == TYPE_INSIDE) "Inside" else "Contains",
return String.format(Locale.getDefault(), "bounds%s(%d, %d, %d, %d)", when (mType) {
TYPE_EQUALS -> ""
TYPE_INSIDE -> "Inside"
else -> "Contains"
},
mBounds.left, mBounds.top, mBounds.right, mBounds.bottom)
}

View File

@@ -10,7 +10,7 @@ object IdFilter {
private val ID_GETTER = object : KeyGetter {
override fun getKey(nodeInfo: UiObject): String {
override fun getKey(nodeInfo: UiObject): String? {
return nodeInfo.viewIdResourceName
}

View File

@@ -5,25 +5,39 @@ import android.util.Log
import android.view.KeyEvent
import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityNodeInfo
import com.stardust.event.EventDispatcher
import java.util.HashSet
import java.util.SortedMap
import java.util.TreeMap
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import java.util.concurrent.locks.Condition
import java.util.concurrent.locks.ReentrantLock
/**
* Created by Stardust on 2017/5/2.
*/
open class AccessibilityService : android.accessibilityservice.AccessibilityService() {
interface GestureListener {
fun onGesture(gestureId: Int)
}
val onKeyObserver = OnKeyListener.Observer()
val keyInterrupterObserver = KeyInterceptor.Observer()
private var mKeyEventExecutor: ExecutorService? = null
val gestureEventDispatcher = EventDispatcher<GestureListener>()
private var mEventExecutor: ExecutorService? = null
private var mFastRootInActiveWindow: AccessibilityNodeInfo? = null
private val eventExecutor: ExecutorService
get() {
return mEventExecutor ?: {
val executor = Executors.newSingleThreadExecutor()
mEventExecutor = executor
executor
}()
}
override fun onAccessibilityEvent(event: AccessibilityEvent) {
instance = this
@@ -55,29 +69,34 @@ open class AccessibilityService : android.accessibilityservice.AccessibilityServ
}
override fun onKeyEvent(event: KeyEvent): Boolean {
if (mKeyEventExecutor == null) {
mKeyEventExecutor = Executors.newSingleThreadExecutor()
}
mKeyEventExecutor!!.execute {
eventExecutor.execute {
stickOnKeyObserver.onKeyEvent(event.keyCode, event)
onKeyObserver.onKeyEvent(event.keyCode, event)
}
return keyInterrupterObserver.onInterceptKeyEvent(event)
}
override fun onGesture(gestureId: Int): Boolean {
eventExecutor.execute {
gestureEventDispatcher.dispatchEvent {
onGesture(gestureId)
}
}
return false
}
override fun getRootInActiveWindow(): AccessibilityNodeInfo? {
try {
return super.getRootInActiveWindow()
return try {
super.getRootInActiveWindow()
} catch (e: Exception) {
return null
null
}
}
override fun onDestroy() {
instance = null
if (mKeyEventExecutor != null)
mKeyEventExecutor!!.shutdownNow()
mEventExecutor?.shutdownNow()
super.onDestroy()
}