Skip to content

Commit 6afa86d

Browse files
committed
manager/webui: let getPackagesIcons generate icon and store in cache as well when called
1 parent 25fa6b7 commit 6afa86d

1 file changed

Lines changed: 20 additions & 3 deletions

File tree

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ class WebViewInterface(
283283
}
284284

285285
private val packageIconCache = HashMap<String, String>()
286+
286287
@JavascriptInterface
287288
fun cacheAllPackageIcons(size: Int) {
288289
val pm = context.packageManager
@@ -307,15 +308,31 @@ class WebViewInterface(
307308
}
308309

309310
@JavascriptInterface
310-
fun getPackagesIcons(packageNamesJson: String): String {
311+
fun getPackagesIcons(packageNamesJson: String, size: Int): String {
312+
val pm = context.packageManager
311313
val packageNames = JSONArray(packageNamesJson)
312314
val jsonArray = JSONArray()
315+
val outputStream = java.io.ByteArrayOutputStream()
313316
for (i in 0 until packageNames.length()) {
314317
val pkgName = packageNames.getString(i)
315318
val obj = JSONObject()
316319
obj.put("packageName", pkgName)
317-
val cachedIcon = packageIconCache[pkgName]
318-
obj.put("icon", cachedIcon ?: "")
320+
var iconBase64 = packageIconCache[pkgName]
321+
if (iconBase64 == null) {
322+
try {
323+
val appInfo = pm.getApplicationInfo(pkgName, 0)
324+
val drawable = pm.getApplicationIcon(appInfo)
325+
val bitmap = drawableToBitmap(drawable, size)
326+
outputStream.reset()
327+
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
328+
val byteArray = outputStream.toByteArray()
329+
iconBase64 = "data:image/png;base64," + Base64.encodeToString(byteArray, Base64.NO_WRAP)
330+
} catch (_: Exception) {
331+
iconBase64 = ""
332+
}
333+
packageIconCache[pkgName] = iconBase64
334+
}
335+
obj.put("icon", iconBase64)
319336
jsonArray.put(obj)
320337
}
321338
return jsonArray.toString()

0 commit comments

Comments
 (0)