summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-04-05 15:42:44 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-04-05 15:42:44 +0200
commite859f00005b219764d038311ebf9a6de50562dd0 (patch)
tree5d80f1e5757a7d6567d3d385ed06fec84552632c /android
parent5d942939d93f2a5624291fadb206d8429f57c1c8 (diff)
parent380080cd3632c6c36c4d1141eb1664b4d8732ccc (diff)
downloadmullvadvpn-e859f00005b219764d038311ebf9a6de50562dd0.tar.xz
mullvadvpn-e859f00005b219764d038311ebf9a6de50562dd0.zip
Merge branch 'crash-in-split-tunneling-due-to-too-large-app-icon-droid-846'
Diffstat (limited to 'android')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/Bitmap.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt3
3 files changed, 14 insertions, 1 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt
index 98c3767393..1bf8acf731 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt
@@ -28,6 +28,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.component.SpacedColumn
+import net.mullvad.mullvadvpn.compose.util.isBelowMaxBitmapSize
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
import net.mullvad.mullvadvpn.lib.theme.color.Alpha40
@@ -75,7 +76,9 @@ fun SplitTunnelingCell(
LaunchedEffect(packageName) {
launch(Dispatchers.IO) {
val bitmap = onResolveIcon(packageName ?: "")
- icon = bitmap?.asImageBitmap()
+ if (bitmap != null && bitmap.isBelowMaxBitmapSize()) {
+ icon = bitmap.asImageBitmap()
+ }
}
}
BaseCell(
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/Bitmap.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/Bitmap.kt
new file mode 100644
index 0000000000..9a3d030780
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/Bitmap.kt
@@ -0,0 +1,7 @@
+package net.mullvad.mullvadvpn.compose.util
+
+import android.graphics.Bitmap
+
+private const val MAX_BITMAP_SIZE_BYTES = 100 * 1024 * 1024
+
+fun Bitmap.isBelowMaxBitmapSize(): Boolean = byteCount < MAX_BITMAP_SIZE_BYTES
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt
index c5bf7965ca..1e7721710e 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt
@@ -13,4 +13,7 @@ fun PackageManager.getApplicationIconBitmapOrNull(packageName: String): Bitmap?
} catch (e: IllegalArgumentException) {
// IllegalArgumentException is thrown if the application has an invalid icon
null
+ } catch (e: OutOfMemoryError) {
+ // OutOfMemoryError is thrown if the icon is too large
+ null
}