From 717cbe7630fb945a620289bb769c3c2e4f0052ce Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Wed, 25 Oct 2023 23:20:47 +0800 Subject: [PATCH] Request recomposition after view gets created --- .../kotlin/com/hippo/ehviewer/ui/MainActivity.kt | 12 ++++++++++++ .../kotlin/com/hippo/ehviewer/ui/scene/BaseScene.kt | 1 + 2 files changed, 13 insertions(+) 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() {