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 29408a543..8fcc06b44 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 @@ -31,6 +31,7 @@ import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.AnnotatedString @@ -40,6 +41,8 @@ import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.core.content.ContextCompat +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import coil.compose.AsyncImage @@ -52,6 +55,7 @@ import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.lnurl.LightningAddressResolver import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.User +import com.vitorpamplona.amethyst.service.NostrGlobalDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileFollowersDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileFollowsDataSource @@ -75,17 +79,29 @@ fun ProfileScreen(userId: String?, accountViewModel: AccountViewModel, navContro if (userId == null) return - DisposableEffect(account) { - NostrUserProfileDataSource.loadUserProfile(userId) - NostrUserProfileFollowersDataSource.loadUserProfile(userId) - NostrUserProfileFollowsDataSource.loadUserProfile(userId) - NostrUserProfileZapsDataSource.loadUserProfile(userId) + val lifeCycleOwner = LocalLifecycleOwner.current + DisposableEffect(accountViewModel) { + val observer = LifecycleEventObserver { source, event -> + if (event == Lifecycle.Event.ON_RESUME) { + println("Profile Start") + NostrUserProfileDataSource.loadUserProfile(userId) + NostrUserProfileFollowersDataSource.loadUserProfile(userId) + NostrUserProfileFollowsDataSource.loadUserProfile(userId) + NostrUserProfileZapsDataSource.loadUserProfile(userId) + } + if (event == Lifecycle.Event.ON_PAUSE) { + println("Profile Stop") + NostrUserProfileDataSource.stop() + NostrUserProfileFollowsDataSource.stop() + NostrUserProfileFollowersDataSource.stop() + NostrUserProfileZapsDataSource.stop() + } + } + + lifeCycleOwner.lifecycle.addObserver(observer) onDispose { - NostrUserProfileDataSource.stop() - NostrUserProfileFollowsDataSource.stop() - NostrUserProfileFollowersDataSource.stop() - NostrUserProfileZapsDataSource.stop() + lifeCycleOwner.lifecycle.removeObserver(observer) } } 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 a49d5de57..fb9075024 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 @@ -37,11 +37,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import coil.compose.rememberAsyncImagePainter @@ -52,6 +55,7 @@ import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User +import com.vitorpamplona.amethyst.service.NostrGlobalDataSource import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource import com.vitorpamplona.amethyst.ui.note.ChannelName import com.vitorpamplona.amethyst.ui.note.NoteCompose @@ -72,9 +76,24 @@ import kotlinx.coroutines.withContext @Composable fun SearchScreen(accountViewModel: AccountViewModel, navController: NavController) { val feedViewModel: NostrGlobalFeedViewModel = viewModel() + val lifeCycleOwner = LocalLifecycleOwner.current - LaunchedEffect(Unit) { - feedViewModel.refresh() + DisposableEffect(accountViewModel) { + val observer = LifecycleEventObserver { source, event -> + if (event == Lifecycle.Event.ON_RESUME) { + println("Global Start") + NostrGlobalDataSource.start() + } + if (event == Lifecycle.Event.ON_PAUSE) { + println("Global Stop") + NostrGlobalDataSource.stop() + } + } + + lifeCycleOwner.lifecycle.addObserver(observer) + onDispose { + lifeCycleOwner.lifecycle.removeObserver(observer) + } } Column(Modifier.fillMaxHeight()) {