From 5ee99b5379c39ae85e220c5a0ceb3cef99b0a65f Mon Sep 17 00:00:00 2001
From: hyb1996 <946994919@qq.com>
Date: Sun, 6 Aug 2017 14:40:02 +0800
Subject: [PATCH] refactor(autojs): move inputevent to package core
---
.idea/misc.xml | 4 +-
app/build.gradle | 4 +-
.../java/com/stardust/scriptdroid/Pref.java | 7 +-
.../stardust/scriptdroid/autojs/AutoJs.java | 9 +-
.../autojs/record/GlobalRecorder.java | 28 ++
.../menu/content/RecordNavigatorContent.java | 21 +-
.../stardust/scriptdroid/script/Scripts.java | 2 +-
.../MediaProjectionScreenCaptureService.java | 83 ----
.../java/com/stardust/widget/PrefSwitch.java | 85 +++++
.../res/layout/floating_window_record.xml | 6 +-
app/src/main/res/values/attrs.xml | 6 +
app/src/main/res/values/strings.xml | 3 +
app/src/main/res/xml/preferences.xml | 24 +-
autojs/src/main/assets/modules/__general__.js | 2 +
.../stardust/autojs/ScriptEngineService.java | 2 +-
.../{runtime => annotation}/ScriptClass.java | 2 +-
.../ScriptInterface.java | 2 +-
.../ScriptVariable.java | 2 +-
.../accessibility}/AccessibilityBridge.java | 2 +-
.../accessibility}/SimpleActionAutomator.java | 9 +-
.../inputevent/InputDevices.java | 5 +-
.../inputevent/InputEventCodes.java | 2 +-
.../inputevent/InputEventObserver.java | 13 +-
.../core/inputevent/KeyEventDispatcher.java | 54 +++
.../core/inputevent/ShellKeyObserver.java | 88 +++++
.../inputevent/TouchObserver.java | 4 +-
.../{runtime => core}/internal/Functions.java | 2 +-
.../{runtime => core}/record/Recorder.java | 2 +-
.../AccessibilityActionConverter.java | 2 +-
.../AccessibilityActionRecorder.java | 4 +-
.../inputevent/EventFormatException.java | 2 +-
.../record/inputevent/InputEventRecorder.java | 8 +-
.../InputEventToAutoFileRecorder.java | 7 +-
.../InputEventToRootAutomatorRecorder.java | 4 +-
.../InputEventToSendEventJsRecorder.java | 4 +-
.../record/inputevent/TouchRecorder.java | 5 +-
.../autojs/engine/RhinoJavaScriptEngine.java | 2 +-
.../autojs/engine/RootAutomatorEngine.java | 5 +-
.../stardust/autojs/engine/ScriptEngine.java | 2 +-
.../execution/RunnableScriptExecution.java | 2 +-
.../autojs/rhino/AndroidContextFactory.java | 2 +-
.../runtime/{api => }/ScriptBridges.java | 2 +-
.../autojs/runtime/ScriptRuntime.java | 8 +-
.../AutomatorConfig.java | 2 +-
.../autojs/runtime/api/AbstractConsole.java | 2 +-
.../stardust/autojs/runtime/api/AppUtils.java | 2 +-
.../stardust/autojs/runtime/api/Console.java | 2 +-
.../autojs/runtime/api/EventEmitter.java | 3 +-
.../stardust/autojs/runtime/api/Events.java | 9 +-
.../runtime/api/InjectableWebClient.java | 2 +-
.../autojs/runtime/api/InjectableWebView.java | 4 +-
.../stardust/autojs/runtime/api/Loopers.java | 5 +-
.../autojs/runtime/api/RootAutomator.java | 3 +-
.../stardust/autojs/runtime/api/Shell.java | 2 +-
.../stardust/autojs/runtime/api/Timers.java | 3 +-
.../autojs/runtime/api/UiSelector.java | 13 +-
.../autojs/runtime/api/image/ColorFinder.java | 3 +-
.../autojs/runtime/api/image/Images.java | 7 +-
.../runtime/api/image/ScreenCapturer.java | 3 +-
.../autojs/runtime/api/ui/Dialogs.java | 5 +-
.../runtime/console/StardustConsole.java | 4 +-
.../ScriptEnvironmentException.java | 4 +-
.../{ => exception}/ScriptException.java | 2 +-
.../ScriptInterruptedException.java | 2 +-
.../record/inputevent/KeyObserver.java | 356 ------------------
65 files changed, 382 insertions(+), 588 deletions(-)
create mode 100644 app/src/main/java/com/stardust/scriptdroid/autojs/record/GlobalRecorder.java
delete mode 100644 app/src/main/java/com/stardust/scriptdroid/service/MediaProjectionScreenCaptureService.java
create mode 100644 app/src/main/java/com/stardust/widget/PrefSwitch.java
rename autojs/src/main/java/com/stardust/autojs/{runtime => annotation}/ScriptClass.java (88%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => annotation}/ScriptInterface.java (88%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => annotation}/ScriptVariable.java (88%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core/accessibility}/AccessibilityBridge.java (96%)
rename autojs/src/main/java/com/stardust/autojs/{runtime/simpleaction => core/accessibility}/SimpleActionAutomator.java (96%)
rename autojs/src/main/java/com/stardust/autojs/{runtime/record => core}/inputevent/InputDevices.java (81%)
rename autojs/src/main/java/com/stardust/autojs/{runtime/record => core}/inputevent/InputEventCodes.java (99%)
rename autojs/src/main/java/com/stardust/autojs/{runtime/record => core}/inputevent/InputEventObserver.java (93%)
create mode 100644 autojs/src/main/java/com/stardust/autojs/core/inputevent/KeyEventDispatcher.java
create mode 100644 autojs/src/main/java/com/stardust/autojs/core/inputevent/ShellKeyObserver.java
rename autojs/src/main/java/com/stardust/autojs/{runtime/record => core}/inputevent/TouchObserver.java (93%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/internal/Functions.java (96%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/Recorder.java (98%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/accessibility/AccessibilityActionConverter.java (98%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/accessibility/AccessibilityActionRecorder.java (95%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/inputevent/EventFormatException.java (90%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/inputevent/InputEventRecorder.java (84%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/inputevent/InputEventToAutoFileRecorder.java (96%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/inputevent/InputEventToRootAutomatorRecorder.java (96%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/inputevent/InputEventToSendEventJsRecorder.java (96%)
rename autojs/src/main/java/com/stardust/autojs/{runtime => core}/record/inputevent/TouchRecorder.java (90%)
rename autojs/src/main/java/com/stardust/autojs/runtime/{api => }/ScriptBridges.java (93%)
rename autojs/src/main/java/com/stardust/autojs/runtime/{api => accessibility}/AutomatorConfig.java (89%)
rename autojs/src/main/java/com/stardust/autojs/runtime/{ => exception}/ScriptEnvironmentException.java (51%)
rename autojs/src/main/java/com/stardust/autojs/runtime/{ => exception}/ScriptException.java (89%)
rename autojs/src/main/java/com/stardust/autojs/runtime/{ => exception}/ScriptInterruptedException.java (86%)
delete mode 100644 autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/KeyObserver.java
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 274735b3..efe3417d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -6,8 +6,8 @@
-
-
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 58430eac..55db92e7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId "com.stardust.scriptdroid"
minSdkVersion 17
targetSdkVersion 23
- versionCode 158
- versionName "2.0.16 Alpha2"
+ versionCode 159
+ versionName "2.0.16 Beta"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
diff --git a/app/src/main/java/com/stardust/scriptdroid/Pref.java b/app/src/main/java/com/stardust/scriptdroid/Pref.java
index 03555b3f..3e7049c7 100644
--- a/app/src/main/java/com/stardust/scriptdroid/Pref.java
+++ b/app/src/main/java/com/stardust/scriptdroid/Pref.java
@@ -4,10 +4,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
-import com.stardust.autojs.runtime.api.AutomatorConfig;
-import com.stardust.scriptdroid.autojs.AutoJs;
-
-import org.mozilla.javascript.NativeArray;
+import com.stardust.autojs.runtime.accessibility.AutomatorConfig;
import java.util.concurrent.TimeUnit;
@@ -129,6 +126,8 @@ public class Pref {
}
def().edit().putLong(KEY_LAST_SHOW_AD_MILLIS, System.currentTimeMillis()).apply();
return true;
+ case "Off":
+ return false;
}
return true;
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
index be8758f9..be11468e 100644
--- a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
+++ b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java
@@ -12,18 +12,17 @@ import com.stardust.app.SimpleActivityLifecycleCallbacks;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.autojs.ScriptEngineServiceBuilder;
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine;
-import com.stardust.autojs.engine.RhinoJavaScriptEngine;
import com.stardust.autojs.engine.RootAutomatorEngine;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineManager;
-import com.stardust.autojs.runtime.AccessibilityBridge;
+import com.stardust.autojs.core.accessibility.AccessibilityBridge;
import com.stardust.autojs.runtime.ScriptRuntime;
-import com.stardust.autojs.runtime.ScriptException;
+import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
-import com.stardust.autojs.runtime.record.inputevent.InputEventObserver;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.script.AutoFileSource;
import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.scriptdroid.App;
@@ -36,7 +35,7 @@ import com.stardust.util.ScreenMetrics;
import com.stardust.util.Supplier;
import com.stardust.util.UiHandler;
import com.stardust.view.accessibility.AccessibilityInfoProvider;
-import com.stardust.autojs.runtime.record.accessibility.AccessibilityActionRecorder;
+import com.stardust.autojs.core.record.accessibility.AccessibilityActionRecorder;
import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.ui.console.JraskaConsole;
diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/record/GlobalRecorder.java b/app/src/main/java/com/stardust/scriptdroid/autojs/record/GlobalRecorder.java
new file mode 100644
index 00000000..d7c53501
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/autojs/record/GlobalRecorder.java
@@ -0,0 +1,28 @@
+package com.stardust.scriptdroid.autojs.record;
+
+import com.stardust.autojs.core.record.Recorder;
+
+/**
+ * Created by Stardust on 2017/8/6.
+ */
+
+public class GlobalRecorder extends Recorder.AbstractRecorder {
+
+ private Recorder mRecorder;
+
+ @Override
+ protected void startImpl() {
+
+ }
+
+ @Override
+ protected void stopImpl() {
+
+ }
+
+ @Override
+ public String getCode() {
+ return null;
+ }
+
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java
index 0c5bf16d..eec1ce51 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java
@@ -1,7 +1,5 @@
package com.stardust.scriptdroid.external.floatingwindow.menu.content;
-import android.content.ClipData;
-import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
@@ -16,11 +14,11 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.app.DialogUtils;
-import com.stardust.autojs.runtime.record.Recorder;
-import com.stardust.autojs.runtime.record.accessibility.AccessibilityActionRecorder;
-import com.stardust.autojs.runtime.record.inputevent.InputEventObserver;
-import com.stardust.autojs.runtime.record.inputevent.KeyObserver;
-import com.stardust.autojs.runtime.record.inputevent.TouchRecorder;
+import com.stardust.autojs.core.record.Recorder;
+import com.stardust.autojs.core.record.accessibility.AccessibilityActionRecorder;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
+import com.stardust.autojs.core.inputevent.ShellKeyObserver;
+import com.stardust.autojs.core.record.inputevent.TouchRecorder;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
@@ -28,7 +26,6 @@ import com.stardust.scriptdroid.accessibility.AccessibilityEventHelper;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService;
import com.stardust.scriptdroid.ui.common.ScriptOperations;
-import com.stardust.scriptdroid.ui.main.MainActivity;
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
import com.stardust.util.ClipboardUtil;
import com.stardust.util.MessageEvent;
@@ -43,14 +40,12 @@ import butterknife.OnClick;
import io.mattcarroll.hover.Navigator;
import io.mattcarroll.hover.NavigatorContent;
-import static android.content.Context.CLIPBOARD_SERVICE;
-
/**
* Created by Stardust on 2017/3/12.
*/
-public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStateChangedListener, KeyObserver.KeyListener {
+public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStateChangedListener, ShellKeyObserver.KeyListener {
private View mView;
@BindView(R.id.sw_recorded_by_root)
@@ -76,7 +71,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
private TouchRecorder mTouchRecorder;
private Context mContext;
private boolean mDiscard = false;
- private KeyObserver mKeyObserver;
+ private ShellKeyObserver mKeyObserver;
private InputEventObserver mInputEventObserver = InputEventObserver.getGlobal();
private OnKeyListener mVolumeKeyListener = new OnKeyListener() {
@Override
@@ -101,7 +96,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
AccessibilityService.getStickOnKeyObserver().addListener(mVolumeKeyListener);
mTouchRecorder = TouchRecorder.getGlobal(context);
if (Pref.hasRecordTrigger()) {
- mKeyObserver = new KeyObserver();
+ mKeyObserver = new ShellKeyObserver();
mInputEventObserver.addListener(mKeyObserver);
mKeyObserver.setKeyListener(this);
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
index 66208ed5..a8d34664 100644
--- a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
+++ b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
@@ -8,7 +8,7 @@ import com.stardust.autojs.execution.ExecutionConfig;
import com.stardust.autojs.execution.ScriptExecution;
import com.stardust.autojs.execution.ScriptExecutionListener;
import com.stardust.autojs.execution.SimpleScriptExecutionListener;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.ScriptSource;
import com.stardust.autojs.script.StringScriptSource;
import com.stardust.scriptdroid.App;
diff --git a/app/src/main/java/com/stardust/scriptdroid/service/MediaProjectionScreenCaptureService.java b/app/src/main/java/com/stardust/scriptdroid/service/MediaProjectionScreenCaptureService.java
deleted file mode 100644
index 97963d24..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/service/MediaProjectionScreenCaptureService.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.stardust.scriptdroid.service;
-
-
-import android.app.Activity;
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.PixelFormat;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.VirtualDisplay;
-import android.media.ImageReader;
-import android.media.projection.MediaProjection;
-import android.media.projection.MediaProjectionManager;
-import android.os.Build;
-import android.os.IBinder;
-import android.support.annotation.RequiresApi;
-import android.util.DisplayMetrics;
-import android.view.WindowManager;
-
-/**
- * Created by Stardust on 2017/1/19.
- */
-@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
-public class MediaProjectionScreenCaptureService extends Service {
- private ImageReader mImageReader;
- private int mScreenWidth;
- private int mScreenHeight;
- private int mScreenDensity;
- private MediaProjection mMediaProjection;
- private VirtualDisplay mVirtualDisplay;
- public static Intent mResultData;
-
-
- @Override
- public void onCreate() {
- if (mResultData == null) {
-
- }
- WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
- DisplayMetrics metrics = new DisplayMetrics();
- windowManager.getDefaultDisplay().getMetrics(metrics);
- mScreenDensity = metrics.densityDpi;
- mScreenWidth = metrics.widthPixels;
- mScreenHeight = metrics.heightPixels;
-
- createImageReader();
- startVirtualDisplay();
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
-
- private void createImageReader() {
- mImageReader = ImageReader.newInstance(mScreenWidth, mScreenHeight, PixelFormat.RGBA_8888, 1);
- }
-
- public void startVirtualDisplay() {
- mMediaProjection = getMediaProjectionManager().getMediaProjection(Activity.RESULT_OK, mResultData);
- mVirtualDisplay = mMediaProjection.createVirtualDisplay("screen-mirror",
- mScreenWidth, mScreenHeight, mScreenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
- mImageReader.getSurface(), null, null);
- }
-
- private MediaProjectionManager getMediaProjectionManager() {
- return (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
- }
-
- @Override
- public void onDestroy() {
- if (mVirtualDisplay != null) {
- mVirtualDisplay.release();
- mVirtualDisplay = null;
- }
- if (mMediaProjection != null) {
- mMediaProjection.stop();
- mMediaProjection = null;
- }
- super.onDestroy();
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/widget/PrefSwitch.java b/app/src/main/java/com/stardust/widget/PrefSwitch.java
new file mode 100644
index 00000000..6ba106aa
--- /dev/null
+++ b/app/src/main/java/com/stardust/widget/PrefSwitch.java
@@ -0,0 +1,85 @@
+package com.stardust.widget;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.TypedArray;
+import android.graphics.Paint;
+import android.preference.PreferenceManager;
+import android.support.v7.widget.SwitchCompat;
+import android.util.AttributeSet;
+import android.widget.CompoundButton;
+
+import com.stardust.scriptdroid.R;
+
+import java.util.Objects;
+
+/**
+ * Created by Stardust on 2017/8/6.
+ */
+
+public class PrefSwitch extends SwitchCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
+
+ private String mPrefKey;
+ private SharedPreferences mSharedPreferences;
+
+ public PrefSwitch(Context context) {
+ super(context);
+ init(null);
+ }
+
+ public PrefSwitch(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(attrs);
+ }
+
+ public PrefSwitch(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(attrs);
+ }
+
+ private void init(AttributeSet attrs) {
+ mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
+ if (attrs != null) {
+ TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.PrefSwitch);
+ mPrefKey = a.getString(R.styleable.PrefSwitch_key);
+ boolean defaultValue = a.getBoolean(R.styleable.PrefSwitch_defaultValue, false);
+ if (mPrefKey != null)
+ setChecked(mSharedPreferences.getBoolean(mPrefKey, defaultValue), false);
+ else
+ setChecked(defaultValue, false);
+ a.recycle();
+ }
+ mSharedPreferences.registerOnSharedPreferenceChangeListener(this);
+ }
+
+
+ private void notifyPrefChanged(boolean isChecked) {
+ if (mPrefKey == null)
+ return;
+ mSharedPreferences.edit()
+ .putBoolean(mPrefKey, isChecked)
+ .apply();
+ }
+
+
+ @Override
+ public void setChecked(boolean checked) {
+ setChecked(checked, true);
+
+ }
+
+ public void setChecked(boolean checked, boolean notifyChange) {
+ super.setChecked(checked);
+ if (notifyChange) {
+ notifyPrefChanged(checked);
+ }
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ if (mPrefKey != null && mPrefKey.equals(key)) {
+ setChecked(mSharedPreferences.getBoolean(mPrefKey, isChecked()), false);
+ }
+ }
+}
+
diff --git a/app/src/main/res/layout/floating_window_record.xml b/app/src/main/res/layout/floating_window_record.xml
index 08243531..5f4156b1 100644
--- a/app/src/main/res/layout/floating_window_record.xml
+++ b/app/src/main/res/layout/floating_window_record.xml
@@ -34,13 +34,15 @@
android:gravity="center_vertical"
android:padding="16dp">
-
+ android:textOn="@string/text_on"
+ app:defaultValue="false"
+ app:key="@string/key_record_with_root"/>
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index aeccaf2e..576cc1f7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -216,6 +216,7 @@
编辑脚本
运行脚本
导入脚本文件
+ key_record_with_root
@@ -235,11 +236,13 @@
- 默认
- 每天显示一次
+ - 关闭广告(╥﹏╥)
- Default
- OncePerDay
+ - Off
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index a6f91ed3..0586684a 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -1,32 +1,18 @@
-
+
-
-
-
-
-
-
+
diff --git a/autojs/src/main/assets/modules/__general__.js b/autojs/src/main/assets/modules/__general__.js
index 7739b136..94768a3f 100644
--- a/autojs/src/main/assets/modules/__general__.js
+++ b/autojs/src/main/assets/modules/__general__.js
@@ -15,6 +15,8 @@ module.exports = function(__runtime__, scope){
return __runtime__.isStopped();
}
+ scope.isShuttingDown = scope.isShopped;
+
scope.notStopped = function(){
return !isStopped();
}
diff --git a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java
index 08d735aa..756bfc7a 100644
--- a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java
+++ b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java
@@ -31,7 +31,7 @@ import java.io.PrintWriter;
import java.util.LinkedHashSet;
import java.util.Set;
-import static com.stardust.autojs.runtime.ScriptInterruptedException.causedByInterrupted;
+import static com.stardust.autojs.runtime.exception.ScriptInterruptedException.causedByInterrupted;
/**
* Created by Stardust on 2017/1/23.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptClass.java b/autojs/src/main/java/com/stardust/autojs/annotation/ScriptClass.java
similarity index 88%
rename from autojs/src/main/java/com/stardust/autojs/runtime/ScriptClass.java
rename to autojs/src/main/java/com/stardust/autojs/annotation/ScriptClass.java
index 3331f5d8..aaab5ba3 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptClass.java
+++ b/autojs/src/main/java/com/stardust/autojs/annotation/ScriptClass.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptInterface.java b/autojs/src/main/java/com/stardust/autojs/annotation/ScriptInterface.java
similarity index 88%
rename from autojs/src/main/java/com/stardust/autojs/runtime/ScriptInterface.java
rename to autojs/src/main/java/com/stardust/autojs/annotation/ScriptInterface.java
index 334ee2a3..80da3e29 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptInterface.java
+++ b/autojs/src/main/java/com/stardust/autojs/annotation/ScriptInterface.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptVariable.java b/autojs/src/main/java/com/stardust/autojs/annotation/ScriptVariable.java
similarity index 88%
rename from autojs/src/main/java/com/stardust/autojs/runtime/ScriptVariable.java
rename to autojs/src/main/java/com/stardust/autojs/annotation/ScriptVariable.java
index ea48ef1f..977937cc 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptVariable.java
+++ b/autojs/src/main/java/com/stardust/autojs/annotation/ScriptVariable.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/AccessibilityBridge.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/AccessibilityBridge.java
rename to autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java
index 493602a8..8d100675 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/AccessibilityBridge.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.core.accessibility;
import android.content.Context;
import android.support.annotation.NonNull;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/simpleaction/SimpleActionAutomator.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/simpleaction/SimpleActionAutomator.java
rename to autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java
index 861068b8..c9c4eaca 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/simpleaction/SimpleActionAutomator.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java
@@ -1,20 +1,17 @@
-package com.stardust.autojs.runtime.simpleaction;
+package com.stardust.autojs.core.accessibility;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.GestureDescription;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
-import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo;
-import com.stardust.autojs.runtime.AccessibilityBridge;
-import com.stardust.autojs.runtime.ScriptInterface;
+import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.autojs.runtime.ScriptRuntime;
-import com.stardust.autojs.runtime.api.AutomatorConfig;
-import com.stardust.autojs.runtime.api.Loopers;
+import com.stardust.autojs.runtime.accessibility.AutomatorConfig;
import com.stardust.automator.GlobalActionAutomator;
import com.stardust.automator.UiObject;
import com.stardust.automator.simple_action.ActionFactory;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputDevices.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputDevices.java
similarity index 81%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputDevices.java
rename to autojs/src/main/java/com/stardust/autojs/core/inputevent/InputDevices.java
index 304dc5a8..be9572e0 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputDevices.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputDevices.java
@@ -1,9 +1,6 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.inputevent;
-import android.content.Context;
-import android.hardware.input.InputManager;
import android.support.annotation.Nullable;
-import android.util.Log;
import android.view.InputDevice;
/**
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventCodes.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventCodes.java
similarity index 99%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventCodes.java
rename to autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventCodes.java
index 49230044..567682cc 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventCodes.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventCodes.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.inputevent;
/**
* Created by Stardust on 2017/8/5.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventObserver.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java
similarity index 93%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventObserver.java
rename to autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java
index daca2e32..99d74dbe 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventObserver.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/InputEventObserver.java
@@ -1,9 +1,10 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.inputevent;
import android.content.Context;
import android.support.annotation.NonNull;
import android.text.TextUtils;
+import com.stardust.autojs.core.record.inputevent.EventFormatException;
import com.stardust.autojs.runtime.api.Shell;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -34,11 +35,11 @@ public class InputEventObserver {
}
- double time;
- String device;
- String type;
- String code;
- String value;
+ public double time;
+ public String device;
+ public String type;
+ public String code;
+ public String value;
public InputEvent(double time, String device, String type, String code, String value) {
this.time = time;
diff --git a/autojs/src/main/java/com/stardust/autojs/core/inputevent/KeyEventDispatcher.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/KeyEventDispatcher.java
new file mode 100644
index 00000000..02f20504
--- /dev/null
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/KeyEventDispatcher.java
@@ -0,0 +1,54 @@
+package com.stardust.autojs.core.inputevent;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Created by Stardust on 2017/8/6.
+ */
+
+public class KeyEventDispatcher {
+
+ public interface OnKeyListener {
+ void onVolumeUp();
+
+ void onVolumeDown();
+
+ void onCamera();
+ }
+
+ private static KeyEventDispatcher sSingleton = new KeyEventDispatcher();
+
+ private CopyOnWriteArrayList mOnKeyListeners = new CopyOnWriteArrayList<>();
+
+ public static KeyEventDispatcher getSingleton() {
+ return sSingleton;
+ }
+
+ public void addOnKeyListener(OnKeyListener listener) {
+ mOnKeyListeners.add(listener);
+ }
+
+ public boolean removeOnKeyListener(OnKeyListener listener) {
+ return mOnKeyListeners.remove(listener);
+ }
+
+ public void notifyVolumeUp() {
+ for (OnKeyListener listener : mOnKeyListeners) {
+ listener.onVolumeUp();
+ }
+ }
+
+ public void notifyVolumeDown() {
+ for (OnKeyListener listener : mOnKeyListeners) {
+ listener.onVolumeDown();
+ }
+ }
+
+ public void notifyCarema() {
+ for (OnKeyListener listener : mOnKeyListeners) {
+ listener.onCamera();
+ }
+ }
+
+
+}
diff --git a/autojs/src/main/java/com/stardust/autojs/core/inputevent/ShellKeyObserver.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/ShellKeyObserver.java
new file mode 100644
index 00000000..abd34349
--- /dev/null
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/ShellKeyObserver.java
@@ -0,0 +1,88 @@
+package com.stardust.autojs.core.inputevent;
+
+import android.support.annotation.NonNull;
+import android.util.SparseArray;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by Stardust on 2017/5/4.
+ */
+
+public class ShellKeyObserver implements InputEventObserver.InputEventListener {
+
+ public interface KeyListener {
+
+ void onKeyDown(String keyName);
+
+ void onKeyUp(String keyName);
+
+ }
+
+ private static final Map keyNameToCode = new HashMap<>();
+ private static final SparseArray keyCodeToName = new SparseArray<>();
+
+ private KeyListener mKeyListener;
+
+ public ShellKeyObserver() {
+
+ }
+
+ public void setKeyListener(KeyListener keyListener) {
+ mKeyListener = keyListener;
+ }
+
+ @Override
+ public void onInputEvent(@NonNull InputEventObserver.InputEvent event) {
+ if (!event.type.equals("0001")) {
+ return;
+ }
+ if (event.value.equalsIgnoreCase("00000000")) {
+ notifyKeyUp(keyCodeToKeyName(Integer.parseInt(event.code, 16)));
+ }
+ if (event.value.equalsIgnoreCase("00000001")) {
+ notifyKeyDown(keyCodeToKeyName(Integer.parseInt(event.code, 16)));
+ }
+ }
+
+ public static String keyCodeToKeyName(int code) {
+ return keyCodeToName.get(code);
+ }
+
+
+ public static int keyNameToCode(String name) {
+ Integer code = keyNameToCode.get(name);
+ if (code == null)
+ return -1;
+ return code;
+ }
+
+ private void notifyKeyDown(String keyName) {
+ if (mKeyListener != null) {
+ mKeyListener.onKeyDown(keyName);
+ }
+ }
+
+ private void notifyKeyUp(String keyName) {
+ if (mKeyListener != null) {
+ mKeyListener.onKeyUp(keyName);
+ }
+ }
+
+ static {
+ try {
+ for (Field field : InputEventCodes.class.getFields()) {
+ if (field.getName().startsWith("KEY_")) {
+ int keyCode = (int) field.get(null);
+ keyCodeToName.put(keyCode, field.getName());
+ keyNameToCode.put(field.getName(), keyCode);
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/TouchObserver.java b/autojs/src/main/java/com/stardust/autojs/core/inputevent/TouchObserver.java
similarity index 93%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/TouchObserver.java
rename to autojs/src/main/java/com/stardust/autojs/core/inputevent/TouchObserver.java
index a61edc06..6df0949c 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/TouchObserver.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/inputevent/TouchObserver.java
@@ -1,8 +1,8 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.inputevent;
import android.support.annotation.NonNull;
-import static com.stardust.autojs.runtime.record.inputevent.InputEventRecorder.parseDeviceNumber;
+import static com.stardust.autojs.core.record.inputevent.InputEventRecorder.parseDeviceNumber;
/**
* Created by Stardust on 2017/7/20.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/internal/Functions.java b/autojs/src/main/java/com/stardust/autojs/core/internal/Functions.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/internal/Functions.java
rename to autojs/src/main/java/com/stardust/autojs/core/internal/Functions.java
index c677cb06..f26b0f6c 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/internal/Functions.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/internal/Functions.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.internal;
+package com.stardust.autojs.core.internal;
/**
* Created by Stardust on 2017/7/19.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/Recorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/Recorder.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/Recorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/Recorder.java
index 12780d7c..4f7af50b 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/Recorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/Recorder.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.record;
+package com.stardust.autojs.core.record;
import java.util.Arrays;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/accessibility/AccessibilityActionConverter.java b/autojs/src/main/java/com/stardust/autojs/core/record/accessibility/AccessibilityActionConverter.java
similarity index 98%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/accessibility/AccessibilityActionConverter.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/accessibility/AccessibilityActionConverter.java
index 23aef3d0..258e88bb 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/accessibility/AccessibilityActionConverter.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/accessibility/AccessibilityActionConverter.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.record.accessibility;
+package com.stardust.autojs.core.record.accessibility;
import android.accessibilityservice.AccessibilityService;
import android.os.Build;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/accessibility/AccessibilityActionRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/accessibility/AccessibilityActionRecorder.java
similarity index 95%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/accessibility/AccessibilityActionRecorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/accessibility/AccessibilityActionRecorder.java
index 5d2c6b1a..b5eba3a5 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/accessibility/AccessibilityActionRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/accessibility/AccessibilityActionRecorder.java
@@ -1,9 +1,9 @@
-package com.stardust.autojs.runtime.record.accessibility;
+package com.stardust.autojs.core.record.accessibility;
import android.accessibilityservice.AccessibilityService;
import android.view.accessibility.AccessibilityEvent;
-import com.stardust.autojs.runtime.record.Recorder;
+import com.stardust.autojs.core.record.Recorder;
import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.Arrays;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/EventFormatException.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/EventFormatException.java
similarity index 90%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/EventFormatException.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/inputevent/EventFormatException.java
index f12aa1d3..e3998940 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/EventFormatException.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/EventFormatException.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.record.inputevent;
/**
* Created by Stardust on 2017/3/7.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventRecorder.java
similarity index 84%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventRecorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventRecorder.java
index b4edb591..cbcb9887 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventRecorder.java
@@ -1,9 +1,9 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.record.inputevent;
import android.support.annotation.NonNull;
-import android.util.Log;
-import com.stardust.autojs.runtime.record.Recorder;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
+import com.stardust.autojs.core.record.Recorder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -38,7 +38,7 @@ public abstract class InputEventRecorder extends Recorder.AbstractRecorder imple
public abstract String getCode();
- static int parseDeviceNumber(String device) {
+ protected static int parseDeviceNumber(String device) {
Matcher matcher = LAST_INT_PATTERN.matcher(device);
if (matcher.find()) {
String someNumberStr = matcher.group(1);
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToAutoFileRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToAutoFileRecorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
index 778dcb57..f72efa42 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToAutoFileRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
@@ -1,12 +1,11 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.record.inputevent;
import android.content.Context;
-import android.hardware.input.InputManager;
import android.support.annotation.NonNull;
import android.util.Log;
-import android.view.InputDevice;
-import android.view.MotionEvent;
+import com.stardust.autojs.core.inputevent.InputEventCodes;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
import com.stardust.autojs.engine.RootAutomatorEngine;
import com.stardust.autojs.runtime.api.RootAutomator;
import com.stardust.pio.UncheckedIOException;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToRootAutomatorRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToRootAutomatorRecorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java
index 8b5e7ade..dca187cb 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToRootAutomatorRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToRootAutomatorRecorder.java
@@ -1,7 +1,9 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.record.inputevent;
import android.support.annotation.NonNull;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
+
import static com.stardust.util.ScreenMetrics.getDeviceScreenHeight;
import static com.stardust.util.ScreenMetrics.getDeviceScreenWidth;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToSendEventJsRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToSendEventJsRecorder.java
similarity index 96%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToSendEventJsRecorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToSendEventJsRecorder.java
index ab4fbd0f..50e0bfb0 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/InputEventToSendEventJsRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToSendEventJsRecorder.java
@@ -1,7 +1,9 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.record.inputevent;
import android.support.annotation.NonNull;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
+
import static com.stardust.util.ScreenMetrics.getDeviceScreenHeight;
import static com.stardust.util.ScreenMetrics.getDeviceScreenWidth;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/TouchRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/TouchRecorder.java
similarity index 90%
rename from autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/TouchRecorder.java
rename to autojs/src/main/java/com/stardust/autojs/core/record/inputevent/TouchRecorder.java
index 54222418..15735336 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/TouchRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/TouchRecorder.java
@@ -1,8 +1,9 @@
-package com.stardust.autojs.runtime.record.inputevent;
+package com.stardust.autojs.core.record.inputevent;
import android.content.Context;
-import com.stardust.autojs.runtime.record.Recorder;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
+import com.stardust.autojs.core.record.Recorder;
/**
* Created by Stardust on 2017/3/16.
diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java
index c3fdfa5a..4218c059 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java
@@ -5,7 +5,7 @@ import android.util.Log;
import com.stardust.autojs.BuildConfig;
import com.stardust.autojs.rhino.AndroidContextFactory;
import com.stardust.autojs.rhino.RhinoAndroidHelper;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.autojs.script.StringScriptSource;
import com.stardust.pio.PFile;
diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java
index 7bec597f..1c0b8e2b 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java
@@ -6,11 +6,8 @@ import android.util.Log;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.ProcessShell;
-import com.stardust.autojs.runtime.api.Shell;
-import com.stardust.autojs.runtime.record.inputevent.InputDevices;
+import com.stardust.autojs.core.inputevent.InputDevices;
import com.stardust.autojs.script.AutoFileSource;
-import com.stardust.autojs.script.JavaScriptFileSource;
-import com.stardust.autojs.script.ScriptSource;
import com.stardust.pio.PFile;
import java.io.File;
diff --git a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java
index 51beaeaa..41e486c2 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java
@@ -2,7 +2,7 @@ package com.stardust.autojs.engine;
import android.support.annotation.CallSuper;
-import com.stardust.autojs.runtime.ScriptException;
+import com.stardust.autojs.runtime.exception.ScriptException;
import com.stardust.autojs.script.ScriptSource;
import java.util.Map;
diff --git a/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java b/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java
index 379685d2..4f460148 100644
--- a/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java
+++ b/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java
@@ -4,7 +4,7 @@ import android.util.Log;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineManager;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.ScriptSource;
/**
diff --git a/autojs/src/main/java/com/stardust/autojs/rhino/AndroidContextFactory.java b/autojs/src/main/java/com/stardust/autojs/rhino/AndroidContextFactory.java
index dbdda2f8..a8fb4518 100644
--- a/autojs/src/main/java/com/stardust/autojs/rhino/AndroidContextFactory.java
+++ b/autojs/src/main/java/com/stardust/autojs/rhino/AndroidContextFactory.java
@@ -1,7 +1,7 @@
package com.stardust.autojs.rhino;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.tools.shell.ShellContextFactory;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ScriptBridges.java b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java
similarity index 93%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/ScriptBridges.java
rename to autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java
index 131b9767..404497bb 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ScriptBridges.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.runtime;
/**
* Created by Stardust on 2017/7/21.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java
index cb87af01..4c4682fe 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java
@@ -6,6 +6,8 @@ import android.os.Looper;
import com.stardust.autojs.R;
import com.stardust.autojs.ScriptEngineService;
+import com.stardust.autojs.annotation.ScriptVariable;
+import com.stardust.autojs.core.accessibility.AccessibilityBridge;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.rhino.AndroidClassLoader;
import com.stardust.autojs.runtime.api.AbstractShell;
@@ -14,13 +16,15 @@ import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.runtime.api.Engines;
import com.stardust.autojs.runtime.api.Events;
import com.stardust.autojs.runtime.api.Loopers;
-import com.stardust.autojs.runtime.api.ScriptBridges;
import com.stardust.autojs.runtime.api.Timers;
import com.stardust.autojs.runtime.api.UiSelector;
import com.stardust.autojs.runtime.api.image.Images;
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
import com.stardust.autojs.runtime.api.ui.Dialogs;
-import com.stardust.autojs.runtime.simpleaction.SimpleActionAutomator;
+import com.stardust.autojs.runtime.exception.ScriptEnvironmentException;
+import com.stardust.autojs.runtime.exception.ScriptException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
+import com.stardust.autojs.core.accessibility.SimpleActionAutomator;
import com.stardust.concurrent.VolatileBox;
import com.stardust.autojs.runtime.api.ui.UI;
import com.stardust.pio.UncheckedIOException;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/AutomatorConfig.java b/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java
similarity index 89%
rename from autojs/src/main/java/com/stardust/autojs/runtime/api/AutomatorConfig.java
rename to autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java
index 9a1f2335..2ef43d2e 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/AutomatorConfig.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/accessibility/AutomatorConfig.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime.api;
+package com.stardust.autojs.runtime.accessibility;
/**
* Created by Stardust on 2017/4/29.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractConsole.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractConsole.java
index a02379f8..c63f887f 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractConsole.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractConsole.java
@@ -3,7 +3,7 @@ package com.stardust.autojs.runtime.api;
import android.support.annotation.Nullable;
import android.util.Log;
-import com.stardust.autojs.runtime.ScriptException;
+import com.stardust.autojs.runtime.exception.ScriptException;
/**
* Created by Stardust on 2017/5/1.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java
index 8c816549..9bc62483 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/AppUtils.java
@@ -11,7 +11,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.webkit.MimeTypeMap;
-import com.stardust.autojs.runtime.ScriptInterface;
+import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.util.IntentUtil;
import java.lang.ref.WeakReference;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java
index a2c69cb4..c8b22e87 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Console.java
@@ -2,7 +2,7 @@ package com.stardust.autojs.runtime.api;
import android.support.annotation.Nullable;
-import com.stardust.autojs.runtime.ScriptInterface;
+import com.stardust.autojs.annotation.ScriptInterface;
/**
* Created by Stardust on 2017/4/2.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java
index e10d8b4f..b9109416 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/EventEmitter.java
@@ -3,7 +3,8 @@ package com.stardust.autojs.runtime.api;
import android.support.annotation.NonNull;
-import com.stardust.autojs.runtime.ScriptException;
+import com.stardust.autojs.runtime.ScriptBridges;
+import com.stardust.autojs.runtime.exception.ScriptException;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java
index 780f3ec3..8db25df6 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java
@@ -7,10 +7,11 @@ import android.os.Handler;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
-import com.stardust.autojs.runtime.AccessibilityBridge;
-import com.stardust.autojs.runtime.ScriptException;
-import com.stardust.autojs.runtime.record.inputevent.InputEventObserver;
-import com.stardust.autojs.runtime.record.inputevent.TouchObserver;
+import com.stardust.autojs.core.accessibility.AccessibilityBridge;
+import com.stardust.autojs.runtime.ScriptBridges;
+import com.stardust.autojs.runtime.exception.ScriptException;
+import com.stardust.autojs.core.inputevent.InputEventObserver;
+import com.stardust.autojs.core.inputevent.TouchObserver;
import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.view.accessibility.NotificationListener;
import com.stardust.view.accessibility.OnKeyListener;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java
index cd98205e..726b4b02 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebClient.java
@@ -10,7 +10,7 @@ import android.webkit.WebView;
import android.webkit.WebViewClient;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java
index c9217617..e40b95b4 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/InjectableWebView.java
@@ -4,8 +4,8 @@ import android.content.Context;
import android.webkit.ValueCallback;
import android.webkit.WebView;
-import com.stardust.autojs.runtime.ScriptClass;
-import com.stardust.autojs.runtime.ScriptInterface;
+import com.stardust.autojs.annotation.ScriptClass;
+import com.stardust.autojs.annotation.ScriptInterface;
import org.mozilla.javascript.Scriptable;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java
index e64b0ec4..6a7775b0 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Loopers.java
@@ -1,14 +1,11 @@
package com.stardust.autojs.runtime.api;
-import android.graphics.Paint;
-import android.os.Handler;
import android.os.Looper;
import android.os.MessageQueue;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.lang.ThreadCompat;
-import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java
index d188127b..e5fb0611 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/RootAutomator.java
@@ -3,7 +3,6 @@ package com.stardust.autojs.runtime.api;
import android.content.Context;
import com.stardust.autojs.engine.RootAutomatorEngine;
-import com.stardust.autojs.runtime.record.inputevent.InputEventCodes;
import com.stardust.pio.UncheckedIOException;
import com.stardust.util.ScreenMetrics;
@@ -12,7 +11,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
-import static com.stardust.autojs.runtime.record.inputevent.InputEventCodes.*;
+import static com.stardust.autojs.core.inputevent.InputEventCodes.*;
/**
* Created by Stardust on 2017/7/16.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java
index 4a3407fa..e7a76632 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Shell.java
@@ -5,7 +5,7 @@ import android.os.Handler;
import android.preference.PreferenceManager;
import android.util.Log;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.lang.ThreadCompat;
import com.stardust.pio.UncheckedIOException;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java
index 1205d1ea..eee7f4a8 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java
@@ -1,10 +1,9 @@
package com.stardust.autojs.runtime.api;
import android.os.Handler;
-import android.os.Looper;
import android.util.SparseArray;
-import java.util.concurrent.ConcurrentHashMap;
+import com.stardust.autojs.runtime.ScriptBridges;
/**
* Created by Stardust on 2017/7/21.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
index 5982c350..cb72dcc9 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
@@ -1,15 +1,13 @@
package com.stardust.autojs.runtime.api;
-import android.content.Intent;
-import android.net.Uri;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo;
-import com.stardust.autojs.runtime.AccessibilityBridge;
-import com.stardust.autojs.runtime.ScriptInterface;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.core.accessibility.AccessibilityBridge;
+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;
import com.stardust.automator.UiObject;
@@ -17,9 +15,6 @@ import com.stardust.automator.UiObjectCollection;
import com.stardust.automator.filter.DfsFilter;
import com.stardust.util.DeveloperUtils;
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
-import com.stardust.view.accessibility.AccessibilityService;
-
-import org.mozilla.javascript.NativeArray;
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS;
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java
index 1d4f37ed..fb8dd117 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ColorFinder.java
@@ -5,9 +5,8 @@ import android.graphics.Rect;
import android.media.Image;
import android.os.Build;
import android.support.annotation.RequiresApi;
-import android.view.Display;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.concurrent.VolatileBox;
import com.stardust.util.ScreenMetrics;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java
index 0ebffab5..b82d8dc5 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java
@@ -5,9 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.Color;
import android.graphics.Matrix;
-import android.graphics.Point;
import android.media.Image;
import android.os.Build;
import android.os.Handler;
@@ -18,9 +16,8 @@ import android.view.Surface;
import android.view.WindowManager;
import com.stardust.autojs.runtime.ScriptRuntime;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
-import com.stardust.autojs.runtime.ScriptVariable;
-import com.stardust.autojs.runtime.api.Loopers;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
+import com.stardust.autojs.annotation.ScriptVariable;
import com.stardust.concurrent.VolatileBox;
import com.stardust.pio.UncheckedIOException;
import com.stardust.util.ScreenMetrics;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java
index f2e36287..8749d26f 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/ScreenCapturer.java
@@ -3,7 +3,6 @@ package com.stardust.autojs.runtime.api.image;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
@@ -18,7 +17,7 @@ import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.Log;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.util.ScreenMetrics;
/**
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java
index 01f5c6bc..2d567ec0 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java
@@ -2,15 +2,14 @@ package com.stardust.autojs.runtime.api.ui;
import android.app.Activity;
import android.content.Context;
-import android.content.ContextWrapper;
import android.text.TextUtils;
import android.view.ContextThemeWrapper;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme;
import com.stardust.autojs.R;
-import com.stardust.autojs.runtime.ScriptInterface;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.annotation.ScriptInterface;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.concurrent.VolatileBox;
import com.stardust.util.ArrayUtils;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java
index 29c35c5e..5f461476 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java
@@ -5,8 +5,8 @@ import android.content.Intent;
import android.support.annotation.NonNull;
import android.view.WindowManager;
-import com.stardust.autojs.runtime.ScriptInterface;
-import com.stardust.autojs.runtime.ScriptInterruptedException;
+import com.stardust.autojs.annotation.ScriptInterface;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.runtime.api.AbstractConsole;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.enhancedfloaty.FloatyService;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptEnvironmentException.java b/autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptEnvironmentException.java
similarity index 51%
rename from autojs/src/main/java/com/stardust/autojs/runtime/ScriptEnvironmentException.java
rename to autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptEnvironmentException.java
index 6d94e46c..defec15c 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptEnvironmentException.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptEnvironmentException.java
@@ -1,10 +1,10 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.runtime.exception;
/**
* Created by Stardust on 2017/7/1.
*/
-public class ScriptEnvironmentException extends RuntimeException {
+public class ScriptEnvironmentException extends ScriptException {
public ScriptEnvironmentException(String s) {
super(s);
}
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptException.java b/autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptException.java
similarity index 89%
rename from autojs/src/main/java/com/stardust/autojs/runtime/ScriptException.java
rename to autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptException.java
index f54732e4..4925df9c 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptException.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptException.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.runtime.exception;
/**
* Created by Stardust on 2017/1/29.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptInterruptedException.java b/autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptInterruptedException.java
similarity index 86%
rename from autojs/src/main/java/com/stardust/autojs/runtime/ScriptInterruptedException.java
rename to autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptInterruptedException.java
index b20b90b8..8be2013d 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptInterruptedException.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/exception/ScriptInterruptedException.java
@@ -1,4 +1,4 @@
-package com.stardust.autojs.runtime;
+package com.stardust.autojs.runtime.exception;
/**
* Created by Stardust on 2017/4/30.
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/KeyObserver.java b/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/KeyObserver.java
deleted file mode 100644
index 73f4d71e..00000000
--- a/autojs/src/main/java/com/stardust/autojs/runtime/record/inputevent/KeyObserver.java
+++ /dev/null
@@ -1,356 +0,0 @@
-package com.stardust.autojs.runtime.record.inputevent;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.util.SparseArray;
-import android.view.KeyEvent;
-
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by Stardust on 2017/5/4.
- */
-
-public class KeyObserver implements InputEventObserver.InputEventListener {
-
-
- public static final int KEY_RESERVED = 0;
- public static final int KEY_ESC = 1;
- public static final int KEY_1 = 2;
- public static final int KEY_2 = 3;
- public static final int KEY_3 = 4;
- public static final int KEY_4 = 5;
- public static final int KEY_5 = 6;
- public static final int KEY_6 = 7;
- public static final int KEY_7 = 8;
- public static final int KEY_8 = 9;
- public static final int KEY_9 = 10;
- public static final int KEY_0 = 11;
- public static final int KEY_MINUS = 12;
- public static final int KEY_EQUAL = 13;
- public static final int KEY_BACKSPACE = 14;
- public static final int KEY_TAB = 15;
- public static final int KEY_Q = 16;
- public static final int KEY_W = 17;
- public static final int KEY_E = 18;
- public static final int KEY_R = 19;
- public static final int KEY_T = 20;
- public static final int KEY_Y = 21;
- public static final int KEY_U = 22;
- public static final int KEY_I = 23;
- public static final int KEY_O = 24;
- public static final int KEY_P = 25;
- public static final int KEY_LEFTBRACE = 26;
- public static final int KEY_RIGHTBRACE = 27;
- public static final int KEY_ENTER = 28;
- public static final int KEY_LEFTCTRL = 29;
- public static final int KEY_A = 30;
- public static final int KEY_S = 31;
- public static final int KEY_D = 32;
- public static final int KEY_F = 33;
- public static final int KEY_G = 34;
- public static final int KEY_H = 35;
- public static final int KEY_J = 36;
- public static final int KEY_K = 37;
- public static final int KEY_L = 38;
- public static final int KEY_SEMICOLON = 39;
- public static final int KEY_APOSTROPHE = 40;
- public static final int KEY_GRAVE = 41;
- public static final int KEY_LEFTSHIFT = 42;
- public static final int KEY_BACKSLASH = 43;
- public static final int KEY_Z = 44;
- public static final int KEY_X = 45;
- public static final int KEY_C = 46;
- public static final int KEY_V = 47;
- public static final int KEY_B = 48;
- public static final int KEY_N = 49;
- public static final int KEY_M = 50;
- public static final int KEY_COMMA = 51;
- public static final int KEY_DOT = 52;
- public static final int KEY_SLASH = 53;
- public static final int KEY_RIGHTSHIFT = 54;
- public static final int KEY_KPASTERISK = 55;
- public static final int KEY_LEFTALT = 56;
- public static final int KEY_SPACE = 57;
- public static final int KEY_CAPSLOCK = 58;
- public static final int KEY_F1 = 59;
- public static final int KEY_F2 = 60;
- public static final int KEY_F3 = 61;
- public static final int KEY_F4 = 62;
- public static final int KEY_F5 = 63;
- public static final int KEY_F6 = 64;
- public static final int KEY_F7 = 65;
- public static final int KEY_F8 = 66;
- public static final int KEY_F9 = 67;
- public static final int KEY_F10 = 68;
- public static final int KEY_NUMLOCK = 69;
- public static final int KEY_SCROLLLOCK = 70;
- public static final int KEY_KP7 = 71;
- public static final int KEY_KP8 = 72;
- public static final int KEY_KP9 = 73;
- public static final int KEY_KPMINUS = 74;
- public static final int KEY_KP4 = 75;
- public static final int KEY_KP5 = 76;
- public static final int KEY_KP6 = 77;
- public static final int KEY_KPPLUS = 78;
- public static final int KEY_KP1 = 79;
- public static final int KEY_KP2 = 80;
- public static final int KEY_KP3 = 81;
- public static final int KEY_KP0 = 82;
- public static final int KEY_KPDOT = 83;
-
- public static final int KEY_ZENKAKUHANKAKU = 85;
- public static final int KEY_102ND = 86;
- public static final int KEY_F11 = 87;
- public static final int KEY_F12 = 88;
- public static final int KEY_RO = 89;
- public static final int KEY_KATAKANA = 90;
- public static final int KEY_HIRAGANA = 91;
- public static final int KEY_HENKAN = 92;
- public static final int KEY_KATAKANAHIRAGANA = 93;
- public static final int KEY_MUHENKAN = 94;
- public static final int KEY_KPJPCOMMA = 95;
- public static final int KEY_KPENTER = 96;
- public static final int KEY_RIGHTCTRL = 97;
- public static final int KEY_KPSLASH = 98;
- public static final int KEY_SYSRQ = 99;
- public static final int KEY_RIGHTALT = 100;
- public static final int KEY_LINEFEED = 101;
- public static final int KEY_HOME = 102;
- public static final int KEY_UP = 103;
- public static final int KEY_PAGEUP = 104;
- public static final int KEY_LEFT = 105;
- public static final int KEY_RIGHT = 106;
- public static final int KEY_END = 107;
- public static final int KEY_DOWN = 108;
- public static final int KEY_PAGEDOWN = 109;
- public static final int KEY_INSERT = 110;
- public static final int KEY_DELETE = 111;
- public static final int KEY_MACRO = 112;
- public static final int KEY_MUTE = 113;
- public static final int KEY_VOLUMEDOWN = 114;
- public static final int KEY_VOLUMEUP = 115;
- public static final int KEY_POWER = 116; /* SC System Power Down */
- public static final int KEY_KPEQUAL = 117;
- public static final int KEY_KPPLUSMINUS = 118;
- public static final int KEY_PAUSE = 119;
- public static final int KEY_SCALE = 120; /* AL Compiz Scale (Expose) */
-
- public static final int KEY_KPCOMMA = 121;
- public static final int KEY_HANGEUL = 122;
- public static final int KEY_HANGUEL = KEY_HANGEUL;
- public static final int KEY_HANJA = 123;
- public static final int KEY_YEN = 124;
- public static final int KEY_LEFTMETA = 125;
- public static final int KEY_RIGHTMETA = 126;
- public static final int KEY_COMPOSE = 127;
-
- public static final int KEY_STOP = 128; /* AC Stop */
- public static final int KEY_AGAIN = 129;
- public static final int KEY_PROPS = 130; /* AC Properties */
- public static final int KEY_UNDO = 131; /* AC Undo */
- public static final int KEY_FRONT = 132;
- public static final int KEY_COPY = 133; /* AC Copy */
- public static final int KEY_OPEN = 134; /* AC Open */
- public static final int KEY_PASTE = 135; /* AC Paste */
- public static final int KEY_FIND = 136; /* AC Search */
- public static final int KEY_CUT = 137; /* AC Cut */
- public static final int KEY_HELP = 138; /* AL Integrated Help Center */
- public static final int KEY_MENU = 139; /* Menu (show menu) */
- public static final int KEY_CALC = 140; /* AL Calculator */
- public static final int KEY_SETUP = 141;
- public static final int KEY_SLEEP = 142; /* SC System Sleep */
- public static final int KEY_WAKEUP = 143; /* System Wake Up */
- public static final int KEY_FILE = 144; /* AL Local Machine Browser */
- public static final int KEY_SENDFILE = 145;
- public static final int KEY_DELETEFILE = 146;
- public static final int KEY_XFER = 147;
- public static final int KEY_PROG1 = 148;
- public static final int KEY_PROG2 = 149;
- public static final int KEY_WWW = 150; /* AL Internet Browser */
- public static final int KEY_MSDOS = 151;
- public static final int KEY_COFFEE = 152; /* AL Terminal Lock/Screensaver */
- public static final int KEY_SCREENLOCK = KEY_COFFEE;
- public static final int KEY_ROTATE_DISPLAY = 153; /* Display orientation for e.g. tablets */
- public static final int KEY_DIRECTION = KEY_ROTATE_DISPLAY;
- public static final int KEY_CYCLEWINDOWS = 154;
- public static final int KEY_MAIL = 155;
- public static final int KEY_BOOKMARKS = 156; /* AC Bookmarks */
- public static final int KEY_COMPUTER = 157;
- public static final int KEY_BACK = 158; /* AC Back */
- public static final int KEY_FORWARD = 159; /* AC Forward */
- public static final int KEY_CLOSECD = 160;
- public static final int KEY_EJECTCD = 161;
- public static final int KEY_EJECTCLOSECD = 162;
- public static final int KEY_NEXTSONG = 163;
- public static final int KEY_PLAYPAUSE = 164;
- public static final int KEY_PREVIOUSSONG = 165;
- public static final int KEY_STOPCD = 166;
- public static final int KEY_RECORD = 167;
- public static final int KEY_REWIND = 168;
- public static final int KEY_PHONE = 169; /* Media Select Telephone */
- public static final int KEY_ISO = 170;
- public static final int KEY_CONFIG = 171; /* AL Consumer Control Configuration */
- public static final int KEY_HOMEPAGE = 172; /* AC Home */
- public static final int KEY_REFRESH = 173; /* AC Refresh */
- public static final int KEY_EXIT = 174; /* AC Exit */
- public static final int KEY_MOVE = 175;
- public static final int KEY_EDIT = 176;
- public static final int KEY_SCROLLUP = 177;
- public static final int KEY_SCROLLDOWN = 178;
- public static final int KEY_KPLEFTPAREN = 179;
- public static final int KEY_KPRIGHTPAREN = 180;
- public static final int KEY_NEW = 181; /* AC New */
- public static final int KEY_REDO = 182; /* AC Redo/Repeat */
-
- public static final int KEY_F13 = 183;
- public static final int KEY_F14 = 184;
- public static final int KEY_F15 = 185;
- public static final int KEY_F16 = 186;
- public static final int KEY_F17 = 187;
- public static final int KEY_F18 = 188;
- public static final int KEY_F19 = 189;
- public static final int KEY_F20 = 190;
- public static final int KEY_F21 = 191;
- public static final int KEY_F22 = 192;
- public static final int KEY_F23 = 193;
- public static final int KEY_F24 = 194;
-
- public static final int KEY_PLAYCD = 200;
- public static final int KEY_PAUSECD = 201;
- public static final int KEY_PROG3 = 202;
- public static final int KEY_PROG4 = 203;
- public static final int KEY_DASHBOARD = 204; /* AL Dashboard */
- public static final int KEY_SUSPEND = 205;
- public static final int KEY_CLOSE = 206; /* AC Close */
- public static final int KEY_PLAY = 207;
- public static final int KEY_FASTFORWARD = 208;
- public static final int KEY_BASSBOOST = 209;
- public static final int KEY_PRINT = 210; /* AC Print */
- public static final int KEY_HP = 211;
- public static final int KEY_CAMERA = 212;
- public static final int KEY_SOUND = 213;
- public static final int KEY_QUESTION = 214;
- public static final int KEY_EMAIL = 215;
- public static final int KEY_CHAT = 216;
- public static final int KEY_SEARCH = 217;
- public static final int KEY_CONNECT = 218;
- public static final int KEY_FINANCE = 219; /* AL Checkbook/Finance */
- public static final int KEY_SPORT = 220;
- public static final int KEY_SHOP = 221;
- public static final int KEY_ALTERASE = 222;
- public static final int KEY_CANCEL = 223; /* AC Cancel */
- public static final int KEY_BRIGHTNESSDOWN = 224;
- public static final int KEY_BRIGHTNESSUP = 225;
- public static final int KEY_MEDIA = 226;
-
- public static final int KEY_SWITCHVIDEOMODE = 227; /* Cycle between available video
- outputs (Monitor/LCD/TV-out/etc) */
- public static final int KEY_KBDILLUMTOGGLE = 228;
- public static final int KEY_KBDILLUMDOWN = 229;
- public static final int KEY_KBDILLUMUP = 230;
-
- public static final int KEY_SEND = 231; /* AC Send */
- public static final int KEY_REPLY = 232; /* AC Reply */
- public static final int KEY_FORWARDMAIL = 233; /* AC Forward Msg */
- public static final int KEY_SAVE = 234; /* AC Save */
- public static final int KEY_DOCUMENTS = 235;
-
- public static final int KEY_BATTERY = 236;
-
- public static final int KEY_BLUETOOTH = 237;
- public static final int KEY_WLAN = 238;
- public static final int KEY_UWB = 239;
-
- public static final int KEY_UNKNOWN = 240;
-
- public static final int KEY_VIDEO_NEXT = 241; /* drive next video source */
- public static final int KEY_VIDEO_PREV = 242; /* drive previous video source */
- public static final int KEY_BRIGHTNESS_CYCLE = 243; /* brightness up, after max is min */
- public static final int KEY_BRIGHTNESS_AUTO = 244; /* Set Auto Brightness: manual
- brightness control is off,
- rely on ambient */
- public static final int KEY_BRIGHTNESS_ZERO = KEY_BRIGHTNESS_AUTO;
- public static final int KEY_DISPLAY_OFF = 245; /* display device to off state */
-
- public static final int KEY_WWAN = 246; /* Wireless WAN (LTE, UMTS, GSM, etc.) */
- public static final int KEY_WIMAX = KEY_WWAN;
- public static final int KEY_RFKILL = 247; /* Key that controls all radios */
-
- public static final int KEY_MICMUTE = 248;
-
- public interface KeyListener {
-
- void onKeyDown(String keyName);
-
- void onKeyUp(String keyName);
-
- }
-
- private static final Map keyNameToCode = new HashMap<>();
- private static final SparseArray keyCodeToName = new SparseArray<>();
-
- private KeyListener mKeyListener;
-
- public KeyObserver() {
-
- }
-
- public void setKeyListener(KeyListener keyListener) {
- mKeyListener = keyListener;
- }
-
- @Override
- public void onInputEvent(@NonNull InputEventObserver.InputEvent event) {
- if (!event.type.equals("0001")) {
- return;
- }
- if (event.value.equalsIgnoreCase("00000000")) {
- notifyKeyUp(keyCodeToKeyName(Integer.parseInt(event.code, 16)));
- }
- if (event.value.equalsIgnoreCase("00000001")) {
- notifyKeyDown(keyCodeToKeyName(Integer.parseInt(event.code, 16)));
- }
- }
-
- public static String keyCodeToKeyName(int code) {
- return keyCodeToName.get(code);
- }
-
-
- public static int keyNameToCode(String name) {
- Integer code = keyNameToCode.get(name);
- if (code == null)
- return -1;
- return code;
- }
-
- private void notifyKeyDown(String keyName) {
- if (mKeyListener != null) {
- mKeyListener.onKeyDown(keyName);
- }
- }
-
- private void notifyKeyUp(String keyName) {
- if (mKeyListener != null) {
- mKeyListener.onKeyUp(keyName);
- }
- }
-
- static {
- try {
- for (Field field : KeyObserver.class.getFields()) {
- if (field.getName().startsWith("KEY_")) {
- int keyCode = (int) field.get(null);
- keyCodeToName.put(keyCode, field.getName());
- keyNameToCode.put(field.getName(), keyCode);
- }
- }
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
-
-}