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