Skip to content

Commit 58167a4

Browse files
committed
manager: introduce app package info API for webui-next
1 parent a8bfd1c commit 58167a4

3 files changed

Lines changed: 71 additions & 2 deletions

File tree

manager/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xmlns:tools="http://schemas.android.com/tools">
44

55
<uses-permission android:name="android.permission.INTERNET" />
6+
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
67

78
<application
89
android:name=".KernelSUApplication"

manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ class WebUIActivity : ComponentActivity() {
3939
val name = intent.getStringExtra("name")!!
4040
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
4141
@Suppress("DEPRECATION")
42-
setTaskDescription(ActivityManager.TaskDescription("KSUNEXT - $name"))
42+
setTaskDescription(ActivityManager.TaskDescription("WebUI-Next | $name"))
4343
} else {
44-
val taskDescription = ActivityManager.TaskDescription.Builder().setLabel("KSUNEXT - $name").build()
44+
val taskDescription = ActivityManager.TaskDescription.Builder().setLabel("WebUI-Next | $name").build()
4545
setTaskDescription(taskDescription)
4646
}
4747

manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebViewInterface.kt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.rifsxd.ksunext.ui.webui
22

33
import android.app.Activity
44
import android.content.Context
5+
import android.content.pm.ApplicationInfo
56
import android.os.Handler
67
import android.os.Looper
78
import android.text.TextUtils
@@ -197,6 +198,73 @@ class WebViewInterface(
197198
}
198199
return currentModuleInfo.toString()
199200
}
201+
202+
@JavascriptInterface
203+
fun listSystemPackages(): String {
204+
val pm = context.packageManager
205+
val packages = pm.getInstalledPackages(0)
206+
val jsonArray = JSONArray()
207+
for (pkg in packages) {
208+
val appInfo = pkg.applicationInfo
209+
if (appInfo != null && (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0) {
210+
jsonArray.put(pkg.packageName)
211+
}
212+
}
213+
return jsonArray.toString()
214+
}
215+
216+
@JavascriptInterface
217+
fun listUserPackages(): String {
218+
val pm = context.packageManager
219+
val packages = pm.getInstalledPackages(0)
220+
val jsonArray = JSONArray()
221+
for (pkg in packages) {
222+
val appInfo = pkg.applicationInfo
223+
if (appInfo != null && (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) == 0) {
224+
jsonArray.put(pkg.packageName)
225+
}
226+
}
227+
return jsonArray.toString()
228+
}
229+
230+
@JavascriptInterface
231+
fun listAllPackages(): String {
232+
val pm = context.packageManager
233+
val packages = pm.getInstalledPackages(0)
234+
val jsonArray = JSONArray()
235+
for (pkg in packages) {
236+
jsonArray.put(pkg.packageName)
237+
}
238+
return jsonArray.toString()
239+
}
240+
241+
@JavascriptInterface
242+
fun getPackagesInfo(packageNamesJson: String): String {
243+
val pm = context.packageManager
244+
val packageNames = JSONArray(packageNamesJson)
245+
val jsonArray = JSONArray()
246+
for (i in 0 until packageNames.length()) {
247+
val pkgName = packageNames.getString(i)
248+
try {
249+
val pkg = pm.getPackageInfo(pkgName, 0)
250+
val appInfo = pkg.applicationInfo
251+
val obj = JSONObject()
252+
obj.put("packageName", pkg.packageName)
253+
obj.put("versionName", pkg.versionName ?: "")
254+
obj.put("versionCode", pkg.longVersionCode)
255+
obj.put("appLabel", if (appInfo != null) pm.getApplicationLabel(appInfo).toString() else "")
256+
obj.put("isSystem", appInfo != null && (appInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0)
257+
obj.put("uid", appInfo?.uid ?: JSONObject.NULL)
258+
jsonArray.put(obj)
259+
} catch (e: Exception) {
260+
val obj = JSONObject()
261+
obj.put("packageName", pkgName)
262+
obj.put("error", "Package not found or inaccessible")
263+
jsonArray.put(obj)
264+
}
265+
}
266+
return jsonArray.toString()
267+
}
200268
}
201269

202270
fun hideSystemUI(window: Window) =

0 commit comments

Comments
 (0)