feat: accessibility white list
This commit is contained in:
@@ -23,6 +23,7 @@ import com.stardust.autojs.engine.RootAutomatorEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngineManager;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.exception.ScriptException;
|
||||
@@ -108,12 +109,7 @@ public abstract class AutoJs {
|
||||
.setShellSupplier(() -> new Shell(mContext, true)).build());
|
||||
return engine;
|
||||
});
|
||||
mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, new Supplier<ScriptEngine>() {
|
||||
@Override
|
||||
public ScriptEngine get() {
|
||||
return new RootAutomatorEngine(mContext);
|
||||
}
|
||||
});
|
||||
mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, () -> new RootAutomatorEngine(mContext));
|
||||
|
||||
}
|
||||
|
||||
@@ -174,8 +170,16 @@ public abstract class AutoJs {
|
||||
}
|
||||
|
||||
|
||||
protected AccessibilityConfig createAccessibilityConfig() {
|
||||
return new AccessibilityConfig();
|
||||
}
|
||||
|
||||
private class AccessibilityBridgeImpl extends AccessibilityBridge {
|
||||
|
||||
public AccessibilityBridgeImpl() {
|
||||
super(createAccessibilityConfig());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ensureServiceEnabled() {
|
||||
AutoJs.this.ensureAccessibilityServiceEnabled();
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
import com.stardust.view.accessibility.AccessibilityNotificationObserver;
|
||||
import com.stardust.view.accessibility.AccessibilityService;
|
||||
@@ -19,11 +20,15 @@ public abstract class AccessibilityBridge {
|
||||
public static final int MODE_FAST = 1;
|
||||
|
||||
private int mMode = MODE_NORMAL;
|
||||
private AccessibilityConfig mConfig;
|
||||
|
||||
public AccessibilityBridge(AccessibilityConfig config) {
|
||||
mConfig = config;
|
||||
mConfig.seal();
|
||||
}
|
||||
|
||||
public abstract void ensureServiceEnabled();
|
||||
|
||||
|
||||
@Nullable
|
||||
public abstract AccessibilityService getService();
|
||||
|
||||
@@ -49,4 +54,8 @@ public abstract class AccessibilityBridge {
|
||||
|
||||
@NonNull
|
||||
public abstract AccessibilityNotificationObserver getNotificationObserver();
|
||||
|
||||
public AccessibilityConfig getConfig() {
|
||||
return mConfig;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.annotation.ScriptInterface;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.accessibility.AutomatorConfig;
|
||||
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
||||
import com.stardust.automator.GlobalActionAutomator;
|
||||
import com.stardust.automator.UiObject;
|
||||
import com.stardust.automator.simple_action.ActionFactory;
|
||||
@@ -20,9 +20,6 @@ import com.stardust.automator.simple_action.SimpleAction;
|
||||
import com.stardust.util.DeveloperUtils;
|
||||
import com.stardust.util.ScreenMetrics;
|
||||
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.NativeJavaObject;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
*/
|
||||
@@ -252,7 +249,7 @@ public class SimpleActionAutomator {
|
||||
@SuppressWarnings("unchecked")
|
||||
private boolean performAction(SimpleAction simpleAction) {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) {
|
||||
if (AccessibilityConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) {
|
||||
Log.d(TAG, "performAction: running package is self. return false");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.annotation.ScriptInterface;
|
||||
import com.stardust.autojs.runtime.accessibility.AutomatorConfig;
|
||||
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
|
||||
import com.stardust.automator.ActionArgument;
|
||||
import com.stardust.automator.UiGlobalSelector;
|
||||
@@ -73,14 +72,14 @@ public class UiSelector extends UiGlobalSelector {
|
||||
@ScriptInterface
|
||||
public UiObjectCollection find() {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) {
|
||||
Log.d(TAG, "isSelfPackage return null");
|
||||
return UiObjectCollection.EMPTY;
|
||||
}
|
||||
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInActiveWindow();
|
||||
if (root == null) {
|
||||
return UiObjectCollection.EMPTY;
|
||||
}
|
||||
if (root.getPackageName() != null && mAccessibilityBridge.getConfig().whiteListContains(root.getPackageName().toString())) {
|
||||
Log.d(TAG, "package in white list, return null");
|
||||
return UiObjectCollection.EMPTY;
|
||||
}
|
||||
return findOf(UiObject.createRoot(root, mAllocator));
|
||||
}
|
||||
|
||||
@@ -121,11 +120,6 @@ public class UiSelector extends UiGlobalSelector {
|
||||
mAccessibilityBridge.ensureServiceEnabled();
|
||||
}
|
||||
|
||||
private boolean isRunningPackageSelf() {
|
||||
return DeveloperUtils.isSelfPackage(mAccessibilityBridge.getInfoProvider().getLatestPackage());
|
||||
}
|
||||
|
||||
|
||||
@ScriptInterface
|
||||
@NonNull
|
||||
public UiObjectCollection untilFind() {
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.stardust.autojs.runtime.accessibility;
|
||||
|
||||
import android.util.ArraySet;
|
||||
|
||||
import com.stardust.util.DeveloperUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/29.
|
||||
*/
|
||||
|
||||
public class AccessibilityConfig {
|
||||
|
||||
private static boolean isUnintendedGuardEnabled = false;
|
||||
|
||||
private List<String> mWhiteList = new ArrayList<>();
|
||||
private boolean mSealed = false;
|
||||
|
||||
public AccessibilityConfig() {
|
||||
if (isUnintendedGuardEnabled()) {
|
||||
mWhiteList.add(DeveloperUtils.selfPackage());
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isUnintendedGuardEnabled() {
|
||||
return isUnintendedGuardEnabled;
|
||||
}
|
||||
|
||||
public static void setIsUnintendedGuardEnabled(boolean isUnintendedGuardEnabled) {
|
||||
AccessibilityConfig.isUnintendedGuardEnabled = isUnintendedGuardEnabled;
|
||||
}
|
||||
|
||||
public boolean whiteListContains(String packageName) {
|
||||
return mWhiteList.contains(packageName);
|
||||
}
|
||||
|
||||
public void addWhiteList(String packageName) {
|
||||
if (mSealed)
|
||||
throw new IllegalStateException("sealed");
|
||||
mWhiteList.add(packageName);
|
||||
}
|
||||
|
||||
public final void seal() {
|
||||
mSealed = true;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package com.stardust.autojs.runtime.accessibility;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/29.
|
||||
*/
|
||||
|
||||
public class AutomatorConfig {
|
||||
|
||||
private static boolean isUnintendedGuardEnabled = false;
|
||||
|
||||
|
||||
public static boolean isUnintendedGuardEnabled() {
|
||||
return isUnintendedGuardEnabled;
|
||||
}
|
||||
|
||||
public static void setIsUnintendedGuardEnabled(boolean isUnintendedGuardEnabled) {
|
||||
AutomatorConfig.isUnintendedGuardEnabled = isUnintendedGuardEnabled;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user