This commit is contained in:
hyb1996 committed 2017-10-28 12:54:02 +08:00
commit 8ce22d1af6
60 files changed
+190 -166

No files matched your search

+1 -1
View File
@@ -97,7 +97,7 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity
android:name="com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity" android:name="com.stardust.autojs.core.image.ScreenCaptureRequestActivity"
android:taskAffinity="com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity" android:taskAffinity="com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/> android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
@@ -22,15 +22,15 @@ import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.runtime.api.AbstractShell; import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.autojs.runtime.api.Console; import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester; import com.stardust.autojs.core.image.ScreenCaptureRequester;
import com.stardust.autojs.core.inputevent.InputEventObserver; import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.script.AutoFileSource; import com.stardust.autojs.script.AutoFileSource;
import com.stardust.autojs.script.JavaScriptSource; import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity; import com.stardust.autojs.core.image.ScreenCaptureRequestActivity;
import com.stardust.autojs.runtime.api.Shell; import com.stardust.autojs.core.util.Shell;
import com.stardust.autojs.core.console.StardustConsole; import com.stardust.autojs.core.console.StardustConsole;
import com.stardust.util.ScreenMetrics; import com.stardust.util.ScreenMetrics;
import com.stardust.util.Supplier; import com.stardust.util.Supplier;
@@ -7,7 +7,7 @@ import android.text.TextUtils;
import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.autojs.runtime.api.ProcessShell; import com.stardust.autojs.core.util.ProcessShell;
import com.stardust.scriptdroid.accessibility.AccessibilityService; import com.stardust.scriptdroid.accessibility.AccessibilityService;
import com.stardust.view.accessibility.AccessibilityServiceUtils; import com.stardust.view.accessibility.AccessibilityServiceUtils;
@@ -47,4 +47,4 @@ require("__general__")(__runtime__, this);
})(__that__); })(__that__);
__importClass__(android.view.KeyEvent); __importClass__(android.view.KeyEvent);
__importClass__(com.stardust.autojs.runtime.api.Shell); __importClass__(com.stardust.autojs.core.util.Shell);
@@ -1,6 +1,6 @@
module.exports = function(__runtime__, scope){ module.exports = function(__runtime__, scope){
function RootAutomator(){ function RootAutomator(){
this.__ra__ = Object.create(new com.stardust.autojs.runtime.api.RootAutomator(scope.context)); this.__ra__ = Object.create(new com.stardust.autojs.core.inputevent.RootAutomator(scope.context));
var methods = ["sendEvent", "touch", "setScreenMetrics", "touchX", "touchY", "sendSync", "sendMtSync", "tap", var methods = ["sendEvent", "touch", "setScreenMetrics", "touchX", "touchY", "sendSync", "sendMtSync", "tap",
"swipe", "press", "longPress", "touchDown", "touchUp", "touchMove", "getDefaultId", "setDefaultId", "exit"]; "swipe", "press", "longPress", "touchDown", "touchUp", "touchMove", "getDefaultId", "setDefaultId", "exit"];
for(var i = 0; i < methods.length; i++){ for(var i = 0; i < methods.length; i++){
+5 -5
View File
@@ -70,15 +70,15 @@ module.exports = function(__runtime__, scope){
function getColorDetector(color, algorithm, threshold){ function getColorDetector(color, algorithm, threshold){
switch(algorithm){ switch(algorithm){
case "rgb": case "rgb":
return new com.stardust.autojs.runtime.api.image.ColorDetector.RGBDistanceDetector(color, threshold); return new com.stardust.autojs.core.image.ColorDetector.RGBDistanceDetector(color, threshold);
case "equal": case "equal":
return new com.stardust.autojs.runtime.api.image.ColorDetector.EqualityDetector(color); return new com.stardust.autojs.core.image.ColorDetector.EqualityDetector(color);
case "diff": case "diff":
return new com.stardust.autojs.runtime.api.image.ColorDetector.DifferenceDetector(color, threshold); return new com.stardust.autojs.core.image.ColorDetector.DifferenceDetector(color, threshold);
case "rgb+": case "rgb+":
return new com.stardust.autojs.runtime.api.image.ColorDetector.WeightedRGBDistanceDetector(color, threshold); return new com.stardust.autojs.core.image.ColorDetector.WeightedRGBDistanceDetector(color, threshold);
case "hs": case "hs":
return new com.stardust.autojs.runtime.api.image.ColorDetector.HSDistanceDetector(color, threshold); return new com.stardust.autojs.core.image.ColorDetector.HSDistanceDetector(color, threshold);
} }
throw new Error("Unknown algorithm: " + algorithm); throw new Error("Unknown algorithm: " + algorithm);
} }
+1 -1
View File
@@ -52,7 +52,7 @@ module.exports = function(__runtime__, scope){
} }
ui.findViewByStringId = function(view, id){ ui.findViewByStringId = function(view, id){
return com.stardust.autojs.runtime.api.ui.JsViewHelper.findViewByStringId(view, id); return com.stardust.autojs.core.ui.JsViewHelper.findViewByStringId(view, id);
} }
function decorate(view){ function decorate(view){
+2 -2
View File
@@ -2,11 +2,11 @@
module.exports = function(__runtime__, scope){ module.exports = function(__runtime__, scope){
scope.newInjectableWebClient = function(){ scope.newInjectableWebClient = function(){
return new com.stardust.autojs.runtime.api.InjectableWebClient(org.mozilla.javascript.Context.getCurrentContext(), scope); return new com.stardust.autojs.core.web.InjectableWebClient(org.mozilla.javascript.Context.getCurrentContext(), scope);
} }
scope.newInjectableWebView = function(activity){ scope.newInjectableWebView = function(activity){
return new com.stardust.autojs.runtime.api.InjectableWebView(scope.activity, org.mozilla.javascript.Context.getCurrentContext(), scope); return new com.stardust.autojs.core.web.InjectableWebView(scope.activity, org.mozilla.javascript.Context.getCurrentContext(), scope);
} }
} }
@@ -6,6 +6,7 @@ import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineManager; import com.stardust.autojs.engine.ScriptEngineManager;
import com.stardust.autojs.execution.ExecutionConfig; import com.stardust.autojs.execution.ExecutionConfig;
import com.stardust.autojs.execution.LoopedBasedJavaScriptExecution;
import com.stardust.autojs.execution.RunnableScriptExecution; import com.stardust.autojs.execution.RunnableScriptExecution;
import com.stardust.autojs.execution.ScriptExecuteActivity; import com.stardust.autojs.execution.ScriptExecuteActivity;
import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.execution.ScriptExecution;
@@ -130,7 +131,12 @@ public class ScriptEngineService {
return ScriptExecuteActivity.execute(mContext, mScriptEngineManager, task); return ScriptExecuteActivity.execute(mContext, mScriptEngineManager, task);
} }
} }
RunnableScriptExecution r = new RunnableScriptExecution(mScriptEngineManager, task); RunnableScriptExecution r;
if (source instanceof JavaScriptSource) {
r = new LoopedBasedJavaScriptExecution(mScriptEngineManager, task);
} else {
r = new RunnableScriptExecution(mScriptEngineManager, task);
}
if (task.getConfig().runInNewThread) { if (task.getConfig().runInNewThread) {
new ThreadCompat(r).start(); new ThreadCompat(r).start();
} else { } else {
@@ -1,9 +1,5 @@
package com.stardust.autojs.codegeneration; package com.stardust.autojs.codegeneration;
import com.stardust.autojs.runtime.api.UiSelector;
import com.stardust.automator.UiGlobalSelector;
import com.stardust.automator.UiObject;
/** /**
* Created by Stardust on 2017/8/4. * Created by Stardust on 2017/8/4.
*/ */
@@ -1,10 +1,9 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.accessibility;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log; import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
import com.stardust.autojs.annotation.ScriptInterface; import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.autojs.runtime.accessibility.AutomatorConfig; import com.stardust.autojs.runtime.accessibility.AutomatorConfig;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.eventloop;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@@ -92,7 +92,7 @@ public class EventEmitter {
private Map<String, Listeners> mListenersMap = new HashMap<>(); private Map<String, Listeners> mListenersMap = new HashMap<>();
public static int defaultMaxListeners = 10; public static int defaultMaxListeners = 10;
private int mMaxListeners = defaultMaxListeners; private int mMaxListeners = defaultMaxListeners;
ScriptBridges mBridges; protected ScriptBridges mBridges;
public EventEmitter(ScriptBridges bridges) { public EventEmitter(ScriptBridges bridges) {
mBridges = bridges; mBridges = bridges;
@@ -1,9 +1,7 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.graphics.Color; import android.graphics.Color;
import java.util.Comparator;
/** /**
* Created by Stardust on 2017/5/20. * Created by Stardust on 2017/5/20.
*/ */
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.graphics.Point; import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
@@ -1,8 +1,7 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.graphics.Rect; import android.graphics.Rect;
import android.media.Image; import android.media.Image;
import android.util.Log;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -1,8 +1,7 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.graphics.Rect; import android.graphics.Rect;
import android.media.Image; import android.media.Image;
import android.util.Log;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.core.image;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@@ -5,7 +5,7 @@ import android.support.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import com.stardust.autojs.core.record.inputevent.EventFormatException; import com.stardust.autojs.core.record.inputevent.EventFormatException;
import com.stardust.autojs.runtime.api.Shell; import com.stardust.autojs.core.util.Shell;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.inputevent;
import android.content.Context; import android.content.Context;
import android.os.SystemClock; import android.os.SystemClock;
@@ -6,7 +6,9 @@ import android.support.annotation.Nullable;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import com.stardust.autojs.core.inputevent.InputDevices; import com.stardust.autojs.core.inputevent.InputDevices;
import com.stardust.autojs.core.util.ProcessShell;
import com.stardust.autojs.engine.RootAutomatorEngine; import com.stardust.autojs.engine.RootAutomatorEngine;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.util.ScreenMetrics; import com.stardust.util.ScreenMetrics;
@@ -6,8 +6,8 @@ import android.util.Log;
import com.stardust.autojs.core.inputevent.InputEventCodes; import com.stardust.autojs.core.inputevent.InputEventCodes;
import com.stardust.autojs.core.inputevent.InputEventObserver; import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.core.inputevent.RootAutomator;
import com.stardust.autojs.engine.RootAutomatorEngine; import com.stardust.autojs.engine.RootAutomatorEngine;
import com.stardust.autojs.runtime.api.RootAutomator;
import com.stardust.pio.UncheckedIOException; import com.stardust.pio.UncheckedIOException;
import com.stardust.util.ScreenMetrics; import com.stardust.util.ScreenMetrics;
@@ -1,12 +1,10 @@
package com.stardust.autojs.core.record.inputevent; package com.stardust.autojs.core.record.inputevent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log;
import com.stardust.autojs.core.inputevent.InputEventCodes; import com.stardust.autojs.core.inputevent.InputEventCodes;
import com.stardust.autojs.core.inputevent.InputEventObserver; import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.engine.RootAutomatorEngine; import com.stardust.autojs.engine.RootAutomatorEngine;
import com.stardust.autojs.runtime.api.RootAutomator;
import static com.stardust.util.ScreenMetrics.getDeviceScreenHeight; import static com.stardust.util.ScreenMetrics.getDeviceScreenHeight;
import static com.stardust.util.ScreenMetrics.getDeviceScreenWidth; import static com.stardust.util.ScreenMetrics.getDeviceScreenWidth;
@@ -1,10 +1,7 @@
package com.stardust.autojs.core.templatematching; package com.stardust.autojs.core.templatematching;
import android.graphics.Color;
import android.media.Image; import android.media.Image;
import com.stardust.autojs.runtime.api.image.Images;
/** /**
* Created by Stardust on 2017/10/5. * Created by Stardust on 2017/10/5.
*/ */
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.core.ui;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@@ -1,30 +1,18 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.core.ui;
import android.content.Context; import android.content.Context;
import android.text.InputType; import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator; import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
import com.stardust.autojs.runtime.api.ui.widget.JsFrameLayout; import com.stardust.autojs.core.ui.widget.JsFrameLayout;
import com.stardust.autojs.runtime.api.ui.xml.XmlConverter; import com.stardust.autojs.core.ui.xml.XmlConverter;
import com.stardust.util.MapEntries; import com.stardust.util.MapEntries;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
/** /**
* Created by Stardust on 2017/5/14. * Created by Stardust on 2017/5/14.
*/ */
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.core.ui;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.core.ui;
import android.content.res.Resources; import android.content.res.Resources;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@@ -1,10 +1,7 @@
package com.stardust.autojs.runtime.api.ui.widget; package com.stardust.autojs.core.ui.widget;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.Button;
/** /**
* Created by Stardust on 2017/5/15. * Created by Stardust on 2017/5/15.
@@ -1,8 +1,7 @@
package com.stardust.autojs.runtime.api.ui.widget; package com.stardust.autojs.core.ui.widget;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.EditText;
/** /**
* Created by Stardust on 2017/5/15. * Created by Stardust on 2017/5/15.
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui.widget; package com.stardust.autojs.core.ui.widget;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
@@ -11,8 +11,7 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator; import com.stardust.autojs.core.ui.JsViewHelper;
import com.stardust.autojs.runtime.api.ui.JsViewHelper;
/** /**
* Created by Stardust on 2017/5/14. * Created by Stardust on 2017/5/14.
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui.widget; package com.stardust.autojs.core.ui.widget;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
@@ -8,8 +8,7 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator; import com.stardust.autojs.core.ui.JsViewHelper;
import com.stardust.autojs.runtime.api.ui.JsViewHelper;
/** /**
* Created by Stardust on 2017/5/14. * Created by Stardust on 2017/5/14.
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui.widget; package com.stardust.autojs.core.ui.widget;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
@@ -7,8 +7,7 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator; import com.stardust.autojs.core.ui.JsViewHelper;
import com.stardust.autojs.runtime.api.ui.JsViewHelper;
/** /**
* Created by Stardust on 2017/5/14. * Created by Stardust on 2017/5/14.
@@ -1,11 +1,8 @@
package com.stardust.autojs.runtime.api.ui.widget; package com.stardust.autojs.core.ui.widget;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.TextView;
/** /**
* Created by Stardust on 2017/5/15. * Created by Stardust on 2017/5/15.
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui.xml; package com.stardust.autojs.core.ui.xml;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui.xml; package com.stardust.autojs.core.ui.xml;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -1,6 +1,4 @@
package com.stardust.autojs.runtime.api.ui.xml; package com.stardust.autojs.core.ui.xml;
import com.stardust.util.MapEntries;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NamedNodeMap;
@@ -11,7 +9,6 @@ import org.xml.sax.SAXException;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
@@ -1,8 +1,9 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.util;
import android.util.Log; import android.util.Log;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.util.ProcessUtils; import com.stardust.autojs.util.ProcessUtils;
import com.stardust.pio.UncheckedIOException; import com.stardust.pio.UncheckedIOException;
@@ -12,8 +13,6 @@ import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
/** /**
* Created by Stardust on 2017/1/20. * Created by Stardust on 2017/1/20.
@@ -1,10 +1,11 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.util;
import android.content.Context; import android.content.Context;
import android.os.Handler; import android.os.Handler;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.lang.ThreadCompat; import com.stardust.lang.ThreadCompat;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.web;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.util.Log; import android.util.Log;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api; package com.stardust.autojs.core.web;
import android.content.Context; import android.content.Context;
import android.webkit.ValueCallback; import android.webkit.ValueCallback;
@@ -8,6 +8,7 @@ import android.os.MessageQueue;
import com.stardust.autojs.runtime.api.Loopers; import com.stardust.autojs.runtime.api.Loopers;
import com.stardust.autojs.script.JavaScriptSource; import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.autojs.script.ScriptSource; import com.stardust.autojs.script.ScriptSource;
import com.stardust.util.Callback;
/** /**
* Created by Stardust on 2017/7/28. * Created by Stardust on 2017/7/28.
@@ -24,18 +25,27 @@ public class LoopBasedJavaScriptEngine extends RhinoJavaScriptEngine {
@Override @Override
public Object execute(final JavaScriptSource source) { public Object execute(final JavaScriptSource source) {
execute(source, null);
return null;
}
public void execute(final ScriptSource source, final Callback<Object> callback) {
Runnable r = new Runnable() { Runnable r = new Runnable() {
@Override @Override
public void run() { public void run() {
LoopBasedJavaScriptEngine.super.execute(source); Object o = LoopBasedJavaScriptEngine.super.execute((JavaScriptSource) source);
if (callback != null)
callback.call(o);
} }
}; };
mHandler.post(r); mHandler.post(r);
if (!mLooping && Looper.myLooper() != Looper.getMainLooper()) { if (!mLooping && Looper.myLooper() != Looper.getMainLooper()) {
mLooping = true; mLooping = true;
Looper.loop(); Looper.loop();
mLooping = false;
} }
return null;
} }
@Override @Override
@@ -3,10 +3,8 @@ package com.stardust.autojs.engine;
import android.content.Context; import android.content.Context;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.util.Patterns;
import com.stardust.autojs.runtime.api.AbstractShell; import com.stardust.autojs.core.util.ProcessShell;
import com.stardust.autojs.runtime.api.ProcessShell;
import com.stardust.autojs.core.inputevent.InputDevices; import com.stardust.autojs.core.inputevent.InputDevices;
import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
@@ -0,0 +1,58 @@
package com.stardust.autojs.execution;
import android.os.MessageQueue;
import android.util.Log;
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineManager;
import com.stardust.autojs.runtime.api.Loopers;
import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.autojs.script.ScriptSource;
/**
* Created by Stardust on 2017/10/27.
*/
public class LoopedBasedJavaScriptExecution extends RunnableScriptExecution {
public LoopedBasedJavaScriptExecution(ScriptEngineManager manager, ScriptExecutionTask task) {
super(manager, task);
}
protected Object doExecution(final ScriptEngine engine) {
engine.setTag(ScriptEngine.TAG_SOURCE, getSource());
getListener().onStart(this);
long delay = getConfig().delay;
sleep(delay);
final LoopBasedJavaScriptEngine javaScriptEngine = (LoopBasedJavaScriptEngine) engine;
final long interval = getConfig().interval;
javaScriptEngine.getRuntime().loopers.setLooperQuitHandler(new Loopers.LooperQuitHandler() {
long times = getConfig().loopTimes == 0 ? Integer.MAX_VALUE : getConfig().loopTimes;
@Override
public boolean shouldQuit() {
times--;
if (times > 0) {
sleep(interval);
javaScriptEngine.execute(getSource());
return false;
}
javaScriptEngine.getRuntime().loopers.setLooperQuitHandler(null);
getListener().onSuccess(LoopedBasedJavaScriptExecution.this, null);
return true;
}
});
javaScriptEngine.execute(
getSource());
return null;
}
@Override
public JavaScriptSource getSource() {
return (JavaScriptSource) super.getSource();
}
}
@@ -51,7 +51,7 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
engine.init(); engine.init();
} }
private Object doExecution(ScriptEngine engine) { protected Object doExecution(ScriptEngine engine) {
engine.setTag(ScriptEngine.TAG_SOURCE, getSource()); engine.setTag(ScriptEngine.TAG_SOURCE, getSource());
getListener().onStart(this); getListener().onStart(this);
Object result = null; Object result = null;
@@ -64,14 +64,19 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
sleep(delay); sleep(delay);
ScriptSource source = getSource(); ScriptSource source = getSource();
for (int i = 0; i < times; i++) { for (int i = 0; i < times; i++) {
result = engine.execute(source); result = execute(engine, source);
sleep(interval); sleep(interval);
} }
getListener().onSuccess(this, result); getListener().onSuccess(this, result);
return result; return result;
} }
private void sleep(long i) { @SuppressWarnings("unchecked")
protected Object execute(ScriptEngine engine, ScriptSource source) {
return engine.execute(source);
}
protected void sleep(long i) {
if (i <= 0) { if (i <= 0) {
return; return;
} }
@@ -17,19 +17,19 @@ import com.stardust.autojs.runtime.api.Engines;
import com.stardust.autojs.runtime.api.Events; import com.stardust.autojs.runtime.api.Events;
import com.stardust.autojs.runtime.api.Loopers; import com.stardust.autojs.runtime.api.Loopers;
import com.stardust.autojs.runtime.api.Timers; import com.stardust.autojs.runtime.api.Timers;
import com.stardust.autojs.runtime.api.UiSelector; import com.stardust.autojs.core.accessibility.UiSelector;
import com.stardust.autojs.runtime.api.image.Images; import com.stardust.autojs.runtime.api.Images;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester; import com.stardust.autojs.core.image.ScreenCaptureRequester;
import com.stardust.autojs.runtime.api.ui.Dialogs; import com.stardust.autojs.runtime.api.Dialogs;
import com.stardust.autojs.runtime.exception.ScriptEnvironmentException; import com.stardust.autojs.runtime.exception.ScriptEnvironmentException;
import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.core.accessibility.SimpleActionAutomator; import com.stardust.autojs.core.accessibility.SimpleActionAutomator;
import com.stardust.concurrent.VolatileBox; import com.stardust.concurrent.VolatileBox;
import com.stardust.autojs.runtime.api.ui.UI; import com.stardust.autojs.runtime.api.UI;
import com.stardust.pio.UncheckedIOException; import com.stardust.pio.UncheckedIOException;
import com.stardust.util.ClipboardUtil; import com.stardust.util.ClipboardUtil;
import com.stardust.autojs.runtime.api.ProcessShell; import com.stardust.autojs.core.util.ProcessShell;
import com.stardust.util.ScreenMetrics; import com.stardust.util.ScreenMetrics;
import com.stardust.util.SdkVersionUtil; import com.stardust.util.SdkVersionUtil;
import com.stardust.util.Supplier; import com.stardust.util.Supplier;
@@ -28,10 +28,10 @@ public abstract class AbstractShell {
} }
} }
static final String COMMAND_SU = "su"; protected static final String COMMAND_SU = "su";
static final String COMMAND_SH = "sh"; protected static final String COMMAND_SH = "sh";
static final String COMMAND_EXIT = "exit\n"; protected static final String COMMAND_EXIT = "exit\n";
static final String COMMAND_LINE_END = "\n"; protected static final String COMMAND_LINE_END = "\n";
private int mTouchDevice = -1; private int mTouchDevice = -1;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.runtime.api;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@@ -9,6 +9,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme; import com.afollestad.materialdialogs.Theme;
import com.stardust.autojs.R; import com.stardust.autojs.R;
import com.stardust.autojs.annotation.ScriptInterface; import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.autojs.core.ui.BlockedMaterialDialog;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.concurrent.VolatileBox; import com.stardust.concurrent.VolatileBox;
@@ -10,6 +10,7 @@ import android.view.accessibility.AccessibilityEvent;
import com.stardust.autojs.R; import com.stardust.autojs.R;
import com.stardust.autojs.core.accessibility.AccessibilityBridge; import com.stardust.autojs.core.accessibility.AccessibilityBridge;
import com.stardust.autojs.core.eventloop.EventEmitter;
import com.stardust.autojs.runtime.ScriptBridges; import com.stardust.autojs.runtime.ScriptBridges;
import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.core.inputevent.InputEventObserver; import com.stardust.autojs.core.inputevent.InputEventObserver;
@@ -1,4 +1,4 @@
package com.stardust.autojs.runtime.api.image; package com.stardust.autojs.runtime.api;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@@ -15,6 +15,9 @@ import android.view.Display;
import android.view.Surface; import android.view.Surface;
import android.view.WindowManager; import android.view.WindowManager;
import com.stardust.autojs.core.image.ColorFinder;
import com.stardust.autojs.core.image.ScreenCaptureRequester;
import com.stardust.autojs.core.image.ScreenCapturer;
import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.annotation.ScriptVariable; import com.stardust.autojs.annotation.ScriptVariable;
@@ -6,7 +6,6 @@ import android.os.MessageQueue;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.lang.ThreadCompat; import com.stardust.lang.ThreadCompat;
import java.lang.reflect.Field;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
@@ -15,10 +14,15 @@ import java.util.concurrent.ConcurrentHashMap;
public class Loopers { public class Loopers {
public interface LooperQuitHandler {
boolean shouldQuit();
}
public volatile boolean waitWhenIdle = false; public volatile boolean waitWhenIdle = false;
private volatile Looper mServantLooper; private volatile Looper mServantLooper;
private static volatile ConcurrentHashMap<Thread, Looper> sLoopers = new ConcurrentHashMap<>(); private static volatile ConcurrentHashMap<Thread, Looper> sLoopers = new ConcurrentHashMap<>();
private Timers mTimers; private Timers mTimers;
private LooperQuitHandler mLooperQuitHandler;
public Loopers(Timers timers) { public Loopers(Timers timers) {
mTimers = timers; mTimers = timers;
@@ -29,8 +33,11 @@ public class Loopers {
@Override @Override
public boolean queueIdle() { public boolean queueIdle() {
Looper l = Looper.myLooper(); Looper l = Looper.myLooper();
if (l != null && shouldQuitLooper()) if (l != null && shouldQuitLooper()) {
l.quit(); if (mLooperQuitHandler != null && mLooperQuitHandler.shouldQuit()) {
l.quit();
}
}
return true; return true;
} }
}); });
@@ -102,4 +109,8 @@ public class Loopers {
if (looper != null) if (looper != null)
looper.quit(); looper.quit();
} }
public void setLooperQuitHandler(LooperQuitHandler looperQuitHandler) {
mLooperQuitHandler = looperQuitHandler;
}
} }
@@ -2,6 +2,7 @@ package com.stardust.autojs.runtime.api;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import com.stardust.autojs.runtime.ScriptBridges; import com.stardust.autojs.runtime.ScriptBridges;
@@ -28,7 +29,7 @@ public class Timers {
} }
} }
public int setTimeout(final Object callback, long delay, final Object... args) { public int setTimeout(final Object callback, final long delay, final Object... args) {
ensureHandler(); ensureHandler();
mCallbackMaxId++; mCallbackMaxId++;
final int id = mCallbackMaxId; final int id = mCallbackMaxId;
@@ -1,7 +1,9 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.runtime.api;
import android.content.Context; import android.content.Context;
import com.stardust.autojs.core.ui.ConvertLayoutInflater;
import com.stardust.autojs.core.ui.JsLayoutInflater;
import com.stardust.autojs.rhino.ProxyObject; import com.stardust.autojs.rhino.ProxyObject;
import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.Scriptable;
@@ -1,28 +0,0 @@
package com.stardust.autojs.runtime.api.crypto;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import static javax.crypto.Cipher.ENCRYPT_MODE;
/**
* Created by Stardust on 2017/9/20.
*/
public class Crypto {
public Cipher createCipher(String algorithm, String password) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(algorithm);
KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);
keyGenerator.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = keyGenerator.generateKey();
cipher.init(ENCRYPT_MODE, secretKey);
return cipher;
}
}
@@ -2,7 +2,7 @@ package com.stardust.autojs.util;
import android.util.Log; import android.util.Log;
import com.stardust.autojs.runtime.api.ProcessShell; import com.stardust.autojs.core.util.ProcessShell;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@@ -1,11 +1,7 @@
package com.stardust.autojs; package com.stardust.autojs;
import com.stardust.autojs.runtime.api.image.ColorDetector;
import org.junit.Test; import org.junit.Test;
import java.util.Arrays;
/** /**
* Example local unit test, which will execute on the development machine (host). * Example local unit test, which will execute on the development machine (host).
* *
@@ -1,6 +1,6 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.runtime.api.ui;
import com.stardust.autojs.runtime.api.ui.xml.XmlConverter; import com.stardust.autojs.core.ui.xml.XmlConverter;
import org.junit.Test; import org.junit.Test;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@@ -134,21 +134,21 @@ public class UiObject extends AccessibilityNodeInfoCompat {
} }
@NonNull @NonNull
public CharSequence text() { public String text() {
CharSequence t = getText(); CharSequence t = getText();
return t == null ? "" : t; return t == null ? "" : t.toString();
} }
public CharSequence desc() { public String desc() {
return getContentDescription(); return getContentDescription().toString();
} }
public CharSequence className() { public String className() {
return getClassName(); return getClassName().toString();
} }
public CharSequence packageName() { public String packageName() {
return getPackageName(); return getPackageName().toString();
} }
public boolean performAction(int action, ActionArgument... arguments) { public boolean performAction(int action, ActionArgument... arguments) {
@@ -7,7 +7,7 @@ import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import com.stardust.auojs.inrt.App; import com.stardust.auojs.inrt.App;
import com.stardust.autojs.runtime.api.ProcessShell; import com.stardust.autojs.core.util.ProcessShell;
import java.util.Locale; import java.util.Locale;
@@ -24,11 +24,9 @@ import com.stardust.autojs.engine.ScriptEngineManager;
import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.api.AbstractShell; import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.autojs.runtime.api.Console; import com.stardust.autojs.core.util.Shell;
import com.stardust.autojs.core.console.NoOpConsole; import com.stardust.autojs.core.image.ScreenCaptureRequestActivity;
import com.stardust.autojs.runtime.api.Shell; import com.stardust.autojs.core.image.ScreenCaptureRequester;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
import com.stardust.autojs.core.console.StardustConsole; import com.stardust.autojs.core.console.StardustConsole;
import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.script.AutoFileSource; import com.stardust.autojs.script.AutoFileSource;
@@ -39,7 +37,6 @@ import com.stardust.util.UiHandler;
import com.stardust.view.accessibility.AccessibilityInfoProvider; import com.stardust.view.accessibility.AccessibilityInfoProvider;
import com.stardust.view.accessibility.AccessibilityService; import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.view.accessibility.AccessibilityServiceUtils; import com.stardust.view.accessibility.AccessibilityServiceUtils;
import com.stardust.view.accessibility.LayoutInspector;
import com.stardust.view.accessibility.NotificationListener; import com.stardust.view.accessibility.NotificationListener;