Skip to content

Commit

Permalink
代码优化
Browse files Browse the repository at this point in the history
  • Loading branch information
aiselp committed Oct 12, 2023
1 parent 6703c2d commit 85e3107
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 134 deletions.
30 changes: 14 additions & 16 deletions autojs/src/main/java/com/stardust/autojs/ScriptEngineService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ import org.greenrobot.eventbus.Subscribe
* Created by Stardust on 2017/1/23.
*/
class ScriptEngineService internal constructor(builder: ScriptEngineServiceBuilder) {
private val mContext: Context
private val mUiHandler: UiHandler
val globalConsole: Console
private val mScriptEngineManager: ScriptEngineManager
private val mUiHandler: UiHandler = builder.mUiHandler
private val mContext: Context = mUiHandler.context
val globalConsole: Console = builder.mGlobalConsole
private val mScriptEngineManager: ScriptEngineManager = builder.mScriptEngineManager
private val mEngineLifecycleObserver: EngineLifecycleObserver =
object : EngineLifecycleObserver() {
override fun onEngineRemove(engine: ScriptEngine<*>?) {
Expand All @@ -43,10 +43,6 @@ class ScriptEngineService internal constructor(builder: ScriptEngineServiceBuild
private val mScriptExecutions = LinkedHashMap<Int, ScriptExecution>()

init {
mUiHandler = builder.mUiHandler
mContext = mUiHandler.context
mScriptEngineManager = builder.mScriptEngineManager
globalConsole = builder.mGlobalConsole
mScriptEngineManager.setEngineLifecycleCallback(mEngineLifecycleObserver)
mScriptExecutionObserver.registerScriptExecutionListener(GLOBAL_LISTENER)
EVENT_BUS.register(this)
Expand All @@ -62,11 +58,11 @@ class ScriptEngineService internal constructor(builder: ScriptEngineServiceBuild
mEngineLifecycleObserver.unregisterCallback(engineLifecycleCallback)
}

fun registerGlobalScriptExecutionListener(listener: ScriptExecutionListener?): Boolean {
fun registerGlobalScriptExecutionListener(listener: ScriptExecutionListener): Boolean {
return mScriptExecutionObserver.registerScriptExecutionListener(listener)
}

fun unregisterGlobalScriptExecutionListener(listener: ScriptExecutionListener?): Boolean {
fun unregisterGlobalScriptExecutionListener(listener: ScriptExecutionListener): Boolean {
return mScriptExecutionObserver.removeScriptExecutionListener(listener)
}

Expand All @@ -76,6 +72,7 @@ class ScriptEngineService internal constructor(builder: ScriptEngineServiceBuild
return execution
}

//脚本启动入口
private fun executeInternal(task: ScriptExecutionTask): ScriptExecution {
if (task.listener != null) {
task.setExecutionListener(
Expand Down Expand Up @@ -206,23 +203,23 @@ class ScriptEngineService internal constructor(builder: ScriptEngineServiceBuild
)
}

override fun onSuccess(execution: ScriptExecution, result: Any?) {
override fun onSuccess(execution: ScriptExecution?, result: Any?) {
onFinish(execution)
}

private fun onFinish(execution: ScriptExecution) {}
private fun onFinish(execution: ScriptExecution?) {}
override fun onException(execution: ScriptExecution, e: Throwable) {
e.printStackTrace()
onFinish(execution)
var message: String? = null
val engine = execution.engine
if (!ScriptInterruptedException.causedByInterrupted(e)) {
message = e.message
if (execution.engine is JavaScriptEngine) {
(execution.engine as JavaScriptEngine).runtime.console.error(e)
if (engine is JavaScriptEngine) {
engine.runtime.console.error(e)
}
}
if (execution.engine is JavaScriptEngine) {
val engine = execution.engine as JavaScriptEngine
if (engine is JavaScriptEngine) {
val uncaughtException = engine.uncaughtException
if (uncaughtException != null) {
engine.runtime.console.error(uncaughtException)
Expand All @@ -240,6 +237,7 @@ class ScriptEngineService internal constructor(builder: ScriptEngineServiceBuild
}
}
private var sInstance: ScriptEngineService? = null

@JvmStatic
var instance: ScriptEngineService?
get() = sInstance
Expand Down
118 changes: 0 additions & 118 deletions autojs/src/main/java/com/stardust/autojs/runtime/api/UI.java

This file was deleted.

83 changes: 83 additions & 0 deletions autojs/src/main/java/com/stardust/autojs/runtime/api/UI.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.stardust.autojs.runtime.api

import android.content.Context
import android.graphics.drawable.Drawable
import com.stardust.autojs.core.graphics.ScriptCanvasView
import com.stardust.autojs.core.ui.inflater.DynamicLayoutInflater
import com.stardust.autojs.core.ui.inflater.ResourceParser
import com.stardust.autojs.core.ui.inflater.inflaters.CanvasViewInflater
import com.stardust.autojs.core.ui.inflater.inflaters.JsGridViewInflater
import com.stardust.autojs.core.ui.inflater.inflaters.JsImageViewInflater
import com.stardust.autojs.core.ui.inflater.inflaters.JsListViewInflater
import com.stardust.autojs.core.ui.widget.JsGridView
import com.stardust.autojs.core.ui.widget.JsImageView
import com.stardust.autojs.core.ui.widget.JsListView
import com.stardust.autojs.rhino.ProxyObject
import com.stardust.autojs.runtime.ScriptRuntime
import org.mozilla.javascript.Scriptable
import java.util.concurrent.ConcurrentHashMap

/**
* Created by Stardust on 2017/5/14.
*/
class UI(private val mContext: Context, private val mRuntime: ScriptRuntime) : ProxyObject() {
private val mProperties: MutableMap<String, Any> = ConcurrentHashMap()

val resourceParser: ResourceParser = ResourceParser(Drawables())
val layoutInflater: DynamicLayoutInflater =DynamicLayoutInflater(resourceParser)

init {
layoutInflater.context = mContext
layoutInflater.registerViewAttrSetter(
JsImageView::class.java.name,
JsImageViewInflater(resourceParser)
)
layoutInflater.registerViewAttrSetter(
JsListView::class.java.name,
JsListViewInflater<JsListView?>(resourceParser, mRuntime)
)
layoutInflater.registerViewAttrSetter(
JsGridView::class.java.name,
JsGridViewInflater<JsGridView?>(resourceParser, mRuntime)
)
layoutInflater.registerViewAttrSetter(
ScriptCanvasView::class.java.name,
CanvasViewInflater(resourceParser, mRuntime)
)
mProperties["layoutInflater"] = layoutInflater
}

var bindingContext: Any?
get() = mProperties["bindingContext"]
set(context) {
if (context == null) mProperties.remove("bindingContext") else mProperties["bindingContext"] =
context
}

override fun getClassName(): String {
return UI::class.java.simpleName
}

override fun get(name: String, start: Scriptable): Any {
val value = mProperties[name]
return value ?: super.get(name, start)
}

override fun put(name: String, start: Scriptable, value: Any) {
if (mProperties.containsKey(name)) {
mProperties[name] = value
} else {
super.put(name, start, value)
}
}

fun recycle() {
layoutInflater.context = null
}

private inner class Drawables : com.stardust.autojs.core.ui.inflater.util.Drawables() {
override fun decodeImage(path: String): Drawable {
return super.decodeImage(mRuntime.files.path(path))
}
}
}

0 comments on commit 85e3107

Please sign in to comment.