From c4361ae71aefb0a7efd04e815382cd23f4875e9b Mon Sep 17 00:00:00 2001 From: aiselp Date: Sat, 21 Oct 2023 15:12:59 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 1 + .../org/autojs/autojs/ui/main/MainActivity.kt | 18 +- .../autojs/ui/main/ViewPager2Adapter.kt | 4 +- ...WebViewFragment.kt => EditorAppManager.kt} | 2 +- autojs/build.gradle.kts | 4 +- codeeditor/.gitignore | 2 + codeeditor/build.gradle.kts | 47 +++++ codeeditor/consumer-rules.pro | 0 codeeditor/proguard-rules.pro | 21 ++ .../codeeditor/ExampleInstrumentedTest.kt | 24 +++ codeeditor/src/main/AndroidManifest.xml | 10 + .../aiselp/autojs/codeeditor/EditActivity.kt | 22 ++ .../codeeditor/web/AssetWebViewClient.kt | 72 +++++++ .../autojs/codeeditor/web/EditorAppManager.kt | 61 ++++++ .../autojs/codeeditor/web/FileHttpServer.kt | 18 ++ .../aiselp/autojs/codeeditor/web/JsBridge.kt | 194 ++++++++++++++++++ .../autojs/codeeditor/ExampleUnitTest.kt | 17 ++ gradle/libs.versions.toml | 13 ++ settings.gradle | 1 + 19 files changed, 521 insertions(+), 10 deletions(-) rename app/src/main/java/org/autojs/autojs/ui/main/web/{WebViewFragment.kt => EditorAppManager.kt} (94%) create mode 100644 codeeditor/.gitignore create mode 100644 codeeditor/build.gradle.kts create mode 100644 codeeditor/consumer-rules.pro create mode 100644 codeeditor/proguard-rules.pro create mode 100644 codeeditor/src/androidTest/java/com/aiselp/autojs/codeeditor/ExampleInstrumentedTest.kt create mode 100644 codeeditor/src/main/AndroidManifest.xml create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/AssetWebViewClient.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/JsBridge.kt create mode 100644 codeeditor/src/test/java/com/aiselp/autojs/codeeditor/ExampleUnitTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bcad083bb..bd314b863 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -282,6 +282,7 @@ dependencies { implementation(project(":common")) implementation(project(":autojs")) implementation(project(":apkbuilder")) + implementation(project(":codeeditor")) implementation("androidx.multidex:multidex:2.0.1") val lifecycle_version = "2.5.1" diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt index b9806fbd6..10bce27d8 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt @@ -3,6 +3,7 @@ package org.autojs.autojs.ui.main import android.Manifest import android.content.Context import android.content.Intent +import android.os.Build import android.os.Bundle import android.widget.Toast import androidx.activity.compose.setContent @@ -24,6 +25,7 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.fragment.app.FragmentActivity import androidx.viewpager2.widget.ViewPager2 +import com.aiselp.autojs.codeeditor.EditActivity import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.rememberMultiplePermissionsState import com.google.accompanist.systemuicontroller.rememberSystemUiController @@ -47,10 +49,9 @@ import org.autojs.autojs.ui.main.components.LogButton import org.autojs.autojs.ui.main.drawer.DrawerPage import org.autojs.autojs.ui.main.scripts.ScriptListFragment import org.autojs.autojs.ui.main.task.TaskManagerFragmentKt -import org.autojs.autojs.ui.main.web.WebViewFragment +import org.autojs.autojs.ui.main.web.EditorAppManager import org.autojs.autojs.ui.widget.fillMaxSize import org.autojs.autoxjs.R - data class BottomNavigationItem(val icon: Int, val label: String) class MainActivity : FragmentActivity() { @@ -62,7 +63,7 @@ class MainActivity : FragmentActivity() { private val scriptListFragment by lazy { ScriptListFragment() } private val taskManagerFragment by lazy { TaskManagerFragmentKt() } - private val webViewFragment by lazy { WebViewFragment() } + private val webViewFragment by lazy { EditorAppManager() } private var lastBackPressedTime = 0L private var drawerState: DrawerState? = null private val viewPager: ViewPager2 by lazy { ViewPager2(this) } @@ -142,7 +143,7 @@ fun MainPage( activity: FragmentActivity, scriptListFragment: ScriptListFragment, taskManagerFragment: TaskManagerFragmentKt, - webViewFragment: WebViewFragment, + webViewFragment: EditorAppManager, onDrawerState: (DrawerState) -> Unit, viewPager: ViewPager2 ) { @@ -318,7 +319,7 @@ private fun TopBar( requestOpenDrawer: () -> Unit, onSearch: (String) -> Unit, scriptListFragment: ScriptListFragment, - webViewFragment: WebViewFragment, + webViewFragment: EditorAppManager, ) { var isSearch by remember { mutableStateOf(false) @@ -422,6 +423,13 @@ fun TopAppBarMenu( NewFile(context, scriptListFragment, onDismissRequest) ImportFile(context, scriptListFragment, onDismissRequest) NewProject(context, scriptListFragment, onDismissRequest) + DropdownMenuItem(onClick = { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + context.startActivity(Intent(context,EditActivity::class.java)) + } + }) { + Text(text = "打开新编辑器") + } // DropdownMenuItem(onClick = { /*TODO*/ }) { // MyIcon( // painter = painterResource(id = R.drawable.ic_timed_task), diff --git a/app/src/main/java/org/autojs/autojs/ui/main/ViewPager2Adapter.kt b/app/src/main/java/org/autojs/autojs/ui/main/ViewPager2Adapter.kt index e820cdac3..b15fff356 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/ViewPager2Adapter.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/ViewPager2Adapter.kt @@ -5,13 +5,13 @@ import androidx.fragment.app.FragmentActivity import androidx.viewpager2.adapter.FragmentStateAdapter import org.autojs.autojs.ui.main.scripts.ScriptListFragment import org.autojs.autojs.ui.main.task.TaskManagerFragmentKt -import org.autojs.autojs.ui.main.web.WebViewFragment +import org.autojs.autojs.ui.main.web.EditorAppManager class ViewPager2Adapter( fragmentActivity: FragmentActivity, private val scriptListFragment: ScriptListFragment, private val taskManagerFragment: TaskManagerFragmentKt, - private val webViewFragment: WebViewFragment + private val webViewFragment: EditorAppManager ) : FragmentStateAdapter(fragmentActivity) { override fun createFragment(position: Int): Fragment { diff --git a/app/src/main/java/org/autojs/autojs/ui/main/web/WebViewFragment.kt b/app/src/main/java/org/autojs/autojs/ui/main/web/EditorAppManager.kt similarity index 94% rename from app/src/main/java/org/autojs/autojs/ui/main/web/WebViewFragment.kt rename to app/src/main/java/org/autojs/autojs/ui/main/web/EditorAppManager.kt index 456864015..6088c6484 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/web/WebViewFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/web/EditorAppManager.kt @@ -9,7 +9,7 @@ import org.autojs.autojs.ui.widget.SwipeRefreshWebView import org.autojs.autojs.ui.widget.WebDataKt import org.autojs.autojs.ui.widget.fillMaxSize -class WebViewFragment : Fragment() { +class EditorAppManager : Fragment() { val swipeRefreshWebView by lazy { SwipeRefreshWebView(requireContext()) } diff --git a/autojs/build.gradle.kts b/autojs/build.gradle.kts index d1f99f66c..98c87fb34 100644 --- a/autojs/build.gradle.kts +++ b/autojs/build.gradle.kts @@ -41,7 +41,7 @@ dependencies { api("com.afollestad.material-dialogs:core:0.9.2.3"){ exclude(group = "com.android.support") } - api("com.google.android.material:material:1.7.0-beta01") + api(libs.material) api("com.github.hyb1996:EnhancedFloaty:0.31") api("com.makeramen:roundedimageview:2.3.0") // OkHttp @@ -51,7 +51,7 @@ dependencies { // RootShell api("com.github.Stericson:RootShell:1.6") // Gson - api("com.google.code.gson:gson:2.9.1") + api(libs.google.gson) // log4j api(group = "de.mindpipe.android", name = "android-logging-log4j", version = "1.0.3") api(group = "log4j", name = "log4j", version = "1.2.17") diff --git a/codeeditor/.gitignore b/codeeditor/.gitignore new file mode 100644 index 000000000..002ff88a3 --- /dev/null +++ b/codeeditor/.gitignore @@ -0,0 +1,2 @@ +/build +/src/main/assets \ No newline at end of file diff --git a/codeeditor/build.gradle.kts b/codeeditor/build.gradle.kts new file mode 100644 index 000000000..72612c943 --- /dev/null +++ b/codeeditor/build.gradle.kts @@ -0,0 +1,47 @@ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "com.aiselp.autojs.codeeditor" + compileSdk = 33 + + defaultConfig { + minSdk = 21 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + + api(libs.nanohttpd.webserver) + api(libs.androidx.webkit) + implementation(libs.google.gson) + implementation(libs.core.ktx) + implementation(libs.appcompat) + implementation(libs.material) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.test.ext.junit) + androidTestImplementation(libs.espresso.core) +} \ No newline at end of file diff --git a/codeeditor/consumer-rules.pro b/codeeditor/consumer-rules.pro new file mode 100644 index 000000000..e69de29bb diff --git a/codeeditor/proguard-rules.pro b/codeeditor/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/codeeditor/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/codeeditor/src/androidTest/java/com/aiselp/autojs/codeeditor/ExampleInstrumentedTest.kt b/codeeditor/src/androidTest/java/com/aiselp/autojs/codeeditor/ExampleInstrumentedTest.kt new file mode 100644 index 000000000..f4043cd3b --- /dev/null +++ b/codeeditor/src/androidTest/java/com/aiselp/autojs/codeeditor/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.aiselp.autojs.codeeditor + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.aiselp.autojs.codeeditor.test", appContext.packageName) + } +} \ No newline at end of file diff --git a/codeeditor/src/main/AndroidManifest.xml b/codeeditor/src/main/AndroidManifest.xml new file mode 100644 index 000000000..ecc9645d7 --- /dev/null +++ b/codeeditor/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt new file mode 100644 index 000000000..f16ee384f --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt @@ -0,0 +1,22 @@ +package com.aiselp.autojs.codeeditor + +import android.os.Build +import android.os.Bundle +import androidx.annotation.RequiresApi +import androidx.appcompat.app.AppCompatActivity +import com.aiselp.autojs.codeeditor.web.EditorAppManager + +@RequiresApi(Build.VERSION_CODES.M) +class EditActivity: AppCompatActivity() { + private lateinit var editorAppManager: EditorAppManager + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + editorAppManager = EditorAppManager(this) + setContentView(editorAppManager.webView) + } + + override fun onDestroy() { + super.onDestroy() + editorAppManager.destroy() + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/AssetWebViewClient.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/AssetWebViewClient.kt new file mode 100644 index 000000000..3591b84e9 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/AssetWebViewClient.kt @@ -0,0 +1,72 @@ +package com.aiselp.autojs.codeeditor.web + +import android.content.Context +import android.net.Uri +import android.os.Build +import android.util.Log +import android.webkit.MimeTypeMap +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse +import android.webkit.WebView +import androidx.annotation.RequiresApi +import androidx.webkit.WebViewAssetLoader +import androidx.webkit.WebViewAssetLoader.PathHandler +import java.io.File +import java.io.IOException +import java.io.InputStream + +@RequiresApi(Build.VERSION_CODES.M) +class AssetWebViewClient(assetPath: String, context: Context) : JsBridge.SuperWebViewClient() { + private val assetLoader: WebViewAssetLoader = + WebViewAssetLoader.Builder() + .setHttpAllowed(true) +// .addPathHandler("/", AssetsPathHandler(context, assetPath)) + .addPathHandler("/", WebViewAssetLoader.InternalStoragePathHandler(context,File(context.filesDir,"public"))) + .build() + + + @Deprecated("Deprecated in Java") + override fun shouldInterceptRequest(view: WebView?, url: String?): WebResourceResponse? { + return assetLoader.shouldInterceptRequest(Uri.parse(url)) ?: super.shouldInterceptRequest( + view, url + ) + } + + override fun shouldInterceptRequest( + view: WebView, + request: WebResourceRequest + ): WebResourceResponse? { + return assetLoader.shouldInterceptRequest(request.url) ?: super.shouldInterceptRequest( + view, request + ) + } + + class AssetsPathHandler(val context: Context, private val assetPath: String) : PathHandler { + + private fun parsePath(path: String): String { + var newPath = File(assetPath, path).path + if (newPath.startsWith("/")) { + newPath = newPath.substring(1) + } + println("path: $path to-------- newPath: $newPath") + return newPath + } + + override fun handle(path: String): WebResourceResponse? { + return try { + val newPath = parsePath(path) + val `is`: InputStream = context.assets.open(newPath) + val ext = MimeTypeMap.getFileExtensionFromUrl(newPath) + val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext) + WebResourceResponse(mimeType, null, `is`) + } catch (e: IOException) { + Log.e(TAG, "Error opening asset path: $path", e) + WebResourceResponse(null, null, null) + } + } + + companion object { + const val TAG = "AssetsPathHandler" + } + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt new file mode 100644 index 000000000..5077c1064 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt @@ -0,0 +1,61 @@ +package com.aiselp.autojs.codeeditor.web + +import android.content.Context +import android.os.Build +import android.view.ViewGroup +import android.webkit.WebView +import androidx.annotation.RequiresApi +import java.util.concurrent.Executors + +@RequiresApi(Build.VERSION_CODES.M) +class EditorAppManager(context: Context) { + companion object { + val TAG = "EditorAppManager" + const val WEB_DIST_PATH = "codeeditor/dist/" + } + val executors = Executors.newSingleThreadExecutor() + val webView = createWebView(context) + // val jsBridge = JsBridge(webView) + private val fileHttpServer = FileHttpServer(context) + + init { + println("laoding WebView") + webView.webViewClient = AssetWebViewClient(WEB_DIST_PATH, context) + executors.submit { + fileHttpServer.start() + } + while (true){ + if (fileHttpServer.isAlive) { + webView.loadUrl("http://${fileHttpServer.hostname}:${fileHttpServer.port}") + break + } + } +// webView.loadUrl("http://appassets.androidplatform.net/index.html") + } + + fun destroy() { + webView.destroy() + fileHttpServer.stop() + executors.shutdownNow() + } + + private fun createWebView(context: Context): WebView { + return WebView(context).apply { + settings.apply { + javaScriptEnabled = true + domStorageEnabled = true + allowFileAccess = true + allowContentAccess = true + allowFileAccessFromFileURLs = true + allowUniversalAccessFromFileURLs = true + useWideViewPort = true + } + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + + + } + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt new file mode 100644 index 000000000..581ff7a3f --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt @@ -0,0 +1,18 @@ +package com.aiselp.autojs.codeeditor.web + +import android.content.Context +import android.util.Log +import fi.iki.elonen.SimpleWebServer +import java.io.File + +class FileHttpServer(context: Context) : + SimpleWebServer("127.0.0.1", SPort, File(context.filesDir, "public"), false) { + companion object { + var SPort = 42201 + } + val port = SPort + init { + SPort++ + Log.d("FileHttpServer", "FileHttpServer init host: ${this.hostname} port: $port") + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/JsBridge.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/JsBridge.kt new file mode 100644 index 000000000..bd486a890 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/JsBridge.kt @@ -0,0 +1,194 @@ +package com.aiselp.autojs.codeeditor.web + +import android.os.Build +import android.os.Looper +import android.util.Log +import android.webkit.JavascriptInterface +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse +import android.webkit.WebView +import androidx.annotation.RequiresApi +import androidx.webkit.WebViewClientCompat +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.google.gson.annotations.Expose +import java.io.ByteArrayOutputStream +import kotlin.random.Random + + +@RequiresApi(Build.VERSION_CODES.M) +class JsBridge(private val webView: WebView) { + companion object { + const val WEBOBJECTNAME = "\$autox" + const val JAVABRIDGE = "AutoxJavaBridge" + const val sdkPath = "web/autox.sdk.v1.js" + const val LOG_TAG = "JsBridge" + + fun evaluateJavascript(js: String, webView: WebView) { + Looper.getMainLooper().queue.addIdleHandler { + webView.evaluateJavascript(js, null) + false + } + } + + fun injectionJsBridge(webView: WebView) { + val js: String = try { + val inputStream = webView.context.assets.open(sdkPath) + val byteArrayOutputStream = ByteArrayOutputStream() + inputStream.use { it -> + it.copyTo(byteArrayOutputStream) + } + String(byteArrayOutputStream.toByteArray()) + } catch (e: Exception) { + "" + } + evaluateJavascript(js, webView); + } + + val gson: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() + } + + private val handles = HashMap() + private val callHandlerData = HashMap() + + init { + webView.addJavascriptInterface(this.JsObject(), JAVABRIDGE) + } + + fun registerHandler(event: String, handle: Handle): JsBridge { + handles[event] = handle + return this + } + + fun removeHandler(event: String): JsBridge { + handles.remove(event) + return this + } + + fun callHandler(event: String, data: String?, callBack: Handle?) { + val pos = Pos(getId(), event, data) + callHandlerData[pos.id] = pos + callBack?.let { + it.name = "callBack" + pos.callBackId = pos.id + pos.callBack = it + } + val js = "$WEBOBJECTNAME._onCallHandler(${pos.id})" + evaluateJavascript(js, this.webView) + } + + + private fun getId(): Int { + val nextInt = Random.nextInt() + if (callHandlerData.containsKey(nextInt)) { + return getId() + } + return nextInt + } + + class Handle : (String?, Handle?) -> Unit { + private var ktFn: ((data: String?, Handle?) -> Unit)? = null + var name: String = "handle" + + constructor(ktFn: (data: String?, Handle?) -> Unit) { + this.ktFn = ktFn + } + + override fun invoke(p1: String?, p2: Handle?) { + ktFn?.invoke(p1, p2) + } + + fun invokeToMainThread(p1: String?, p2: Handle?) { + Looper.getMainLooper().queue.addIdleHandler { + invoke(p1, p2) + false + } + } + } + + inner class JsObject { + private val callBackData = HashMap() + + @JavascriptInterface + //web调用安卓 + fun callHandle(reqData: String) { + val pos = gson.fromJson(reqData, Pos::class.java) + Log.i(LOG_TAG, "onHandle: ${pos.event}") + val handler = handles[pos.event] + val callBack: Handle? = if (pos.callBackId != null) { + Handle { data, _ -> + callBackData[pos.callBackId!!] = object { + val data = data + val callBackId = pos.callBackId + } + val js = "$WEBOBJECTNAME._onCallBack(${pos.callBackId})" + evaluateJavascript(js, webView) + } + } else null + handler?.let { it.name = "callBack" } + handler?.invokeToMainThread(pos.data, callBack) + } + + @JavascriptInterface + fun getCallBackData(id: Int): String { + val data = callBackData[id] + callBackData.remove(id) + return Gson().toJson(data) + } + + @JavascriptInterface + fun callBack(callBackId: Int, data: String?) { + val callBack = callHandlerData[callBackId]?.callBack + callHandlerData.remove(callBackId) + callBack?.invokeToMainThread(data, null) + } + + @JavascriptInterface + fun getCallHandlerData(id: Int): String { + val pos = callHandlerData[id] + if (pos != null && pos.callBack == null) { + callHandlerData.remove(id) + } + return gson.toJson(pos) + } + } + + data class Pos(@Expose val id: Int, @Expose val event: String, @Expose var data: String?) { + @Expose + var callBackId: Int? = null + + @Expose(serialize = false, deserialize = false) + var callBack: Handle? = null + } + + open class SuperWebViewClient : WebViewClientCompat() { + companion object { + const val SDKPATH = "autox://sdk.v1.js" + } + + override fun shouldInterceptRequest( + view: WebView, + request: WebResourceRequest + ): WebResourceResponse? { + val url = request.url + val context = view.context + if (url.toString() == SDKPATH) { + val webResponse: WebResourceResponse? = try { + val inputStream = context.assets.open(sdkPath) + WebResourceResponse("application/javascript", "UTF-8", inputStream) + } catch (e: Exception) { + super.shouldInterceptRequest(view, request) + } + return webResponse + } + return super.shouldInterceptRequest(view, request) + } + + override fun onPageFinished(view: WebView?, url: String?) { + super.onPageFinished(view, url) + if (view != null) { + injectionJsBridge(view) + } + } + } +} \ No newline at end of file diff --git a/codeeditor/src/test/java/com/aiselp/autojs/codeeditor/ExampleUnitTest.kt b/codeeditor/src/test/java/com/aiselp/autojs/codeeditor/ExampleUnitTest.kt new file mode 100644 index 000000000..c6e671723 --- /dev/null +++ b/codeeditor/src/test/java/com/aiselp/autojs/codeeditor/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.aiselp.autojs.codeeditor + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8a52659af..5f1495875 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,20 @@ [versions] core-ktx = "1.8.0" +google-gson = "2.9.1" junit = "4.13.2" okhttp = "4.10.0" ktor-version = "2.0.3" +androidx-test-ext-junit = "1.1.5" +espresso-core = "3.5.1" +appcompat = "1.6.1" +material = "1.9.0" [libraries] +nanohttpd-webserver = "org.nanohttpd:nanohttpd-webserver:2.3.1" +androidx-webkit = "androidx.webkit:webkit:1.7.0" core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" } documentfile = "androidx.documentfile:documentfile:1.0.1" +google-gson = { module = "com.google.code.gson:gson", version.ref = "google-gson" } junit = { module = "junit:junit", version.ref = "junit" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } # ktor @@ -17,6 +25,11 @@ ktor-client-websockets = { module = "io.ktor:ktor-client-websockets", version.re ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor-version" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor-version" } +androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" } +espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } + [plugins] [bundles] diff --git a/settings.gradle b/settings.gradle index d079b4902..6381e8c24 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,3 +7,4 @@ include ':LocalRepo:p7zip' include ':LocalRepo:OpenCV' //include ':LocalRepo:PaddleOCR4Android' include ':paddleocr' +include ':codeeditor' From 30f2b57e4ef686a0a8e542e5904f3555ee3d0b3c Mon Sep 17 00:00:00 2001 From: aiselp Date: Mon, 30 Oct 2023 21:43:48 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autojs/build.gradle.kts | 2 +- codeeditor/build.gradle.kts | 2 + .../autojs/codeeditor/plugins/FileSystem.kt | 150 ++++++++++++++++++ .../autojs/codeeditor/web/EditorAppManager.kt | 48 ++++-- .../autojs/codeeditor/web/PluginManager.kt | 103 ++++++++++++ .../aiselp/autojs/codeeditor/web/WebPlugin.kt | 17 ++ .../codeeditor/web/annotation/WebFunction.kt | 6 + .../codeeditor/web/interfaces/CallEvent.kt | 13 ++ .../web/interfaces/CallbackEvent.kt | 12 ++ .../codeeditor/web/interfaces/PluginInfo.kt | 6 + gradle/libs.versions.toml | 4 + 11 files changed, 348 insertions(+), 15 deletions(-) create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/PluginManager.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/WebPlugin.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/annotation/WebFunction.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallEvent.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallbackEvent.kt create mode 100644 codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/PluginInfo.kt diff --git a/autojs/build.gradle.kts b/autojs/build.gradle.kts index 98c87fb34..5d806c44b 100644 --- a/autojs/build.gradle.kts +++ b/autojs/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { testImplementation(libs.junit) implementation(libs.documentfile) implementation("androidx.preference:preference-ktx:1.2.0") - api("org.greenrobot:eventbus:3.3.1") + api(libs.eventbus) api("net.lingala.zip4j:zip4j:1.3.2") api("com.afollestad.material-dialogs:core:0.9.2.3"){ exclude(group = "com.android.support") diff --git a/codeeditor/build.gradle.kts b/codeeditor/build.gradle.kts index 72612c943..867ff033f 100644 --- a/codeeditor/build.gradle.kts +++ b/codeeditor/build.gradle.kts @@ -35,6 +35,8 @@ android { dependencies { + implementation(libs.eventbus) + implementation(libs.kotlinx.coroutines.android) api(libs.nanohttpd.webserver) api(libs.androidx.webkit) implementation(libs.google.gson) diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt new file mode 100644 index 000000000..c72395a99 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt @@ -0,0 +1,150 @@ +package com.aiselp.autojs.codeeditor.plugins + +import android.os.Build +import android.os.Environment +import android.util.Base64 +import android.util.Log +import androidx.annotation.RequiresApi +import com.aiselp.autojs.codeeditor.web.PluginManager +import com.aiselp.autojs.codeeditor.web.annotation.WebFunction +import com.google.gson.Gson +import java.io.File + +@RequiresApi(Build.VERSION_CODES.M) +class FileSystem() { + companion object { + const val TAG = "FileSystem" + const val MaxFileSize = 1024 * 1024 * 5 + } + + private val basePath: File = Environment.getExternalStorageDirectory() + private val gson = Gson() + + private fun parsePath(path: String?): File { + check(path != null) { "path is null" } + return File(basePath, path) + } + + @WebFunction + fun stat(call: PluginManager.WebCall) { + Log.i(TAG, "stat: ${call.data}") + val fileRequest = gson.fromJson(call.data, FileRequest::class.java) + val file = parsePath(fileRequest.path) + if (!file.isFile && !file.isDirectory) { + return call.onError(Exception("${fileRequest.path} not file or directory")) + } + val stat = StatResult() + stat.type = if (file.isFile) StatResult.FileType else StatResult.DirectoryType + stat.size = file.length() + stat.name = file.name + stat.ctime = file.lastModified() + stat.mtine = file.lastModified() + call.onSuccess(gson.toJson(stat)) + } + + @WebFunction + fun readDirectory(call: PluginManager.WebCall) { + Log.i(TAG, "readDirectory: ${call.data}") + val fileRequest = gson.fromJson(call.data, FileRequest::class.java) + val file = parsePath(fileRequest.path) + val list: List = file.listFiles()?.map { + val stat = StatResult() + stat.type = if (it.isFile) StatResult.FileType else StatResult.DirectoryType + stat.size = it.length() + stat.name = it.name + stat.ctime = it.lastModified() + stat.mtine = it.lastModified() + return@map stat + } ?: throw Error("${fileRequest.path} not directory") + call.onSuccess(gson.toJson(list)) + } + + @WebFunction + fun createDirectory(call: PluginManager.WebCall) { + Log.i(TAG, "createDirectory: ${call.data}") + val req = gson.fromJson(call.data, FileRequest::class.java) + val path = parsePath(req.path) + path.mkdirs() + call.onSuccess(null) + } + + @WebFunction + fun readFile(call: PluginManager.WebCall) { + Log.i(TAG, "readFile: ${call.data}") + val req = gson.fromJson(call.data, FileRequest::class.java) + val file = parsePath(req.path) + if (file.isFile) { + if (file.length() > MaxFileSize) throw Exception("${req.path} too large") + val b64 = Base64.encodeToString(file.readBytes(), Base64.DEFAULT) + call.onSuccess(b64) + } else call.onError(Exception("${req.path} not file")) + } + + @WebFunction + fun writeFile(call: PluginManager.WebCall) { + Log.i(TAG, "writeFile: ${call.data}") + val req = gson.fromJson(call.data, FileRequest::class.java) + val file = parsePath(req.path) + val data = Base64.decode(req.data!!, Base64.DEFAULT) + file.writeBytes(data) + call.onSuccess(null) + } + + @WebFunction + fun delete(call: PluginManager.WebCall) { + Log.i(TAG, "delete: ${call.data}") + val req = gson.fromJson(call.data, FileRequest::class.java) + val path = parsePath(req.path) + path.delete() + call.onSuccess(null) + } + + @WebFunction + fun rename(call: PluginManager.WebCall) { + Log.i(TAG, "rename: ${call.data}") + val req = gson.fromJson(call.data, RenameFileRequest::class.java) + val form = parsePath(req.form) + val to = parsePath(req.to) + form.renameTo(to) + call.onSuccess(null) + } + + @WebFunction + fun copy(call: PluginManager.WebCall) { + Log.i(TAG, "copy: ${call.data}") + val req = gson.fromJson(call.data, CopyFileRequest::class.java) + val form = parsePath(req.form) + val to = parsePath(req.to) + form.copyTo(to) + call.onSuccess(null) + } + + class FileRequest { + var path: String = "null" + var data: String? = null + var encoding: String? = null + } + + class RenameFileRequest { + var form: String = "null" + var to: String = "null" + } + + class CopyFileRequest { + var form: String = "null" + var to: String = "null" + } + + class StatResult { + companion object { + const val FileType = "file" + const val DirectoryType = "directory" + } + + var type: String = FileType + var name: String? = null + var size: Long = 0 + var ctime: Long = 0 + var mtine: Long = 0 + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt index 5077c1064..b84099fee 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt @@ -5,37 +5,59 @@ import android.os.Build import android.view.ViewGroup import android.webkit.WebView import androidx.annotation.RequiresApi +import com.aiselp.autojs.codeeditor.plugins.FileSystem +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.cancel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.util.concurrent.ExecutorService import java.util.concurrent.Executors @RequiresApi(Build.VERSION_CODES.M) class EditorAppManager(context: Context) { companion object { - val TAG = "EditorAppManager" + const val TAG = "EditorAppManager" const val WEB_DIST_PATH = "codeeditor/dist/" } - val executors = Executors.newSingleThreadExecutor() + + private val coroutineScope = CoroutineScope(Dispatchers.Default) + private val executors: ExecutorService = Executors.newSingleThreadExecutor() val webView = createWebView(context) - // val jsBridge = JsBridge(webView) + private val jsBridge = JsBridge(webView) private val fileHttpServer = FileHttpServer(context) + private val pluginManager = PluginManager(jsBridge,coroutineScope) init { - println("laoding WebView") - webView.webViewClient = AssetWebViewClient(WEB_DIST_PATH, context) - executors.submit { - fileHttpServer.start() - } - while (true){ - if (fileHttpServer.isAlive) { - webView.loadUrl("http://${fileHttpServer.hostname}:${fileHttpServer.port}") - break + jsBridge.registerHandler("test", JsBridge.Handle { data, handle -> + println("web调用:Data: $data") + if (handle != null) { + handle.invoke("ax水", null) + } + }) + webView.webViewClient = JsBridge.SuperWebViewClient() + installPlugin() + coroutineScope.launch { + launch(executors.asCoroutineDispatcher()) { fileHttpServer.start() } + delay(300) + withContext(Dispatchers.Main) { +// webView.loadUrl("http://${fileHttpServer.hostname}:${fileHttpServer.port}") + webView.loadUrl("http://192.168.10.10:8010") } } // webView.loadUrl("http://appassets.androidplatform.net/index.html") } + private fun installPlugin() { + pluginManager.registerPlugin("FileSystem", FileSystem()) + } + fun destroy() { webView.destroy() fileHttpServer.stop() + coroutineScope.cancel() executors.shutdownNow() } @@ -54,8 +76,6 @@ class EditorAppManager(context: Context) { ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) - - } } } \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/PluginManager.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/PluginManager.kt new file mode 100644 index 000000000..93a5c7fbe --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/PluginManager.kt @@ -0,0 +1,103 @@ +package com.aiselp.autojs.codeeditor.web + +import android.os.Build +import android.util.Log +import androidx.annotation.RequiresApi +import com.aiselp.autojs.codeeditor.web.interfaces.CallEvent +import com.aiselp.autojs.codeeditor.web.interfaces.CallbackEvent +import com.aiselp.autojs.codeeditor.web.interfaces.PluginInfo +import com.google.gson.Gson +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +@RequiresApi(Build.VERSION_CODES.M) +class PluginManager(private val jsBridge: JsBridge, private val coroutineScope: CoroutineScope) { + companion object { + const val TAG = "PluginManager" + const val PluginCallEventName = "__Plugin_Call" + private val gson = Gson() + } + + private val pluginMap = mutableMapOf() + + private val webHandle = JsBridge.Handle { data, handle -> + val call: CallEvent + try { + check(handle != null) + call = gson.fromJson(data, CallEvent::class.java) + } catch (e: Exception) { + Log.e(TAG, "error-call: $data") + Log.e(TAG, e.toString()) + return@Handle + } + if (call.type == CallEvent.LoadType) { + val plugin = pluginMap[call.pluginId] + if (plugin != null) { + val pluginInfo = PluginInfoBuilder(plugin).build() + return@Handle handle(gson.toJson(pluginInfo), null) + } else return@Handle handle(null, null) + } else if (call.type == CallEvent.CallType) { + callPluginMethod(call, handle) + } + } + + init { + jsBridge.registerHandler(PluginCallEventName, webHandle) + } + + private fun callPluginMethod(call: CallEvent, handle: JsBridge.Handle) { + val plugin = pluginMap[call.pluginId] + val methodName = call.method + check(plugin != null && methodName != null) { "call plugin:${call.pluginId} method:${call.method} error" } + val method = plugin.methods[methodName]!! + val webCall = WebCall(call.data, handle) + coroutineScope.launch { + try { + method.invoke(plugin.plugin, webCall) + }catch (e: Exception) { + Log.e(TAG, "web call method:${call.method} error") + Log.e(TAG, e.toString()) + webCall.onError(e) + } + } + } + + fun registerPlugin(id: String, plugin: Any) { + pluginMap[id] = WebPlugin(id, plugin) + + } + + fun removePlugin(id: String, plugin: Any) { + pluginMap.remove(id) + } + + class WebCall(val data: String?, private val handle: JsBridge.Handle) { + + fun onSuccess(data: String?) { + val callbackEvent = CallbackEvent() + callbackEvent.type = CallbackEvent.SuccessType + callbackEvent.data = data + callbackEvent.errorMessage = null + + handle(gson.toJson(callbackEvent), null) + } + + fun onError(err: Exception) { + val callbackEvent = CallbackEvent() + callbackEvent.type = CallbackEvent.ErrorType + callbackEvent.data = null + callbackEvent.errorMessage = err.message + + handle(gson.toJson(callbackEvent), null) + } + } + + class PluginInfoBuilder(val plugin: WebPlugin) { + fun build(): PluginInfo { + return PluginInfo().apply { + pluginId = plugin.id + methods = plugin.methods.keys.toTypedArray() + } + } + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/WebPlugin.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/WebPlugin.kt new file mode 100644 index 000000000..da8deeb82 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/WebPlugin.kt @@ -0,0 +1,17 @@ +package com.aiselp.autojs.codeeditor.web + +import com.aiselp.autojs.codeeditor.web.annotation.WebFunction +import java.lang.reflect.Method + +class WebPlugin(val id: String, val plugin: Any) { + val methods: MutableMap = mutableMapOf() + init { + for (method in plugin.javaClass.methods) { + val webFunction = method.getAnnotation(WebFunction::class.java) + if (webFunction != null) { + val name = if (webFunction.name == "null") method.name else webFunction.name + methods[name] = method + } + } + } +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/annotation/WebFunction.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/annotation/WebFunction.kt new file mode 100644 index 000000000..1b15f59a9 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/annotation/WebFunction.kt @@ -0,0 +1,6 @@ +package com.aiselp.autojs.codeeditor.web.annotation + +@Target(AnnotationTarget.FUNCTION) +annotation class WebFunction( + val name: String = "null" +) diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallEvent.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallEvent.kt new file mode 100644 index 000000000..8f4c24ec5 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallEvent.kt @@ -0,0 +1,13 @@ +package com.aiselp.autojs.codeeditor.web.interfaces + +class CallEvent { + companion object { + const val LoadType = "load" + const val CallType = "call" + } + + var type: String = "init" + var pluginId: String = "null" + var method: String? = null + var data: String? = null +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallbackEvent.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallbackEvent.kt new file mode 100644 index 000000000..4815ddbc0 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/CallbackEvent.kt @@ -0,0 +1,12 @@ +package com.aiselp.autojs.codeeditor.web.interfaces + +class CallbackEvent { + companion object { + const val SuccessType = "success" + const val ErrorType = "error" + } + + var type: String = "null" + var data: String? = null + var errorMessage: String? = null +} \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/PluginInfo.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/PluginInfo.kt new file mode 100644 index 000000000..c12dedf02 --- /dev/null +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/interfaces/PluginInfo.kt @@ -0,0 +1,6 @@ +package com.aiselp.autojs.codeeditor.web.interfaces + +class PluginInfo { + var pluginId: String = "null" + var methods: Array = emptyArray() +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f1495875..8ccde105e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ core-ktx = "1.8.0" google-gson = "2.9.1" junit = "4.13.2" +kotlinx-coroutines-android = "1.6.2" okhttp = "4.10.0" ktor-version = "2.0.3" androidx-test-ext-junit = "1.1.5" @@ -10,6 +11,9 @@ appcompat = "1.6.1" material = "1.9.0" [libraries] + +eventbus = "org.greenrobot:eventbus:3.3.1" +kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines-android" } nanohttpd-webserver = "org.nanohttpd:nanohttpd-webserver:2.3.1" androidx-webkit = "androidx.webkit:webkit:1.7.0" core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" } From 422b82ac1e611f1dd05db407d085003ebdf7f806 Mon Sep 17 00:00:00 2001 From: aiselp Date: Tue, 31 Oct 2023 01:28:04 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/main/scripts/ScriptListFragment.kt | 7 +- codeeditor/src/main/AndroidManifest.xml | 8 +- .../aiselp/autojs/codeeditor/EditActivity.kt | 50 ++++++++- .../autojs/codeeditor/plugins/FileSystem.kt | 2 +- .../autojs/codeeditor/web/EditorAppManager.kt | 101 +++++++++++++++--- .../autojs/codeeditor/web/FileHttpServer.kt | 4 +- 6 files changed, 152 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListFragment.kt b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListFragment.kt index 734c230c9..da80a2b81 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ScriptListFragment.kt @@ -1,6 +1,7 @@ package org.autojs.autojs.ui.main.scripts import android.content.Context +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -25,6 +26,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.viewinterop.AndroidView import androidx.fragment.app.Fragment import androidx.preference.PreferenceManager +import com.aiselp.autojs.codeeditor.EditActivity import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.leinardi.android.speeddial.compose.FabWithLabel import com.leinardi.android.speeddial.compose.SpeedDial @@ -46,6 +48,7 @@ import org.autojs.autojs.ui.main.showExternalStoragePermissionToast import org.autojs.autojs.ui.viewmodel.ExplorerItemList.SortConfig import org.autojs.autojs.ui.widget.fillMaxSize import org.autojs.autoxjs.R +import java.io.File /** * Created by wilinz on 2022/7/15. @@ -237,7 +240,9 @@ class ScriptListFragment : Fragment() { setOnItemClickListener { _, item -> item?.let { if (item.isEditable) { - edit(requireContext(), item.toScriptFile()) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + EditActivity.editFile(requireContext(), File(item.path)) + } else edit(requireContext(), item.toScriptFile()) } else { IntentUtil.viewFile(get(), item.path, AppFileProvider.AUTHORITY) } diff --git a/codeeditor/src/main/AndroidManifest.xml b/codeeditor/src/main/AndroidManifest.xml index ecc9645d7..91a3bbd09 100644 --- a/codeeditor/src/main/AndroidManifest.xml +++ b/codeeditor/src/main/AndroidManifest.xml @@ -1,9 +1,13 @@ - + - + diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt index f16ee384f..f394cb29d 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt @@ -1,22 +1,68 @@ package com.aiselp.autojs.codeeditor +import android.content.Context +import android.content.Intent +import android.graphics.Rect import android.os.Build import android.os.Bundle +import android.widget.FrameLayout import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import com.aiselp.autojs.codeeditor.web.EditorAppManager +import java.io.File @RequiresApi(Build.VERSION_CODES.M) -class EditActivity: AppCompatActivity() { +class EditActivity : AppCompatActivity() { private lateinit var editorAppManager: EditorAppManager + private lateinit var contextFrameLayout: FrameLayout override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) editorAppManager = EditorAppManager(this) - setContentView(editorAppManager.webView) + contextFrameLayout = FrameLayout(this) + contextFrameLayout.addView(editorAppManager.webView) + setContentView(contextFrameLayout) + setKeyboardEvent() + editorAppManager.opendeFile = intent.getStringExtra(EXTRA_PATH) } override fun onDestroy() { super.onDestroy() editorAppManager.destroy() } + + private fun setKeyboardEvent() { + val rootView = contextFrameLayout.rootView + rootView.viewTreeObserver.addOnGlobalLayoutListener { + val r = Rect() + rootView.getWindowVisibleDisplayFrame(r) + val currentHeight = rootView.height + var resultBottom = r.bottom + if (currentHeight - resultBottom > 200) { + editorAppManager.onKeyboardDidShow() + } else { + editorAppManager.onKeyboardDidHide() + } + } + } + + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + val path = intent?.getStringExtra(EXTRA_PATH) + if (path != null) { + editorAppManager.openFile(path) + } + } + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + editorAppManager.onBackButton() + } + + companion object { + private const val EXTRA_PATH = "path"; + fun editFile(context: Context, path: File) { + val intent = Intent(context, EditActivity::class.java) + .putExtra(EXTRA_PATH, path.path) + context.startActivity(intent) + } + } } \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt index c72395a99..f188ab1c4 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/plugins/FileSystem.kt @@ -15,9 +15,9 @@ class FileSystem() { companion object { const val TAG = "FileSystem" const val MaxFileSize = 1024 * 1024 * 5 + val basePath: File = Environment.getExternalStorageDirectory() } - private val basePath: File = Environment.getExternalStorageDirectory() private val gson = Gson() private fun parsePath(path: String?): File { diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt index b84099fee..3d89b118f 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt @@ -1,7 +1,9 @@ package com.aiselp.autojs.codeeditor.web +import android.app.Activity import android.content.Context import android.os.Build +import android.util.Log import android.view.ViewGroup import android.webkit.WebView import androidx.annotation.RequiresApi @@ -9,49 +11,105 @@ import com.aiselp.autojs.codeeditor.plugins.FileSystem import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.async import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.io.File import java.util.concurrent.ExecutorService import java.util.concurrent.Executors +import java.util.zip.ZipEntry +import java.util.zip.ZipInputStream @RequiresApi(Build.VERSION_CODES.M) -class EditorAppManager(context: Context) { +class EditorAppManager(val context: Activity) { companion object { const val TAG = "EditorAppManager" - const val WEB_DIST_PATH = "codeeditor/dist/" + const val WEB_DIST_PATH = "codeeditor/dist.zip" + const val WEB_PUBLIC_PATH = "editorWeb/" } private val coroutineScope = CoroutineScope(Dispatchers.Default) private val executors: ExecutorService = Executors.newSingleThreadExecutor() val webView = createWebView(context) private val jsBridge = JsBridge(webView) - private val fileHttpServer = FileHttpServer(context) - private val pluginManager = PluginManager(jsBridge,coroutineScope) + private val fileHttpServer = FileHttpServer( + context, File( + context.filesDir, + "$WEB_PUBLIC_PATH/dist" + ) + ) + private val pluginManager = PluginManager(jsBridge, coroutineScope) + var opendeFile: String? = null init { - jsBridge.registerHandler("test", JsBridge.Handle { data, handle -> - println("web调用:Data: $data") - if (handle != null) { - handle.invoke("ax水", null) - } - }) webView.webViewClient = JsBridge.SuperWebViewClient() installPlugin() coroutineScope.launch { launch(executors.asCoroutineDispatcher()) { fileHttpServer.start() } + async { initWebResources() }.await() delay(300) withContext(Dispatchers.Main) { -// webView.loadUrl("http://${fileHttpServer.hostname}:${fileHttpServer.port}") - webView.loadUrl("http://192.168.10.10:8010") + webView.loadUrl("http://${fileHttpServer.hostname}:${fileHttpServer.port}") +// webView.loadUrl("http://192.168.10.10:8009") } } // webView.loadUrl("http://appassets.androidplatform.net/index.html") + jsBridge.registerHandler("app.init", JsBridge.Handle { _, _ -> + val file = opendeFile + if (file != null) { + openFile(file) + } + }) } private fun installPlugin() { pluginManager.registerPlugin("FileSystem", FileSystem()) + jsBridge.registerHandler("app.exitApp", JsBridge.Handle { _, _ -> + context.moveTaskToBack(false) + }) + } + + private fun initWebResources() { + val webDir = File(context.filesDir, WEB_PUBLIC_PATH) + val versionFile = File(webDir, "version.txt") + if (isUpdate(versionFile)) { + Log.i(TAG, "skip initWebResources") + return + } + Log.i(TAG, "initWebResources") + webDir.mkdirs() + context.assets.open(WEB_DIST_PATH).use { it -> + ZipInputStream(it).use { zip -> + var zipEntry: ZipEntry? = null; + while (true) { + zipEntry = zip.nextEntry + if (zipEntry == null) break + val file = File(webDir, zipEntry.name) + if (zipEntry.isDirectory) { + file.mkdirs() + } else { + zip.copyTo(file.outputStream()) + } + zip.closeEntry() + } + } + } + val versionCode = context.packageManager.getPackageInfo(context.packageName, 0).versionCode + versionFile.writeText(versionCode.toString()) + } + + private fun isUpdate(file: File): Boolean { + if (!file.isFile) return false + return try { + val text = file.readText().toLong() + val versionCode = + context.packageManager.getPackageInfo(context.packageName, 0).versionCode + versionCode.toLong() == text + } catch (e: Exception) { + false + } } fun destroy() { @@ -61,6 +119,25 @@ class EditorAppManager(context: Context) { executors.shutdownNow() } + fun openFile(path: String) { + jsBridge.callHandler("app.openFile", path.replace(FileSystem.basePath.path, ""), null) + } + + fun onKeyboardDidShow() { + Log.d(TAG, "onKeyboardDidShow") + jsBridge.callHandler("app.onKeyboardDidShow", null, null) + } + + fun onKeyboardDidHide() { + Log.d(TAG, "onKeyboardDidHide") + jsBridge.callHandler("app.onKeyboardDidHide", null, null) + } + + fun onBackButton() { + Log.d(TAG, "onBackButton") + jsBridge.callHandler("app.onBackButton", null, null) + } + private fun createWebView(context: Context): WebView { return WebView(context).apply { settings.apply { diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt index 581ff7a3f..4e3314cd6 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt @@ -5,8 +5,8 @@ import android.util.Log import fi.iki.elonen.SimpleWebServer import java.io.File -class FileHttpServer(context: Context) : - SimpleWebServer("127.0.0.1", SPort, File(context.filesDir, "public"), false) { +class FileHttpServer(context: Context,path:File) : + SimpleWebServer("127.0.0.1", SPort, path, false) { companion object { var SPort = 42201 } From e35663c114f362a4b010f06b820626b254288fed Mon Sep 17 00:00:00 2001 From: aiselp Date: Tue, 31 Oct 2023 18:24:43 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeeditor/.gitignore | 2 +- codeeditor/build.gradle.kts | 34 +++++++++++++++++-- .../aiselp/autojs/codeeditor/EditActivity.kt | 3 +- .../autojs/codeeditor/web/EditorAppManager.kt | 4 ++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/codeeditor/.gitignore b/codeeditor/.gitignore index 002ff88a3..b4385dbb8 100644 --- a/codeeditor/.gitignore +++ b/codeeditor/.gitignore @@ -1,2 +1,2 @@ /build -/src/main/assets \ No newline at end of file +/src/main/assets/codeeditor \ No newline at end of file diff --git a/codeeditor/build.gradle.kts b/codeeditor/build.gradle.kts index 867ff033f..b9591a9a7 100644 --- a/codeeditor/build.gradle.kts +++ b/codeeditor/build.gradle.kts @@ -1,7 +1,7 @@ -@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +import java.net.URL plugins { id("com.android.library") - id("org.jetbrains.kotlin.android") + id("kotlin-android") } android { @@ -35,7 +35,6 @@ android { dependencies { - implementation(libs.eventbus) implementation(libs.kotlinx.coroutines.android) api(libs.nanohttpd.webserver) api(libs.androidx.webkit) @@ -46,4 +45,33 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.test.ext.junit) androidTestImplementation(libs.espresso.core) +} + +tasks.register("downloadEditor") { + val tag = "dev-0.3.0" + val version = 3 + val uri = "https://github.com/aiselp/vscode-mobile/releases/download/${tag}/dist.zip" + val assetsDir = File(projectDir, "/src/main/assets/codeeditor") + val versionFile = File(assetsDir, "version.txt") + doFirst { + logger.log(org.gradle.api.logging.LogLevel.LIFECYCLE,"start downloadEditor") + if (versionFile.isFile){ + val dowversion = versionFile.readText().toInt() + if (dowversion == version) { + logger.log(org.gradle.api.logging.LogLevel.LIFECYCLE,"skip download") + return@doFirst + } + } + URL(uri).openStream().use { + File(assetsDir, "dist.zip").outputStream().use { out-> + it.copyTo(out) + } + } + versionFile.writeText(version.toString()) + } +} +tasks.findByName("preBuild")?.dependsOn("downloadEditor") +tasks.findByName("preDebugBuild")?.dependsOn("downloadEditor") +tasks.names.forEach { +// logger.error(it) } \ No newline at end of file diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt index f394cb29d..615a4d635 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/EditActivity.kt @@ -54,7 +54,8 @@ class EditActivity : AppCompatActivity() { } @Deprecated("Deprecated in Java") override fun onBackPressed() { - editorAppManager.onBackButton() +// editorAppManager.onBackButton() + moveTaskToBack(false) } companion object { diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt index 3d89b118f..cb6e316e9 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt @@ -90,7 +90,9 @@ class EditorAppManager(val context: Activity) { if (zipEntry.isDirectory) { file.mkdirs() } else { - zip.copyTo(file.outputStream()) + file.outputStream().use { + zip.copyTo(it) + } } zip.closeEntry() } From 297732b55a1c1158ebe0e8ec2ea73634833b94e1 Mon Sep 17 00:00:00 2001 From: aiselp Date: Tue, 31 Oct 2023 19:12:54 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=B8=E5=8F=AF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../autojs/autojs/ui/settings/LicenseInfo.kt | 33 ++++++++++++++++++ .../autojs/ui/settings/SettingsActivity.java | 34 ++----------------- app/src/main/res/raw/licenses.xml | 12 +++++++ 4 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/org/autojs/autojs/ui/settings/LicenseInfo.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bd314b863..62b1f311e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -227,7 +227,7 @@ dependencies { //MultiLevelListView implementation("com.github.hyb1996:android-multi-level-listview:1.1") //Licenses Dialog - implementation("de.psdev.licensesdialog:licensesdialog:1.9.0") + implementation("de.psdev.licensesdialog:licensesdialog:2.2.0") //Expandable RecyclerView implementation("com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1") //FlexibleDivider diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/LicenseInfo.kt b/app/src/main/java/org/autojs/autojs/ui/settings/LicenseInfo.kt new file mode 100644 index 000000000..150f99de8 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/ui/settings/LicenseInfo.kt @@ -0,0 +1,33 @@ +package org.autojs.autojs.ui.settings + +import android.content.Context +import de.psdev.licensesdialog.LicenseResolver +import de.psdev.licensesdialog.licenses.License +import org.autojs.autoxjs.R + +object LicenseInfo { + fun install(){ + LicenseResolver.registerLicense(MozillaPublicLicense20()) + } + +} +class MozillaPublicLicense20 : License() { + override fun getName(): String { + return "Mozilla Public License 2.0" + } + override fun readSummaryTextFromResources(context: Context): String { + return getContent(context, R.raw.mpl_20_summary) + } + + override fun readFullTextFromResources(context: Context): String { + return getContent(context, R.raw.mpl_20_full) + } + + override fun getVersion(): String { + return "2.0" + } + + override fun getUrl(): String { + return "https://www.mozilla.org/en-US/MPL/2.0/" + } +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java b/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java index 88e2d94c1..58b3d512b 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java @@ -36,6 +36,9 @@ @EActivity(R.layout.activity_settings) public class SettingsActivity extends BaseActivity { + static { + LicenseInfo.INSTANCE.install(); + } private static final List> COLOR_ITEMS = new ListBuilder>() .add(new Pair<>(R.color.theme_color_red, R.string.theme_color_red)) .add(new Pair<>(R.color.theme_color_pink, R.string.theme_color_pink)) @@ -140,7 +143,6 @@ public boolean onPreferenceTreeClick(Preference preference) { } private void showLicenseDialog() { - LicenseResolver.registerLicense(MozillaPublicLicense20.instance); new LicensesDialog.Builder(getActivity()) .setNotices(R.raw.licenses) .setIncludeOwnLicense(true) @@ -158,35 +160,5 @@ private void showLicenseDialog2() { .show(); } - public static class MozillaPublicLicense20 extends License { - - public static MozillaPublicLicense20 instance = new MozillaPublicLicense20(); - - @Override - public String getName() { - return "Mozilla Public License 2.0"; - } - - @Override - public String readSummaryTextFromResources(Context context) { - return getContent(context, R.raw.mpl_20_summary); - } - - @Override - public String readFullTextFromResources(Context context) { - return getContent(context, R.raw.mpl_20_full); - } - - @Override - public String getVersion() { - return "2.0"; - } - - @Override - public String getUrl() { - return "https://www.mozilla.org/en-US/MPL/2.0/"; - } - } - } } diff --git a/app/src/main/res/raw/licenses.xml b/app/src/main/res/raw/licenses.xml index ba287f5a3..305bc632e 100644 --- a/app/src/main/res/raw/licenses.xml +++ b/app/src/main/res/raw/licenses.xml @@ -149,4 +149,16 @@ https://github.com/paddlepaddle/paddle Apache Software License 2.0 + + nanohttpd + Copyright (c) 2012-2013 by Paul S. Hawke, 2001,2005-2013 by Jarno Elonen, 2010 by Konstantinos Togias All rights reserved. + https://github.com/NanoHttpd/nanohttpd + BSD 3-Clause License + + + vscode-mobile + + https://github.com/aiselp/vscode-mobile + Apache Software License 2.0 + \ No newline at end of file From e8b672df88b9482ecb3efae406115940439fe2a7 Mon Sep 17 00:00:00 2001 From: aiselp Date: Tue, 31 Oct 2023 19:56:05 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeeditor/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/codeeditor/build.gradle.kts b/codeeditor/build.gradle.kts index b9591a9a7..8b9f06fdd 100644 --- a/codeeditor/build.gradle.kts +++ b/codeeditor/build.gradle.kts @@ -55,6 +55,7 @@ tasks.register("downloadEditor") { val versionFile = File(assetsDir, "version.txt") doFirst { logger.log(org.gradle.api.logging.LogLevel.LIFECYCLE,"start downloadEditor") + assetsDir.mkdirs() if (versionFile.isFile){ val dowversion = versionFile.readText().toInt() if (dowversion == version) { From 32c4d1147746d39a4069a804069ebcbc2ed70a12 Mon Sep 17 00:00:00 2001 From: aiselp Date: Tue, 31 Oct 2023 21:10:03 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E4=B8=BAandserver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apkbuilder/build.gradle.kts | 21 ++---- apkbuilder/libs/commons-io-2.5.jar | Bin 208696 -> 0 bytes .../apkbuilder/ExampleInstrumentedTest.java | 6 +- app/src/main/res/raw/licenses.xml | 8 +- build.gradle.kts | 1 + codeeditor/build.gradle.kts | 4 + .../autojs/codeeditor/web/EditorAppManager.kt | 5 +- .../autojs/codeeditor/web/FileHttpServer.kt | 69 ++++++++++++++++-- gradle/libs.versions.toml | 5 +- 9 files changed, 86 insertions(+), 33 deletions(-) delete mode 100755 apkbuilder/libs/commons-io-2.5.jar diff --git a/apkbuilder/build.gradle.kts b/apkbuilder/build.gradle.kts index 7d5430650..8c0a1c200 100644 --- a/apkbuilder/build.gradle.kts +++ b/apkbuilder/build.gradle.kts @@ -27,21 +27,14 @@ android { } dependencies { - implementation("com.squareup.okhttp3:okhttp:4.10.0") - implementation("androidx.core:core-ktx:1.8.0") -} -dependencies { - testImplementation("org.springframework.boot:spring-boot-starter-test") { - exclude("junit", "junit") - } - androidTestImplementation("androidx.test.espresso:espresso-core:3.1.1-alpha01") { - exclude(group = "com.android.support", module = "support-annotations") - } - testImplementation("junit:junit:4.13.2") - api(fileTree("libs") { include("*.jar") }) + + implementation(libs.okhttp) + androidTestImplementation(libs.androidx.test.ext.junit) + androidTestImplementation(libs.espresso.core) + testImplementation(libs.junit) api(files("libs/tiny-sign-0.9.jar")) - api(files("libs/commons-io-2.5.jar")) - implementation("androidx.core:core-ktx:1.8.0") + api(libs.commons.io) + implementation(libs.core.ktx) } repositories { mavenCentral() diff --git a/apkbuilder/libs/commons-io-2.5.jar b/apkbuilder/libs/commons-io-2.5.jar deleted file mode 100755 index 12349182711347e3d0b66ecfa35ec7b69a023b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208696 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 Software License 2.0 - nanohttpd - Copyright (c) 2012-2013 by Paul S. Hawke, 2001,2005-2013 by Jarno Elonen, 2010 by Konstantinos Togias All rights reserved. - https://github.com/NanoHttpd/nanohttpd - BSD 3-Clause License + AndServer + + https://github.com/yanzhenjie/AndServer/ + Apache Software License 2.0 vscode-mobile diff --git a/build.gradle.kts b/build.gradle.kts index e7a1b95e2..065bc72ba 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,6 +24,7 @@ buildscript { classpath(kotlin("gradle-plugin", version = "$kotlin_version")) classpath("com.jakewharton:butterknife-gradle-plugin:10.2.3") classpath("org.codehaus.groovy:groovy-json:3.0.8") + classpath("com.yanzhenjie.andserver:plugin:2.1.12") } } diff --git a/codeeditor/build.gradle.kts b/codeeditor/build.gradle.kts index 8b9f06fdd..813c023ea 100644 --- a/codeeditor/build.gradle.kts +++ b/codeeditor/build.gradle.kts @@ -2,6 +2,8 @@ import java.net.URL plugins { id("com.android.library") id("kotlin-android") + id("com.yanzhenjie.andserver") + id("kotlin-kapt") } android { @@ -35,6 +37,8 @@ android { dependencies { + implementation(libs.andserver.api) + kapt(libs.andserver.processor) implementation(libs.kotlinx.coroutines.android) api(libs.nanohttpd.webserver) api(libs.androidx.webkit) diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt index cb6e316e9..a4918890a 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/EditorAppManager.kt @@ -36,8 +36,7 @@ class EditorAppManager(val context: Activity) { private val jsBridge = JsBridge(webView) private val fileHttpServer = FileHttpServer( context, File( - context.filesDir, - "$WEB_PUBLIC_PATH/dist" + context.filesDir, "$WEB_PUBLIC_PATH/dist" ) ) private val pluginManager = PluginManager(jsBridge, coroutineScope) @@ -51,7 +50,7 @@ class EditorAppManager(val context: Activity) { async { initWebResources() }.await() delay(300) withContext(Dispatchers.Main) { - webView.loadUrl("http://${fileHttpServer.hostname}:${fileHttpServer.port}") + webView.loadUrl(fileHttpServer.getAddress()) // webView.loadUrl("http://192.168.10.10:8009") } } diff --git a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt index 4e3314cd6..c4592caf3 100644 --- a/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt +++ b/codeeditor/src/main/java/com/aiselp/autojs/codeeditor/web/FileHttpServer.kt @@ -1,18 +1,71 @@ package com.aiselp.autojs.codeeditor.web import android.content.Context +import android.os.Build import android.util.Log -import fi.iki.elonen.SimpleWebServer +import androidx.annotation.RequiresApi +import com.yanzhenjie.andserver.AndServer +import com.yanzhenjie.andserver.Server +import com.yanzhenjie.andserver.annotation.Config +import com.yanzhenjie.andserver.framework.config.WebConfig +import com.yanzhenjie.andserver.framework.website.StorageWebsite import java.io.File +import java.io.IOException +import java.net.ServerSocket +import java.util.concurrent.TimeUnit +import kotlin.random.Random -class FileHttpServer(context: Context,path:File) : - SimpleWebServer("127.0.0.1", SPort, path, false) { + +class FileHttpServer(context: Context, path: File) { companion object { - var SPort = 42201 + fun isPortAvailable(port: Int): Boolean { + try { + ServerSocket(port).use { + return true // 端口可用 + } + } catch (e: IOException) { + return false // 端口已被占用 + } + } + } + + private val port = getPort() + val server: Server = AndServer.webServer(context) + .port(port) + .timeout(10, TimeUnit.SECONDS) + .build(); + + private fun getPort(): Int { + while (true) { + val port = Random.nextInt(2000, 50000) + if (isPortAvailable(port)) { + return port + } + } } - val port = SPort - init { - SPort++ - Log.d("FileHttpServer", "FileHttpServer init host: ${this.hostname} port: $port") + fun getAddress(): String { + return "http://127.0.0.1:$port" + } + fun start(){ + Log.d("FileHttpServer", "FileHttpServer init host: 127.0.0.1 port: $port") + server.startup() + } + fun stop(){ + server.shutdown() + } +} + +@RequiresApi(Build.VERSION_CODES.M) +@Config +class AppConfig : WebConfig { + override fun onConfig(context: Context, delegate: WebConfig.Delegate) { + // 增加一个位于/sdcard/Download/AndServer/目录的网站 + delegate.addWebsite( + StorageWebsite( + File( + context.filesDir, "${EditorAppManager.WEB_PUBLIC_PATH}/dist" + ).path + ) + ) } } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8ccde105e..10b918b62 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,4 +1,5 @@ [versions] +andserver = "2.1.12" core-ktx = "1.8.0" google-gson = "2.9.1" junit = "4.13.2" @@ -12,6 +13,7 @@ material = "1.9.0" [libraries] +commons-io = "commons-io:commons-io:2.6" eventbus = "org.greenrobot:eventbus:3.3.1" kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines-android" } nanohttpd-webserver = "org.nanohttpd:nanohttpd-webserver:2.3.1" @@ -33,7 +35,8 @@ androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" } appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } - +andserver-processor = { module = "com.yanzhenjie.andserver:processor", version.ref = "andserver" } +andserver-api = { module = "com.yanzhenjie.andserver:api", version.ref = "andserver" } [plugins] [bundles]