From d5220324c4c30d97b36d77ce92df033c85b9eb61 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 22 Sep 2023 13:24:37 -0400 Subject: [PATCH] Turns out the lifecycle owner changes quite a bit and thus it's a requirement to make it the key of a Disposable Effect. --- .../ui/actions/JoinUserOrChannelView.kt | 2 +- .../ui/components/ZoomableContentView.kt | 2 +- .../amethyst/ui/navigation/AppNavigation.kt | 2 +- .../amethyst/ui/qrcode/QrCodeScanner.kt | 5 +---- .../amethyst/ui/screen/RelayFeedView.kt | 18 +++++++++++------- .../ui/screen/RememberForeverStates.kt | 2 +- .../ui/screen/loggedIn/ChannelScreen.kt | 14 +++++++++++--- .../ui/screen/loggedIn/ChatroomListScreen.kt | 2 +- .../ui/screen/loggedIn/ChatroomScreen.kt | 13 ++++++++++--- .../ui/screen/loggedIn/CommunityScreen.kt | 2 +- .../ui/screen/loggedIn/DiscoverScreen.kt | 2 +- .../ui/screen/loggedIn/GeoHashScreen.kt | 10 ++++++---- .../ui/screen/loggedIn/HashtagScreen.kt | 12 +++++++----- .../ui/screen/loggedIn/HiddenUsersScreen.kt | 2 +- .../amethyst/ui/screen/loggedIn/HomeScreen.kt | 2 +- .../amethyst/ui/screen/loggedIn/MainScreen.kt | 18 ++++++++++++++++++ .../ui/screen/loggedIn/NotificationScreen.kt | 2 +- .../ui/screen/loggedIn/ProfileScreen.kt | 18 +++++++++++++----- .../ui/screen/loggedIn/SearchScreen.kt | 2 +- .../ui/screen/loggedIn/ThreadScreen.kt | 9 ++++++--- .../amethyst/ui/screen/loggedIn/VideoScreen.kt | 2 +- 21 files changed, 95 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/JoinUserOrChannelView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/JoinUserOrChannelView.kt index 7ff65c5e1..fb78a0ffb 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/JoinUserOrChannelView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/JoinUserOrChannelView.kt @@ -194,7 +194,7 @@ private fun RenderSearch( } } - DisposableEffect(Unit) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Join Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt index 2e154fa0d..003338d2c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt @@ -614,7 +614,7 @@ fun ZoomableImageDialog( ) { val view = LocalView.current - DisposableEffect(key1 = Unit) { + DisposableEffect(key1 = view) { if (Build.VERSION.SDK_INT >= 30) { view.windowInsetsController?.hide( android.view.WindowInsets.Type.systemBars() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index 167bbaf85..56feca6ae 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -284,7 +284,7 @@ fun AppNavigation( actionableNextPage = null } - DisposableEffect(navController) { + DisposableEffect(activity) { val consumer = Consumer { intent -> val uri = intent?.data?.toString() val newPage = uriToRoute(uri) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeScanner.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeScanner.kt index 6e76f2f3f..2ad62d8a4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeScanner.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/qrcode/QrCodeScanner.kt @@ -4,7 +4,6 @@ import android.util.Log import androidx.activity.compose.rememberLauncherForActivityResult import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.stringResource import com.google.zxing.client.android.Intents import com.journeyapps.barcodescanner.ScanContract @@ -40,8 +39,6 @@ fun NIP19QrCodeScanner(onScan: (String?) -> Unit) { @Composable fun SimpleQrCodeScanner(onScan: (String?) -> Unit) { - val lifecycleOwner = LocalLifecycleOwner.current - val qrLauncher = rememberLauncherForActivityResult(ScanContract()) { if (it.contents != null) { @@ -59,7 +56,7 @@ fun SimpleQrCodeScanner(onScan: (String?) -> Unit) { addExtra(Intents.Scan.SCAN_TYPE, Intents.Scan.MIXED_SCAN) } - DisposableEffect(lifecycleOwner) { + DisposableEffect(Unit) { qrLauncher.launch(scanOptions) onDispose { } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt index f41eb6f7f..e3cdcf7fa 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayFeedView.kt @@ -70,16 +70,20 @@ class RelayFeedViewModel : ViewModel() { } fun subscribeTo(user: User) { - currentUser = user - user.live().relays.observeForever(listener) - user.live().relayInfo.observeForever(listener) - invalidateData() + if (currentUser != user) { + currentUser = user + user.live().relays.observeForever(listener) + user.live().relayInfo.observeForever(listener) + invalidateData() + } } fun unsubscribeTo(user: User) { - user.live().relays.removeObserver(listener) - user.live().relayInfo.removeObserver(listener) - currentUser = null + if (currentUser == user) { + user.live().relays.removeObserver(listener) + user.live().relayInfo.removeObserver(listener) + currentUser = null + } } private val bundler = BundledUpdate(250, Dispatchers.IO) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RememberForeverStates.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RememberForeverStates.kt index 849551e7e..9f79daf5a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RememberForeverStates.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RememberForeverStates.kt @@ -47,7 +47,7 @@ fun rememberForeverLazyListState( savedOffset.roundToInt() ) } - DisposableEffect(Unit) { + DisposableEffect(scrollState) { onDispose { val lastIndex = scrollState.firstVisibleItemIndex val lastOffset = scrollState.firstVisibleItemScrollOffset diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt index 84d875069..ae9ff651b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt @@ -196,9 +196,6 @@ fun ChannelScreen( val lifeCycleOwner = LocalLifecycleOwner.current LaunchedEffect(Unit) { - NostrChannelDataSource.start() - feedViewModel.invalidateData(true) - launch(Dispatchers.IO) { newPostModel.imageUploadingError.collect { error -> withContext(Dispatchers.Main) { @@ -209,6 +206,17 @@ fun ChannelScreen( } DisposableEffect(accountViewModel) { + NostrChannelDataSource.loadMessagesBetween(accountViewModel.account, channel) + NostrChannelDataSource.start() + feedViewModel.invalidateData(true) + + onDispose { + NostrChannelDataSource.clear() + NostrChannelDataSource.stop() + } + } + + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Channel Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomListScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomListScreen.kt index 39b60a649..0051e737c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomListScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomListScreen.kt @@ -67,7 +67,7 @@ fun ChatroomListScreen( WatchAccountForListScreen(knownFeedViewModel, newFeedViewModel, accountViewModel) val lifeCycleOwner = LocalLifecycleOwner.current - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { NostrChatroomListDataSource.start() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt index 7f02e78eb..0ac3bf90d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt @@ -234,9 +234,6 @@ fun ChatroomScreen( LaunchedEffect(room, accountViewModel) { launch(Dispatchers.IO) { - NostrChatroomDataSource.start() - feedViewModel.invalidateData() - newPostModel.imageUploadingError.collect { error -> withContext(Dispatchers.Main) { Toast.makeText(context, error, Toast.LENGTH_SHORT).show() @@ -246,6 +243,16 @@ fun ChatroomScreen( } DisposableEffect(room, accountViewModel) { + NostrChatroomDataSource.loadMessagesBetween(accountViewModel.account, room) + NostrChatroomDataSource.start() + feedViewModel.invalidateData() + + onDispose { + NostrChatroomDataSource.stop() + } + } + + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Private Message Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/CommunityScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/CommunityScreen.kt index 011c6dd6b..bd80d9fa0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/CommunityScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/CommunityScreen.kt @@ -56,7 +56,7 @@ fun CommunityScreen(note: AddressableNote, feedViewModel: NostrCommunityFeedView feedViewModel.invalidateData() } - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Community Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DiscoverScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DiscoverScreen.kt index 65df80ee9..a9febcdca 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DiscoverScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DiscoverScreen.kt @@ -88,7 +88,7 @@ fun DiscoverScreen( accountViewModel = accountViewModel ) - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Discovery Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/GeoHashScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/GeoHashScreen.kt index 8de031058..36bec3b1d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/GeoHashScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/GeoHashScreen.kt @@ -65,12 +65,16 @@ fun GeoHashScreen(tag: String, feedViewModel: NostrGeoHashFeedViewModel, account NostrGeohashDataSource.loadHashtag(tag) - LaunchedEffect(tag) { + DisposableEffect(tag) { NostrGeohashDataSource.start() feedViewModel.invalidateData() + onDispose { + NostrGeohashDataSource.loadHashtag(null) + NostrGeohashDataSource.stop() + } } - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Hashtag Start") @@ -88,8 +92,6 @@ fun GeoHashScreen(tag: String, feedViewModel: NostrGeoHashFeedViewModel, account lifeCycleOwner.lifecycle.addObserver(observer) onDispose { lifeCycleOwner.lifecycle.removeObserver(observer) - NostrGeohashDataSource.loadHashtag(null) - NostrGeohashDataSource.stop() } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt index f0c8d3411..edd2cfe21 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HashtagScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.material.Divider import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState @@ -61,12 +60,17 @@ fun HashtagScreen(tag: String, feedViewModel: NostrHashtagFeedViewModel, account NostrHashtagDataSource.loadHashtag(tag) - LaunchedEffect(tag) { + DisposableEffect(tag) { NostrHashtagDataSource.start() feedViewModel.invalidateData() + + onDispose { + NostrHashtagDataSource.loadHashtag(null) + NostrHashtagDataSource.stop() + } } - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Hashtag Start") @@ -84,8 +88,6 @@ fun HashtagScreen(tag: String, feedViewModel: NostrHashtagFeedViewModel, account lifeCycleOwner.lifecycle.addObserver(observer) onDispose { lifeCycleOwner.lifecycle.removeObserver(observer) - NostrHashtagDataSource.loadHashtag(null) - NostrHashtagDataSource.stop() } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt index 7f78f7bbe..69938b796 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HiddenUsersScreen.kt @@ -61,7 +61,7 @@ fun HiddenUsersScreen( ) { val lifeCycleOwner = LocalLifecycleOwner.current - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Hidden Users Start") 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 3b146279b..bc0de2b7e 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 @@ -63,7 +63,7 @@ fun HomeScreen( } val lifeCycleOwner = LocalLifecycleOwner.current - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { NostrHomeDataSource.invalidateFilters() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt index 4bccf3ee7..1c47e186d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.State @@ -33,7 +34,10 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavBackStackEntry import androidx.navigation.compose.currentBackStackEntryAsState @@ -323,6 +327,20 @@ fun WatchNavStateToUpdateBarVisibility(navState: State, bott LaunchedEffect(key1 = navState.value) { bottomBarOffsetHeightPx.value = 0f } + + val lifeCycleOwner = LocalLifecycleOwner.current + DisposableEffect(lifeCycleOwner) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + bottomBarOffsetHeightPx.value = 0f + } + } + + lifeCycleOwner.lifecycle.addObserver(observer) + onDispose { + lifeCycleOwner.lifecycle.removeObserver(observer) + } + } } @Composable diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt index cba29abb1..d6a644ad1 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt @@ -75,7 +75,7 @@ fun NotificationScreen( CheckifItNeedsToRequestNotificationPermission() val lifeCycleOwner = LocalLifecycleOwner.current - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { NostrAccountDataSource.invalidateFilters() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index cd22683a5..2ef5d60cb 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -238,11 +238,15 @@ fun ProfileScreen( val lifeCycleOwner = LocalLifecycleOwner.current - LaunchedEffect(Unit) { + DisposableEffect(accountViewModel) { NostrUserProfileDataSource.start() + onDispose { + NostrUserProfileDataSource.loadUserProfile(null) + NostrUserProfileDataSource.stop() + } } - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Profidle Start") @@ -259,9 +263,6 @@ fun ProfileScreen( lifeCycleOwner.lifecycle.addObserver(observer) onDispose { lifeCycleOwner.lifecycle.removeObserver(observer) - println("Profile Dispose") - NostrUserProfileDataSource.loadUserProfile(null) - NostrUserProfileDataSource.stop() } } @@ -1567,6 +1568,13 @@ fun TabRelays(user: User, accountViewModel: AccountViewModel, nav: (String) -> U val lifeCycleOwner = LocalLifecycleOwner.current DisposableEffect(user) { + feedViewModel.subscribeTo(user) + onDispose { + feedViewModel.unsubscribeTo(user) + } + } + + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Profile Relay Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt index 49acad049..1b5636d72 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt @@ -104,7 +104,7 @@ fun SearchScreen( WatchAccountForSearchScreen(accountViewModel) - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Search Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ThreadScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ThreadScreen.kt index 8df68e327..57eaa662d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ThreadScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ThreadScreen.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLifecycleOwner @@ -28,11 +27,15 @@ fun ThreadScreen(noteId: String?, accountViewModel: AccountViewModel, nav: (Stri NostrThreadDataSource.loadThread(noteId) - LaunchedEffect(noteId) { + DisposableEffect(noteId) { feedViewModel.invalidateData(true) + onDispose { + NostrThreadDataSource.loadThread(null) + NostrThreadDataSource.stop() + } } - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Thread Start") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/VideoScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/VideoScreen.kt index 0234adcd6..d2edde0df 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/VideoScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/VideoScreen.kt @@ -89,7 +89,7 @@ fun VideoScreen( WatchAccountForVideoScreen(videoFeedView = videoFeedView, accountViewModel = accountViewModel) - DisposableEffect(accountViewModel) { + DisposableEffect(lifeCycleOwner) { val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { println("Video Start")