From 086db7572d0092fe68113f993de1c6ac9afb417d Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Thu, 30 Nov 2023 00:21:38 +0800 Subject: [PATCH] Fix FAB not collapsing with no selected items --- .../ehviewer/ui/screen/DownloadsScreen.kt | 17 +++++----------- .../ehviewer/ui/screen/FavoritesScreen.kt | 20 ++++++++----------- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt index a356efa78..f86b94a3f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt @@ -44,13 +44,13 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.rememberDismissState import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -114,12 +114,9 @@ fun DownloadsScreen(navigator: DestinationsNavigator) { var filterType by rememberSaveable { mutableStateOf(-1) } var searchBarOffsetY by remember { mutableStateOf(0) } val searchFieldState = rememberTextFieldState() - var selectMode by remember { mutableStateOf(false) } - LockDrawer(selectMode) val checkedInfoMap = remember { mutableStateMapOf() } - SideEffect { - if (checkedInfoMap.isEmpty()) selectMode = false - } + val selectMode by rememberUpdatedState(checkedInfoMap.isNotEmpty()) + LockDrawer(selectMode) val context = LocalContext.current val activity = remember(context) { context.findActivity() } @@ -313,7 +310,7 @@ fun DownloadsScreen(navigator: DestinationsNavigator) { searchFieldHint = hint, showSearchFab = selectMode, onApplySearch = { keyword = it.takeUnless { it.isBlank() } }, - onSearchExpanded = { selectMode = false }, + onSearchExpanded = { checkedInfoMap.clear() }, onSearchHidden = {}, searchBarOffsetY = { searchBarOffsetY }, trailingIcon = { @@ -446,7 +443,6 @@ fun DownloadsScreen(navigator: DestinationsNavigator) { }, onLongClick = { checkedInfoMap[info.gid] = info - selectMode = true }, onStart = { val intent = Intent(activity, DownloadService::class.java) @@ -492,10 +488,7 @@ fun DownloadsScreen(navigator: DestinationsNavigator) { FabLayout( hidden = !selectMode, expanded = selectMode, - onExpandChanged = { - checkedInfoMap.clear() - selectMode = false - }, + onExpandChanged = { checkedInfoMap.clear() }, autoCancel = false, showAddButton = false, ) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt index ed4727112..1bf8c6a32 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt @@ -28,7 +28,6 @@ import androidx.compose.material3.TopAppBar import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.SideEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.currentRecomposeScope import androidx.compose.runtime.getValue @@ -36,6 +35,7 @@ import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier @@ -214,20 +214,19 @@ fun FavouritesScreen(navigator: DestinationsNavigator) { var expanded by remember { mutableStateOf(false) } var hidden by remember { mutableStateOf(false) } - var selectMode by remember { mutableStateOf(false) } - LockDrawer(selectMode) val checkedInfoMap = remember { mutableStateMapOf() } - SideEffect { - if (checkedInfoMap.isEmpty()) selectMode = false - if (selectMode) expanded = true - } + val selectMode by rememberUpdatedState(checkedInfoMap.isNotEmpty()) + LockDrawer(selectMode) SearchBarScreen( title = title, searchFieldState = searchFieldState, searchFieldHint = searchBarHint, onApplySearch = { refresh(FavListUrlBuilder(urlBuilder.favCat, it)) }, - onSearchExpanded = { hidden = true }, + onSearchExpanded = { + checkedInfoMap.clear() + hidden = true + }, onSearchHidden = { hidden = false }, refreshState = refreshState, searchBarOffsetY = { searchBarOffsetY }, @@ -271,7 +270,6 @@ fun FavouritesScreen(navigator: DestinationsNavigator) { } }, onLongClick = { - selectMode = true checkedInfoMap[info.gid] = info }, info = info, @@ -297,7 +295,6 @@ fun FavouritesScreen(navigator: DestinationsNavigator) { } }, onLongClick = { - selectMode = true checkedInfoMap[info.gid] = info }, info = info, @@ -314,11 +311,10 @@ fun FavouritesScreen(navigator: DestinationsNavigator) { val select = selectMode FabLayout( hidden = hidden, - expanded = expanded, + expanded = expanded || selectMode, onExpandChanged = { expanded = it checkedInfoMap.clear() - selectMode = false }, autoCancel = !selectMode, delayOnShow = true,