Browse Source

Tweak SearchScreen code

vfsfitvnm 2 năm trước cách đây
mục cha
commit
7a3c0ca110

+ 3 - 27
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 = {

+ 4 - 24
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

+ 35 - 2
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
                         )
                     }
                 }