Add: Sample Script Tab, EMCAScript Guide
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
package com.stardust.automator;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.os.Build;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.automator.filter.BooleanFilter;
|
||||
import com.stardust.automator.filter.BoundsFilter;
|
||||
import com.stardust.automator.filter.DfsFilter;
|
||||
import com.stardust.automator.filter.IdFilter;
|
||||
import com.stardust.automator.filter.PackageNameFilter;
|
||||
import com.stardust.automator.filter.TextFilter;
|
||||
@@ -18,16 +19,6 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.*;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/8.
|
||||
*/
|
||||
@@ -173,8 +164,18 @@ public class UiGlobalSelector {
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector boundsInParent(int l, int t, int r, int b) {
|
||||
mFilters.add(new BoundsFilter(new Rect(l, t, r, b), BoundsFilter.TYPE_PARENT));
|
||||
public UiGlobalSelector boundsContains(int l, int t, int r, int b) {
|
||||
mFilters.add(new BoundsFilter(new Rect(l, t, r, b), BoundsFilter.TYPE_CONTAINS));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector drawingOrder(final int order) {
|
||||
mFilters.add(new DfsFilter() {
|
||||
@Override
|
||||
protected boolean isIncluded(AccessibilityNodeInfo nodeInfo) {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && nodeInfo.getDrawingOrder() == order;
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -265,6 +266,91 @@ public class UiGlobalSelector {
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector checkable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.CHECKABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector checked() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.CHECKED, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector focusable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.FOCUSABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector focused() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.FOCUSED, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector visibleToUser() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.VISIBLE_TO_USER, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector accessibilityFocused() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.ACCESSIBILITY_FOCUSED, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector selected() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.SELECTED, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector clickable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.CLICKABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector longClickable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.LONG_CLICKABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector enabled() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.ENABLED, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector password() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.PASSWORD, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector scrollable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.SCROLLABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector editable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.EDITABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector contentInvalid() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.CONTENT_INVALID, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector contextClickable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.CONTEXT_CLICKABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector multiLine() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.MULTI_LINE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiGlobalSelector dismissable() {
|
||||
mFilters.add(BooleanFilter.get(BooleanFilter.DISMISSABLE, true));
|
||||
return this;
|
||||
}
|
||||
|
||||
public UiObjectCollection findOf(AccessibilityNodeInfo node) {
|
||||
List<AccessibilityNodeInfo> list = new ArrayList<>();
|
||||
list.add(node);
|
||||
@@ -285,5 +371,4 @@ public class UiGlobalSelector {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ public class BoundsFilter extends DfsFilter {
|
||||
|
||||
public static final int TYPE_EQUALS = 0;
|
||||
public static final int TYPE_INSIDE = 1;
|
||||
public static final int TYPE_PARENT = 2;
|
||||
public static final int TYPE_CONTAINS = 2;
|
||||
|
||||
private Rect mBounds;
|
||||
private int mType;
|
||||
@@ -25,8 +25,8 @@ public class BoundsFilter extends DfsFilter {
|
||||
|
||||
@Override
|
||||
protected boolean isIncluded(AccessibilityNodeInfo nodeInfo) {
|
||||
if (mType == TYPE_PARENT) {
|
||||
return AccessibilityNodeInfoHelper.getBoundsInParent(nodeInfo).equals(mBounds);
|
||||
if (mType == TYPE_CONTAINS) {
|
||||
return AccessibilityNodeInfoHelper.getBoundsInScreen(nodeInfo).contains(mBounds);
|
||||
}
|
||||
Rect boundsInScreen = AccessibilityNodeInfoHelper.getBoundsInScreen(nodeInfo);
|
||||
if (mType == TYPE_EQUALS)
|
||||
|
||||
@@ -20,23 +20,23 @@ public class ClassNameFilter {
|
||||
if (!text.contains(".")) {
|
||||
text = "android.widget." + text;
|
||||
}
|
||||
return new EqualsFilter(text, CLASS_NAME_GETTER);
|
||||
return new StringEqualsFilter(text, CLASS_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter contains(String str) {
|
||||
return new ContainsFilter(str, CLASS_NAME_GETTER);
|
||||
return new StringContainsFilter(str, CLASS_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter startsWith(String prefix) {
|
||||
return new StartsWithFilter(prefix, CLASS_NAME_GETTER);
|
||||
return new StringStartsWithFilter(prefix, CLASS_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter endsWith(String suffix) {
|
||||
return new EndsWithFilter(suffix, CLASS_NAME_GETTER);
|
||||
return new StringEndsWithFilter(suffix, CLASS_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter matches(String regex) {
|
||||
return new MatchesFilter(regex, CLASS_NAME_GETTER);
|
||||
return new StringMatchesFilter(regex, CLASS_NAME_GETTER);
|
||||
}
|
||||
|
||||
private ClassNameFilter() {
|
||||
|
||||
@@ -17,22 +17,22 @@ public class DescFilter {
|
||||
};
|
||||
|
||||
public static ListFilter equals(String text) {
|
||||
return new EqualsFilter(text, DESC_GETTER);
|
||||
return new StringEqualsFilter(text, DESC_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter contains(String str) {
|
||||
return new ContainsFilter(str, DESC_GETTER);
|
||||
return new StringContainsFilter(str, DESC_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter startsWith(String prefix) {
|
||||
return new StartsWithFilter(prefix, DESC_GETTER);
|
||||
return new StringStartsWithFilter(prefix, DESC_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter endsWith(String suffix) {
|
||||
return new EndsWithFilter(suffix, DESC_GETTER);
|
||||
return new StringEndsWithFilter(suffix, DESC_GETTER);
|
||||
}
|
||||
public static ListFilter matches(String regex) {
|
||||
return new MatchesFilter(regex, DESC_GETTER);
|
||||
return new StringMatchesFilter(regex, DESC_GETTER);
|
||||
}
|
||||
|
||||
private DescFilter(){
|
||||
|
||||
@@ -22,20 +22,20 @@ public class IdFilter extends ListFilter.Default {
|
||||
return new IdFilter(id);
|
||||
}
|
||||
|
||||
public static StartsWithFilter startsWith(String prefix) {
|
||||
return new StartsWithFilter(prefix, ID_GETTER);
|
||||
public static StringStartsWithFilter startsWith(String prefix) {
|
||||
return new StringStartsWithFilter(prefix, ID_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter endsWith(String suffix) {
|
||||
return new EndsWithFilter(suffix, ID_GETTER);
|
||||
return new StringEndsWithFilter(suffix, ID_GETTER);
|
||||
}
|
||||
|
||||
public static ContainsFilter contains(String contains) {
|
||||
return new ContainsFilter(contains, ID_GETTER);
|
||||
public static StringContainsFilter contains(String contains) {
|
||||
return new StringContainsFilter(contains, ID_GETTER);
|
||||
}
|
||||
|
||||
public static MatchesFilter matches(String regex) {
|
||||
return new MatchesFilter(regex, ID_GETTER);
|
||||
public static StringMatchesFilter matches(String regex) {
|
||||
return new StringMatchesFilter(regex, ID_GETTER);
|
||||
}
|
||||
|
||||
private String mId;
|
||||
|
||||
@@ -17,23 +17,23 @@ public class PackageNameFilter {
|
||||
};
|
||||
|
||||
public static ListFilter equals(String text) {
|
||||
return new EqualsFilter(text, PACKAGE_NAME_GETTER);
|
||||
return new StringEqualsFilter(text, PACKAGE_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter contains(String str) {
|
||||
return new ContainsFilter(str, PACKAGE_NAME_GETTER);
|
||||
return new StringContainsFilter(str, PACKAGE_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter startsWith(String prefix) {
|
||||
return new StartsWithFilter(prefix, PACKAGE_NAME_GETTER);
|
||||
return new StringStartsWithFilter(prefix, PACKAGE_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter endsWith(String suffix) {
|
||||
return new EndsWithFilter(suffix, PACKAGE_NAME_GETTER);
|
||||
return new StringEndsWithFilter(suffix, PACKAGE_NAME_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter matches(String regex) {
|
||||
return new MatchesFilter(regex, PACKAGE_NAME_GETTER);
|
||||
return new StringMatchesFilter(regex, PACKAGE_NAME_GETTER);
|
||||
}
|
||||
|
||||
private PackageNameFilter() {
|
||||
|
||||
@@ -6,11 +6,11 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
* Created by Stardust on 2017/3/9.
|
||||
*/
|
||||
|
||||
public class ContainsFilter extends DfsFilter {
|
||||
public class StringContainsFilter extends DfsFilter {
|
||||
private final KeyGetter mKeyGetter;
|
||||
private final String mContains;
|
||||
|
||||
ContainsFilter(String contains, KeyGetter keyGetter) {
|
||||
StringContainsFilter(String contains, KeyGetter keyGetter) {
|
||||
mContains = contains;
|
||||
mKeyGetter = keyGetter;
|
||||
}
|
||||
@@ -6,12 +6,12 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
* Created by Stardust on 2017/3/9.
|
||||
*/
|
||||
|
||||
public class EndsWithFilter extends DfsFilter {
|
||||
public class StringEndsWithFilter extends DfsFilter {
|
||||
|
||||
private final String mSuffix;
|
||||
private final KeyGetter mKeyGetter;
|
||||
|
||||
public EndsWithFilter(String suffix, KeyGetter keyGetter) {
|
||||
public StringEndsWithFilter(String suffix, KeyGetter keyGetter) {
|
||||
mSuffix = suffix;
|
||||
mKeyGetter = keyGetter;
|
||||
}
|
||||
@@ -6,12 +6,12 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
* Created by Stardust on 2017/3/9.
|
||||
*/
|
||||
|
||||
public class EqualsFilter extends DfsFilter {
|
||||
public class StringEqualsFilter extends DfsFilter {
|
||||
|
||||
private String mText;
|
||||
private KeyGetter mKeyGetter;
|
||||
|
||||
public EqualsFilter(String text, KeyGetter getter) {
|
||||
public StringEqualsFilter(String text, KeyGetter getter) {
|
||||
mText = text;
|
||||
mKeyGetter = getter;
|
||||
}
|
||||
@@ -6,12 +6,12 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
* Created by Stardust on 2017/3/9.
|
||||
*/
|
||||
|
||||
public class MatchesFilter extends DfsFilter {
|
||||
public class StringMatchesFilter extends DfsFilter {
|
||||
|
||||
private final String mRegex;
|
||||
private final KeyGetter mKeyGetter;
|
||||
|
||||
MatchesFilter(String regex, KeyGetter keyGetter) {
|
||||
StringMatchesFilter(String regex, KeyGetter keyGetter) {
|
||||
mRegex = regex;
|
||||
mKeyGetter = keyGetter;
|
||||
}
|
||||
@@ -6,12 +6,12 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
* Created by Stardust on 2017/3/9.
|
||||
*/
|
||||
|
||||
public class StartsWithFilter extends DfsFilter {
|
||||
public class StringStartsWithFilter extends DfsFilter {
|
||||
|
||||
private final String mPrefix;
|
||||
private final KeyGetter mKeyGetter;
|
||||
|
||||
public StartsWithFilter(String prefix, KeyGetter keyGetter) {
|
||||
public StringStartsWithFilter(String prefix, KeyGetter keyGetter) {
|
||||
mPrefix = prefix;
|
||||
mKeyGetter = keyGetter;
|
||||
}
|
||||
@@ -19,7 +19,7 @@ public class TextFilter extends ListFilter.Default {
|
||||
};
|
||||
|
||||
public static ListFilter equals(String text) {
|
||||
return new EqualsFilter(text, TEXT_GETTER);
|
||||
return new StringEqualsFilter(text, TEXT_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter contains(String str) {
|
||||
@@ -27,15 +27,15 @@ public class TextFilter extends ListFilter.Default {
|
||||
}
|
||||
|
||||
public static ListFilter startsWith(String prefix) {
|
||||
return new StartsWithFilter(prefix, TEXT_GETTER);
|
||||
return new StringStartsWithFilter(prefix, TEXT_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter endsWith(String suffix) {
|
||||
return new EndsWithFilter(suffix, TEXT_GETTER);
|
||||
return new StringEndsWithFilter(suffix, TEXT_GETTER);
|
||||
}
|
||||
|
||||
public static ListFilter matches(String regex) {
|
||||
return new MatchesFilter(regex, TEXT_GETTER);
|
||||
return new StringMatchesFilter(regex, TEXT_GETTER);
|
||||
}
|
||||
|
||||
private String mText;
|
||||
|
||||
Reference in New Issue
Block a user