Fix crash when importing web search

This commit is contained in:
MM20 2022-12-10 14:36:05 +01:00
parent b891c0ea79
commit bac24baad2
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -1,14 +1,11 @@
package de.mm20.launcher2.searchactions
import android.app.SearchManager
import android.app.SearchableInfo
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.net.Uri
import android.util.Log
import android.util.Xml
import androidx.core.graphics.drawable.toBitmap
import coil.imageLoader
@ -120,8 +117,8 @@ internal class SearchActionServiceImpl(
?.absUrl("href")
?.takeIf { it.isNotEmpty() }
var action = openSearchHref?.let {
importOpenSearch(it)
val action = openSearchHref?.let {
importOpenSearch(it, iconSize)
}
if (action != null) {
@ -139,7 +136,7 @@ internal class SearchActionServiceImpl(
return@withContext null
}
private suspend fun importOpenSearch(openSearchHref: String): WebsearchActionBuilder? {
private suspend fun importOpenSearch(openSearchHref: String, iconSize: Int): WebsearchActionBuilder? {
try {
val httpClient = OkHttpClient()
val request = Request.Builder()
@ -151,8 +148,8 @@ internal class SearchActionServiceImpl(
var label: String? = null
var urlTemplate: String? = null
var icon: String? = null
var iconSize: Int = 0
var iconUrl: String? = null
var largestIconSize: Int = 0
var largestIcon: String? = null
inputStream.use {
val parser = Xml.newPullParser()
@ -175,13 +172,13 @@ internal class SearchActionServiceImpl(
}
"Image" -> {
val size =
val width =
parser.getAttributeValue(null, "width")?.toIntOrNull() ?: 0
if (size > iconSize || iconUrl == null) {
if (width > largestIconSize || largestIcon == null) {
parser.next()
if (parser.eventType == XmlPullParser.TEXT) {
iconUrl = parser.text
iconSize = size
largestIcon = parser.text
largestIconSize = width
}
}
}
@ -205,7 +202,7 @@ internal class SearchActionServiceImpl(
}
}
val localIconUrl = iconUrl?.let {
val localIconUrl = largestIcon?.let {
val uri = Uri.parse(it)
createIcon(uri, iconSize)
}