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"