This commit is contained in:
hyb1996
2017-05-02 11:27:04 +08:00
parent 0d39afccb2
commit 68706fbd98
71 changed files with 759 additions and 514 deletions

View File

@@ -1,9 +1,13 @@
package com.stardust.view.accessibility;
import android.accessibilityservice.AccessibilityService;
import android.support.annotation.Nullable;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import java.util.List;
import java.util.Set;
/**
* Created by Stardust on 2017/2/14.
*/
@@ -12,4 +16,12 @@ public interface AccessibilityDelegate {
boolean onAccessibilityEvent(AccessibilityService service, AccessibilityEvent event);
/**
* 返回调用onAccessibilityEvent时的EventType的集合。如果需要对所有EventType都有效返回null。
*
* @return
*/
@Nullable
Set<Integer> getEventTypes();
}

View File

@@ -10,6 +10,11 @@ import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* Created by Stardust on 2017/3/9.
*/
@@ -35,10 +40,19 @@ public class AccessibilityInfoProvider implements AccessibilityDelegate {
@Override
public boolean onAccessibilityEvent(AccessibilityService service, AccessibilityEvent event) {
setLatestComponent(event.getPackageName(), event.getClassName());
AccessibilityNodeInfo root = service.getRootInActiveWindow();
if (root != null)
setLatestComponent(root.getPackageName(), event.getClassName());
else
setLatestComponent(event.getPackageName(), event.getClassName());
return false;
}
@Override
public Set<Integer> getEventTypes() {
return null;
}
private synchronized void setLatestComponent(CharSequence latestPackage, CharSequence latestClass) {
if (latestPackage == null)
return;

View File

@@ -126,13 +126,9 @@ public class AccessibilityNodeInfoAllocator {
public static void recycleList(AccessibilityNodeInfo root, List<AccessibilityNodeInfo> list) {
for (AccessibilityNodeInfo nodeInfo : list) {
if (nodeInfo != root) {
try {
nodeInfo.recycle();
}catch (IllegalStateException e){
// FIXME: 2017/4/30
e.printStackTrace();
}
if (nodeInfo != root && nodeInfo != null) {
//// FIXME: 2017/5/1 Issue #180
nodeInfo.recycle();
}
}
}

View File

@@ -0,0 +1,19 @@
package com.stardust.view.accessibility;
import android.view.accessibility.AccessibilityNodeInfo;
/**
* Created by Stardust on 2017/5/2.
*/
public abstract class AccessibilityService extends android.accessibilityservice.AccessibilityService {
@Override
public AccessibilityNodeInfo getRootInActiveWindow() {
try {
return super.getRootInActiveWindow();
} catch (Exception ignored) {
return null;
}
}
}