fix(autojs): EventEmitter.once(), view._id() ; feat(autojs): auto.getService(), auto.getWindows(), auto.setWindowFilter(), util.java.toJsArray()
This commit is contained in:
@@ -1,26 +1,35 @@
|
||||
package com.stardust.autojs.core.accessibility;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.view.accessibility.AccessibilityWindowInfo;
|
||||
|
||||
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
||||
import com.stardust.automator.UiObject;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
import com.stardust.view.accessibility.AccessibilityNotificationObserver;
|
||||
import com.stardust.view.accessibility.AccessibilityService;
|
||||
import com.stardust.view.accessibility.NotificationListener;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
*/
|
||||
|
||||
public abstract class AccessibilityBridge {
|
||||
|
||||
public interface WindowFilter {
|
||||
boolean filter(AccessibilityWindowInfo info);
|
||||
}
|
||||
|
||||
public static final int MODE_NORMAL = 0;
|
||||
public static final int MODE_FAST = 1;
|
||||
|
||||
private int mMode = MODE_NORMAL;
|
||||
private AccessibilityConfig mConfig;
|
||||
private WindowFilter mWindowFilter;
|
||||
|
||||
public AccessibilityBridge(AccessibilityConfig config) {
|
||||
mConfig = config;
|
||||
@@ -35,16 +44,33 @@ public abstract class AccessibilityBridge {
|
||||
public abstract AccessibilityService getService();
|
||||
|
||||
@Nullable
|
||||
public AccessibilityNodeInfo getRootInActiveWindow() {
|
||||
public AccessibilityNodeInfo getRootInCurrentWindow() {
|
||||
AccessibilityService service = getService();
|
||||
if (service == null)
|
||||
return null;
|
||||
if (mWindowFilter != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
AccessibilityWindowInfo activeWindow = null;
|
||||
for (AccessibilityWindowInfo window : service.getWindows()) {
|
||||
if (mWindowFilter.filter(window)) {
|
||||
return window.getRoot();
|
||||
}
|
||||
if (window.isActive()) {
|
||||
activeWindow = window;
|
||||
}
|
||||
}
|
||||
if (activeWindow != null) {
|
||||
return activeWindow.getRoot();
|
||||
}
|
||||
}
|
||||
if (mMode == MODE_FAST) {
|
||||
return service.fastRootInActiveWindow();
|
||||
}
|
||||
return service.getRootInActiveWindow();
|
||||
}
|
||||
|
||||
public void setWindowFilter(WindowFilter windowFilter) {
|
||||
mWindowFilter = windowFilter;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public abstract AccessibilityInfoProvider getInfoProvider();
|
||||
|
||||
@@ -253,7 +253,7 @@ public class SimpleActionAutomator {
|
||||
Log.d(TAG, "performAction: running package is self. return false");
|
||||
return false;
|
||||
}
|
||||
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInActiveWindow();
|
||||
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInCurrentWindow();
|
||||
if (root == null)
|
||||
return false;
|
||||
Log.v(TAG, "performAction: " + simpleAction + " root = " + root);
|
||||
|
||||
@@ -72,7 +72,7 @@ public class UiSelector extends UiGlobalSelector {
|
||||
@ScriptInterface
|
||||
public UiObjectCollection find() {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInActiveWindow();
|
||||
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInCurrentWindow();
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "find: root = " + root);
|
||||
if (root == null) {
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class EventEmitter {
|
||||
|
||||
|
||||
private static class ListenerWrapper {
|
||||
Object listener;
|
||||
boolean isOnce;
|
||||
@@ -63,7 +62,7 @@ public class EventEmitter {
|
||||
mBridges.callFunction(listenerWrapper.listener, EventEmitter.this, args);
|
||||
}
|
||||
if (listenerWrapper.isOnce) {
|
||||
listenerIterator.remove();
|
||||
mListenerWrappers.remove(listenerWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user