From 7c5a27a8d339c7a88849f77ea93f74c8a21bcb90 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 8 Jul 2017 22:30:27 +0800 Subject: [PATCH] add script running repleatedly support, change min sdk version to 17 --- app/build.gradle | 2 +- .../stardust/scriptdroid/script/Scripts.java | 8 ++ .../ui/common/ScriptLoopDialog.java | 73 ++++++++++++ .../script_list/MyScriptListFragment.java | 10 ++ .../res/drawable-hdpi/ic_loop_white_24dp.png | Bin 0 -> 387 bytes .../res/drawable-mdpi/ic_loop_white_24dp.png | Bin 0 -> 261 bytes .../res/drawable-xhdpi/ic_loop_white_24dp.png | Bin 0 -> 494 bytes .../drawable-xxhdpi/ic_loop_white_24dp.png | Bin 0 -> 734 bytes .../drawable-xxxhdpi/ic_loop_white_24dp.png | Bin 0 -> 933 bytes .../layout/dialog_directory_operations.xml | 60 ---------- .../layout/dialog_script_file_operations.xml | 112 ------------------ .../main/res/layout/dialog_script_loop.xml | 73 ++++++++++++ app/src/main/res/values/ids.xml | 8 ++ app/src/main/res/values/strings.xml | 6 + autojs/build.gradle | 2 +- .../autojs/execution/ExecutionConfig.java | 10 ++ .../execution/RunnableScriptExecution.java | 26 +++- automator/build.gradle | 3 +- common/build.gradle | 2 +- inrt/build.gradle | 2 +- 20 files changed, 218 insertions(+), 179 deletions(-) create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptLoopDialog.java create mode 100644 app/src/main/res/drawable-hdpi/ic_loop_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_loop_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_loop_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_loop_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_loop_white_24dp.png delete mode 100644 app/src/main/res/layout/dialog_directory_operations.xml delete mode 100644 app/src/main/res/layout/dialog_script_file_operations.xml create mode 100644 app/src/main/res/layout/dialog_script_loop.xml create mode 100644 app/src/main/res/values/ids.xml 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 0000000000000000000000000000000000000000..f0072e1163d95c102c9bf9782f43cefc22d07be6 GIT binary patch literal 387 zcmV-}0et?6P)NklL0^LQS)By{Krz;i97yD?Xegd8Kuz3ltLp@03{47&mP>Ww}Coo4enJ1Cz{l& z#rAi!=ftH3z;)@rcBThhM9?P(vvYK)122x}p&y!*ntUJW!QC8G8L*sW>8_oFL6wKT zfuG^{wcsWX{Q`>+x&mz;`U~n1It5R8XbpBlXdk@gp%vH*pT z0?<3(fKn=ck9-Btx^iltn0i0H@M2mam5Cj@Gf1n8p|mSET2I~zPBiU=DS$?%6dIXw hXk^Nvkr6}X{SWy|q5;?r4%7eu002ovPDHLkV1jzusXqV! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..92cf0a7118aec591e71d4d4fc60856a1cc3200a1 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iGoCJvAr*{kFBp0;JBl3t!o^GoB1;MMg|Vmc(o6y%7{>9}C~YJujzTRs+~V3r1RbUHBZT0mc|j;mb(TUZF70P2WDw%$(qs$)7aO!! z{($fI~^Zp(Nl?5^(NTvt+`UAv>D^ zoVHe+vtJHSHK%mrK!kuP)g}*li(L*m<{H*5IN1De+F`)#4pEi3Xgw}aFr}Lhyb3%O z?@=(y1)lK>4?K34sG2Gd_yo{OSYv(WsBsSPh##ouSmuVP8~SPB4eBfRvVjgW)F2If zM7_lVJ3*bLfzPPdA>asgl?J|{9*2NE)FKW1LER4l+o;<#P@}d&zys9pG_XYNhJYui zWg3{E4v8N!Owzy@bsPdl`M>E9bxkL5(dPLVZHEWig!(*m3V>W0uT9uf=l`hppD1|jEV&c<_zhu24aNKwgVB0 z87CaE$2P1xA9LD-8vjA2{={~aI7TY kSV_RKl7M4n0sF^*zbqi?c+z)hNB{r;07*qoM6N<$f`H-Bp#T5? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..be061bfe0339b41d0fc337dc4879168878dce520 GIT binary patch literal 734 zcmV<40wMj0P)xt#PM<)jC> zob({&qz5S{IY>F_LCQ%1^5?)ES5(+%lUaI=AUns&F-vsWL3WO&!3O<_K~CzdP)PjB zoSZTgA7mrdnEw0!_D?7>!W>(iR=P)8wt!wxZAeQq^xZn z>KR8@KG1s^QlW#)P$m5?v6v5ZEF(UX8EaRj9pwS_qZu=UCS_WSo^a5-4ERB2uK&1@ zi8JA#kJ7$L7NNFf;(9pfo3y`)0@B}nFC6q!+FwQijmpHca8OO!pGN_8%fxCps3q-> zqJW;t#M^Mtoo<6sKpnapg@dl7y%+`5DHDH%gDTQK5(V^1zii>4eQBSI0-BSFU&BG0 z(!Lc1^hsBcaL}x@pGN^1kB(k66K2k9_i(kWA3J8y7n$}w-#)a2em90qoX6;Wwww>t zMMH)h7?;=qF8_Rko*9;W@2fE0q!0OT9sSe=bklZk#FO+tMaxBT1x=Mw8;~FAt?lMo z;Pf78ybZ{QWWL)EQA2aXLR*lL4NN}3|~?cHy3O( z&nVrx4cbWlk4|xoZw#c6hX*;alk6a^0?X9xBs)l}k2M;pLGH1;$Pul?ugs|)W>{yB zGpgK1{-d^+2PY{=Iq5;lNe@y^dXRF`gOrmV{%210S~+ z7bvdwRSFWY5m^++>$>EiH$UsgFoFCe|JGFkM{mhgRb5%2C~)P$!D4>Kl_~xI*tZ3! z1aM8-y8YFy170iDF}BNrQaR*z1RP7py&59*PGev_u4oM-WRlSS2S|K zk8ZA&y>~IaS8uz;`H2@ki}kxKrP`3R>couXBohX&yZ4G_pFF|Pa6M*W$9ImK zb$E;o@e|w?f8t2N~T3V6qR4)UHv7zbFz+c!gjgKeH+g77EYZ$ zWxJPP^4xbD4w$9h?fmRm+*EpMm%#JMMfR(g98^30sOE~ejRNnyfG6xV%~o?mPjO5y zVpfx2cvW;m>%}Cq1SS0hIfj7gmme`!Ejjy~rROvM6%~)AGt;DROCS5pxQ}&(=Y+1! z9=CdH8sxUUpYZ1L!v3}H+WZM^ThY(8}BW>21B+R(>^g=+o-GLS1f;f zvrL2X65rj7eiO@fSU#}XW-qusb7SM%nBoJvIrd6@p9OB8ebx|~Gd-5^`Ucx9zKFx$ zc4|M+*|z*FV{Oj-9ZY>m)fZ(x@I@aNE#SBvR(xRpji_}EX4}4>WwgHWZ6^~~j`dIZ zh0W_4`Zwf0tM6PM!x;QC{*h@;dJJQH!tbq?3%YZ^)&Euet@&ST<0Gz!gWsJ0rM{c` z+UUFZHhtS`FDK_UocH*>!_uLmFZU+zhMu?OD(nyRwlOCA&7V@A9DRb>!uM9F_yL{F z`Og@){9wNAJ$-5(-|hUL@0^O4=vvI#cIoh+r!@_n_mXZuV+qP!;VE(9B)dS~(qOr*5T9^iu_~Sz}MVF5X+>erS5Y^A8_q+?6VrAG}59 zz;uNxifcYCG^;padah`S^Ol3t1HM-kw=a7sz>uc5;idlv7LMZ;Mm0{Cogb*O9aiP= zO`lYG?+Eh^$>(f)EBYtQ6*JcPsB_6X#;)D+xUbyDDdIUF@BN=2_+Hb0;t2* - - - - - - - - - - - - - - - - \ 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"