Added Script file chooser. Fixed the issue that background image setting not working
This commit is contained in:
@@ -81,11 +81,11 @@ var shell = function(cmd, root){
|
||||
}
|
||||
|
||||
var currentPackage = function(){
|
||||
return __runtime__.automator.currentPackage();
|
||||
return __runtime__.info.getLatestPackage();
|
||||
}
|
||||
|
||||
var currentActivity = function(){
|
||||
return __runtime__.automator.currentActivity();
|
||||
return __runtime__.info.getLatestActivity();
|
||||
}
|
||||
|
||||
var __this__ = this;
|
||||
|
||||
@@ -38,13 +38,18 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
|
||||
@Override
|
||||
public Object execute(ScriptSource source) {
|
||||
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
|
||||
try {
|
||||
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
|
||||
} catch (Exception e) {
|
||||
stop();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
stopNotRemoveFromManager();
|
||||
mEngineManager.removeEngine(this);
|
||||
stopNotRemoveFromManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.stardust.autojs.runtime;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/3.
|
||||
*/
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface JavascriptClass {
|
||||
}
|
||||
@@ -1,18 +1,20 @@
|
||||
package com.stardust.autojs.runtime;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.autojs.R;
|
||||
import com.stardust.autojs.runtime.action.ActionAutomator;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.api.UiSelector;
|
||||
import com.stardust.util.ClipboardUtil;
|
||||
import com.stardust.util.SdkVersionUtil;
|
||||
import com.stardust.util.Shell;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/27.
|
||||
@@ -35,11 +37,15 @@ public class ScriptRuntime {
|
||||
@JavascriptField
|
||||
public ActionAutomator automator;
|
||||
|
||||
@JavascriptField
|
||||
public AccessibilityInfoProvider info;
|
||||
|
||||
public ScriptRuntime(Context context, Console console, AccessibilityBridge accessibilityBridge) {
|
||||
mContext = context;
|
||||
mAccessibilityBridge = accessibilityBridge;
|
||||
mUIHandler = new Handler(mContext.getMainLooper());
|
||||
app = new AppUtils(context);
|
||||
info = accessibilityBridge.getInfoProvider();
|
||||
this.console = console;
|
||||
automator = new ActionAutomator(accessibilityBridge, this);
|
||||
}
|
||||
@@ -68,7 +74,7 @@ public class ScriptRuntime {
|
||||
mUIHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
((ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText(TAG, text));
|
||||
ClipboardUtil.setClip(mContext, text);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -88,6 +94,13 @@ public class ScriptRuntime {
|
||||
return Thread.currentThread().isInterrupted();
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void requiresApi(int i) {
|
||||
if (Build.VERSION.SDK_INT < i) {
|
||||
throw new ScriptStopException(mContext.getString(R.string.text_requires_sdk_version_to_run_the_script) + SdkVersionUtil.sdkIntToString(i));
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void stop() {
|
||||
Thread.interrupted();
|
||||
|
||||
@@ -8,8 +8,8 @@ import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.runtime.AccessibilityBridge;
|
||||
import com.stardust.autojs.runtime.JavascriptInterface;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.ScriptStopException;
|
||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
||||
|
||||
/**
|
||||
@@ -41,169 +41,122 @@ public class ActionAutomator {
|
||||
mScriptRuntime = scriptRuntime;
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public ActionTarget text(String text, int i) {
|
||||
return new ActionTarget.TextActionTarget(text, i);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public ActionTarget bounds(int left, int top, int right, int bottom) {
|
||||
return new ActionTarget.BoundsActionTarget(new Rect(left, top, right, bottom));
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
@JavascriptInterface
|
||||
public ActionTarget editable(int i) {
|
||||
mScriptRuntime.requiresApi(Build.VERSION_CODES.LOLLIPOP);
|
||||
return new ActionTarget.EditableActionTarget(i);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public ActionTarget id(String id) {
|
||||
return new ActionTarget.IdActionTarget(id);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean click(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_CLICK));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean longClick(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_LONG_CLICK));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean scrollUp(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean scrollDown(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean scrollUp(int i) {
|
||||
return performAction(ActionFactory.createScrollAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, i));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean scrollDown(int i) {
|
||||
return performAction(ActionFactory.createScrollAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, i));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean scrollAllUp() {
|
||||
return performAction(ActionFactory.createScrollMaxAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean scrollAllDown() {
|
||||
return performAction(ActionFactory.createScrollMaxAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean focus(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_FOCUS));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean select(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_SELECT));
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public boolean setText(ActionTarget target, String text) {
|
||||
ensureApi(Build.VERSION_CODES.LOLLIPOP);
|
||||
mScriptRuntime.requiresApi(Build.VERSION_CODES.LOLLIPOP);
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_SET_TEXT, text));
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean back() {
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean home() {
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public boolean powerDialog() {
|
||||
ensureApi(Build.VERSION_CODES.LOLLIPOP);
|
||||
mScriptRuntime.requiresApi(Build.VERSION_CODES.LOLLIPOP);
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
|
||||
}
|
||||
|
||||
private void ensureApi(int i) {
|
||||
if (Build.VERSION.SDK_INT < i) {
|
||||
throw new ScriptStopException();
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean notifications() {
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean quickSettings() {
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean recents() {
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public boolean splitScreen() {
|
||||
return performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN);
|
||||
}
|
||||
|
||||
public boolean swipeDown() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_DOWN);
|
||||
}
|
||||
|
||||
public boolean swipeDownLeft() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_DOWN_AND_LEFT);
|
||||
}
|
||||
|
||||
public boolean swipeDownRight() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_DOWN_AND_RIGHT);
|
||||
}
|
||||
|
||||
public boolean swipeDownUp() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_DOWN_AND_UP);
|
||||
}
|
||||
|
||||
public boolean swipeUp() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_UP);
|
||||
}
|
||||
|
||||
public boolean swipeUpLeft() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_UP_AND_LEFT);
|
||||
}
|
||||
|
||||
public boolean swipeUpRight() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_UP_AND_RIGHT);
|
||||
}
|
||||
|
||||
public boolean swipeUpDown() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_UP_AND_DOWN);
|
||||
}
|
||||
|
||||
public boolean swipeLeft() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_LEFT);
|
||||
}
|
||||
|
||||
public boolean swipeLeftRight() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_LEFT_AND_RIGHT);
|
||||
}
|
||||
|
||||
public boolean swipeLeftUp() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_LEFT_AND_UP);
|
||||
}
|
||||
|
||||
public boolean swipeLeftDown() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_LEFT_AND_DOWN);
|
||||
}
|
||||
|
||||
public boolean swipeRight() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_RIGHT);
|
||||
}
|
||||
|
||||
public boolean swipeRightLeft() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_RIGHT_AND_LEFT);
|
||||
}
|
||||
|
||||
public boolean swipeRightUp() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_RIGHT_AND_UP);
|
||||
}
|
||||
|
||||
public boolean swipeRightDown() {
|
||||
return performGlobalAction(AccessibilityService.GESTURE_SWIPE_RIGHT_AND_DOWN);
|
||||
}
|
||||
|
||||
private boolean performGlobalAction(final int action) {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
PerformGlobalActionCommand command = new PerformGlobalActionCommand(action);
|
||||
@@ -211,25 +164,16 @@ public class ActionAutomator {
|
||||
return command.result;
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public boolean paste(ActionTarget target) {
|
||||
return performAction(target.createAction(AccessibilityNodeInfo.ACTION_PASTE));
|
||||
}
|
||||
|
||||
|
||||
public String currentPackage() {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
return mAccessibilityBridge.getInfoProvider().getLatestPackage();
|
||||
}
|
||||
|
||||
private void ensureAccessibilityServiceEnabled() {
|
||||
mAccessibilityBridge.ensureServiceEnabled();
|
||||
}
|
||||
|
||||
public String currentActivity() {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
return mAccessibilityBridge.getInfoProvider().getLatestActivity();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <T> T performAction(Action action) {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
mAccessibilityBridge.getActionPerformHost().addAction(action);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.stardust.autojs.runtime.action;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.util.MapEntries;
|
||||
@@ -38,6 +40,7 @@ public class ActionFactory {
|
||||
return new DepthFirstSearchTargetAction(action, new FilterAction.BoundsFilter(rect));
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public static Action createActionWithEditableFilter(int action, int index, final String text) {
|
||||
return new SearchTargetAction(action, new FilterAction.EditableFilter(index)) {
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.stardust.autojs.runtime.action;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.RequiresApi;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/27.
|
||||
@@ -40,6 +42,7 @@ public interface ActionTarget {
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
class EditableActionTarget implements ActionTarget {
|
||||
private int mIndex;
|
||||
|
||||
|
||||
@@ -4,12 +4,15 @@ import android.content.Context;
|
||||
import android.webkit.ValueCallback;
|
||||
import android.webkit.WebView;
|
||||
|
||||
import com.stardust.autojs.runtime.JavascriptClass;
|
||||
import com.stardust.autojs.runtime.JavascriptInterface;
|
||||
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/1.
|
||||
*/
|
||||
|
||||
@JavascriptClass
|
||||
public class InjectableWebView extends WebView {
|
||||
|
||||
private InjectableWebClient mInjectableWebClient;
|
||||
@@ -24,10 +27,12 @@ public class InjectableWebView extends WebView {
|
||||
setWebViewClient(mInjectableWebClient);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void inject(String script, ValueCallback<String> callback) {
|
||||
mInjectableWebClient.inject(script, callback);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void inject(String script) {
|
||||
mInjectableWebClient.inject(script);
|
||||
}
|
||||
|
||||
12
autojs/src/main/res/values-en/strings.xml
Normal file
12
autojs/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">AutoJs</string>
|
||||
<string name="text_error">Error: </string>
|
||||
<string name="text_start_running">开始运行</string>
|
||||
<string name="text_path_is_empty">路径为空</string>
|
||||
<string name="text_file_not_exists">文件不存在</string>
|
||||
<string name="text_no_file_rw_permission">无文件读写权限</string>
|
||||
<string name="text_no_running_script">没有正在运行的脚本</string>
|
||||
<string name="text_already_stop_n_scripts">已停止%d个正在运行的脚本</string>
|
||||
<string name="text_requires_sdk_version_to_run_the_script">本脚本需要此安卓版本以上才能运行:</string>
|
||||
</resources>
|
||||
@@ -1,5 +1,5 @@
|
||||
<resources>
|
||||
<string name="app_name">autojs</string>
|
||||
<string name="app_name">AutoJs</string>
|
||||
<string name="text_error">错误:</string>
|
||||
<string name="text_start_running">开始运行</string>
|
||||
<string name="text_path_is_empty">路径为空</string>
|
||||
@@ -7,5 +7,6 @@
|
||||
<string name="text_no_file_rw_permission">无文件读写权限</string>
|
||||
<string name="text_no_running_script">没有正在运行的脚本</string>
|
||||
<string name="text_already_stop_n_scripts">已停止%d个正在运行的脚本</string>
|
||||
<string name="text_requires_sdk_version_to_run_the_script">本脚本需要此安卓版本以上才能运行:</string>
|
||||
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user