@ -23,7 +23,6 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
@ -45,8 +44,10 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import eu.kanade.tachiyomi.R
import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide
import tachiyomi.presentation.core.util.runOnEnterKeyPressed
import tachiyomi.presentation.core.util.secondaryItemAlpha
import tachiyomi.presentation.core.util.showSoftKeyboard
const val SEARCH _DEBOUNCE _MILLIS = 250L
@ -231,9 +232,9 @@ fun SearchToolbar(
scrollBehavior : TopAppBarScrollBehavior ? = null ,
visualTransformation : VisualTransformation = VisualTransformation . None ,
interactionSource : MutableInteractionSource = remember { MutableInteractionSource ( ) } ,
initialShowKeyboard : Boolean = true ,
) {
val focusRequester = remember { FocusRequester ( ) }
var searchClickCount by remember { mutableStateOf ( 0 ) }
AppBar (
titleContent = {
@ -255,7 +256,9 @@ fun SearchToolbar(
modifier = Modifier
. fillMaxWidth ( )
. focusRequester ( focusRequester )
. runOnEnterKeyPressed ( action = searchAndClearFocus ) ,
. runOnEnterKeyPressed ( action = searchAndClearFocus )
. showSoftKeyboard ( initialShowKeyboard )
. clearFocusOnSoftKeyboardHide ( ) ,
textStyle = MaterialTheme . typography . titleMedium . copy (
color = MaterialTheme . colorScheme . onBackground ,
fontWeight = FontWeight . Normal ,
@ -294,10 +297,7 @@ fun SearchToolbar(
navigateUp = if ( searchQuery == null ) navigateUp else onClickCloseSearch ,
actions = {
key ( " search " ) {
val onClick = {
searchClickCount ++
onChangeSearchQuery ( " " )
}
val onClick = { onChangeSearchQuery ( " " ) }
if ( ! searchEnabled ) {
// Don't show search action
@ -306,7 +306,12 @@ fun SearchToolbar(
Icon ( Icons . Outlined . Search , contentDescription = stringResource ( R . string . action _search ) )
}
} else if ( searchQuery . isNotEmpty ( ) ) {
IconButton ( onClick ) {
IconButton (
onClick = {
onClick ( )
focusRequester . requestFocus ( )
} ,
) {
Icon ( Icons . Outlined . Close , contentDescription = stringResource ( R . string . action _reset ) )
}
}
@ -317,15 +322,6 @@ fun SearchToolbar(
isActionMode = false ,
scrollBehavior = scrollBehavior ,
)
LaunchedEffect ( searchClickCount ) {
if ( searchQuery == null ) return @LaunchedEffect
if ( searchClickCount == 0 && searchQuery . isNotEmpty ( ) ) return @LaunchedEffect
try {
focusRequester . requestFocus ( )
} catch ( _ : Throwable ) {
// TextField is gone
}
}
}
sealed interface AppBar {