@@ -2,6 +2,7 @@ package com.rifsxd.ksunext.ui.webui
22
33import android.app.Activity
44import android.content.Context
5+ import android.content.pm.ApplicationInfo
56import android.os.Handler
67import android.os.Looper
78import 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
202270fun hideSystemUI (window : Window ) =
0 commit comments