manager: introduce app package info API for webui-next

This commit is contained in:
Rifat Azad
2025-07-03 15:54:31 +06:00
parent a8bfd1cc7d
commit 58167a4289
3 changed files with 71 additions and 2 deletions

View File

@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<application
android:name=".KernelSUApplication"

View File

@@ -39,9 +39,9 @@ class WebUIActivity : ComponentActivity() {
val name = intent.getStringExtra("name")!!
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
@Suppress("DEPRECATION")
setTaskDescription(ActivityManager.TaskDescription("KSUNEXT - $name"))
setTaskDescription(ActivityManager.TaskDescription("WebUI-Next | $name"))
} else {
val taskDescription = ActivityManager.TaskDescription.Builder().setLabel("KSUNEXT - $name").build()
val taskDescription = ActivityManager.TaskDescription.Builder().setLabel("WebUI-Next | $name").build()
setTaskDescription(taskDescription)
}

View File

@@ -2,6 +2,7 @@ package com.rifsxd.ksunext.ui.webui
import android.app.Activity
import android.content.Context
import android.content.pm.ApplicationInfo
import android.os.Handler
import android.os.Looper
import android.text.TextUtils
@@ -197,6 +198,73 @@ class WebViewInterface(
}
return currentModuleInfo.toString()
}
@JavascriptInterface
fun listSystemPackages(): String {
val pm = context.packageManager
val packages = pm.getInstalledPackages(0)
val jsonArray = JSONArray()
for (pkg in packages) {
val appInfo = pkg.applicationInfo
if (appInfo != null && (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0) {
jsonArray.put(pkg.packageName)
}
}
return jsonArray.toString()
}
@JavascriptInterface
fun listUserPackages(): String {
val pm = context.packageManager
val packages = pm.getInstalledPackages(0)
val jsonArray = JSONArray()
for (pkg in packages) {
val appInfo = pkg.applicationInfo
if (appInfo != null && (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) == 0) {
jsonArray.put(pkg.packageName)
}
}
return jsonArray.toString()
}
@JavascriptInterface
fun listAllPackages(): String {
val pm = context.packageManager
val packages = pm.getInstalledPackages(0)
val jsonArray = JSONArray()
for (pkg in packages) {
jsonArray.put(pkg.packageName)
}
return jsonArray.toString()
}
@JavascriptInterface
fun getPackagesInfo(packageNamesJson: String): String {
val pm = context.packageManager
val packageNames = JSONArray(packageNamesJson)
val jsonArray = JSONArray()
for (i in 0 until packageNames.length()) {
val pkgName = packageNames.getString(i)
try {
val pkg = pm.getPackageInfo(pkgName, 0)
val appInfo = pkg.applicationInfo
val obj = JSONObject()
obj.put("packageName", pkg.packageName)
obj.put("versionName", pkg.versionName ?: "")
obj.put("versionCode", pkg.longVersionCode)
obj.put("appLabel", if (appInfo != null) pm.getApplicationLabel(appInfo).toString() else "")
obj.put("isSystem", appInfo != null && (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0)
obj.put("uid", appInfo?.uid ?: JSONObject.NULL)
jsonArray.put(obj)
} catch (e: Exception) {
val obj = JSONObject()
obj.put("packageName", pkgName)
obj.put("error", "Package not found or inaccessible")
jsonArray.put(obj)
}
}
return jsonArray.toString()
}
}
fun hideSystemUI(window: Window) =