From e0d2a71b4763d8e93475b9aed95a979f89dcb379 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 3 Nov 2023 17:14:10 -0400 Subject: [PATCH] Remove a compose recomposition between the started state and the isOnline state that is already cached. --- .../vitorpamplona/amethyst/service/OnlineCheck.kt | 8 ++++++++ .../amethyst/ui/screen/loggedIn/HomeScreen.kt | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt index ac5a55f67..4d7e8f510 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/OnlineCheck.kt @@ -13,6 +13,14 @@ object OnlineChecker { val checkOnlineCache = LruCache(100) val fiveMinutes = 1000 * 60 * 5 + fun isOnlineCached(url: String?): Boolean { + if (url.isNullOrBlank()) return false + if ((checkOnlineCache.get(url)?.timeInMs ?: 0) > System.currentTimeMillis() - fiveMinutes) { + return checkOnlineCache.get(url).online + } + return false + } + fun isOnline(url: String?): Boolean { checkNotInMainThread() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt index ea810b90f..505d9504b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt @@ -27,6 +27,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.service.NostrHomeDataSource +import com.vitorpamplona.amethyst.service.OnlineChecker import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.note.UpdateZapAmountDialog import com.vitorpamplona.amethyst.ui.screen.FeedViewModel @@ -166,7 +167,11 @@ private fun HomePages( @Composable fun CheckIfUrlIsOnline(url: String, accountViewModel: AccountViewModel, whenOnline: @Composable () -> Unit) { - var online by remember { mutableStateOf(false) } + var online by remember { + mutableStateOf( + OnlineChecker.isOnlineCached(url) + ) + } LaunchedEffect(key1 = url) { accountViewModel.checkIsOnline(url) { isOnline -> @@ -176,7 +181,10 @@ fun CheckIfUrlIsOnline(url: String, accountViewModel: AccountViewModel, whenOnli } } - Crossfade(targetState = online) { + Crossfade( + targetState = online, + label = "CheckIfUrlIsOnline" + ) { if (it) { whenOnline() }