6.6.2 - Alpha2 - ui.inflate 返回值丢失 attr/on/click 等原型方法的问题

This commit is contained in:
SuperMonster003
2025-02-05 21:07:48 +08:00
parent 7e59981147
commit b6368b403d
2 changed files with 13 additions and 9 deletions

View File

@@ -8,6 +8,7 @@
"ScriptRuntime 使用 require 引用内置模块时可能出现的同步状态异常 (试修) _[`issue #298`](http://issues.autojs6.com/298)_", "ScriptRuntime 使用 require 引用内置模块时可能出现的同步状态异常 (试修) _[`issue #298`](http://issues.autojs6.com/298)_",
"notice 模块缺失 getBuilder 等扩展方法的问题 _[`issue #301`](http://issues.autojs6.com/301)_", "notice 模块缺失 getBuilder 等扩展方法的问题 _[`issue #301`](http://issues.autojs6.com/301)_",
"floaty.window/floaty.rawWindow 无法在子线程执行的问题", "floaty.window/floaty.rawWindow 无法在子线程执行的问题",
"ui.inflate 返回值丢失 attr/on/click 等原型方法的问题",
"代码编辑器跳转到行尾时可能跳转到下一行起始位置的问题" "代码编辑器跳转到行尾时可能跳转到下一行起始位置的问题"
], ],
"improvement": [ "improvement": [

View File

@@ -14,6 +14,7 @@ import org.autojs.autojs.core.ui.inflater.InflateContext
import org.autojs.autojs.core.ui.inflater.LayoutInflaterDelegate import org.autojs.autojs.core.ui.inflater.LayoutInflaterDelegate
import org.autojs.autojs.core.ui.inflater.inflaters.ViewGroupInflater import org.autojs.autojs.core.ui.inflater.inflaters.ViewGroupInflater
import org.autojs.autojs.core.ui.inflater.inflaters.ViewInflater import org.autojs.autojs.core.ui.inflater.inflaters.ViewInflater
import org.autojs.autojs.core.ui.nativeview.NativeView
import org.autojs.autojs.core.ui.widget.JsListView import org.autojs.autojs.core.ui.widget.JsListView
import org.autojs.autojs.execution.ScriptExecuteActivity import org.autojs.autojs.execution.ScriptExecuteActivity
import org.autojs.autojs.extension.AnyExtensions.isJsNullish import org.autojs.autojs.extension.AnyExtensions.isJsNullish
@@ -341,14 +342,14 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt
@JvmStatic @JvmStatic
@RhinoRuntimeFunctionInterface @RhinoRuntimeFunctionInterface
fun inflate(scriptRuntime: ScriptRuntime, args: Array<out Any?>): View = ensureArgumentsLengthInRange(args, 1..3) { argList -> fun inflate(scriptRuntime: ScriptRuntime, args: Array<out Any?>): NativeView = ensureArgumentsLengthInRange(args, 1..3) { argList ->
val (xml, parent, isAttachedToParent) = argList val (xml, parent, isAttachedToParent) = argList
inflateRhinoRuntime(scriptRuntime, xml, parent, isAttachedToParent) inflateRhinoRuntime(scriptRuntime, xml, parent, isAttachedToParent)
} }
@JvmStatic @JvmStatic
@RhinoFunctionBody @RhinoFunctionBody
fun inflateRhinoRuntime(scriptRuntime: ScriptRuntime, xml: Any?, parent: Any? = null, isAttachedToParent: Any? = false): View { fun inflateRhinoRuntime(scriptRuntime: ScriptRuntime, xml: Any?, parent: Any? = null, isAttachedToParent: Any? = false): NativeView {
val parentView = parent.jsSanitize() val parentView = parent.jsSanitize()
require(parentView is ViewGroup?) { require(parentView is ViewGroup?) {
"Augment parentView for ui.inflate must be a ViewGroup instead of ${parentView.jsBrief()}" "Augment parentView for ui.inflate must be a ViewGroup instead of ${parentView.jsBrief()}"
@@ -359,7 +360,8 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt
activity is ScriptExecuteActivity -> activity activity is ScriptExecuteActivity -> activity
else -> throw WrappedIllegalArgumentException("Global activity ${activity.jsBrief()} must be a ScriptExecuteActivity") else -> throw WrappedIllegalArgumentException("Global activity ${activity.jsBrief()} must be a ScriptExecuteActivity")
} }
return scriptRuntime.ui.layoutInflater.inflate(toXMLString(xml), parentView, coerceBoolean(isAttachedToParent, false)) val inflatedView = scriptRuntime.ui.layoutInflater.inflate(toXMLString(xml), parentView, coerceBoolean(isAttachedToParent, false))
return ViewExtras.getNativeView(scriptRuntime.topLevelScope, inflatedView, inflatedView::class.java, scriptRuntime)
} }
@JvmStatic @JvmStatic
@@ -544,9 +546,9 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt
@JvmStatic @JvmStatic
@RhinoFunctionBody @RhinoFunctionBody
fun findByIdRhinoWithRuntime(scriptRuntime: ScriptRuntime, id: String?): View? { fun findByIdRhinoWithRuntime(scriptRuntime: ScriptRuntime, id: String?): NativeView? {
val view = scriptRuntime.ui.view ?: return null val view = scriptRuntime.ui.view ?: return null
return findByStringIdRhino(view, id) return findByStringIdRhinoRuntime(scriptRuntime, view, id)
} }
@JvmStatic @JvmStatic
@@ -556,19 +558,20 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt
require(view is View) { "Argument view for ui.findByStringId must be a View instead of ${view.jsBrief()}" } require(view is View) { "Argument view for ui.findByStringId must be a View instead of ${view.jsBrief()}" }
when { when {
id.isJsNullish() -> { id.isJsNullish() -> {
findByStringIdRhino(view, null) findByStringIdRhinoRuntime(scriptRuntime, view, null)
} }
else -> { else -> {
// require(id is String) { "Argument id for ui.findByStringId must be a string instead of ${id.jsBrief()}" } // require(id is String) { "Argument id for ui.findByStringId must be a string instead of ${id.jsBrief()}" }
findByStringIdRhino(view, coerceString(id)) findByStringIdRhinoRuntime(scriptRuntime, view, coerceString(id))
} }
} }
} }
@JvmStatic @JvmStatic
@RhinoFunctionBody @RhinoFunctionBody
fun findByStringIdRhino(view: View, id: String?): View? { fun findByStringIdRhinoRuntime(scriptRuntime: ScriptRuntime, view: View, id: String?): NativeView? {
return JsViewHelper.findViewByStringId(view, id) val foundView = JsViewHelper.findViewByStringId(view, id) ?: return null
return ViewExtras.getNativeView(scriptRuntime.topLevelScope, foundView, foundView::class.java, scriptRuntime)
} }
@JvmStatic @JvmStatic