From 82ca339c0cb0ab8f95f9f5269a54d35f7da248e8 Mon Sep 17 00:00:00 2001 From: Baidaidai_GFWD <1302064396@qq.com> Date: Mon, 6 Apr 2026 19:16:24 +0800 Subject: [PATCH] feat: Add DisposableEffect for HomeScreen & refreshHosterOverallStatus for ViewModel, Make home status reactive on resume --- .../model/RootLessStoreHomeScreenViewModel.kt | 6 ++++- .../rootless_store/ui/screens/HomeScreen.kt | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/baidaidai/rootless_store/ui/model/RootLessStoreHomeScreenViewModel.kt b/app/src/main/java/com/baidaidai/rootless_store/ui/model/RootLessStoreHomeScreenViewModel.kt index bafd598..443b824 100644 --- a/app/src/main/java/com/baidaidai/rootless_store/ui/model/RootLessStoreHomeScreenViewModel.kt +++ b/app/src/main/java/com/baidaidai/rootless_store/ui/model/RootLessStoreHomeScreenViewModel.kt @@ -31,7 +31,7 @@ class RootLessStoreHomeScreenViewModel @Inject constructor( getSELinuxUseCase: GetSELinuxUseCase, getKernelStatusUseCase: GetKernelStatusUseCase, getAndroidAndAPIStatusUseCase: GetAndroidAndAPIStatusUseCase, - getOverallStatusUseCase: GetOverallStatusUseCase + private val getOverallStatusUseCase: GetOverallStatusUseCase ) : ViewModel() { val memoryStatus: StateFlow = @@ -75,5 +75,9 @@ class RootLessStoreHomeScreenViewModel @Inject constructor( private val _overallStatus = MutableStateFlow(getOverallStatusUseCase()) val overallStatus = _overallStatus.asStateFlow() + fun refreshHosterOverallStatus() { + _overallStatus.value = getOverallStatusUseCase() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/baidaidai/rootless_store/ui/screens/HomeScreen.kt b/app/src/main/java/com/baidaidai/rootless_store/ui/screens/HomeScreen.kt index 02d9c47..cd45dec 100644 --- a/app/src/main/java/com/baidaidai/rootless_store/ui/screens/HomeScreen.kt +++ b/app/src/main/java/com/baidaidai/rootless_store/ui/screens/HomeScreen.kt @@ -6,11 +6,15 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.compose.LocalLifecycleOwner import com.baidaidai.rootless_store.components.homeScreen.HowToDevelopRootlessStorePlugin import com.baidaidai.rootless_store.components.homeScreen.RootLessStoreVersionCheckerContainer import com.baidaidai.rootless_store.components.homeScreen.RootlessStoreHosterStatusBoard @@ -44,6 +48,24 @@ fun HomeScreen( ) + + val lifecycleOwner = LocalLifecycleOwner.current + // A Listener about Maintaining OverallStatus fresh + DisposableEffect(lifecycleOwner) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + homeScreenViewModel.refreshHosterOverallStatus() + } + } + + lifecycleOwner.lifecycle.addObserver(observer) + + onDispose { + lifecycleOwner.lifecycle.removeObserver(observer) + } + } + + Column( modifier = Modifier .padding(contentPadding)