@@ -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