Bladeren bron

feat: 导航和界面优化

HapeLee 2 maanden geleden
bovenliggende
commit
6dc297221a

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/cache/manage/BookCacheManageScreen.kt

@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyListScope
 import androidx.compose.foundation.lazy.items
 import androidx.compose.material.icons.Icons
@@ -54,6 +53,7 @@ import io.legado.app.ui.widget.components.card.NormalCard
 import io.legado.app.ui.widget.components.card.TextCard
 import io.legado.app.ui.widget.components.icon.AppIcon
 import io.legado.app.ui.widget.components.icon.AppIcons
+import io.legado.app.ui.widget.components.lazylist.FastScrollLazyColumn
 import io.legado.app.ui.widget.components.list.ListUiState
 import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenu
 import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenuItem
@@ -230,7 +230,7 @@ private fun BookCacheManageScreen(
                 AppCircularProgressIndicator()
             }
         } else {
-            LazyColumn(
+            FastScrollLazyColumn(
                 modifier = Modifier.fillMaxSize(),
                 contentPadding = adaptiveContentPadding(
                     top = paddingValues.calculateTopPadding(),

+ 2 - 1
app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt

@@ -100,6 +100,7 @@ import io.legado.app.ui.widget.components.divider.PillDivider
 import io.legado.app.ui.widget.components.filePicker.FilePickerSheet
 import io.legado.app.ui.widget.components.icon.AppIcons
 import io.legado.app.ui.widget.components.image.cover.CoilBookCover
+import io.legado.app.ui.widget.components.lazylist.FastScrollLazyColumn
 import io.legado.app.ui.widget.components.list.ListScaffold
 import io.legado.app.ui.widget.components.list.ListUiState
 import io.legado.app.ui.widget.components.log.AppLogSheet
@@ -535,7 +536,7 @@ private fun BookshelfManageScreen(
         }
     ) { paddingValues ->
         val renderVersion by rememberUpdatedState(state.cacheVersion)
-        LazyColumn(
+        FastScrollLazyColumn(
             state = listState,
             modifier = Modifier.fillMaxSize(),
             contentPadding = adaptiveContentPadding(

+ 10 - 7
app/src/main/java/io/legado/app/ui/book/readRecord/ReadRecordScreen.kt

@@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyListScope
 import androidx.compose.foundation.lazy.LazyRow
 import androidx.compose.foundation.lazy.items
@@ -44,8 +43,8 @@ import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.produceState
 import androidx.compose.runtime.remember
-import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -82,8 +81,8 @@ import io.legado.app.ui.widget.components.SearchBar
 import io.legado.app.ui.widget.components.alert.AppAlertDialog
 import io.legado.app.ui.widget.components.card.GlassCard
 import io.legado.app.ui.widget.components.card.TextCard
-import io.legado.app.ui.widget.components.checkBox.CheckboxItem
 import io.legado.app.ui.widget.components.checkBox.AppCheckbox
+import io.legado.app.ui.widget.components.checkBox.CheckboxItem
 import io.legado.app.ui.widget.components.heatmap.HeatmapCalendarEndAction
 import io.legado.app.ui.widget.components.heatmap.HeatmapCalendarStartAction
 import io.legado.app.ui.widget.components.heatmap.HeatmapConfig
@@ -111,10 +110,10 @@ import io.legado.app.ui.widget.components.topbar.TopBarActionButton
 import io.legado.app.ui.widget.components.topbar.TopBarNavigationButton
 import io.legado.app.utils.StringUtils.formatFriendlyDate
 import io.legado.app.utils.formatReadDuration
-import kotlinx.coroutines.launch
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.flow.emptyFlow
+import kotlinx.coroutines.launch
 import org.koin.androidx.compose.koinViewModel
 import java.time.Instant
 import java.time.LocalDate
@@ -382,7 +381,7 @@ fun ReadRecordScreen(
 
                 "CONTENT" -> {
                     Box(modifier = Modifier.fillMaxSize()) {
-                        LazyColumn(
+                        FastScrollLazyColumn(
                             state = listState,
                             modifier = Modifier.fillMaxSize(),
                             contentPadding = adaptiveContentPaddingOnlyVertical(
@@ -622,8 +621,12 @@ fun ReadRecordScreen(
                                 .fillMaxWidth()
                                 .padding(vertical = 4.dp),
                         ) {
-                            Box(modifier = Modifier.fillMaxWidth().padding(12.dp)) {
-                                Column(modifier = Modifier.fillMaxWidth().padding(end = 48.dp)) {
+                            Box(modifier = Modifier
+                                .fillMaxWidth()
+                                .padding(12.dp)) {
+                                Column(modifier = Modifier
+                                    .fillMaxWidth()
+                                    .padding(end = 48.dp)) {
                                     AppText(text = candidate.bookName)
                                     AppText(
                                         text = author,

+ 2 - 0
app/src/main/java/io/legado/app/ui/main/MainNavigator.kt

@@ -150,6 +150,7 @@ object MainNavigator {
                     currentRoute == MainRouteHome ||
                     currentRoute is MainRouteBookInfo ||
                     currentRoute is MainRouteExploreShow ||
+                    currentRoute is MainRouteBookSourceManage ||
                     currentRoute is MainRouteSearch
                 ) {
                     backStack.add(route)
@@ -166,6 +167,7 @@ object MainNavigator {
                     currentRoute is MainRouteSearch ||
                     currentRoute is MainRouteExploreShow ||
                     currentRoute is MainRouteBookInfo ||
+                    currentRoute is MainRouteCache ||
                     currentRoute is MainRouteReadManga
                 ) {
                     backStack.add(route)

+ 30 - 0
app/src/test/java/io/legado/app/ui/main/MainNavigatorBackStackTest.kt

@@ -0,0 +1,30 @@
+package io.legado.app.ui.main
+
+import androidx.navigation3.runtime.NavKey
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class MainNavigatorBackStackTest {
+
+    @Test
+    fun `opening book info from bookshelf manage keeps manage in back stack`() {
+        val manage = MainRouteCache(-1L)
+        val bookInfo = MainRouteBookInfo("Book", "Author", "book-url")
+        val backStack = mutableListOf<NavKey>(MainRouteHome, manage)
+
+        MainNavigator.navigateToRoute(backStack, bookInfo)
+
+        assertEquals(listOf(MainRouteHome, manage, bookInfo), backStack)
+    }
+
+    @Test
+    fun `opening search from book source manage keeps manage in back stack`() {
+        val manage = MainRouteBookSourceManage()
+        val search = MainRouteSearch(key = null, scopeRaw = "scope")
+        val backStack = mutableListOf<NavKey>(MainRouteHome, manage)
+
+        MainNavigator.navigateToRoute(backStack, search)
+
+        assertEquals(listOf(MainRouteHome, manage, search), backStack)
+    }
+}