From ad4142db1a0794ba20bc8f97fd6abb590cc55611 Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Wed, 30 Apr 2025 17:36:00 +0530 Subject: [PATCH] Fix class cast crash for banners. --- .../securesms/banner/BannerManager.kt | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/banner/BannerManager.kt b/app/src/main/java/org/thoughtcrime/securesms/banner/BannerManager.kt index d1dcca838e..759152d24a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/banner/BannerManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/banner/BannerManager.kt @@ -9,7 +9,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.key import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.unit.dp @@ -45,17 +45,18 @@ class BannerManager @JvmOverloads constructor( return@setContent } - val bannerState by banner.dataFlow.collectAsStateWithLifecycle(initialValue = null) + key(banner) { + val bannerState by banner.dataFlow.collectAsStateWithLifecycle(initialValue = null) - bannerState?.let { model -> - SignalTheme { - Box { - banner.DisplayBanner(model, PaddingValues(horizontal = 12.dp, vertical = 8.dp)) + bannerState?.let { model -> + SignalTheme { + Box { + banner.DisplayBanner(model, PaddingValues(horizontal = 12.dp, vertical = 8.dp)) + } } - } - - onNewBannerShownListener() - } ?: onNoBannerShownListener() + onNewBannerShownListener() + } ?: onNoBannerShownListener() + } } } } @@ -65,12 +66,16 @@ class BannerManager @JvmOverloads constructor( */ @Composable fun Banner() { - val banner by rememberUpdatedState(banners.firstOrNull { it.enabled } as Banner?) + val banner: Banner? = banners.firstOrNull { it.enabled } as Banner? + if (banner == null) { + return + } - banner?.let { nonNullBanner -> - val state by nonNullBanner.dataFlow.collectAsStateWithLifecycle(initialValue = null) - state?.let { model -> - nonNullBanner.DisplayBanner(model, PaddingValues(horizontal = 12.dp, vertical = 8.dp)) + key(banner) { + val bannerState by banner.dataFlow.collectAsStateWithLifecycle(initialValue = null) + + bannerState?.let { model -> + banner.DisplayBanner(model, PaddingValues(horizontal = 12.dp, vertical = 8.dp)) } } }