diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt index 77197e718..20733a162 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt @@ -47,6 +47,7 @@ import androidx.compose.material3.NavigationDrawerItem import androidx.compose.material3.Text import androidx.compose.material3.rememberDrawerState import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.currentRecomposeScope import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope @@ -197,6 +198,11 @@ class MainActivity : EhActivity() { var drawerLocked by mutableStateOf(false) private var openDrawerFlow = MutableSharedFlow(extraBufferCapacity = 1) + private var recomposeFlow = MutableSharedFlow(extraBufferCapacity = 1) + + fun recompose() { + recomposeFlow.tryEmit(Unit) + } override fun onCreate(savedInstanceState: Bundle?) { installSplashScreen() @@ -205,6 +211,7 @@ class MainActivity : EhActivity() { setMD3Content { val drawerState = rememberDrawerState(DrawerValue.Closed) val scope = rememberCoroutineScope() + val recomposeScope = currentRecomposeScope fun isSelected(id: Int) = ::navController.isInitialized && id == navController.currentDestination?.id fun closeDrawer() = scope.launch { drawerState.close() } LaunchedEffect(Unit) { @@ -212,6 +219,11 @@ class MainActivity : EhActivity() { drawerState.open() } } + LaunchedEffect(Unit) { + recomposeFlow.collect { + recomposeScope.invalidate() + } + } BackHandler(drawerState.isOpen) { closeDrawer() } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/BaseScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/BaseScene.kt index 88fdcc8b9..75bb71d64 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/BaseScene.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/BaseScene.kt @@ -128,6 +128,7 @@ abstract class BaseScene : Fragment() { setContentView(it) } } + mainActivity?.recompose() } override fun onDestroyView() {