From 423b9ac4aa99bc6bb51be2a7f954aaada93c8d05 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 3 Apr 2026 13:18:55 +0000 Subject: [PATCH] fix: disable hardware bitmaps for notification icons to avoid StrictMode violation Hardware bitmaps cannot be efficiently read for pixels, which is required when parceling notifications. Adding allowHardware(false) to all image requests used for notification bitmaps prevents the slow pixel readback. https://claude.ai/code/session_018y75qshU48REuHXxLH3Tmb --- .../vitorpamplona/amethyst/service/call/CallController.kt | 7 ++++++- .../service/notifications/EventNotificationConsumer.kt | 7 ++++++- .../amethyst/service/notifications/NotificationUtils.kt | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt index 1b5ff2725..3c168876e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt @@ -507,7 +507,12 @@ class CallController( callerUser?.profilePicture()?.let { pictureUrl -> withContext(Dispatchers.IO) { try { - val request = ImageRequest.Builder(context).data(pictureUrl).build() + val request = + ImageRequest + .Builder(context) + .data(pictureUrl) + .allowHardware(false) + .build() val result = ImageLoader(context).execute(request) (result.image?.asDrawable(context.resources) as? android.graphics.drawable.BitmapDrawable)?.bitmap } catch (_: Exception) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt index 356f65c40..09c50dbff 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt @@ -644,7 +644,12 @@ class EventNotificationConsumer( callerUser?.profilePicture()?.let { pictureUrl -> kotlinx.coroutines.withContext(kotlinx.coroutines.Dispatchers.IO) { try { - val request = ImageRequest.Builder(applicationContext).data(pictureUrl).build() + val request = + ImageRequest + .Builder(applicationContext) + .data(pictureUrl) + .allowHardware(false) + .build() val result = ImageLoader(applicationContext).execute(request) (result.image?.asDrawable(applicationContext.resources) as? BitmapDrawable)?.bitmap } catch (_: Exception) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt index 45839e99a..10d759088 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt @@ -272,7 +272,12 @@ object NotificationUtils { ): Bitmap? = withContext(Dispatchers.IO) { try { - val request = ImageRequest.Builder(applicationContext).data(pictureUrl).build() + val request = + ImageRequest + .Builder(applicationContext) + .data(pictureUrl) + .allowHardware(false) + .build() val imageLoader = SingletonImageLoader.get(applicationContext) val result = imageLoader.execute(request) (result.image?.asDrawable(applicationContext.resources) as? BitmapDrawable)?.bitmap