diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt index a52fdeb..6abda8e 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt @@ -1,20 +1,14 @@ package it.vfsfitvnm.vimusic.ui.screens.search import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.text.BasicText import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.text.input.ImeAction @@ -37,7 +31,6 @@ import it.vfsfitvnm.vimusic.utils.asMediaItem import it.vfsfitvnm.vimusic.utils.forcePlay import it.vfsfitvnm.vimusic.utils.medium import it.vfsfitvnm.vimusic.utils.produceSaveableState -import it.vfsfitvnm.vimusic.utils.secondary import it.vfsfitvnm.youtubemusic.models.NavigationEndpoint import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flowOn @@ -47,7 +40,8 @@ import kotlinx.coroutines.flow.flowOn @Composable fun LocalSongSearch( textFieldValue: TextFieldValue, - onTextFieldValueChanged: (TextFieldValue) -> Unit + onTextFieldValueChanged: (TextFieldValue) -> Unit, + decorationBox: @Composable (@Composable () -> Unit) -> Unit ) { val (colorPalette, typography) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current @@ -86,25 +80,7 @@ fun LocalSongSearch( maxLines = 1, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), cursorBrush = SolidColor(colorPalette.text), - decorationBox = { innerTextField -> - Box { - androidx.compose.animation.AnimatedVisibility( - visible = textFieldValue.text.isEmpty(), - enter = fadeIn(tween(200)), - exit = fadeOut(tween(200)), - modifier = Modifier - .align(Alignment.CenterEnd) - ) { - BasicText( - text = "Enter a name", - maxLines = 1, - style = typography.xxl.secondary - ) - } - - innerTextField() - } - } + decorationBox = decorationBox ) }, actionsContent = { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt index df587a4..d2e21e3 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt @@ -1,8 +1,5 @@ package it.vfsfitvnm.vimusic.ui.screens.search -import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box @@ -65,7 +62,8 @@ fun OnlineSearch( textFieldValue: TextFieldValue, onTextFieldValueChanged: (TextFieldValue) -> Unit, onSearch: (String) -> Unit, - onViewPlaylist: (String) -> Unit + onViewPlaylist: (String) -> Unit, + decorationBox: @Composable (@Composable () -> Unit) -> Unit ) { val (colorPalette, typography) = LocalAppearance.current @@ -135,25 +133,7 @@ fun OnlineSearch( } ), cursorBrush = SolidColor(colorPalette.text), - decorationBox = { innerTextField -> - Box { - androidx.compose.animation.AnimatedVisibility( - visible = textFieldValue.text.isEmpty(), - enter = fadeIn(tween(200)), - exit = fadeOut(tween(200)), - modifier = Modifier - .align(Alignment.CenterEnd) - ) { - BasicText( - text = "Enter a name", - maxLines = 1, - style = typography.xxl.secondary - ) - } - - innerTextField() - } - }, + decorationBox = decorationBox, modifier = Modifier .focusRequester(focusRequester) ) @@ -299,7 +279,7 @@ fun OnlineSearch( ) } } - } ?: suggestionsResult?.exceptionOrNull()?.let { throwable -> + } ?: suggestionsResult?.exceptionOrNull()?.let { item { Box( modifier = Modifier diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt index a6f65fd..3f5e01d 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt @@ -1,17 +1,27 @@ package it.vfsfitvnm.vimusic.ui.screens.search +import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveableStateHolder +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue import it.vfsfitvnm.route.RouteHandler import it.vfsfitvnm.vimusic.R import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold import it.vfsfitvnm.vimusic.ui.screens.globalRoutes +import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance +import it.vfsfitvnm.vimusic.utils.secondary @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -43,6 +53,26 @@ fun SearchScreen( globalRoutes() host { + val decorationBox: @Composable (@Composable () -> Unit) -> Unit = { innerTextField -> + Box { + AnimatedVisibility( + visible = textFieldValue.text.isEmpty(), + enter = fadeIn(tween(300)), + exit = fadeOut(tween(300)), + modifier = Modifier + .align(Alignment.CenterEnd) + ) { + BasicText( + text = "Enter a name", + maxLines = 1, + style = LocalAppearance.current.typography.xxl.secondary + ) + } + + innerTextField() + } + } + Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, @@ -59,11 +89,14 @@ fun SearchScreen( textFieldValue = textFieldValue, onTextFieldValueChanged = onTextFieldValueChanged, onSearch = onSearch, - onViewPlaylist = onViewPlaylist + onViewPlaylist = onViewPlaylist, + decorationBox = decorationBox ) + 1 -> LocalSongSearch( textFieldValue = textFieldValue, - onTextFieldValueChanged = onTextFieldValueChanged + onTextFieldValueChanged = onTextFieldValueChanged, + decorationBox = decorationBox ) } }