js: add moduleInfo method (#2057)
Add a `ksu.moduleInfo()` in JS. resolves https://github.com/tiann/KernelSU/issues/1571 test module's index.html  The test module: [moduleInfo_test.zip](https://github.com/user-attachments/files/17001977/moduleInfo_test.zip) test module's result: 
This commit is contained in:
@@ -109,3 +109,12 @@ Show a toast message.
|
|||||||
import { toast } from 'kernelsu';
|
import { toast } from 'kernelsu';
|
||||||
toast('Hello, world!');
|
toast('Hello, world!');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### moduleInfo
|
||||||
|
|
||||||
|
Get Module info.
|
||||||
|
```javascript
|
||||||
|
import { moduleInfo } from 'kernelsu';
|
||||||
|
// print moduleId in console
|
||||||
|
console.log(moduleInfo());
|
||||||
|
```
|
||||||
5
js/index.d.ts
vendored
5
js/index.d.ts
vendored
@@ -37,9 +37,12 @@ declare function fullScreen(isFullScreen: boolean);
|
|||||||
|
|
||||||
declare function toast(message: string);
|
declare function toast(message: string);
|
||||||
|
|
||||||
|
declare function moduleInfo(): string;
|
||||||
|
|
||||||
export {
|
export {
|
||||||
exec,
|
exec,
|
||||||
spawn,
|
spawn,
|
||||||
fullScreen,
|
fullScreen,
|
||||||
toast
|
toast,
|
||||||
|
moduleInfo
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,3 +113,7 @@ export function fullScreen(isFullScreen) {
|
|||||||
export function toast(message) {
|
export function toast(message) {
|
||||||
ksu.toast(message);
|
ksu.toast(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function moduleInfo() {
|
||||||
|
return ksu.moduleInfo();
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "kernelsu",
|
"name": "kernelsu",
|
||||||
"version": "1.0.6",
|
"version": "1.0.7",
|
||||||
"description": "Library for KernelSU's module WebUI",
|
"description": "Library for KernelSU's module WebUI",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"types": "index.d.ts",
|
"types": "index.d.ts",
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ class WebUIActivity : ComponentActivity() {
|
|||||||
val prefs = getSharedPreferences("settings", Context.MODE_PRIVATE)
|
val prefs = getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
WebView.setWebContentsDebuggingEnabled(prefs.getBoolean("enable_web_debugging", false))
|
WebView.setWebContentsDebuggingEnabled(prefs.getBoolean("enable_web_debugging", false))
|
||||||
|
|
||||||
val webRoot = File("/data/adb/modules/${moduleId}/webroot")
|
val moduleDir = "/data/adb/modules/${moduleId}"
|
||||||
|
val webRoot = File("${moduleDir}/webroot")
|
||||||
val rootShell = createRootShell(true).also { this.rootShell = it }
|
val rootShell = createRootShell(true).also { this.rootShell = it }
|
||||||
val webViewAssetLoader = WebViewAssetLoader.Builder()
|
val webViewAssetLoader = WebViewAssetLoader.Builder()
|
||||||
.setDomain("mui.kernelsu.org")
|
.setDomain("mui.kernelsu.org")
|
||||||
@@ -52,7 +53,7 @@ class WebUIActivity : ComponentActivity() {
|
|||||||
settings.javaScriptEnabled = true
|
settings.javaScriptEnabled = true
|
||||||
settings.domStorageEnabled = true
|
settings.domStorageEnabled = true
|
||||||
settings.allowFileAccess = false
|
settings.allowFileAccess = false
|
||||||
webviewInterface = WebViewInterface(this@WebUIActivity, this)
|
webviewInterface = WebViewInterface(this@WebUIActivity, this, moduleDir)
|
||||||
addJavascriptInterface(webviewInterface, "ksu")
|
addJavascriptInterface(webviewInterface, "ksu")
|
||||||
setWebViewClient(webViewClient)
|
setWebViewClient(webViewClient)
|
||||||
loadUrl("https://mui.kernelsu.org/index.html")
|
loadUrl("https://mui.kernelsu.org/index.html")
|
||||||
|
|||||||
@@ -14,13 +14,15 @@ import androidx.core.view.WindowInsetsCompat
|
|||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
import com.topjohnwu.superuser.CallbackList
|
import com.topjohnwu.superuser.CallbackList
|
||||||
import com.topjohnwu.superuser.ShellUtils
|
import com.topjohnwu.superuser.ShellUtils
|
||||||
|
import me.weishu.kernelsu.ui.util.listModules
|
||||||
import me.weishu.kernelsu.ui.util.createRootShell
|
import me.weishu.kernelsu.ui.util.createRootShell
|
||||||
import me.weishu.kernelsu.ui.util.withNewRootShell
|
import me.weishu.kernelsu.ui.util.withNewRootShell
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class WebViewInterface(val context: Context, private val webView: WebView) {
|
class WebViewInterface(val context: Context, private val webView: WebView, private val modDir: String) {
|
||||||
|
|
||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
fun exec(cmd: String): String {
|
fun exec(cmd: String): String {
|
||||||
@@ -170,6 +172,27 @@ class WebViewInterface(val context: Context, private val webView: WebView) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JavascriptInterface
|
||||||
|
fun moduleInfo(): String {
|
||||||
|
val moduleInfos = JSONArray(listModules())
|
||||||
|
var currentModuleInfo = JSONObject()
|
||||||
|
currentModuleInfo.put("moduleDir", modDir)
|
||||||
|
val moduleId = File(modDir).getName()
|
||||||
|
for (i in 0 until moduleInfos.length()) {
|
||||||
|
val currentInfo = moduleInfos.getJSONObject(i)
|
||||||
|
|
||||||
|
if (currentInfo.getString("id") != moduleId) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = currentInfo.keys()
|
||||||
|
for(key in keys) {
|
||||||
|
currentModuleInfo.put(key, currentInfo.get(key));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return currentModuleInfo.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hideSystemUI(window: Window) {
|
fun hideSystemUI(window: Window) {
|
||||||
|
|||||||
Reference in New Issue
Block a user