From 0a63aab052fed962b67cd800c18493f09cf37c13 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Wed, 12 Jul 2023 17:21:45 +0800 Subject: [PATCH] =?UTF-8?q?6.3.3=20-=20pre2=20-=20PR=20by=20=E6=8A=A0?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/modules/__automator__.js | 14 +++++++-- .../accessibility/AccessibilityService.kt | 7 ++--- .../accessibility/SimpleActionAutomator.kt | 30 +++++++++---------- .../automator/AccessibilityEventWrapper.kt | 3 ++ .../autojs/autojs/core/automator/UiObject.kt | 27 +++++++++++++---- .../org/autojs/autojs/core/ui/JsViewHelper.kt | 14 ++++----- .../model/autocomplete/CodeCompletion.kt | 1 + .../model/autocomplete/CodeCompletions.kt | 1 + .../autojs/model/autocomplete/Symbols.java | 6 ++-- .../autojs/autojs/runtime/ScriptRuntime.java | 6 ++-- .../org/autojs/autojs/ui/edit/EditorView.kt | 6 +++- .../autojs/ui/edit/editor/CodeEditor.java | 2 +- build.gradle.kts | 1 - settings.gradle.kts | 1 + 14 files changed, 75 insertions(+), 44 deletions(-) diff --git a/app/src/main/assets/modules/__automator__.js b/app/src/main/assets/modules/__automator__.js index fb148f5a..8ecdd496 100644 --- a/app/src/main/assets/modules/__automator__.js +++ b/app/src/main/assets/modules/__automator__.js @@ -64,11 +64,19 @@ module.exports = function (scriptRuntime, scope) { stateListener(listener) { return a11yBridge.setAccessibilityListener(listener); }, - registerEvents(name, listener) { - return rtAutomator.registerEvents(name, listener); + registerEvent(name, listener) { + return rtAutomator.registerEvent(name, listener); }, + /** @deprecated */ + registerEvents(name, listener) { + return rtAutomator.registerEvent(name, listener); + }, + removeEvent(name) { + return rtAutomator.removeEvent(name); + }, + /** @deprecated */ removeEvents(name) { - return rtAutomator.removeEvents(name); + return rtAutomator.removeEvent(name); }, waitFor(timeout) { automator.waitForService(timeout); diff --git a/app/src/main/java/org/autojs/autojs/core/accessibility/AccessibilityService.kt b/app/src/main/java/org/autojs/autojs/core/accessibility/AccessibilityService.kt index 9c6aa475..2a412561 100644 --- a/app/src/main/java/org/autojs/autojs/core/accessibility/AccessibilityService.kt +++ b/app/src/main/java/org/autojs/autojs/core/accessibility/AccessibilityService.kt @@ -8,7 +8,7 @@ import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED import android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED import android.view.accessibility.AccessibilityNodeInfo -import org.autojs.autojs.AutoJs +import org.autojs.autojs.core.accessibility.SimpleActionAutomator.Companion.AccessibilityEventCallback import org.autojs.autojs.core.automator.AccessibilityEventWrapper import org.autojs.autojs.event.EventDispatcher import org.autojs.autojs.pref.Pref @@ -107,7 +107,6 @@ open class AccessibilityService : android.accessibilityservice.AccessibilityServ override fun onDestroy() { Log.v(TAG, "onDestroy: $instance") - AutoJs.instance.globalConsole.verbose("无障碍服务已关闭") instance = null bridge = null eventExecutor.shutdownNow() @@ -117,7 +116,6 @@ open class AccessibilityService : android.accessibilityservice.AccessibilityServ override fun onServiceConnected() { instance = this - AutoJs.instance.globalConsole.verbose("无障碍服务已开启${instance}") serviceInfo = serviceInfo.apply { AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS.let { flags = (if (Pref.isStableModeEnabled) flags and it.inv() else flags or it) @@ -168,7 +166,7 @@ open class AccessibilityService : android.accessibilityservice.AccessibilityServ fun isNotRunning() = !isRunning() fun addDelegate(uniquePriority: Int, delegate: AccessibilityDelegate) { - //用于记录eventTypes中的事件id + // 用于记录eventTypes中的事件id delegates[uniquePriority] = delegate val set = delegate.eventTypes if (set == null) { @@ -206,6 +204,7 @@ open class AccessibilityService : android.accessibilityservice.AccessibilityServ LOCK.unlock() } } + @JvmStatic fun clearAccessibilityEventCallback() { instance?.eventBox?.clear() } diff --git a/app/src/main/java/org/autojs/autojs/core/accessibility/SimpleActionAutomator.kt b/app/src/main/java/org/autojs/autojs/core/accessibility/SimpleActionAutomator.kt index 1460a2c8..006fed56 100644 --- a/app/src/main/java/org/autojs/autojs/core/accessibility/SimpleActionAutomator.kt +++ b/app/src/main/java/org/autojs/autojs/core/accessibility/SimpleActionAutomator.kt @@ -2,7 +2,6 @@ package org.autojs.autojs.core.accessibility -import android.accessibilityservice.AccessibilityService import android.accessibilityservice.GestureDescription import android.graphics.Bitmap import android.graphics.Rect @@ -15,7 +14,6 @@ import android.view.accessibility.AccessibilityNodeInfo import androidx.annotation.RequiresApi import androidx.core.view.accessibility.AccessibilityNodeInfoCompat import org.autojs.autojs.annotation.ScriptInterface -import org.autojs.autojs.core.accessibility.AccessibilityService.Companion.isRunning import org.autojs.autojs.core.automator.AccessibilityEventWrapper import org.autojs.autojs.core.automator.GlobalActionAutomator import org.autojs.autojs.core.automator.UiObject @@ -29,10 +27,7 @@ import org.autojs.autojs.runtime.api.ScreenMetrics import org.autojs.autojs.runtime.api.ScriptPromiseAdapter import org.autojs.autojs.util.DeveloperUtils import java.util.concurrent.atomic.AtomicInteger - -interface AccessibilityEventCallback { - fun onAccessibilityEvent(event: AccessibilityEventWrapper) -} +import android.accessibilityservice.AccessibilityService as AndroidAccessibilityService /** * Created by Stardust on 2017/4/2. @@ -182,21 +177,21 @@ class SimpleActionAutomator(private val accessibilityBridge: AccessibilityBridge fun paste(target: ActionTarget) = performAction(target.createAction(AccessibilityNodeInfo.ACTION_PASTE)) @ScriptInterface - fun isServiceRunning() = isRunning() + fun isServiceRunning() = AccessibilityService.isRunning() @ScriptInterface fun ensureService() = accessibilityBridge.ensureServiceEnabled() //todo:优化实现方式 - fun registerEvents(eventName: String,callback: AccessibilityEventCallback) { + // TODO by SuperMonster003 on Jul 12, 2023. + // ! Ref to Auto.js Pro + fun registerEvent(eventName: String, callback: AccessibilityEventCallback) { ensureService() - val service = org.autojs.autojs.core.accessibility.AccessibilityService.instance - service?.addAccessibilityEventCallback(eventName,callback) + AccessibilityService.instance?.addAccessibilityEventCallback(eventName, callback) } - fun removeEvents(eventName: String) { - val service = org.autojs.autojs.core.accessibility.AccessibilityService.instance - service?.removeAccessibilityEventCallback(eventName) + fun removeEvent(eventName: String) { + AccessibilityService.instance?.removeAccessibilityEventCallback(eventName) } private fun performAction(simpleAction: SimpleAction): Boolean { @@ -221,8 +216,8 @@ class SimpleActionAutomator(private val accessibilityBridge: AccessibilityBridge val promiseAdapter = mPromiseAdapter ?: ScriptPromiseAdapter().also { mPromiseAdapter = it } val service = accessibilityBridge.service!! val executor = service.mainExecutor - val callback = object : AccessibilityService.TakeScreenshotCallback { - override fun onSuccess(screenshot: AccessibilityService.ScreenshotResult) { + val callback = object : AndroidAccessibilityService.TakeScreenshotCallback { + override fun onSuccess(screenshot: AndroidAccessibilityService.ScreenshotResult) { val hardwareBuffer = Bitmap.wrapHardwareBuffer(screenshot.hardwareBuffer, screenshot.colorSpace) // @Hint by SuperMonster003 on Jun 9, 2023. @@ -239,7 +234,7 @@ class SimpleActionAutomator(private val accessibilityBridge: AccessibilityBridge } override fun onFailure(errorCode: Int) { - if (errorCode == AccessibilityService.ERROR_TAKE_SCREENSHOT_INTERVAL_TIME_SHORT) { + if (errorCode == AndroidAccessibilityService.ERROR_TAKE_SCREENSHOT_INTERVAL_TIME_SHORT) { Handler(Looper.getMainLooper()).postDelayed({ captureScreen() }, 50) @@ -259,6 +254,9 @@ class SimpleActionAutomator(private val accessibilityBridge: AccessibilityBridge val accessibilityDelegateCounter = AtomicInteger(1000) val TAG: String = SimpleActionAutomator::class.java.name + interface AccessibilityEventCallback { + fun onAccessibilityEvent(event: AccessibilityEventWrapper) + } } } diff --git a/app/src/main/java/org/autojs/autojs/core/automator/AccessibilityEventWrapper.kt b/app/src/main/java/org/autojs/autojs/core/automator/AccessibilityEventWrapper.kt index bffcec05..5e1bea68 100644 --- a/app/src/main/java/org/autojs/autojs/core/automator/AccessibilityEventWrapper.kt +++ b/app/src/main/java/org/autojs/autojs/core/automator/AccessibilityEventWrapper.kt @@ -3,6 +3,9 @@ package org.autojs.autojs.core.automator import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityNodeInfo +/** + * Created by 抠脚本人 on Jul 10, 2023. + */ class AccessibilityEventWrapper(event: AccessibilityEvent) { val raw = event val packageName: CharSequence? = event.packageName diff --git a/app/src/main/java/org/autojs/autojs/core/automator/UiObject.kt b/app/src/main/java/org/autojs/autojs/core/automator/UiObject.kt index 55015bcf..bcaf88f7 100644 --- a/app/src/main/java/org/autojs/autojs/core/automator/UiObject.kt +++ b/app/src/main/java/org/autojs/autojs/core/automator/UiObject.kt @@ -60,17 +60,34 @@ open class UiObject( } } catch (e: IllegalStateException) { // FIXME: 2017/5/5 - null + null.also { e.printStackTrace() } } open fun child(i: Int): UiObject? = try { super.getChild(i)?.run { UiObject(unwrap(), depth + 1, i) } } catch (e: IllegalStateException) { // FIXME: 2017/5/5 - null + null.also { e.printStackTrace() } } - open fun brother(i: Int): UiObject? = parent()?.child(indexInParent() + i) + @Deprecated("Deprecated in Java", ReplaceWith("offset(i)")) + open fun brother(i: Int): UiObject? = offset(i) + + open fun offset(i: Int): UiObject? = try { + parent()?.child(indexInParent + i) + } catch (e: ArrayIndexOutOfBoundsException) { + null.also { e.printStackTrace() } + } + + open fun sibling(i: Int): UiObject? = try { + parent()?.child(i) + } catch (e: ArrayIndexOutOfBoundsException) { + null.also { e.printStackTrace() } + } + + open fun nextSibling() = sibling(1) + + open fun previousSibling() = sibling(-1) open fun childCount() = childCount @@ -344,14 +361,14 @@ open class UiObject( } } catch (e: IllegalStateException) { // FIXME: 2017/5/5 - false + false.also { e.printStackTrace() } } override fun performAction(action: Int): Boolean = try { super.performAction(action) } catch (e: IllegalStateException) { // FIXME: 2017/5/5 - false + false.also { e.printStackTrace() } } override fun getChild(index: Int): AccessibilityNodeInfoCompat = diff --git a/app/src/main/java/org/autojs/autojs/core/ui/JsViewHelper.kt b/app/src/main/java/org/autojs/autojs/core/ui/JsViewHelper.kt index a950bbf9..4d22c2f1 100644 --- a/app/src/main/java/org/autojs/autojs/core/ui/JsViewHelper.kt +++ b/app/src/main/java/org/autojs/autojs/core/ui/JsViewHelper.kt @@ -6,18 +6,16 @@ import org.autojs.autojs.core.ui.inflater.util.Ids /** * Created by Stardust on 2017/5/14. + * Transformed by 抠脚本人 on Jul 10, 2023. */ object JsViewHelper { @JvmStatic fun findViewByStringId(view: View, id: String?): View? { - var result = view.findViewById(Ids.parse(id)) - if (result != null) return result - if (view !is ViewGroup) { - return null - } - for (i in 0 until view.childCount) { - result = findViewByStringId(view.getChildAt(i), id) - if (result != null) return result + view.findViewById(Ids.parse(id))?.let { return it } + if (view is ViewGroup) { + for (i in 0 until view.childCount) { + findViewByStringId(view.getChildAt(i), id)?.let { return it } + } } return null } diff --git a/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletion.kt b/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletion.kt index aec12124..2a2a00ce 100644 --- a/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletion.kt +++ b/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletion.kt @@ -2,6 +2,7 @@ package org.autojs.autojs.model.autocomplete /** * Created by Stardust on 2018/2/3. + * Transformed by 抠脚本人 on Jul 11, 2023. */ class CodeCompletion { val hint: String diff --git a/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletions.kt b/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletions.kt index 087be311..60b82405 100644 --- a/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletions.kt +++ b/app/src/main/java/org/autojs/autojs/model/autocomplete/CodeCompletions.kt @@ -2,6 +2,7 @@ package org.autojs.autojs.model.autocomplete /** * Created by Stardust on 2017/9/27. + * Transformed by 抠脚本人 on Jul 11, 2023. */ class CodeCompletions(val from: Int, private val mCompletions: List) { fun size(): Int { diff --git a/app/src/main/java/org/autojs/autojs/model/autocomplete/Symbols.java b/app/src/main/java/org/autojs/autojs/model/autocomplete/Symbols.java index 7a0855c1..5b82d607 100644 --- a/app/src/main/java/org/autojs/autojs/model/autocomplete/Symbols.java +++ b/app/src/main/java/org/autojs/autojs/model/autocomplete/Symbols.java @@ -9,10 +9,10 @@ import java.util.Arrays; public class Symbols { private static final CodeCompletions sSymbols = CodeCompletions.just(Arrays.asList( - ",", ".", "=", ";", "\"", "'", "/", "_", + ",", ".", "=", ";", "\"", "'", "/", "-", "_", "(", ")", "[", "]", "{", "}", "<", ">", - "+", "*", "?", "$", "#", "@", "`", - "-", "\\", "&", "|", "!", "%", "×", "÷", + "+", "*", "?", ":", "$", "#", "@", "`", + "\\", "&", "|", "!", "%", "×", "÷", "∈", "∩", "∪", "∉", "⊙", "∅", "¥", "€", "°", "℃", "∵", "∴", "±", "≠", "≈", "α", "β", "γ", "λ", "μ", "π", "σ", "ω", diff --git a/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.java b/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.java index 89328f8d..745f74c9 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.java +++ b/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.java @@ -528,8 +528,10 @@ public class ScriptRuntime { console.hideDelayed(); } }); - //清空无障碍事件 - ignoresException(AccessibilityService.Companion::clearAccessibilityEventCallback); + + // 清空无障碍事件 + ignoresException(AccessibilityService::clearAccessibilityEventCallback); + ignoresException(RootUtils::resetRuntimeOverriddenRootModeState); ignoresException(ImageWrapper::recycleAll); diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt index 7b69074e..20493262 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt @@ -286,7 +286,11 @@ open class EditorView : FrameLayout, OnHintClickListener, ClickCallback, Toolbar .setEditView(editor!!.codeEditText) .build() //todo:不清楚作用,暂时注释掉 - //mFunctionsKeyboard!!.setClickCallback(this) + // @Hint by SuperMonster003 on Jul 12, 2023. + // ! 此处的点击事件回调注册是为了使功能键盘智能提示的属性可以实现其接口对应的功能: + // ! 点击: 自动补全, 并根据情况添加括号或句点符号等. + // ! 长按: 以浮动窗口形式展示 [方法/属性/模块] 对应的文档内容 (如果存在的话). + mFunctionsKeyboard!!.setClickCallback(this) mShowFunctionsButton!!.setOnLongClickListener { editor!!.beautifyCode() true diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java index 1126be2f..66978284 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java @@ -409,7 +409,7 @@ public class CodeEditor extends HVScrollView { public void onSuccess(String beautifiedCode) { setProgress(false); mCodeEditText.setText(beautifiedCode); - //格式化后恢复光标位置 + // 格式化后恢复光标位置 mCodeEditText.setSelection(pos); } diff --git a/build.gradle.kts b/build.gradle.kts index 801fa953..0f7a073b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -128,7 +128,6 @@ buildscript { } dependencies /* Android/Kotlin Gradle Plugin. */ { - classpath("com.android.tools.build:gradle:7.1.2") val android = gradlePluginVersionList[platformType]!!["android"]!! val kotlin = gradlePluginVersionList[platformType]!!["kotlin"]!! diff --git a/settings.gradle.kts b/settings.gradle.kts index 0faa5344..2f65e6a0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,5 @@ enableFeaturePreview("STABLE_CONFIGURATION_CACHE") + include( ":app", ":libs:android-job-simplified-1.4.3",