Преглед изворни кода

修复恢复全文搜索结果时弹出键盘

5151561 пре 3 месеци
родитељ
комит
2fbd477b90

+ 9 - 2
app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt

@@ -473,7 +473,10 @@ sealed interface ReadBookIntent {
     data object ReadMenuBack : ReadBookIntent
 
     // Search
-    data class OpenSearch(val word: String?) : ReadBookIntent
+    data class OpenSearch(
+        val word: String?,
+        val autoFocus: Boolean = true,
+    ) : ReadBookIntent
     data object ExitSearch : ReadBookIntent
     data object ShowSearchMenu : ReadBookIntent
     data object HideSearchMenu : ReadBookIntent
@@ -860,7 +863,11 @@ sealed interface ReadBookEffect {
     data object StopAutoPage : ReadBookEffect
 
     // Search
-    data class OpenSearchActivity(val word: String?, val bookUrl: String) : ReadBookEffect
+    data class OpenSearchActivity(
+        val word: String?,
+        val bookUrl: String,
+        val autoFocus: Boolean = true,
+    ) : ReadBookEffect
     data class NavigateToSearchResult(
         val result: SearchResult,
         val chapterIndex: Int,

+ 3 - 1
app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt

@@ -2334,7 +2334,9 @@ private fun SearchBottomMenuContent(
                 modifier = Modifier.weight(2f),
                 icon = Icons.Default.Search,
                 text = stringResource(R.string.all_results),
-                onClick = { onIntent(ReadBookIntent.OpenSearch(null)) },
+                onClick = {
+                    onIntent(ReadBookIntent.OpenSearch(word = null, autoFocus = false))
+                },
             )
             SearchMenuActionButton(
                 modifier = Modifier.weight(1f),

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/read/ReadBookRouteScreen.kt

@@ -124,7 +124,7 @@ fun ReadBookRouteScreen(
     host: ReadBookRouteHost,
     controller: ReadBookController,
     onEffectsReady: () -> Unit = {},
-    onOpenSearch: (word: String?, bookUrl: String) -> Unit = { _, _ -> },
+    onOpenSearch: (word: String?, bookUrl: String, autoFocus: Boolean) -> Unit = { _, _, _ -> },
     onOpenVoiceCasting: (bookUrl: String) -> Unit = {},
     onOpenTtsEnginesAndVoices: () -> Unit = {},
     onOpenTtsCache: () -> Unit = {},
@@ -366,7 +366,7 @@ fun ReadBookRouteScreen(
                                 }
                             }
                             is ReadBookEffect.OpenSearchActivity -> {
-                                onOpenSearch(effect.word, effect.bookUrl)
+                                onOpenSearch(effect.word, effect.bookUrl, effect.autoFocus)
                             }
                             is ReadBookEffect.OpenBookVoiceCasting -> {
                                 onOpenVoiceCasting(effect.bookUrl)

+ 7 - 1
app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@@ -337,7 +337,13 @@ class ReadBookViewModel(
                 closeReadMenu()
                 _uiState.update { it.copy(searchContentQuery = intent.word ?: "") }
                 ReadBook.book?.bookUrl?.let { bookUrl ->
-                    _effects.tryEmit(ReadBookEffect.OpenSearchActivity(intent.word, bookUrl))
+                    _effects.tryEmit(
+                        ReadBookEffect.OpenSearchActivity(
+                            word = intent.word,
+                            bookUrl = bookUrl,
+                            autoFocus = intent.autoFocus,
+                        )
+                    )
                 }
             }
 

+ 4 - 0
app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentScreen.kt

@@ -80,6 +80,7 @@ import org.koin.androidx.compose.koinViewModel
 @Composable
 fun SearchContentRouteScreen(
     onBack: () -> Unit,
+    autoFocus: Boolean = true,
     viewModel: SearchContentViewModel = koinViewModel()
 ) {
     val state by viewModel.uiState.collectAsStateWithLifecycle()
@@ -95,6 +96,7 @@ fun SearchContentRouteScreen(
     }
     SearchContentScreen(
         state = state,
+        autoFocus = autoFocus,
         onIntent = viewModel::onIntent,
         onBack = onBack,
     )
@@ -104,6 +106,7 @@ fun SearchContentRouteScreen(
 @Composable
 fun SearchContentScreen(
     state: SearchContentUiState,
+    autoFocus: Boolean = true,
     onIntent: (SearchContentIntent) -> Unit,
     onBack: () -> Unit,
 ) {
@@ -193,6 +196,7 @@ fun SearchContentScreen(
                 ) {
                     SearchBar(
                         query = searchQuery,
+                        autoFocus = autoFocus,
                         scrollState = listState,
                         onQueryChange = { onIntent(SearchContentIntent.UpdateQuery(it)) },
                         trailingIcon = {

+ 4 - 2
app/src/main/java/io/legado/app/ui/main/MainNavGraph.kt

@@ -443,12 +443,13 @@ fun MainActivity.mainEntryProvider(
             host = controller,
             controller = controller,
             onEffectsReady = { effectsReady.complete(Unit) },
-            onOpenSearch = { word, bookUrl ->
+            onOpenSearch = { word, bookUrl, autoFocus ->
                 onNavigateToRoute(
                     MainRouteSearchContent(
                         bookUrl = bookUrl,
                         searchWord = word,
-                        searchResultIndex = readBookViewModel.uiState.value.searchResultIndex
+                        searchResultIndex = readBookViewModel.uiState.value.searchResultIndex,
+                        autoFocus = autoFocus,
                     )
                 )
             },
@@ -521,6 +522,7 @@ fun MainActivity.mainEntryProvider(
         )
         SearchContentRouteScreen(
             viewModel = viewModel,
+            autoFocus = route.autoFocus,
             onBack = { onNavigateBack() },
         )
     }

+ 1 - 0
app/src/main/java/io/legado/app/ui/main/MainNavKey.kt

@@ -177,6 +177,7 @@ data class MainRouteSearchContent(
     val bookUrl: String,
     val searchWord: String? = null,
     val searchResultIndex: Int = 0,
+    val autoFocus: Boolean = true,
 ) : MainRoute
 
 @Serializable