From 9190b2b6056b63983614945cbc160b04e20c8bfe Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Sat, 7 Mar 2026 21:17:21 +0800 Subject: [PATCH] =?UTF-8?q?6.7.0=20-=20Alpha23=20-=20=E6=9B=BF=E6=8D=A2=20?= =?UTF-8?q?Kotlin=20=E4=B8=AD=E7=9A=84=20Object()=20=E9=94=81=E4=B8=BA=20A?= =?UTF-8?q?ny()=20=E6=88=96=20CountDownLatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/autojs/autojs/core/looper/Loopers.kt | 23 ++++++---------- .../org/autojs/autojs/runtime/api/Barcode.kt | 27 +++++++++---------- .../org/autojs/autojs/runtime/api/OcrMLKit.kt | 27 +++++++++---------- .../org/autojs/autojs/runtime/api/Plugins.kt | 25 +++++++---------- .../runtime/api/ScriptPromiseAdapter.kt | 4 +-- .../CommandBasedPermissionItemHelper.kt | 13 ++++++--- version.properties | 6 ++--- 7 files changed, 56 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/core/looper/Loopers.kt b/app/src/main/java/org/autojs/autojs/core/looper/Loopers.kt index 352ee5e5..67b7bdcb 100644 --- a/app/src/main/java/org/autojs/autojs/core/looper/Loopers.kt +++ b/app/src/main/java/org/autojs/autojs/core/looper/Loopers.kt @@ -9,6 +9,7 @@ import org.autojs.autojs.rhino.AutoJsContext import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.util.RhinoUtils.isMainThread import org.mozilla.javascript.Context +import java.util.concurrent.CountDownLatch import java.util.concurrent.CopyOnWriteArrayList import kotlin.concurrent.Volatile @@ -28,7 +29,7 @@ class Loopers(val scriptRuntime: ScriptRuntime) : MessageQueue.IdleHandler { private var mLooperQuitHandlers = ThreadLocal>() private var mTimers = scriptRuntime.timers private var mThreads = scriptRuntime.threads - private val mLock = Object() + private val mServantLooperReady = CountDownLatch(1) private var mMaxWaitId: ThreadLocal = object : ThreadLocal() { override fun initialValue() = 0 @@ -44,16 +45,10 @@ class Loopers(val scriptRuntime: ScriptRuntime) : MessageQueue.IdleHandler { get() { if (mServantLooper == null) { initServantThread() - synchronized(mLock) { - try { - try { - mLock.wait() - } finally { - mLock.notify() - } - } catch (ex: InterruptedException) { - /* Ignored. */ - } + try { + mServantLooperReady.await() + } catch (_: InterruptedException) { + /* Ignored. */ } } return mServantLooper!! @@ -160,9 +155,7 @@ class Loopers(val scriptRuntime: ScriptRuntime) : MessageQueue.IdleHandler { ThreadCompat { Looper.prepare() mServantLooper = Looper.myLooper() - synchronized(mLock) { - mLock.notifyAll() - } + mServantLooperReady.countDown() Looper.loop() }.start() } @@ -182,4 +175,4 @@ class Loopers(val scriptRuntime: ScriptRuntime) : MessageQueue.IdleHandler { } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/Barcode.kt b/app/src/main/java/org/autojs/autojs/runtime/api/Barcode.kt index 81f2b482..f4f0bc21 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/Barcode.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/Barcode.kt @@ -5,6 +5,8 @@ import com.google.mlkit.vision.barcode.BarcodeScannerOptions import com.google.mlkit.vision.barcode.BarcodeScanning import com.google.mlkit.vision.common.InputImage import org.autojs.autojs.core.image.ImageWrapper +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit import com.google.mlkit.vision.barcode.common.Barcode as MLKitBarcode /** @@ -23,6 +25,7 @@ class Barcode { val scanner = BarcodeScanning.getClient(options) val inputImage = InputImage.fromBitmap(image.bitmap, 0) + val scanCompletedSignal = CountDownLatch(1) var results: List? = null @@ -32,22 +35,20 @@ class Barcode { onlyOneResult -> barcodes.firstOrNull()?.let { results = listOf(WrappedBarcode(it)) } else -> results = barcodes.map { WrappedBarcode(it) } } - lockNotify() + scanCompletedSignal.countDown() } .addOnFailureListener { e -> e.printStackTrace() - lockNotify() + scanCompletedSignal.countDown() } - .addOnCanceledListener { lockNotify() } - .addOnCompleteListener { lockNotify() } + .addOnCanceledListener { scanCompletedSignal.countDown() } + .addOnCompleteListener { scanCompletedSignal.countDown() } while (!resultScan.isComplete) { - synchronized(lock) { - try { - lock.wait(50) - } catch (_: InterruptedException) { - /* Ignored. */ - } + try { + scanCompletedSignal.await(50, TimeUnit.MILLISECONDS) + } catch (_: InterruptedException) { + /* Ignored. */ } } @@ -59,12 +60,8 @@ class Barcode { return results ?: emptyList() } - private fun lockNotify() = synchronized(lock) { lock.notify() } - companion object { - private val lock = Object() - private val TAG: String = Companion::class.java.simpleName const val TYPE_NAME_UNKNOWN = "TYPE_NAME_UNKNOWN" @@ -72,4 +69,4 @@ class Barcode { } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/OcrMLKit.kt b/app/src/main/java/org/autojs/autojs/runtime/api/OcrMLKit.kt index 0ed98dec..5185ca9f 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/OcrMLKit.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/OcrMLKit.kt @@ -6,6 +6,8 @@ import com.google.mlkit.vision.text.TextRecognition import com.google.mlkit.vision.text.TextRecognizer import com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions import org.autojs.autojs.core.image.ImageWrapper +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit /** * Created by SuperMonster003 on Mar 18, 2023. @@ -34,22 +36,21 @@ class OcrMLKit { if (bitmap.isRecycled) return emptyList().also { image.shoot() } val inputImage = InputImage.fromBitmap(bitmap, 0) + val detectCompletedSignal = CountDownLatch(1) val result = recognizer!!.process(inputImage) - .addOnCanceledListener { lockNotify() } - .addOnCompleteListener { lockNotify() } - .addOnSuccessListener { lockNotify() } + .addOnCanceledListener { detectCompletedSignal.countDown() } + .addOnCompleteListener { detectCompletedSignal.countDown() } + .addOnSuccessListener { detectCompletedSignal.countDown() } .addOnFailureListener { e: Exception -> Log.w(TAG, "Failed to detect: ${e.message}") e.printStackTrace() - lockNotify() + detectCompletedSignal.countDown() } while (!result.isComplete) { - synchronized(lock) { - try { - lock.wait(50) - } catch (_: InterruptedException) { - /* Ignored. */ - } + try { + detectCompletedSignal.await(50, TimeUnit.MILLISECONDS) + } catch (_: InterruptedException) { + /* Ignored. */ } } image.shoot() @@ -77,14 +78,10 @@ class OcrMLKit { } } - private fun lockNotify() = synchronized(lock) { lock.notify() } - companion object { - private val lock = Object() - private val TAG: String = Companion::class.java.simpleName } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/Plugins.kt b/app/src/main/java/org/autojs/autojs/runtime/api/Plugins.kt index 79db4a3a..0ad59067 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/Plugins.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/Plugins.kt @@ -48,21 +48,16 @@ class Plugins(private val context: Context, private val runtime: PluginRuntime) ) packages.putIfAbsent(packageName, packageContext)?.let { packageContext = it } - val lock = Object() - synchronized(lock) { - try { - val plugin = Plugin.load(context, packageContext, runtime, runtime.topLevelScope) - val scriptCacheDir = getScriptCacheDir(packageName) - copyAssetDir(packageContext.context.assets, plugin.assetsScriptDir, scriptCacheDir.path) - plugin.mainScriptPath = File(scriptCacheDir, "index.js").path - bindService(plugin) - mPlugins[packageName] = plugin - lock.notify() - return plugin - } catch (e: Exception) { - lock.notify() - throw PluginLoadException(e) - } + return try { + val plugin = Plugin.load(context, packageContext, runtime, runtime.topLevelScope) + val scriptCacheDir = getScriptCacheDir(packageName) + copyAssetDir(packageContext.context.assets, plugin.assetsScriptDir, scriptCacheDir.path) + plugin.mainScriptPath = File(scriptCacheDir, "index.js").path + bindService(plugin) + mPlugins[packageName] = plugin + plugin + } catch (e: Exception) { + throw PluginLoadException(e) } } diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/ScriptPromiseAdapter.kt b/app/src/main/java/org/autojs/autojs/runtime/api/ScriptPromiseAdapter.kt index 4a05cab1..fd7ef634 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/ScriptPromiseAdapter.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/ScriptPromiseAdapter.kt @@ -42,7 +42,7 @@ class ScriptPromiseAdapter : Resolvable { } companion object { - private val UNSET = Object() + private val UNSET = Any() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommandBasedPermissionItemHelper.kt b/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommandBasedPermissionItemHelper.kt index 8f89c009..752d9c72 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommandBasedPermissionItemHelper.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommandBasedPermissionItemHelper.kt @@ -11,6 +11,7 @@ import org.autojs.autojs.util.ClipboardUtils import org.autojs.autojs.util.RootUtils import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R +import java.util.concurrent.CountDownLatch interface CommandBasedPermissionItemHelper : PermissionItemHelper, IPermissionRootItem, IPermissionShizukuItem, IPermissionAdbItem { @@ -92,17 +93,21 @@ interface CommandBasedPermissionItemHelper : PermissionItemHelper, IPermissionRo } fun withAdb(action: ACTION): Boolean { - val lock = Object() + val dialogDismissSignal = CountDownLatch(1) AdbDialogBuilder(context, getCommand(action)) .setChecker(object : AdbDialogBuilder.Checker { override fun check() = has() }) .build() - .dismissListener { synchronized(lock) { lock.notify() } } + .dismissListener { dialogDismissSignal.countDown() } .let { Handler(Looper.getMainLooper()).post { it.show() } } - synchronized(lock) { lock.wait() } + try { + dialogDismissSignal.await() + } catch (_: InterruptedException) { + /* Ignored. */ + } return has() } @@ -156,4 +161,4 @@ interface CommandBasedPermissionItemHelper : PermissionItemHelper, IPermissionRo } -} \ No newline at end of file +} diff --git a/version.properties b/version.properties index a858c910..a618848c 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Sat Mar 07 19:14:09 CST 2026 -BUILD_TIME=1772882049270 +#Sat Mar 07 21:17:02 CST 2026 +BUILD_TIME=1772889422226 COMPILE_SDK_VERSION=36 IMAGE_QUANT_CMAKE_VERSION=3.22.1 IMAGE_QUANT_NDK_VERSION=26.1.10909125 @@ -27,6 +27,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13 RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3 TARGET_SDK_VERSION=36 TARGET_SDK_VERSION_INRT=29 -VERSION_BUILD=3780 +VERSION_BUILD=3781 VERSION_NAME=6.7.0 Alpha23 VSCODE_EXT_REQUIRED_VERSION=1.0.13