From 4c27425755d87d13a4ca1bbf504ee5b92ffc1d4c Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 14 Jan 2019 09:19:11 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20gradle=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes .../ui/shortcut/ShortcutIconSelectActivity.java | 2 +- build.gradle | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index fb16afc16ce0b0524d455ba52b95cb3528a71c56..da3f107ad29058868d10530260fb0c7c901a6e19 100644 GIT binary patch delta 227 zcmV<90383_1>FUZmj!4^?tlT2oOcitH_vixx$8jnrg2}w3)0P#BLPehAV+=5_mx;s z)I*`Hp*v2xlYap?5Rh%wAbfN3pBE};5KO zWpZ?BWpj0L0Db@l0000Gz*m9*T8^o%-Pn(JPkk`7lTZR45bd-^nbFrX5tG`X)-qd> dWRrdZAP~1?)Rs|`MB16I(zi93dc2da0xu9^Vx#~7 delta 227 zcmcc1dY5&=bk?-SnWeWU&M6mI>vF7g?fDP8H%?o|c|`Y=-(+P*9|56A&&qp2r3pQ@ z|5e_!F?39>XS5Kwo3vB!RPf4Yw|hRR^$I8Ln0%a3Ic=`o$LM?F>)zieVocbf*;G}+ zz>`#(nUkWIUX+-UlUiEHP{+W=z`!7|eqB?=0q)n|%>K2`-T3Oj$`S^Foc!d(9KC{~ z{DRb?lFZa%gyPE%8z1$ZoTsX^_tE1ehJ}kK2QbMAIEflcmwe6W30B)(%r?hMa&jG$ bf Date: Mon, 14 Jan 2019 10:11:57 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=89=93=E5=8C=85?= =?UTF-8?q?=E5=90=8E=E5=BA=94=E7=94=A8=E5=90=8E=E5=8F=B0=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E8=BF=9B=E5=85=A5=E4=BC=9A=E9=87=8D=E6=96=B0=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes .../ui/shortcut/ShortcutIconSelectActivity.java | 10 ++++------ .../autojs/engine/RhinoJavaScriptEngine.kt | 2 +- inrt/src/main/assets/project/main.js | 2 +- .../com/stardust/auojs/inrt/SettingsActivity.kt | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index d97f75ee1b078d6b7e9fd2fc9a1152af0320e537..a5a098c3facf3aa8f42345726ddbffc350429d26 100644 GIT binary patch delta 245 zcmcc1dY5&=bk+>df5+7)&M6nLi1%N4JdxK)s#d&r15csYWMxJlfpvL#R~kR|d|lSW z-l-qG{@vtyMhk%nxz`kGia*U4*Gd-%65{$k`8cC;+Lgnzdt@2^Xo@d-qxq`iVO9wP zPf}@SPKsW7QDRC?YH1-u9RnK!1A{>GyZaNq|A|jpTl-z7?meSM34=gResW@tUO`cQ zL26M+W@<4)@qzFrhN!-k>+as@FZZuC*fKeQNlxGadom|i^vU#DH98&D(dUvU*D)yw tgavgRwNKjl@NU!JuKS;loSD3iNltLt8L92HzMWP=OD?w_pU8Wy0sz)gXVU-x delta 245 zcmVFUZmj!2#)_IMQoOcjuX86+?NA%Ngo$eYyhXn|eBLPehoY#xsozsqE zvmOER;f^yjlYap?5Zz+AF3MA>=G%<&CXEwfxRb{LBW7PsDC@EW-wXZ_JisgJHA{2= z3}SU@Y-BEHa$#g_Wp!}?egFml000n>r0HfPW`7O69hb<%_JSC601#|%V_|GAaB^>O zWpZ?BWpj0L0Db@l0000G(?GG}j>(=SBE90{q%m=$lTZR45Sgt$g>#Mh6qiNCaU(*v v43mBWAQ0U@qHHxj;(|7irpTsKu2Yk)0v-`$Tk@4SH4>cDy71Z8F=O+13oU8J diff --git a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java index cf7853e3..3df3e701 100644 --- a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java @@ -9,8 +9,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.net.Uri; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -18,18 +16,18 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import org.autojs.autojs.R; -import org.autojs.autojs.tool.BitmapTool; -import org.autojs.autojs.ui.BaseActivity; - import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; +import org.autojs.autojs.R; +import org.autojs.autojs.tool.BitmapTool; +import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.workground.WrapContentGridLayoutManger; import java.util.ArrayList; import java.util.List; +import androidx.recyclerview.widget.RecyclerView; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.kt b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.kt index d2d5f25c..d8bdde59 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.kt +++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.kt @@ -68,7 +68,7 @@ open class RhinoJavaScriptEngine(private val mAndroidContext: android.content.Co runtime.topLevelScope = mScriptable } - public override fun doExecution(source: JavaScriptSource): Any { + public override fun doExecution(source: JavaScriptSource): Any? { var reader = source.nonNullScriptReader try { reader = preprocess(reader) diff --git a/inrt/src/main/assets/project/main.js b/inrt/src/main/assets/project/main.js index bbb7dc69..b89ececf 100644 --- a/inrt/src/main/assets/project/main.js +++ b/inrt/src/main/assets/project/main.js @@ -1 +1 @@ -Y?Mz \ No newline at end of file +toast("Hello, Auto.js"); \ No newline at end of file diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt b/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt index b2fffe43..02efc172 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt @@ -24,7 +24,7 @@ class SettingsActivity : AppCompatActivity() { val toolbar = findViewById(R.id.toolbar) toolbar.setTitle(R.string.text_settings) setSupportActionBar(toolbar) - toolbar.setNavigationOnClickListener { v -> finish() } + toolbar.setNavigationOnClickListener { finish() } supportActionBar?.setDisplayHomeAsUpEnabled(true) } From 863af6badfb8eec743f1f14202d5d58a0be18f92 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 14 Jan 2019 23:39:47 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E7=94=BB=E5=B8=83ca?= =?UTF-8?q?nvas=E9=BB=98=E8=AE=A4=E7=99=BD=E8=89=B2=E6=94=B9=E6=88=90?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E9=80=8F=E6=98=8E=20=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?=E7=94=BB=E5=B8=83canvas=E4=BC=9A=E8=A6=86=E7=9B=96=E5=85=B6?= =?UTF-8?q?=E4=BB=96View=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes app/release/output.json | 2 +- .../core/graphics/ScriptCanvasView.java | 188 ------------------ .../autojs/core/graphics/ScriptCanvasView.kt | 178 +++++++++++++++++ .../src/main/java/com/stardust/ext/Common.kt | 13 ++ 5 files changed, 192 insertions(+), 189 deletions(-) delete mode 100644 autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.java create mode 100644 autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt create mode 100644 common/src/main/java/com/stardust/ext/Common.kt diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index a5a098c3facf3aa8f42345726ddbffc350429d26..82ae2df753cfd8cde70c64fec4b80d239d8ecdf0 100644 GIT binary patch delta 15 Xcmcc1dY5&=3>NQuD}HaBMFS$JIB^abyAjIK&3F diff --git a/app/release/output.json b/app/release/output.json index 2bcc50bc..605644dc 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":203},"path":"inrt-release.apk","properties":{"packageId":"com.stardust.auojs.inrt","split":"","minSdkVersion":"17"}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":253,"versionName":"4.1.0 Alpha3","enabled":true,"outputFile":"inrt-release.apk","fullName":"release","baseName":"release"},"path":"inrt-release.apk","properties":{}}] \ No newline at end of file diff --git a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.java b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.java deleted file mode 100644 index e442ab9d..00000000 --- a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.stardust.autojs.core.graphics; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.os.SystemClock; -import android.util.Log; -import android.view.SurfaceHolder; -import android.view.SurfaceView; - -import com.stardust.autojs.core.eventloop.EventEmitter; -import com.stardust.autojs.runtime.ScriptRuntime; -import com.stardust.autojs.runtime.exception.ScriptInterruptedException; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - * Created by Stardust on 2018/3/16. - */ - -@SuppressLint("ViewConstructor") -public class ScriptCanvasView extends SurfaceView implements SurfaceHolder.Callback { - - private static final String LOG_TAG = "ScriptCanvasView"; - private volatile boolean mDrawing = true; - private EventEmitter mEventEmitter; - private final SurfaceHolder mHolder; - private ExecutorService mDrawingThreadPool; - private ScriptRuntime mScriptRuntime; - private volatile long mTimePerDraw = 1000 / 30; - - public ScriptCanvasView(Context context, ScriptRuntime scriptRuntime) { - super(context); - mScriptRuntime = scriptRuntime; - mEventEmitter = new EventEmitter(mScriptRuntime.bridges); - mHolder = getHolder(); - init(); - } - - - public void setMaxFps(int maxFps) { - if (maxFps <= 0) { - mTimePerDraw = 0; - } else { - mTimePerDraw = 100 / maxFps; - } - } - - private void init() { - mHolder.addCallback(this); - setZOrderOnTop(false); - } - - @Override - public void surfaceCreated(SurfaceHolder holder) { - performDraw(); - Log.d(LOG_TAG, "surfaceCreated: " + this); - } - - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - - } - - private synchronized void performDraw() { - if (mDrawingThreadPool != null) - return; - mDrawingThreadPool = Executors.newCachedThreadPool(); - mDrawingThreadPool.execute(() -> { - Canvas canvas = null; - SurfaceHolder holder = getHolder(); - long time = SystemClock.uptimeMillis(); - ScriptCanvas scriptCanvas = new ScriptCanvas(); - try { - while (mDrawing) { - canvas = holder.lockCanvas(); - scriptCanvas.setCanvas(canvas); - scriptCanvas.drawColor(Color.WHITE); - emit("draw", scriptCanvas, ScriptCanvasView.this); - holder.unlockCanvasAndPost(canvas); - canvas = null; - long dt = mTimePerDraw - (SystemClock.uptimeMillis() - time); - if (dt > 0) { - sleep(dt); - } - time = SystemClock.uptimeMillis(); - } - } catch (Exception e) { - mScriptRuntime.exit(e); - mDrawing = false; - } finally { - if (canvas != null) { - holder.unlockCanvasAndPost(canvas); - } - } - }); - } - - private void sleep(long dt) { - try { - Thread.sleep(dt); - } catch (InterruptedException e) { - throw new ScriptInterruptedException(e); - } - } - - @Override - protected void onWindowVisibilityChanged(int visibility) { - Log.d(LOG_TAG, "onWindowVisibilityChanged: " + this + ": visibility=" + visibility + ", mDrawingThreadPool=" + mDrawingThreadPool); - if (visibility == VISIBLE) { - mDrawing = true; - } else { - mDrawing = false; - } - super.onWindowVisibilityChanged(visibility); - } - - @Override - public synchronized void surfaceDestroyed(SurfaceHolder holder) { - mDrawing = false; - mDrawingThreadPool.shutdown(); - mDrawingThreadPool = null; - Log.d(LOG_TAG, "surfaceDestroyed: " + this); - } - - public EventEmitter once(String eventName, Object listener) { - return mEventEmitter.once(eventName, listener); - } - - public EventEmitter on(String eventName, Object listener) { - return mEventEmitter.on(eventName, listener); - } - - public EventEmitter addListener(String eventName, Object listener) { - return mEventEmitter.addListener(eventName, listener); - } - - public boolean emit(String eventName, Object... args) { - return mEventEmitter.emit(eventName, args); - } - - public String[] eventNames() { - return mEventEmitter.eventNames(); - } - - public int listenerCount(String eventName) { - return mEventEmitter.listenerCount(eventName); - } - - public Object[] listeners(String eventName) { - return mEventEmitter.listeners(eventName); - } - - public EventEmitter prependListener(String eventName, Object listener) { - return mEventEmitter.prependListener(eventName, listener); - } - - public EventEmitter prependOnceListener(String eventName, Object listener) { - return mEventEmitter.prependOnceListener(eventName, listener); - } - - public EventEmitter removeAllListeners() { - return mEventEmitter.removeAllListeners(); - } - - public EventEmitter removeAllListeners(String eventName) { - return mEventEmitter.removeAllListeners(eventName); - } - - public EventEmitter removeListener(String eventName, Object listener) { - return mEventEmitter.removeListener(eventName, listener); - } - - public EventEmitter setMaxListeners(int n) { - return mEventEmitter.setMaxListeners(n); - } - - public int getMaxListeners() { - return mEventEmitter.getMaxListeners(); - } - - public static int defaultMaxListeners() { - return EventEmitter.defaultMaxListeners(); - } - -} diff --git a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt new file mode 100644 index 00000000..dcf3e5a1 --- /dev/null +++ b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt @@ -0,0 +1,178 @@ +package com.stardust.autojs.core.graphics + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Canvas +import android.graphics.SurfaceTexture +import android.os.SystemClock +import android.util.Log +import android.view.TextureView +import android.view.View +import com.stardust.autojs.core.eventloop.EventEmitter +import com.stardust.autojs.runtime.ScriptRuntime +import com.stardust.autojs.runtime.exception.ScriptInterruptedException +import com.stardust.ext.ifNull +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors + +/** + * Created by Stardust on 2018/3/16. + */ + +@SuppressLint("ViewConstructor") +class ScriptCanvasView(context: Context, private val mScriptRuntime: ScriptRuntime) : TextureView(context), TextureView.SurfaceTextureListener { + @Volatile + private var mDrawing = true + private val mEventEmitter: EventEmitter = EventEmitter(mScriptRuntime.bridges) + private var mDrawingThreadPool: ExecutorService? = null + @Volatile + private var mTimePerDraw = (1000 / 30).toLong() + + val maxListeners: Int + get() = mEventEmitter.maxListeners + + init { + surfaceTextureListener = this + } + + fun setMaxFps(maxFps: Int) { + mTimePerDraw = if (maxFps <= 0) { + 0 + } else { + (100 / maxFps).toLong() + } + } + + @Synchronized + private fun performDraw() { + ::mDrawingThreadPool.ifNull { + Executors.newCachedThreadPool() + }.run { + execute { + var canvas: Canvas? = null + var time = SystemClock.uptimeMillis() + val scriptCanvas = ScriptCanvas() + try { + while (mDrawing) { + canvas = lockCanvas() + scriptCanvas.setCanvas(canvas) + // scriptCanvas.drawColor(Color.WHITE); + emit("draw", scriptCanvas, this@ScriptCanvasView) + unlockCanvasAndPost(canvas) + canvas = null + val dt = mTimePerDraw - (SystemClock.uptimeMillis() - time) + if (dt > 0) { + sleep(dt) + } + time = SystemClock.uptimeMillis() + } + } catch (e: Exception) { + mScriptRuntime.exit(e) + mDrawing = false + } finally { + if (canvas != null) { + unlockCanvasAndPost(canvas) + } + } + } + } + } + + private fun sleep(dt: Long) { + try { + Thread.sleep(dt) + } catch (e: InterruptedException) { + throw ScriptInterruptedException(e) + } + + } + + override fun onWindowVisibilityChanged(visibility: Int) { + Log.d(LOG_TAG, "onWindowVisibilityChanged: " + this + ": visibility=" + visibility + ", mDrawingThreadPool=" + mDrawingThreadPool) + val oldDrawing = mDrawing + mDrawing = visibility == View.VISIBLE + if (!oldDrawing && mDrawing) { + performDraw() + } + super.onWindowVisibilityChanged(visibility) + } + + fun once(eventName: String, listener: Any): EventEmitter { + return mEventEmitter.once(eventName, listener) + } + + fun on(eventName: String, listener: Any): EventEmitter { + return mEventEmitter.on(eventName, listener) + } + + fun addListener(eventName: String, listener: Any): EventEmitter { + return mEventEmitter.addListener(eventName, listener) + } + + fun emit(eventName: String, vararg args: Any): Boolean { + return mEventEmitter.emit(eventName, *args) + } + + fun eventNames(): Array { + return mEventEmitter.eventNames() + } + + fun listenerCount(eventName: String): Int { + return mEventEmitter.listenerCount(eventName) + } + + fun listeners(eventName: String): Array { + return mEventEmitter.listeners(eventName) + } + + fun prependListener(eventName: String, listener: Any): EventEmitter { + return mEventEmitter.prependListener(eventName, listener) + } + + fun prependOnceListener(eventName: String, listener: Any): EventEmitter { + return mEventEmitter.prependOnceListener(eventName, listener) + } + + fun removeAllListeners(): EventEmitter { + return mEventEmitter.removeAllListeners() + } + + fun removeAllListeners(eventName: String): EventEmitter { + return mEventEmitter.removeAllListeners(eventName) + } + + fun removeListener(eventName: String, listener: Any): EventEmitter { + return mEventEmitter.removeListener(eventName, listener) + } + + fun setMaxListeners(n: Int): EventEmitter { + return mEventEmitter.setMaxListeners(n) + } + + override fun onSurfaceTextureAvailable(surface: SurfaceTexture, width: Int, height: Int) { + performDraw() + Log.d(LOG_TAG, "onSurfaceTextureAvailable: ${this}, width = $width, height = $height") + } + + override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture, width: Int, height: Int) {} + + override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean { + mDrawing = false + mDrawingThreadPool?.shutdown() + Log.d(LOG_TAG, "onSurfaceTextureDestroyed: ${this}") + return true + } + + override fun onSurfaceTextureUpdated(surface: SurfaceTexture) { + + } + + companion object { + + private const val LOG_TAG = "ScriptCanvasView" + + fun defaultMaxListeners(): Int { + return EventEmitter.defaultMaxListeners() + } + } +} diff --git a/common/src/main/java/com/stardust/ext/Common.kt b/common/src/main/java/com/stardust/ext/Common.kt new file mode 100644 index 00000000..b725e67c --- /dev/null +++ b/common/src/main/java/com/stardust/ext/Common.kt @@ -0,0 +1,13 @@ +package com.stardust.ext + +import kotlin.reflect.KMutableProperty0 + +fun > T.ifNull(provider: () -> R): R { + val value = this.get() + if (value != null) { + return value + } + val newValue = provider() + set(newValue) + return newValue +} \ No newline at end of file From e4dbd0da38d03d0c0243da12ef6b6009055a8df6 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 20 Jan 2019 21:39:56 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D=20So?= =?UTF-8?q?cketTimeoutException=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autojs/core/http/MutableOkHttp.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/autojs/src/main/java/com/stardust/autojs/core/http/MutableOkHttp.java b/autojs/src/main/java/com/stardust/autojs/core/http/MutableOkHttp.java index f80c5ed5..1d4f607e 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/http/MutableOkHttp.java +++ b/autojs/src/main/java/com/stardust/autojs/core/http/MutableOkHttp.java @@ -1,5 +1,6 @@ package com.stardust.autojs.core.http; +import java.net.SocketTimeoutException; import java.util.Collections; import java.util.concurrent.TimeUnit; @@ -19,13 +20,24 @@ public class MutableOkHttp extends OkHttpClient { private long mTimeout = 30 * 1000; private Interceptor mRetryInterceptor = chain -> { Request request = chain.request(); - Response response = chain.proceed(request); + Response response = null; int tryCount = 0; - while (!response.isSuccessful() && tryCount < getMaxRetries()) { + do { + boolean succeed; + try { + response = chain.proceed(request); + succeed = response.isSuccessful(); + } catch (SocketTimeoutException e) { + succeed = false; + if (tryCount >= getMaxRetries()) { + throw e; + } + } + if (succeed || tryCount >= getMaxRetries()) { + return response; + } tryCount++; - response = chain.proceed(request); - } - return response; + } while (true); }; public MutableOkHttp() { @@ -64,6 +76,7 @@ public class MutableOkHttp extends OkHttpClient { public void setTimeout(long timeout) { + mTimeout = timeout; muteClient(); } From 66d385063a4bfeccab7d00e1b23868ecfb44ae50 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 20 Jan 2019 21:44:33 +0800 Subject: [PATCH 05/12] fix https://github.com/hyb1996/Auto.js/issues/439 --- autojs/src/main/assets/modules/__engines__.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autojs/src/main/assets/modules/__engines__.js b/autojs/src/main/assets/modules/__engines__.js index 9c428c78..a8104e42 100644 --- a/autojs/src/main/assets/modules/__engines__.js +++ b/autojs/src/main/assets/modules/__engines__.js @@ -37,7 +37,7 @@ module.exports = function(__runtime__, scope){ } config.delay = c.delay || 0; config.interval = c.interval || 0; - config.loopTimes = c.loopTimes || 1; + config.loopTimes = (c.loopTimes === undefined)? 1 : c.loopTimes; if(c.arguments){ var arguments = c.arguments; for(var key in arguments){ From 5cf08a92bfdc3e1761a1d0cc271f9c0e6839d33d Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 21 Jan 2019 13:21:28 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=97=B6=E5=9C=A8=E5=A4=9A=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=B8=AD=E5=88=86=E4=BB=BB=E5=8A=A1=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dictionaries/Stardust.xml | 1 + app/src/main/AndroidManifest.xml | 6 ++++-- .../org/autojs/autojs/model/script/Scripts.kt | 14 +++++++------- .../autojs/ui/common/ScriptOperations.java | 2 +- .../autojs/autojs/ui/edit/EditActivity.java | 18 +++++++++++++++--- .../autojs/ui/explorer/ExplorerView.java | 2 +- .../ui/main/community/CommunityWebView.java | 2 +- .../ui/main/scripts/MyScriptListFragment.java | 2 +- 8 files changed, 31 insertions(+), 16 deletions(-) diff --git a/.idea/dictionaries/Stardust.xml b/.idea/dictionaries/Stardust.xml index 49fb13b7..56bd1478 100644 --- a/.idea/dictionaries/Stardust.xml +++ b/.idea/dictionaries/Stardust.xml @@ -11,6 +11,7 @@ loopers opencv prefill + recents scriptable storages tasker diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 816de626..d4521a0c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ - + @@ -15,7 +15,7 @@ - + @@ -85,6 +85,7 @@ android:name=".ui.edit.EditActivity_" android:configChanges="orientation|screenSize" android:multiprocess="true" + android:taskAffinity="org.autojs.autojs.edit" android:theme="@style/EditorTheme"> @@ -275,6 +276,7 @@ + = Build.VERSION_CODES.LOLLIPOP) { + finishAndRemoveTask(); + } else { + finish(); + } } private void showExitConfirmDialog() { @@ -207,9 +218,9 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega .neutralText(R.string.text_exit_directly) .onNegative((dialog, which) -> { mEditorView.saveFile(); - EditActivity.super.finish(); + finishAndRemoveFromRecents(); }) - .onNeutral((dialog, which) -> EditActivity.super.finish()) + .onNeutral((dialog, which) -> finishAndRemoveFromRecents()) .show(); } @@ -294,4 +305,5 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega super.onRequestPermissionsResult(requestCode, permissions, grantResults); mRequestPermissionCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults); } + } diff --git a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java index 9ef8ae67..e4155f85 100644 --- a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java +++ b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java @@ -557,7 +557,7 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR @OnClick(R.id.edit) void edit() { - Scripts.INSTANCE.edit(new ScriptFile(mExplorerItem.getPath())); + Scripts.INSTANCE.edit(getContext(), new ScriptFile(mExplorerItem.getPath())); notifyOperated(); } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java index 032e40c4..a2a96a50 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java @@ -75,7 +75,7 @@ public class CommunityWebView extends EWebView { .subscribe(file -> Snackbar.make(CommunityWebView.this, getResources().getString(R.string.format_file_downloaded, file.getPath()) , Snackbar.LENGTH_LONG) - .setAction(R.string.text_open, v -> Scripts.INSTANCE.edit(file)) + .setAction(R.string.text_open, v -> Scripts.INSTANCE.edit(getContext(), file)) .show(), error -> { error.printStackTrace(); diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java index bc6cb785..3ec2a9dc 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java @@ -62,7 +62,7 @@ public class MyScriptListFragment extends ViewPagerFragment implements FloatingA mExplorerView.setExplorer(Explorers.workspace(), ExplorerDirPage.createRoot(Pref.getScriptDirPath())); mExplorerView.setOnItemClickListener((view, item) -> { if (item.isEditable()) { - Scripts.INSTANCE.edit(item.toScriptFile()); + Scripts.INSTANCE.edit(getActivity(), item.toScriptFile()); } else { IntentUtil.viewFile(GlobalAppContext.get(), item.getPath(), AppFileProvider.AUTHORITY); } From 91365c6ae28a2a35557b13921d19533e68bbcfbb Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 21 Jan 2019 14:09:59 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Shell=E7=9A=84?= =?UTF-8?q?=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/stardust/autojs/core/util/Shell.java | 45 ++++++++++++------- .../io/ByteBufferBackedInputStream.kt | 30 +++++++++++++ .../io/ByteBufferBackedOutputStream.kt | 19 ++++++++ 3 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 common/src/main/java/com/stardust/io/ByteBufferBackedInputStream.kt create mode 100644 common/src/main/java/com/stardust/io/ByteBufferBackedOutputStream.kt diff --git a/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java b/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java index 8e49ec78..976975e5 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java +++ b/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java @@ -5,9 +5,11 @@ import android.os.Handler; import android.preference.PreferenceManager; import android.util.Log; +import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.api.AbstractShell; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; -import com.stardust.autojs.runtime.ScriptRuntime; +import com.stardust.io.ByteBufferBackedInputStream; +import com.stardust.io.ByteBufferBackedOutputStream; import com.stardust.lang.ThreadCompat; import com.stardust.pio.UncheckedIOException; @@ -15,8 +17,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; +import java.nio.ByteBuffer; import jackpal.androidterm.ShellTermSession; import jackpal.androidterm.emulatorview.TermSession; @@ -131,13 +132,13 @@ public class Shell extends AbstractShell { checkInitException(); throw new IllegalStateException(); } - }else { + } else { logDebug("ensureInitialized: init"); } } - private void logDebug(String log){ - if(DEBUG){ + private void logDebug(String log) { + if (DEBUG) { Log.d(TAG, log); } } @@ -150,7 +151,7 @@ public class Shell extends AbstractShell { private void waitInitialization() { synchronized (mInitLock) { - if(mInitialized){ + if (mInitialized) { return; } logDebug("waitInitialization: enter"); @@ -204,15 +205,16 @@ public class Shell extends AbstractShell { private class MyShellTermSession extends ShellTermSession { + private final ByteBuffer mByteBuffer = ByteBuffer.allocate(8192); private BufferedReader mBufferedReader; private OutputStream mOutputStream; private Thread mReadingThread; + private volatile boolean mReading = false; public MyShellTermSession(TermSettings settings, String initialCommand) throws IOException { super(settings, initialCommand); - PipedInputStream pipedInputStream = new PipedInputStream(8192); - mBufferedReader = new BufferedReader(new InputStreamReader(pipedInputStream)); - mOutputStream = new PipedOutputStream(pipedInputStream); + mBufferedReader = new BufferedReader(new InputStreamReader(new ByteBufferBackedInputStream(mByteBuffer))); + mOutputStream = new ByteBufferBackedOutputStream(mByteBuffer); if (mShouldReadOutput) { startReadingThread(); } @@ -222,14 +224,23 @@ public class Shell extends AbstractShell { mReadingThread = new ThreadCompat(() -> { String line; try { - while (!Thread.currentThread().isInterrupted() - && (line = mBufferedReader.readLine()) != null) { + while (true) { + if (!mReading) { + break; + } + synchronized (mByteBuffer) { + line = mBufferedReader.readLine(); + } + if (line == null) { + break; + } onNewLine(line); } } catch (IOException e) { e.printStackTrace(); } }); + mReading = true; mReadingThread.start(); } @@ -248,7 +259,7 @@ public class Shell extends AbstractShell { } } - private void onOutput(String str){ + private void onOutput(String str) { logDebug("onOutput: " + str); if (!mInitialized) { if (isRoot() && str.endsWith(":/ # ")) { @@ -265,7 +276,9 @@ public class Shell extends AbstractShell { protected void processInput(byte[] data, int offset, int count) { try { onOutput(new String(data, offset, count)); - mOutputStream.write(data, offset, count); + synchronized (mByteBuffer) { + mOutputStream.write(data, offset, count); + } } catch (IOException e) { e.printStackTrace(); finish(); @@ -304,8 +317,10 @@ public class Shell extends AbstractShell { super.finish(); if (!mShouldReadOutput) return; - if(mReadingThread != null){ + mReading = false; + if (mReadingThread != null) { mReadingThread.interrupt(); + mReadingThread = null; } try { mBufferedReader.close(); diff --git a/common/src/main/java/com/stardust/io/ByteBufferBackedInputStream.kt b/common/src/main/java/com/stardust/io/ByteBufferBackedInputStream.kt new file mode 100644 index 00000000..34b5fb74 --- /dev/null +++ b/common/src/main/java/com/stardust/io/ByteBufferBackedInputStream.kt @@ -0,0 +1,30 @@ +package com.stardust.io + +import java.io.IOException +import java.io.InputStream +import java.nio.ByteBuffer + +class ByteBufferBackedInputStream(private var buf: ByteBuffer) : InputStream() { + + @Throws(IOException::class) + override fun read(): Int { + return if (!buf.hasRemaining()) { + -1 + } else buf.get().toInt() and 0xFF + } + + @Throws(IOException::class) + override fun read(bytes: ByteArray, off: Int, len: Int): Int { + if (!buf.hasRemaining()) { + return -1 + } + val read = Math.min(len, available()) + buf.get(bytes, off, read) + buf.position(buf.position() - read) + return read + } + + override fun available(): Int { + return buf.position() + } +} \ No newline at end of file diff --git a/common/src/main/java/com/stardust/io/ByteBufferBackedOutputStream.kt b/common/src/main/java/com/stardust/io/ByteBufferBackedOutputStream.kt new file mode 100644 index 00000000..7c3ee425 --- /dev/null +++ b/common/src/main/java/com/stardust/io/ByteBufferBackedOutputStream.kt @@ -0,0 +1,19 @@ +package com.stardust.io + +import java.io.IOException +import java.io.OutputStream +import java.nio.ByteBuffer + +class ByteBufferBackedOutputStream(private var buf: ByteBuffer) : OutputStream() { + + @Throws(IOException::class) + override fun write(b: Int) { + buf.put(b.toByte()) + } + + @Throws(IOException::class) + override fun write(bytes: ByteArray, off: Int, len: Int) { + buf.put(bytes, off, len) + } + +} \ No newline at end of file From 054b1fe42a0ecd23ecf7bf2ca12cc45e25a15fd6 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 22 Jan 2019 10:13:18 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20shell.execAndWaitFor?= =?UTF-8?q?()=E8=BF=94=E5=9B=9E=E4=B8=80=E6=AC=A1=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E7=9A=84=E6=89=A7=E8=A1=8C=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes .../com/stardust/autojs/core/util/Shell.java | 123 ++++++++---------- .../autojs/runtime/api/AbstractShell.java | 1 - 3 files changed, 55 insertions(+), 69 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 82ae2df753cfd8cde70c64fec4b80d239d8ecdf0..000bfdb50684604ab40d47b71b3d39b5ad11250c 100644 GIT binary patch delta 15 Xcmcc1dY5&=43>hsOEosmabyAjI8Fwe delta 15 Xcmcc1dY5&=3>NQuD}HaB mCommandOutputs = new ArrayList<>(); public MyShellTermSession(TermSettings settings, String initialCommand) throws IOException { super(settings, initialCommand); - mBufferedReader = new BufferedReader(new InputStreamReader(new ByteBufferBackedInputStream(mByteBuffer))); - mOutputStream = new ByteBufferBackedOutputStream(mByteBuffer); - if (mShouldReadOutput) { - startReadingThread(); - } - } - - private void startReadingThread() { - mReadingThread = new ThreadCompat(() -> { - String line; - try { - while (true) { - if (!mReading) { - break; - } - synchronized (mByteBuffer) { - line = mBufferedReader.readLine(); - } - if (line == null) { - break; - } - onNewLine(line); - } - } catch (IOException e) { - e.printStackTrace(); - } - }); - mReading = true; - mReadingThread.start(); } private void onNewLine(String line) { @@ -250,6 +226,8 @@ public class Shell extends AbstractShell { if (!isRoot() && line.endsWith(" $ sh")) { notifyInitialized(); } + } else { + mCommandOutputs.add(line); } if (mCallback != null) { mCallback.onNewLine(line); @@ -259,6 +237,21 @@ public class Shell extends AbstractShell { } } + private void onCommandOutput(ArrayList output) { + StringBuilder result = new StringBuilder(); + for (int i = 1; i < output.size(); i++) { + result.append(output.get(i)); + if (i < output.size() - 1) { + result.append("\n"); + } + } + logDebug("onCommandOutput: lines = " + output + ", output = " + result); + synchronized (mCommandOutputLock) { + mCommandOutput = result.toString(); + mCommandOutputLock.notifyAll(); + } + } + private void onOutput(String str) { logDebug("onOutput: " + str); if (!mInitialized) { @@ -266,23 +259,34 @@ public class Shell extends AbstractShell { notifyInitialized(); } } + int start = 0; + int i; + while (true) { + i = str.indexOf("\n", start); + if (i > 0) { + onNewLine((mStringBuffer.toString() + str.substring(0, i - 1)).trim()); + mStringBuffer.delete(0, mStringBuffer.length()); + } else { + if (start <= str.length() - 1) { + mStringBuffer.append(str.substring(start)); + } + break; + } + start = i + 1; + } + if (str.endsWith(" # ") || str.endsWith(" $ ")) { + onCommandOutput(mCommandOutputs); + mCommandOutputs.clear(); + } if (mCallback != null) { - mCallback.onOutput(str); + mCallback.onOutput(str.replace("\r", "")); } } @Override protected void processInput(byte[] data, int offset, int count) { - try { - onOutput(new String(data, offset, count)); - synchronized (mByteBuffer) { - mOutputStream.write(data, offset, count); - } - } catch (IOException e) { - e.printStackTrace(); - finish(); - } + onOutput(new String(data, offset, count)); } private void notifyExit() { @@ -312,23 +316,6 @@ public class Shell extends AbstractShell { } } - @Override - public void finish() { - super.finish(); - if (!mShouldReadOutput) - return; - mReading = false; - if (mReadingThread != null) { - mReadingThread.interrupt(); - mReadingThread = null; - } - try { - mBufferedReader.close(); - mOutputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } } } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractShell.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractShell.java index 24911ec7..f0d17a5b 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractShell.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/AbstractShell.java @@ -12,7 +12,6 @@ import com.stardust.util.ScreenMetrics; public abstract class AbstractShell { - public static class Result { public int code = -1; public String error; From e28adc4931931d63905dbb77a106c4c78b6e4307 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 22 Jan 2019 10:14:49 +0800 Subject: [PATCH 09/12] fix https://github.com/hyb1996/Auto.js/issues/446 --- autojs/src/main/assets/modules/__dialogs__.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autojs/src/main/assets/modules/__dialogs__.js b/autojs/src/main/assets/modules/__dialogs__.js index 26e78254..d2a53054 100644 --- a/autojs/src/main/assets/modules/__dialogs__.js +++ b/autojs/src/main/assets/modules/__dialogs__.js @@ -155,7 +155,7 @@ module.exports = function(__runtime__, scope){ builder.input(wrapNonNullString(properties.inputHint), wrapNonNullString(properties.inputPrefill), function(dialog, input){ input = input.toString(); - builder.emit("input_change", dialog, input); + dialog.emit("input_change", dialog, input); }) .alwaysCallInputCallback(); } @@ -191,7 +191,7 @@ module.exports = function(__runtime__, scope){ if(properties.checkBoxPrompt != undefined || properties.checkBoxChecked != undefined){ builder.checkBoxPrompt(wrapNonNullString(properties.checkBoxPrompt), !!properties.checkBoxChecked, function(view, checked){ - builder.emit("check", checked, builder.getDialog()); + builder.getDialog().emit("check", checked, builder.getDialog()); }); } } From 1865ac8d0e76632ec7b80b4c4d3b925209ae6135 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 22 Jan 2019 10:25:06 +0800 Subject: [PATCH 10/12] fix https://github.com/hyb1996/Auto.js/issues/446 --- autojs/src/main/assets/modules/__dialogs__.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/autojs/src/main/assets/modules/__dialogs__.js b/autojs/src/main/assets/modules/__dialogs__.js index d2a53054..f1615849 100644 --- a/autojs/src/main/assets/modules/__dialogs__.js +++ b/autojs/src/main/assets/modules/__dialogs__.js @@ -155,7 +155,7 @@ module.exports = function(__runtime__, scope){ builder.input(wrapNonNullString(properties.inputHint), wrapNonNullString(properties.inputPrefill), function(dialog, input){ input = input.toString(); - dialog.emit("input_change", dialog, input); + builder.dialog.emit("input_change", builder.dialog, input); }) .alwaysCallInputCallback(); } @@ -163,23 +163,23 @@ module.exports = function(__runtime__, scope){ var itemsSelectMode = properties.itemsSelectMode; if(itemsSelectMode == undefined || itemsSelectMode == 'select'){ builder.itemsCallback(function(dialog, view, position, text){ - dialog.emit("item_select", position, text.toString(), dialog); + builder.dialog.emit("item_select", position, text.toString(), builder.dialog); }); }else if(itemsSelectMode == 'single'){ builder.itemsCallbackSingleChoice(properties.itemsSelectedIndex == undefined ? -1 : properties.itemsSelectedIndex, function(dialog, view, which, text){ - dialog.emit("single_choice", which, text.toString(), dialog); + builder.dialog.emit("single_choice", which, text.toString(), builder.dialog); return true; }); }else if(itemsSelectMode == 'multi'){ builder.itemsCallbackMultiChoice(properties.itemsSelectedIndex == undefined ? null : properties.itemsSelectedIndex, function(dialog, view, indices, texts){ - dialog.emit("multi_choice", toJsArray(indices, (l, i)=> parseInt(l.get(i)), - toJsArray(texts, (l, i)=> l.get(i).toString())), dialog); + builder.dialog.emit("multi_choice", toJsArray(indices, (l, i)=> parseInt(l.get(i)), + toJsArray(texts, (l, i)=> l.get(i).toString())), builder.dialog); return true; }); }else{ - throw new Error("unknown itemsSelecteMode " + itemsSelectMode); + throw new Error("unknown itemsSelectMode " + itemsSelectMode); } } if(properties.progress != undefined){ From f6bab9e51d155b8eda76d364c73236a262168ea5 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 22 Jan 2019 20:03:03 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20dialogs.build()?= =?UTF-8?q?=E6=94=AF=E6=8C=81customView=E5=B1=9E=E6=80=A7=E5=92=8CwrapInSc?= =?UTF-8?q?rollView=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autojs/src/main/assets/modules/__dialogs__.js | 8 +++++ autojs/src/main/assets/modules/__ui__.js | 13 ++++--- .../stardust/autojs/core/looper/Loopers.java | 34 +++++++++++++++---- .../stardust/autojs/core/looper/Timer.java | 4 +++ .../core/ui/dialog/JsDialogBuilder.java | 3 +- .../stardust/autojs/runtime/api/Dialogs.java | 1 - 6 files changed, 48 insertions(+), 15 deletions(-) diff --git a/autojs/src/main/assets/modules/__dialogs__.js b/autojs/src/main/assets/modules/__dialogs__.js index f1615849..8217d0c0 100644 --- a/autojs/src/main/assets/modules/__dialogs__.js +++ b/autojs/src/main/assets/modules/__dialogs__.js @@ -194,6 +194,14 @@ module.exports = function(__runtime__, scope){ builder.getDialog().emit("check", checked, builder.getDialog()); }); } + if(properties.customView != undefined) { + let customView = properties.customView; + if(typeof(customView) == 'xml' || typeof(customView) == 'string') { + customView = ui.run(() => ui.inflate(customView)); + } + let wrapInScrollView = (properties.wrapInScrollView === undefined) ? true : properties.wrapInScrollView; + builder.customView(customView, wrapInScrollView); + } } function wrapNonNullString(str){ diff --git a/autojs/src/main/assets/modules/__ui__.js b/autojs/src/main/assets/modules/__ui__.js index f9fcb9a0..c0dec773 100644 --- a/autojs/src/main/assets/modules/__ui__.js +++ b/autojs/src/main/assets/modules/__ui__.js @@ -11,7 +11,7 @@ module.exports = function (runtime, global) { ui.__defineGetter__("emitter", ()=> activity ? activity.getEventEmitter() : null); ui.layout = function (xml) { - if(!activity){ + if(typeof(activity) == 'undefined'){ throw new Error("需要在ui模式下运行才能使用该函数"); } runtime.ui.layoutInflater.setContext(activity); @@ -24,15 +24,18 @@ module.exports = function (runtime, global) { } ui.inflate = function(xml, parent, attachToParent){ - if(!activity){ - throw new Error("需要在ui模式下运行才能使用该函数"); - } if(typeof(xml) == 'xml'){ xml = xml.toXMLString(); } parent = parent || null; attachToParent = !!attachToParent; - runtime.ui.layoutInflater.setContext(activity); + let ctx; + if(typeof(activity) == 'undefined') { + ctx = new android.view.ContextThemeWrapper(context, com.stardust.autojs.R.style.ScriptTheme); + } else { + ctx = activity; + } + runtime.ui.layoutInflater.setContext(ctx); return runtime.ui.layoutInflater.inflate(xml.toString(), parent, attachToParent); } diff --git a/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java b/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java index 31b402f0..c7cd424f 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java +++ b/autojs/src/main/java/com/stardust/autojs/core/looper/Loopers.java @@ -17,10 +17,13 @@ import org.mozilla.javascript.Context; import java.util.HashSet; import java.util.concurrent.CopyOnWriteArrayList; +import androidx.annotation.Nullable; + /** * Created by Stardust on 2017/7/29. */ +@SuppressWarnings("ConstantConditions") public class Loopers implements MessageQueue.IdleHandler { private static final String LOG_TAG = "Loopers"; @@ -32,9 +35,27 @@ public class Loopers implements MessageQueue.IdleHandler { private static final Runnable EMPTY_RUNNABLE = () -> { }; - private volatile ThreadLocal waitWhenIdle = new ThreadLocal<>(); - private volatile ThreadLocal> waitIds = new ThreadLocal<>(); - private volatile ThreadLocal maxWaitId = new ThreadLocal<>(); + private volatile ThreadLocal waitWhenIdle = new ThreadLocal() { + @Nullable + @Override + protected Boolean initialValue() { + return Looper.myLooper() == Looper.getMainLooper(); + } + }; + private volatile ThreadLocal> waitIds = new ThreadLocal>() { + @Nullable + @Override + protected HashSet initialValue() { + return new HashSet<>(); + } + }; + private volatile ThreadLocal maxWaitId = new ThreadLocal() { + @Nullable + @Override + protected Integer initialValue() { + return 0; + } + }; private volatile ThreadLocal> looperQuitHandlers = new ThreadLocal<>(); private volatile Looper mServantLooper; private Timers mTimers; @@ -126,7 +147,7 @@ public class Loopers implements MessageQueue.IdleHandler { return mServantLooper; } - public void quitServantLooper() { + private void quitServantLooper() { if (mServantLooper == null) return; mServantLooper.quit(); @@ -134,12 +155,14 @@ public class Loopers implements MessageQueue.IdleHandler { public int waitWhenIdle() { int id = maxWaitId.get(); + Log.d(LOG_TAG, "waitWhenIdle: " + id); maxWaitId.set(id + 1); waitIds.get().add(id); return id; } public void doNotWaitWhenIdle(int waitId) { + Log.d(LOG_TAG, "doNotWaitWhenIdle: " + waitId); waitIds.get().remove(waitId); } @@ -181,9 +204,6 @@ public class Loopers implements MessageQueue.IdleHandler { if (Looper.myLooper() == null) LooperHelper.prepare(); Looper.myQueue().addIdleHandler(this); - waitWhenIdle.set(Looper.myLooper() == Looper.getMainLooper()); - waitIds.set(new HashSet<>()); - maxWaitId.set(0); } public void notifyThreadExit(TimerThread thread) { diff --git a/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java b/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java index 324c16b6..03218186 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java +++ b/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java @@ -89,6 +89,10 @@ public class Timer { } } + public void post(Runnable r) { + + } + public boolean clearInterval(int id) { return clearCallback(id); } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialogBuilder.java b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialogBuilder.java index e089536f..5dc2ff13 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialogBuilder.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialogBuilder.java @@ -34,7 +34,7 @@ public class JsDialogBuilder extends MaterialDialog.Builder { super(context); mTimer = runtime.timers.getTimerForCurrentThread(); mLoopers = runtime.loopers; - mEmitter = new EventEmitter(runtime.bridges, mTimer); + mEmitter = new EventEmitter(runtime.bridges); mUiHandler = runtime.uiHandler; setUpEvents(); } @@ -70,7 +70,6 @@ public class JsDialogBuilder extends MaterialDialog.Builder { public void onShowCalled() { mTimer.postDelayed(() -> mWaitId = mLoopers.waitWhenIdle(), 0); - } public JsDialog getDialog() { diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java index 14425ba1..75d0ce72 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java @@ -144,7 +144,6 @@ public class Dialogs { } return new JsDialogBuilder(context, mRuntime) .theme(Theme.LIGHT); - } public class NonUiDialogs { From cfe6f92e1325f4275e390f50fca25951edf2dd53 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 22 Jan 2019 20:33:59 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=99=A8=E6=90=9C=E7=B4=A2=E6=8E=A7=E4=BB=B6=E7=9A=84DFS?= =?UTF-8?q?=E7=AE=97=E6=B3=95=EF=BC=8C=E6=94=B9=E9=80=92=E5=BD=92=E4=B8=BA?= =?UTF-8?q?=E6=A0=88=EF=BC=8C=E5=8A=A0=E5=BF=AB=E9=80=9F=E5=BA=A6=E5=B9=B6?= =?UTF-8?q?=E4=B8=94=E9=81=BF=E5=85=8D=E5=87=BA=E7=8E=B0StackOverflow?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/stardust/automator/search/DFS.kt | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/automator/src/main/java/com/stardust/automator/search/DFS.kt b/automator/src/main/java/com/stardust/automator/search/DFS.kt index 6f7efdd8..005bd3fb 100644 --- a/automator/src/main/java/com/stardust/automator/search/DFS.kt +++ b/automator/src/main/java/com/stardust/automator/search/DFS.kt @@ -2,6 +2,7 @@ package com.stardust.automator.search import com.stardust.automator.UiObject import com.stardust.automator.filter.Filter +import java.util.* import kotlin.collections.ArrayList @@ -12,32 +13,26 @@ import kotlin.collections.ArrayList object DFS : SearchAlgorithm { override fun search(root: UiObject, filter: Filter, limit: Int): ArrayList { - val list = ArrayList() - if (filter.filter(root)) { - list.add(root) - if (list.size >= limit) { - return list + val result = ArrayList() + val stack = LinkedList() + stack.push(root) + while (stack.isNotEmpty()) { + val parent = stack.pop() + for (i in parent.childCount - 1 downTo 0) { + val child = parent.child(i) ?: continue + stack.push(child) } - } - searchChildren(root, list, filter, limit) - return list - } - - private fun searchChildren(parent: UiObject, list: MutableList, filter: Filter, limit: Int) { - for (i in 0 until parent.childCount) { - val child = parent.child(i) ?: continue - val isTarget = filter.filter(child) - if (isTarget) { - list.add(child) - if (list.size >= limit) { + if (filter.filter(parent)) { + result.add(parent) + if (result.size >= limit) { break } - } - searchChildren(child, list, filter, limit) - if (!isTarget) { - child.recycle() + } else { + if (parent !== root) { + parent.recycle() + } } } + return result } - }