diff --git a/app/build.gradle b/app/build.gradle
index 0b13f841..29cc33e8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,7 +7,7 @@ android {
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.stardust.scriptdroid"
- minSdkVersion 19
+ minSdkVersion 17
targetSdkVersion 23
versionCode 143
versionName "2.0.13 Beta2"
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 c1b19e14..7f2a2173 100644
--- a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
+++ b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
@@ -111,4 +111,12 @@ public class Scripts {
return AutoJs.getInstance().getScriptEngineService().execute(source, BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER,
new ExecutionConfig().requirePath(StorageScriptProvider.DEFAULT_DIRECTORY_PATH));
}
+
+ public static ScriptExecution runRepeatedly(ScriptFile scriptFile, int loopTimes, long delay, long interval) {
+ ScriptSource source = new FileScriptSource(scriptFile);
+ String directoryPath = scriptFile.getParent();
+ return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig()
+ .requirePath(directoryPath, StorageScriptProvider.DEFAULT_DIRECTORY_PATH)
+ .loop(delay, loopTimes, interval));
+ }
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptLoopDialog.java b/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptLoopDialog.java
new file mode 100644
index 00000000..68b18ed2
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptLoopDialog.java
@@ -0,0 +1,73 @@
+package com.stardust.scriptdroid.ui.common;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.design.widget.TextInputEditText;
+import android.view.View;
+import android.view.Window;
+
+import com.afollestad.materialdialogs.DialogAction;
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.script.ScriptFile;
+import com.stardust.scriptdroid.script.Scripts;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by Stardust on 2017/7/8.
+ */
+
+public class ScriptLoopDialog {
+
+ private ScriptFile mScriptFile;
+ private MaterialDialog mDialog;
+
+ @BindView(R.id.loop_times)
+ TextInputEditText mLoopTimes;
+
+ @BindView(R.id.loop_interval)
+ TextInputEditText mLoopInterval;
+
+ @BindView(R.id.loop_delay)
+ TextInputEditText mLoopDelay;
+
+
+ public ScriptLoopDialog(Context context, ScriptFile file) {
+ mScriptFile = file;
+ View view = View.inflate(context, R.layout.dialog_script_loop, null);
+ mDialog = new MaterialDialog.Builder(context)
+ .title(R.string.text_run_repeatedly)
+ .customView(view, false)
+ .positiveText(R.string.ok)
+ .onPositive(new MaterialDialog.SingleButtonCallback() {
+ @Override
+ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
+ startScriptRunningLoop();
+ }
+ })
+ .build();
+ ButterKnife.bind(this, view);
+ }
+
+ private void startScriptRunningLoop() {
+ int loopTimes = Integer.parseInt(mLoopTimes.getText().toString());
+ float loopInterval = Float.parseFloat(mLoopInterval.getText().toString());
+ float loopDelay = Float.parseFloat(mLoopDelay.getText().toString());
+ Scripts.runRepeatedly(mScriptFile, loopTimes, (long) (1000L * loopDelay), (long) (loopInterval * 1000L));
+ }
+
+ public ScriptLoopDialog windowType(int windowType) {
+ Window window = mDialog.getWindow();
+ if (window != null) {
+ window.setType(windowType);
+ }
+ return this;
+ }
+
+ public void show() {
+ mDialog.show();
+ }
+
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java
index f2e2eddf..aef226f0 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java
@@ -20,6 +20,7 @@ import com.stardust.pio.PFile;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.script.Scripts;
import com.stardust.scriptdroid.script.StorageScriptProvider;
+import com.stardust.scriptdroid.ui.common.ScriptLoopDialog;
import com.stardust.scriptdroid.ui.edit.EditActivity;
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
import com.stardust.util.UnderuseExecutors;
@@ -106,6 +107,7 @@ public class MyScriptListFragment extends Fragment {
private void initDialogs() {
mScriptFileOperationDialog = new OperationDialogBuilder(getContext())
+ .item(R.id.loop, R.drawable.ic_loop_white_24dp, R.string.text_run_repeatedly)
.item(R.id.rename, R.drawable.ic_ali_rename, R.string.text_rename)
.item(R.id.open_by_other_apps, R.drawable.ic_ali_open, R.string.text_open_by_other_apps)
.item(R.id.create_shortcut, R.drawable.ic_ali_shortcut, R.string.text_send_shortcut)
@@ -228,6 +230,14 @@ public class MyScriptListFragment extends Fragment {
});
}
+ @Optional
+ @OnClick(R.id.loop)
+ void runScriptRepeatedly() {
+ dismissDialogs();
+ new ScriptLoopDialog(getActivity(), mSelectedScriptFile)
+ .show();
+ }
+
@Optional
@OnClick(R.id.rename)
void renameScriptFile() {
diff --git a/app/src/main/res/drawable-hdpi/ic_loop_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_loop_white_24dp.png
new file mode 100644
index 00000000..f0072e11
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_loop_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_loop_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_loop_white_24dp.png
new file mode 100644
index 00000000..92cf0a71
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_loop_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_loop_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_loop_white_24dp.png
new file mode 100644
index 00000000..7a7a771e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_loop_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_loop_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_loop_white_24dp.png
new file mode 100644
index 00000000..be061bfe
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_loop_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_loop_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_loop_white_24dp.png
new file mode 100644
index 00000000..f8b12771
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_loop_white_24dp.png differ
diff --git a/app/src/main/res/layout/dialog_directory_operations.xml b/app/src/main/res/layout/dialog_directory_operations.xml
deleted file mode 100644
index 7b847e1d..00000000
--- a/app/src/main/res/layout/dialog_directory_operations.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_script_file_operations.xml b/app/src/main/res/layout/dialog_script_file_operations.xml
deleted file mode 100644
index 8dd7d651..00000000
--- a/app/src/main/res/layout/dialog_script_file_operations.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_script_loop.xml b/app/src/main/res/layout/dialog_script_loop.xml
new file mode 100644
index 00000000..adbae78e
--- /dev/null
+++ b/app/src/main/res/layout/dialog_script_loop.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
new file mode 100644
index 00000000..10c31a9c
--- /dev/null
+++ b/app/src/main/res/values/ids.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 75323503..fa28d62a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -198,6 +198,12 @@
广告显示设置
Default
保存成功,请刷新目录
+ 循环运行
+ 循环间隔(秒)
+ 延迟执行(秒)
+ 循环次数
+ 0为无限循环
+ 延迟多少秒后开始循环
- 无
diff --git a/autojs/build.gradle b/autojs/build.gradle
index f2595cc0..bb4297c4 100644
--- a/autojs/build.gradle
+++ b/autojs/build.gradle
@@ -5,7 +5,7 @@ android {
buildToolsVersion "25.0.2"
defaultConfig {
- minSdkVersion 19
+ minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
diff --git a/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java b/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java
index a6df56e8..0aa070d9 100644
--- a/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java
+++ b/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java
@@ -9,6 +9,9 @@ public class ExecutionConfig implements Serializable {
private String[] mRequirePath = new String[0];
private static final ExecutionConfig DEFAULT = new ExecutionConfig();
+ public long delay = 0;
+ public long interval = 0;
+ public int loopTimes = 1;
public static ExecutionConfig getDefault() {
return DEFAULT;
@@ -29,4 +32,11 @@ public class ExecutionConfig implements Serializable {
public String[] getRequirePath() {
return mRequirePath;
}
+
+ public ExecutionConfig loop(long delay, int loopTimes, long interval) {
+ this.delay = delay;
+ this.loopTimes = loopTimes;
+ this.interval = interval;
+ return this;
+ }
}
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 31fa90ea..20966488 100644
--- a/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java
+++ b/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java
@@ -5,6 +5,7 @@ import android.util.Log;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.autojs.engine.RhinoJavaScriptEngine;
import com.stardust.autojs.engine.ScriptEngine;
+import com.stardust.autojs.runtime.ScriptInterruptedException;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.script.ScriptSource;
@@ -61,11 +62,34 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
private Object doExecution(ScriptEngine engine) {
engine.setTag("script", getSource());
getListener().onStart(this);
- Object result = engine.execute(getSource());
+ Object result = null;
+ long delay = getConfig().delay;
+ int times = getConfig().loopTimes;
+ if (times == 0) {
+ times = Integer.MAX_VALUE;
+ }
+ long interval = getConfig().interval;
+ sleep(delay);
+ ScriptSource source = getSource();
+ for (int i = 0; i < times; i++) {
+ result = engine.execute(source);
+ sleep(interval);
+ }
getListener().onSuccess(this, result);
return result;
}
+ private void sleep(long i) {
+ if (i <= 0) {
+ return;
+ }
+ try {
+ Thread.sleep(i);
+ } catch (InterruptedException e) {
+ throw new ScriptInterruptedException();
+ }
+ }
+
@Override
public ScriptEngine getEngine() {
return mScriptEngine;
diff --git a/automator/build.gradle b/automator/build.gradle
index 0e0b1e03..d0ad0721 100644
--- a/automator/build.gradle
+++ b/automator/build.gradle
@@ -5,7 +5,7 @@ android {
buildToolsVersion "25.0.2"
defaultConfig {
- minSdkVersion 19
+ minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
@@ -31,7 +31,6 @@ dependencies {
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
- androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.3.1'
compile project(path: ':common')
diff --git a/common/build.gradle b/common/build.gradle
index f7922b39..a88e3f9a 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -5,7 +5,7 @@ android {
buildToolsVersion "25.0.2"
defaultConfig {
- minSdkVersion 19
+ minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
diff --git a/inrt/build.gradle b/inrt/build.gradle
index 3d8c69eb..8d2a6908 100644
--- a/inrt/build.gradle
+++ b/inrt/build.gradle
@@ -6,7 +6,7 @@ android {
defaultConfig {
applicationId "com.stardust.auojs.inrt"
- minSdkVersion 19
+ minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "0.0.1"