From 6be328f00c6f6753fb378de463da96d4275cbb46 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Mon, 9 Mar 2026 21:01:48 +0800 Subject: [PATCH] 6.7.0 - Alpha23 - Fine tuning --- .gitignore | 2 ++ .../autojs/runtime/api/ProcessShell.java | 6 ++-- .../autojs/autojs/runtime/api/ScriptToast.kt | 16 +++++++++- .../runtime/api/augment/dialogs/Dialogs.kt | 3 +- .../runtime/api/augment/global/Global.kt | 3 +- .../runtime/api/augment/global/Legacy.kt | 3 +- .../api/augment/http/HttpSaveResult.kt | 4 +-- .../runtime/api/augment/images/Images.kt | 3 +- .../api/augment/mediainfo/Mediainfo.kt | 3 +- .../mediainfo/MediainfoNativeObject.kt | 3 +- .../runtime/api/augment/notice/Channel.kt | 3 +- .../runtime/api/augment/notice/Notice.kt | 3 +- .../autojs/runtime/api/augment/ocr/Ocr.kt | 3 +- .../runtime/api/augment/ocr/OcrMLKit.kt | 3 +- .../runtime/api/augment/ocr/OcrPaddle.kt | 3 +- .../runtime/api/augment/ocr/OcrRapid.kt | 3 +- .../runtime/api/augment/shizuku/Shizuku.kt | 3 +- .../runtime/api/augment/sqlite/SQLite.kt | 3 +- .../runtime/api/augment/sysprops/Sysprops.kt | 3 +- .../autojs/runtime/api/augment/ui/UI.kt | 3 +- .../api/augment/util/MorseCodeNativeObject.kt | 8 ++--- .../autojs/runtime/api/augment/zip/Zip.kt | 5 +-- .../api/augment/zip/ZipNativeObject.kt | 24 +++++++------- .../theme/app/ColorSelectBaseActivity.kt | 13 ++------ .../autojs/ui/edit/editor/CodeEditText.kt | 20 ------------ .../ui/edit/keyboard/SymbolsConfigStore.kt | 14 ++------- .../org/autojs/autojs/util/StringUtils.kt | 10 ++++++ .../paddle/lite/ocr/PredictorNativeBridge.kt | 31 +++++++------------ 28 files changed, 101 insertions(+), 100 deletions(-) diff --git a/.gitignore b/.gitignore index d9d242a1..45381c50 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ *.log *.ffs_db *.patch +*.salive +.tmp_*.txt .DS_Store .externalNativeBuild diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/ProcessShell.java b/app/src/main/java/org/autojs/autojs/runtime/api/ProcessShell.java index aa159769..4591b4d1 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/ProcessShell.java +++ b/app/src/main/java/org/autojs/autojs/runtime/api/ProcessShell.java @@ -68,7 +68,7 @@ public class ProcessShell extends AbstractShell { @Override public void exit() { if (mProcess != null) { - Log.d(TAG, "exit: pid = " + ProcessUtils.getProcessPid(mProcess)); + // Log.d(TAG, "exit: pid = " + ProcessUtils.getProcessPid(mProcess)); mProcess.destroy(); mProcess = null; } @@ -202,11 +202,11 @@ public class ProcessShell extends AbstractShell { } os.writeBytes(COMMAND_EXIT); os.flush(); - Log.d(TAG, "pid = " + ProcessUtils.getProcessPid(process)); + // Log.d(TAG, "pid = " + ProcessUtils.getProcessPid(process)); commandResult = new Result(process.waitFor(), readAll(process.getInputStream()), readAll(process.getErrorStream())); - Log.d(TAG, commandResult.toString()); + // Log.d(TAG, commandResult.toString()); } catch (Exception e) { // @Overwrite by SuperMonster003 on Apr 26, 2022. // ! Try writing exception into commandResult and make it visible to AutoJs6 console. diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/ScriptToast.kt b/app/src/main/java/org/autojs/autojs/runtime/api/ScriptToast.kt index 6b82272c..293e4417 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/ScriptToast.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/ScriptToast.kt @@ -7,6 +7,8 @@ import android.os.Looper import android.widget.Toast import org.autojs.autojs.runtime.ScriptRuntime import java.util.ArrayDeque +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit /** * Toast global queue manager. @@ -25,6 +27,7 @@ import java.util.ArrayDeque object ScriptToast { private const val MAX_GLOBAL_QUEUE_SIZE = 32 + private const val ENQUEUE_SYNC_WAIT_MS = 1_000L private val mainHandler = Handler(Looper.getMainLooper()) private val queue = ArrayDeque(MAX_GLOBAL_QUEUE_SIZE) @@ -52,7 +55,18 @@ object ScriptToast { // Must be called on the main thread. // zh-CN: 必须在主线程调用. if (Looper.myLooper() != Looper.getMainLooper()) { - mainHandler.post { enqueueToast(context, scriptRuntime, message, isLong) } + val appContext = context.applicationContext + val latch = CountDownLatch(1) + mainHandler.postAtFrontOfQueue { + try { + enqueueToast(appContext, scriptRuntime, message, isLong) + } finally { + latch.countDown() + } + } + runCatching { + latch.await(ENQUEUE_SYNC_WAIT_MS, TimeUnit.MILLISECONDS) + } return } diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/dialogs/Dialogs.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/dialogs/Dialogs.kt index 15cc3556..2ccb86a2 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/dialogs/Dialogs.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/dialogs/Dialogs.kt @@ -13,6 +13,7 @@ import org.autojs.autojs.core.ui.dialog.JsDialog import org.autojs.autojs.core.ui.dialog.JsDialogBuilder import org.autojs.autojs.core.ui.nativeview.NativeView import org.autojs.autojs.event.BackCompat.TAG_KEY_INSTALLED +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component3 @@ -65,7 +66,7 @@ class Dialogs(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { ::multiChoice.name, ) - companion object { + companion object : ArgumentGuards() { private enum class PropertyConverter { COLOR_INT, BOOLEAN, diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Global.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Global.kt index 60e65de9..45d4ee6d 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Global.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Global.kt @@ -5,6 +5,7 @@ import io.github.g00fy2.versioncompare.Version import org.autojs.autojs.annotation.RhinoFunctionBody import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.core.automator.UiObject +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component3 @@ -117,7 +118,7 @@ class Global(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRunti "i18n" to Supplier { scriptRuntime.js_mod_i18n }, ) - companion object { + companion object : ArgumentGuards() { @Suppress("FunctionName") @JvmStatic diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Legacy.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Legacy.kt index a79a261f..ae1c4772 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Legacy.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Legacy.kt @@ -1,6 +1,7 @@ package org.autojs.autojs.runtime.api.augment.global import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.augment.Augmentable import org.autojs.autojs.runtime.api.augment.util.Util @@ -13,7 +14,7 @@ class Legacy(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { ::isObjectSpecies.name, ) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/HttpSaveResult.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/HttpSaveResult.kt index aabcd146..c7f754b6 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/HttpSaveResult.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/HttpSaveResult.kt @@ -1,7 +1,7 @@ package org.autojs.autojs.runtime.api.augment.http import org.autojs.autojs.annotation.RhinoStandardFunctionInterface -import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsIsEmpty +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.runtime.api.StringReadable import org.autojs.autojs.runtime.api.augment.converter.core.Bytes import org.autojs.autojs.util.RhinoUtils @@ -37,7 +37,7 @@ class HttpSaveResult @JvmOverloads constructor( "}", ).joinToString("\n") - companion object { + companion object : ArgumentGuards() { const val RESULT_OK = 0 diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/images/Images.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/images/Images.kt index eb373580..f658e367 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/images/Images.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/images/Images.kt @@ -11,6 +11,7 @@ import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.core.image.ColorDetector import org.autojs.autojs.core.image.ImageWrapper import org.autojs.autojs.core.image.capture.ScreenCapturer +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsArray import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNumber @@ -161,7 +162,7 @@ class Images(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime), AsEmitt ) @Suppress("MayBeConstant") - companion object { + companion object : ArgumentGuards() { private val TAG = Images::class.java.simpleName diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/Mediainfo.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/Mediainfo.kt index 8c40b714..58100424 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/Mediainfo.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/Mediainfo.kt @@ -1,6 +1,7 @@ package org.autojs.autojs.runtime.api.augment.mediainfo import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.augment.Augmentable import org.autojs.autojs.runtime.api.augment.Invokable @@ -17,7 +18,7 @@ class Mediainfo(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRu read(scriptRuntime, arrayOf(path)) } - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/MediainfoNativeObject.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/MediainfoNativeObject.kt index 4bf360ec..2df449e0 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/MediainfoNativeObject.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/mediainfo/MediainfoNativeObject.kt @@ -2,6 +2,7 @@ package org.autojs.autojs.runtime.api.augment.mediainfo import org.autojs.autojs.annotation.RhinoFunctionBody import org.autojs.autojs.annotation.RhinoStandardFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsIsEmpty @@ -98,7 +99,7 @@ class MediainfoNativeObject( override fun toStringReadable() = toStringRhino(this) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoStandardFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Channel.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Channel.kt index 115ab5de..e45b902d 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Channel.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Channel.kt @@ -7,6 +7,7 @@ import android.app.NotificationManager import android.os.Build import org.autojs.autojs.annotation.RhinoFunctionBody import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief import org.autojs.autojs.rhino.extension.IterableExtensions.toNativeArray @@ -30,7 +31,7 @@ import org.autojs.autojs.runtime.api.augment.notice.Notice as AugmentableNotice class Channel(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Notice.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Notice.kt index 63448d28..e330c214 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Notice.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/notice/Notice.kt @@ -6,6 +6,7 @@ import androidx.core.app.NotificationCompat.BigTextStyle import androidx.core.app.NotificationCompat.Builder import androidx.core.app.NotificationManagerCompat import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop @@ -210,7 +211,7 @@ class Notice(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRunti } } - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/Ocr.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/Ocr.kt index bb7bdbc2..8ec51e0e 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/Ocr.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/Ocr.kt @@ -2,6 +2,7 @@ package org.autojs.autojs.runtime.api.augment.ocr import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.core.image.ImageWrapper +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component3 @@ -48,7 +49,7 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) override fun invoke(vararg args: Any?): NativeArray = recognizeText(scriptRuntime, args) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrMLKit.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrMLKit.kt index fff9a838..e8bf0091 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrMLKit.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrMLKit.kt @@ -3,6 +3,7 @@ package org.autojs.autojs.runtime.api.augment.ocr import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.apkbuilder.ApkBuilder import org.autojs.autojs.core.image.ImageWrapper +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.OcrResult import org.autojs.autojs.runtime.api.augment.Augmentable @@ -23,7 +24,7 @@ class OcrMLKit(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRun override fun invoke(vararg args: Any?): NativeArray = recognizeText(scriptRuntime, args) @Suppress("unused") - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrPaddle.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrPaddle.kt index 5f2970f3..1c562cb3 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrPaddle.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrPaddle.kt @@ -9,6 +9,7 @@ import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.apkbuilder.ApkBuilder import org.autojs.autojs.core.image.ImageWrapper import org.autojs.autojs.core.plugin.ocr.PaddleOcrPluginHost +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.ScriptableObjectExtensions.inquire import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.OcrResult @@ -42,7 +43,7 @@ class OcrPaddle(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRu override fun invoke(vararg args: Any?): NativeArray = recognizeText(scriptRuntime, args) - companion object { + companion object : ArgumentGuards() { private const val DEFAULT_CPU_THREAD_NUM = 4 diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrRapid.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrRapid.kt index d40710c8..252fcea6 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrRapid.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ocr/OcrRapid.kt @@ -3,6 +3,7 @@ package org.autojs.autojs.runtime.api.augment.ocr import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.apkbuilder.ApkBuilder import org.autojs.autojs.core.image.ImageWrapper +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.OcrResult import org.autojs.autojs.runtime.api.augment.Augmentable @@ -22,7 +23,7 @@ class OcrRapid(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRun override fun invoke(vararg args: Any?): NativeArray = recognizeText(scriptRuntime, args) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/shizuku/Shizuku.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/shizuku/Shizuku.kt index 87f82b87..983e2654 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/shizuku/Shizuku.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/shizuku/Shizuku.kt @@ -1,6 +1,7 @@ package org.autojs.autojs.runtime.api.augment.shizuku import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.ScriptableExtensions.defineProp import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.AbstractShell @@ -38,7 +39,7 @@ class Shizuku(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRunt override fun invoke(vararg args: Any?): AbstractShell.Result = execCommand(scriptRuntime, args) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/sqlite/SQLite.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/sqlite/SQLite.kt index 11aac81c..715b1053 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/sqlite/SQLite.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/sqlite/SQLite.kt @@ -3,6 +3,7 @@ package org.autojs.autojs.runtime.api.augment.sqlite import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface import org.autojs.autojs.core.database.Database import org.autojs.autojs.core.database.Database.DatabaseCallback +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief import org.autojs.autojs.rhino.extension.AnyExtensions.jsSanitize @@ -31,7 +32,7 @@ class SQLite(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRunti open(scriptRuntime, argList) } - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/sysprops/Sysprops.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/sysprops/Sysprops.kt index 7d438bbe..064b4980 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/sysprops/Sysprops.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/sysprops/Sysprops.kt @@ -1,6 +1,7 @@ package org.autojs.autojs.runtime.api.augment.sysprops import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.MapExtensions.toNativeObject import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop @@ -27,7 +28,7 @@ class SysProps(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime), Invok ::getAll.name, ) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt index 3c5a97a2..f4858483 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt @@ -22,6 +22,7 @@ import org.autojs.autojs.core.ui.nativeview.NativeView import org.autojs.autojs.core.ui.widget.JsListView import org.autojs.autojs.core.ui.widget.JsWebView import org.autojs.autojs.execution.ScriptExecuteActivity +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2 import org.autojs.autojs.rhino.ArgumentGuards.Companion.component3 @@ -362,7 +363,7 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt } @Suppress("FunctionName") - companion object { + companion object : ArgumentGuards() { private const val WIDGET_KEY = "Widget" diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/MorseCodeNativeObject.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/MorseCodeNativeObject.kt index 44fb35a3..df5c4fb5 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/MorseCodeNativeObject.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/MorseCodeNativeObject.kt @@ -3,9 +3,9 @@ package org.autojs.autojs.runtime.api.augment.util import org.autojs.autojs.annotation.RhinoFunctionBody import org.autojs.autojs.annotation.RhinoFunctionObjectBody import org.autojs.autojs.annotation.RhinoStandardFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards +import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish -import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsAtMost -import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsIsEmpty import org.autojs.autojs.rhino.extension.IterableExtensions.toNativeArray import org.autojs.autojs.runtime.api.StringReadable import org.autojs.autojs.util.RhinoUtils @@ -37,7 +37,7 @@ class MorseCodeNativeObject(val parser: MorseCodeParser) : NativeObject(), Strin @RhinoFunctionObjectBody override fun toStringReadable() = toStringRhino(this) - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoStandardFunctionInterface @@ -77,7 +77,5 @@ class MorseCodeNativeObject(val parser: MorseCodeParser) : NativeObject(), Strin val (delay) = it (thisObj as MorseCodeNativeObject).parser.vibrate(if (!delay.isJsNullish()) Context.toNumber(delay) else 0.0) } - } - } diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/Zip.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/Zip.kt index 8cca1067..3aca2e55 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/Zip.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/Zip.kt @@ -2,6 +2,7 @@ package org.autojs.autojs.runtime.api.augment.zip import okhttp3.internal.closeQuietly import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 @@ -34,7 +35,7 @@ class Zip(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) open(scriptRuntime, arrayOf(zipPath)) } - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoRuntimeFunctionInterface @@ -84,7 +85,7 @@ class Zip(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) fun zipFiles(scriptRuntime: ScriptRuntime, args: Array): ZipNativeObject = ensureArgumentsLengthInRange(args, 2..3) { argList -> var (filePathList, destZipPath, options) = argList require(filePathList is Iterable<*>) { - "Argument \"filePathList\" ${filePathList.jsBrief()} for zip.${Companion::zipFiles.name} must be an Iterable" + "Argument \"filePathList\" ${filePathList.jsBrief()} for zip.zipFiles must be an Iterable" } val fileList = mutableListOf() filePathList.forEach { filePath -> diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/ZipNativeObject.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/ZipNativeObject.kt index 16acbd58..006e3c78 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/ZipNativeObject.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/zip/ZipNativeObject.kt @@ -13,15 +13,16 @@ import net.lingala.zip4j.model.enums.CompressionMethod import net.lingala.zip4j.model.enums.EncryptionMethod import org.autojs.autojs.annotation.RhinoFunctionBody import org.autojs.autojs.annotation.RhinoStandardFunctionInterface +import org.autojs.autojs.rhino.ArgumentGuards +import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1 +import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2 +import org.autojs.autojs.rhino.ArgumentGuards.Companion.component3 +import org.autojs.autojs.rhino.ArgumentGuards.Companion.component4 import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNumber import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief -import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsIsEmpty -import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsLengthInRange -import org.autojs.autojs.rhino.ArgumentGuards.Companion.ensureArgumentsOnlyOne import org.autojs.autojs.rhino.extension.IterableExtensions.toNativeArray import org.autojs.autojs.rhino.extension.ScriptableObjectExtensions.inquire -import org.autojs.autojs.util.StringUtils.toFile import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.StringReadable import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException @@ -36,6 +37,7 @@ import org.autojs.autojs.util.RhinoUtils.coerceStringUppercase import org.autojs.autojs.util.RhinoUtils.newBaseFunction import org.autojs.autojs.util.RhinoUtils.newNativeObject import org.autojs.autojs.util.RhinoUtils.undefined +import org.autojs.autojs.util.StringUtils.toFile import org.mozilla.javascript.BaseFunction import org.mozilla.javascript.Context import org.mozilla.javascript.Function @@ -330,7 +332,7 @@ class ZipNativeObject( else -> SymbolicLinkAction.valueOf(coerceStringUppercase(this)) } - companion object { + companion object : ArgumentGuards() { @JvmStatic @RhinoStandardFunctionInterface @@ -375,7 +377,7 @@ class ZipNativeObject( val zip = thisObj as ZipNativeObject val (filePath, options) = argList val file = zip.scriptRuntime.files.nonNullPath(coerceString(filePath)).toFile() - val zipParameters = zip.buildZipParameters(Companion::addFile.name, options) + val zipParameters = zip.buildZipParameters("addFile", options) undefined { zip.zipFile.addFile(file, zipParameters) } } @@ -385,13 +387,13 @@ class ZipNativeObject( val zip = thisObj as ZipNativeObject val (filePathList, options) = argList require(filePathList is Iterable<*>) { - "Argument \"filePathList\" ${filePathList.jsBrief()} for ${ZipNativeObject::class.java.simpleName}#${Companion::addFiles.name} must be an Iterable" + "Argument \"filePathList\" ${filePathList.jsBrief()} for ${ZipNativeObject::class.java.simpleName}#${"addFiles"} must be an Iterable" } val fileList = mutableListOf() filePathList.forEach { rawFilePath -> fileList.add(zip.scriptRuntime.files.nonNullPath(coerceString(rawFilePath)).toFile()) } - val zipParameters = zip.buildZipParameters(Companion::addFiles.name, options) + val zipParameters = zip.buildZipParameters("addFiles", options) undefined { zip.zipFile.addFiles(fileList, zipParameters) } } @@ -401,7 +403,7 @@ class ZipNativeObject( val zip = thisObj as ZipNativeObject val (filePath, options) = argList val file = zip.scriptRuntime.files.nonNullPath(coerceString(filePath)).toFile() - val zipParameters = zip.buildZipParameters(Companion::addFolder.name, options) + val zipParameters = zip.buildZipParameters("addFolder", options) undefined { zip.zipFile.addFolder(file, zipParameters) } } @@ -411,7 +413,7 @@ class ZipNativeObject( val zip = thisObj as ZipNativeObject val (rawDestPath, options) = argList val destPath = zip.scriptRuntime.files.nonNullPath(coerceString(rawDestPath)) - val unzipParameters = zip.buildUnzipParameters(Companion::extractAll.name, options) + val unzipParameters = zip.buildUnzipParameters("extractAll", options) undefined { zip.zipFile.extractAll(destPath, unzipParameters) } } @@ -423,7 +425,7 @@ class ZipNativeObject( val zipFilePath = zip.scriptRuntime.files.nonNullPath(coerceString(rawZipFilePath)) val destPath = zip.scriptRuntime.files.nonNullPath(coerceString(rawDestPath)) val newFileName = rawNewFileName.takeUnless { it.isJsNullish() }?.let { coerceString(it) } - val unzipParameters = zip.buildUnzipParameters(Companion::extractFile.name, options) + val unzipParameters = zip.buildUnzipParameters("extractFile", options) undefined { zip.zipFile.extractFile(zipFilePath, destPath, newFileName, unzipParameters) } } diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt index 347bd80f..97d813be 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt @@ -2,13 +2,11 @@ package org.autojs.autojs.theme.app import android.content.Context import android.content.Intent -import android.content.res.Configuration import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View import android.view.ViewAnimationUtils -import androidx.annotation.StringRes import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.fragment.app.DialogFragment @@ -47,6 +45,7 @@ import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.main.drawer.DrawerFragment.Companion.Event.ThemeColorLayoutSwitchedEvent import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.IntentUtils.startSafely +import org.autojs.autojs.util.StringUtils import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.ViewUtils.onceGlobalLayout import org.autojs.autojs.util.ViewUtils.setColorsByColorLuminance @@ -55,7 +54,7 @@ import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByColorLuminance import org.autojs.autojs.util.ViewUtils.setTitlesTextColorByColorLuminance import org.autojs.autojs6.R import org.greenrobot.eventbus.EventBus -import java.util.* +import java.util.Locale import kotlin.math.absoluteValue import kotlin.math.hypot import kotlin.properties.Delegates @@ -537,7 +536,7 @@ abstract class ColorSelectBaseActivity : BaseActivity() { val normalizedQuery = normalizeForMatching(searchTerm) colorItems.filter { colorItem -> val colorHex = String.format("#%06X", 0xFFFFFF and getColor(colorItem.colorRes)) - val enName by lazy { getLocalizedString(this@ColorSelectBaseActivity, colorItem.nameRes, Locale.forLanguageTag("en")) } + val enName by lazy { StringUtils.getStringForLocale(this@ColorSelectBaseActivity, Locale.forLanguageTag("en"), colorItem.nameRes) } val localizedName by lazy { getString(colorItem.nameRes) } when { searchTerm.startsWith("#") -> { @@ -577,12 +576,6 @@ abstract class ColorSelectBaseActivity : BaseActivity() { return input.replace("[^\\p{L}\\p{N}]+".toRegex(), "") } - private fun getLocalizedString(context: Context, @StringRes resId: Int, locale: Locale): String { - val config = Configuration(context.resources.configuration).apply { setLocale(locale) } - val localizedContext = context.createConfigurationContext(config) - return localizedContext.getString(resId) - } - private fun isRegexSearch(query: String?): Boolean { if (query.isNullOrBlank()) return false return query.length > 2 && query.startsWith("/") && query.endsWith("/") diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt index 51b2c085..798aec25 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt @@ -719,9 +719,6 @@ class CodeEditText : AppCompatEditText { // zh-CN: 当用户触摸文本区域 (非行号区域) 时尽早通知外层. if (event.action == MotionEvent.ACTION_DOWN && event.x >= paddingLeft) { onUserTouchInTextArea?.invoke() - // Best-effort IME wake-up for devices/ROMs where tap-to-show may be missed. - // zh-CN: 兜底唤起输入法, 兼容部分设备/ROM 点按后未自动弹出软键盘的情况. - requestSoftInputIfEditable() } // 如果行号区域被按下 @@ -754,20 +751,6 @@ class CodeEditText : AppCompatEditText { return super.onTouchEvent(event) } - private fun requestSoftInputIfEditable() { - if (mReadOnly || !showSoftInputOnFocus) return - if (!isFocusable || !isFocusableInTouchMode) return - - post { - if (mReadOnly || !showSoftInputOnFocus) return@post - if (!hasFocus()) { - requestFocus() - } - val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager ?: return@post - imm.showSoftInput(this@CodeEditText, InputMethodManager.SHOW_IMPLICIT) - } - } - fun removeBreakpoint(line: Int): Boolean { breakpoints.remove(line) ?: return false breakpointChangeListener?.onBreakpointChange(line, false) @@ -807,9 +790,6 @@ class CodeEditText : AppCompatEditText { } companion object { - const val TAG = "CodeEditText" - } - } diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/SymbolsConfigStore.kt b/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/SymbolsConfigStore.kt index bccedf0d..263ff221 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/SymbolsConfigStore.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/SymbolsConfigStore.kt @@ -2,15 +2,14 @@ package org.autojs.autojs.ui.edit.keyboard import android.content.Context import android.content.SharedPreferences -import android.content.res.Configuration +import androidx.core.content.edit import org.autojs.autojs.core.pref.Language import org.autojs.autojs.util.LocaleUtils +import org.autojs.autojs.util.StringUtils import org.autojs.autojs6.R import org.json.JSONArray import org.json.JSONObject -import java.util.Locale import java.util.concurrent.ConcurrentHashMap -import androidx.core.content.edit /** * Symbol profiles store for editor symbol bar. @@ -235,7 +234,7 @@ object SymbolsConfigStore { Language.values().forEach { lang -> if (lang == Language.AUTO) return@forEach - val s = getStringForLocale(context, lang.locale, R.string.text_symbols_profile_default_name) + val s = StringUtils.getStringForLocale(context, lang.locale, R.string.text_symbols_profile_default_name) .trim() if (s.isNotBlank()) add(s) } @@ -253,13 +252,6 @@ object SymbolsConfigStore { return getAllDefaultNameAliases(context).any { it == n } } - private fun getStringForLocale(context: Context, locale: Locale, resId: Int): String { - val cfg = Configuration(context.resources.configuration) - cfg.setLocale(locale) - val localized = context.createConfigurationContext(cfg) - return localized.resources.getString(resId) - } - private fun readRootOrCreate(context: Context): JSONObject { val sp = prefs(context) val raw = sp.getString(KEY_PROFILES_JSON, null) diff --git a/app/src/main/java/org/autojs/autojs/util/StringUtils.kt b/app/src/main/java/org/autojs/autojs/util/StringUtils.kt index 81b978dc..9cf12a2a 100644 --- a/app/src/main/java/org/autojs/autojs/util/StringUtils.kt +++ b/app/src/main/java/org/autojs/autojs/util/StringUtils.kt @@ -1,7 +1,9 @@ package org.autojs.autojs.util +import android.content.Context import android.content.res.Configuration import android.text.TextUtils +import androidx.annotation.StringRes import androidx.core.net.toUri import com.ibm.icu.text.CharsetDetector import com.ibm.icu.text.CharsetMatch @@ -372,6 +374,14 @@ object StringUtils { return if (isDir) "$noTail/" else noTail } + @JvmStatic + fun getStringForLocale(context: Context, locale: Locale, @StringRes resId: Int): String { + val cfg = Configuration(context.resources.configuration) + cfg.setLocale(locale) + val localized = context.createConfigurationContext(cfg) + return localized.resources.getString(resId) + } + class CharsetMatchWrapper(private val charsetMatch: CharsetMatch?) { val name: String? by lazy { charsetMatch?.name } diff --git a/plugin-api/paddle-ocr-engine/src/main/java/com/baidu/paddle/lite/ocr/PredictorNativeBridge.kt b/plugin-api/paddle-ocr-engine/src/main/java/com/baidu/paddle/lite/ocr/PredictorNativeBridge.kt index be3dc92d..540e3723 100644 --- a/plugin-api/paddle-ocr-engine/src/main/java/com/baidu/paddle/lite/ocr/PredictorNativeBridge.kt +++ b/plugin-api/paddle-ocr-engine/src/main/java/com/baidu/paddle/lite/ocr/PredictorNativeBridge.kt @@ -7,6 +7,8 @@ import android.os.Looper import android.util.Log import org.autojs.plugin.paddle.ocr.api.OcrOptions import org.autojs.plugin.paddle.ocr.api.OcrResult +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit /** * Native bridge based on com.baidu.paddle.lite.ocr.Predictor. @@ -37,37 +39,28 @@ class PredictorNativeBridge : NativeBridge { // Predictor.init() may do heavy work and should not block main thread. // zh-CN: Predictor.init() 可能较耗时, 不应阻塞主线程. val ok = if (Looper.getMainLooper() == Looper.myLooper()) { - val lock = Object() - val completed = booleanArrayOf(false) + val latch = CountDownLatch(1) val initResult = booleanArrayOf(false) Thread { initResult[0] = initInternal(context, profile) - synchronized(lock) { - completed[0] = true - lock.notifyAll() - } + latch.countDown() }.start() - val deadline = System.currentTimeMillis() + 60_000 var interrupted = false - synchronized(lock) { - try { - while (!completed[0]) { - val remaining = deadline - System.currentTimeMillis() - if (remaining <= 0) break - lock.wait(remaining) - } - } catch (_: InterruptedException) { - Thread.currentThread().interrupt() - interrupted = true + try { + val completed = latch.await(60, TimeUnit.SECONDS) + if (!completed) { + interrupted = false } + } catch (_: InterruptedException) { + Thread.currentThread().interrupt() + interrupted = true } - !interrupted && completed[0] && initResult[0] + !interrupted && latch.count == 0L && initResult[0] } else { initInternal(context, profile) } - if (!ok) { throw IllegalStateException(context.getString(R.string.error_failed_to_initialize_paddle_ocr_predictor)) }