HapeLee 11 месяцев назад
Родитель
Сommit
3b8c25e983

+ 3 - 3
app/src/main/java/io/legado/app/ui/about/AboutScreen.kt

@@ -39,9 +39,9 @@ import androidx.compose.ui.unit.sp
 import io.legado.app.R
 import io.legado.app.base.AppTheme
 import io.legado.app.constant.AppConst.appInfo
-import io.legado.app.ui.widget.compose.SettingItem
-import io.legado.app.ui.widget.compose.SplicedColumnGroup
-import io.legado.app.ui.widget.compose.TextCard
+import io.legado.app.ui.widget.components.SettingItem
+import io.legado.app.ui.widget.components.SplicedColumnGroup
+import io.legado.app.ui.widget.components.TextCard
 
 @Preview(showBackground = true, name = "Light Mode")
 @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, name = "Dark Mode")

+ 1 - 1
app/src/main/java/io/legado/app/ui/widget/compose/AnimatedText.kt → app/src/main/java/io/legado/app/ui/widget/components/AnimatedText.kt

@@ -1,4 +1,4 @@
-package io.legado.app.ui.widget.compose
+package io.legado.app.ui.widget.components
 
 import androidx.compose.animation.AnimatedContent
 import androidx.compose.animation.slideInVertically

+ 47 - 0
app/src/main/java/io/legado/app/ui/widget/components/Cover.kt

@@ -0,0 +1,47 @@
+package io.legado.app.ui.widget.components
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Book
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.unit.dp
+import coil.compose.AsyncImage
+import coil.request.ImageRequest
+
+@Composable
+fun Cover(path: String?) {
+    Box(
+        modifier = Modifier
+            .width(48.dp)
+            .height(68.dp)
+            .clip(RoundedCornerShape(4.dp))
+            .background(Color(0xFFEEEEEE)), // 灰色背景
+        contentAlignment = Alignment.Center
+    ) {
+        if (path == null) {
+            Icon(Icons.Default.Book, null, tint = Color.Gray)
+        } else {
+            AsyncImage(
+                model = ImageRequest.Builder(LocalContext.current)
+                    .data(path)
+                    .crossfade(true)
+                    .build(),
+                contentDescription = null,
+                contentScale = ContentScale.Crop,
+                modifier = Modifier.fillMaxSize()
+            )
+        }
+    }
+}

+ 1 - 1
app/src/main/java/io/legado/app/ui/widget/compose/EmptyMessageView.kt → app/src/main/java/io/legado/app/ui/widget/components/EmptyMessageView.kt

@@ -1,4 +1,4 @@
-package io.legado.app.ui.widget.compose
+package io.legado.app.ui.widget.components
 
 import androidx.annotation.StringRes
 import androidx.compose.foundation.clickable

+ 62 - 0
app/src/main/java/io/legado/app/ui/widget/components/SearchBarSection.kt

@@ -0,0 +1,62 @@
+package io.legado.app.ui.widget.components
+
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
+import androidx.compose.material.icons.filled.Search
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Surface
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material3.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun SearchBarSection(
+    query: String,
+    onQueryChange: (String) -> Unit
+) {
+    Surface(
+        modifier = Modifier
+            .fillMaxWidth()
+            .padding(horizontal = 16.dp, vertical = 8.dp),
+        shape = RoundedCornerShape(32.dp),
+        color = MaterialTheme.colorScheme.surfaceContainerLow
+    ) {
+
+        TextField(
+            value = query,
+            onValueChange = onQueryChange,
+            placeholder = { Text("搜索书名…") },
+            leadingIcon = { Icon(Icons.Default.Search, null) },
+            trailingIcon = {
+                Row(verticalAlignment = Alignment.CenterVertically) {
+                    if (query.isNotEmpty()) {
+                        IconButton(onClick = { onQueryChange("") }) {
+                            Icon(Icons.Default.Clear, contentDescription = null)
+                        }
+                    }
+                }
+            },
+            singleLine = true,
+            colors = TextFieldDefaults.colors(
+                focusedContainerColor = Color.Transparent,
+                unfocusedContainerColor = Color.Transparent,
+                disabledContainerColor = Color.Transparent,
+                focusedIndicatorColor = Color.Transparent,
+                unfocusedIndicatorColor = Color.Transparent,
+            )
+        )
+    }
+}

+ 1 - 3
app/src/main/java/io/legado/app/ui/widget/compose/SettingItem.kt → app/src/main/java/io/legado/app/ui/widget/components/SettingItem.kt

@@ -1,11 +1,10 @@
-package io.legado.app.ui.widget.compose
+package io.legado.app.ui.widget.components
 
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.heightIn
 import androidx.compose.foundation.layout.padding
@@ -25,7 +24,6 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.graphics.vector.ImageVector
-import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.tooling.preview.Preview

+ 1 - 1
app/src/main/java/io/legado/app/ui/widget/compose/SplicedColumnGroup.kt → app/src/main/java/io/legado/app/ui/widget/components/SplicedColumnGroup.kt

@@ -1,4 +1,4 @@
-package io.legado.app.ui.widget.compose
+package io.legado.app.ui.widget.components
 
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Arrangement

+ 1 - 1
app/src/main/java/io/legado/app/ui/widget/compose/TextCard.kt → app/src/main/java/io/legado/app/ui/widget/components/TextCard.kt

@@ -1,4 +1,4 @@
-package io.legado.app.ui.widget.compose
+package io.legado.app.ui.widget.components
 
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.clickable