فهرست منبع

[新增] 让Compose的封面组件支持更多参数

HapeLee 11 ماه پیش
والد
کامیت
de9e9b21c2
1فایلهای تغییر یافته به همراه24 افزوده شده و 8 حذف شده
  1. 24 8
      app/src/main/java/io/legado/app/ui/widget/components/Cover.kt

+ 24 - 8
app/src/main/java/io/legado/app/ui/widget/components/Cover.kt

@@ -32,13 +32,16 @@ private val DefaultCoverModifier = Modifier
 
 
 @Composable
 @Composable
 fun Cover(
 fun Cover(
-    path: String?,
+    path: Any?,
     modifier: Modifier = DefaultCoverModifier,
     modifier: Modifier = DefaultCoverModifier,
-    badgeContent: (@Composable RowScope.() -> Unit)? = null
+    badgeContent: (@Composable RowScope.() -> Unit)? = null,
+    loadOnlyWifi: Boolean = false,
+    sourceOrigin: String? = null,
+    onLoadFinish: (() -> Unit)? = null
 ) {
 ) {
-    Box(
-        modifier = modifier
-    ) {
+    val context = LocalContext.current
+
+    Box(modifier = modifier) {
         Box(
         Box(
             modifier = Modifier
             modifier = Modifier
                 .fillMaxSize()
                 .fillMaxSize()
@@ -47,12 +50,25 @@ fun Cover(
             contentAlignment = Alignment.Center
             contentAlignment = Alignment.Center
         ) {
         ) {
             if (path == null) {
             if (path == null) {
-                Icon(Icons.Default.Book, null, tint = MaterialTheme.colorScheme.surfaceContainerHighest, modifier = Modifier.size(24.dp))
+                Icon(
+                    Icons.Default.Book,
+                    contentDescription = null,
+                    tint = MaterialTheme.colorScheme.surfaceContainerHighest,
+                    modifier = Modifier.size(24.dp)
+                )
             } else {
             } else {
                 AsyncImage(
                 AsyncImage(
-                    model = ImageRequest.Builder(LocalContext.current)
-                        .data(path)
+                    model = ImageRequest.Builder(context)
+                        .data(path) // 可以是 URL、File、Uri、DrawableRes
                         .crossfade(true)
                         .crossfade(true)
+                        .apply {
+                            if (sourceOrigin != null) setParameter("sourceOrigin", sourceOrigin)
+                            if (loadOnlyWifi) setParameter("loadOnlyWifi", true)
+                        }
+                        .listener(
+                            onSuccess = { _, _ -> onLoadFinish?.invoke() },
+                            onError = { _, _ -> onLoadFinish?.invoke() }
+                        )
                         .build(),
                         .build(),
                     contentDescription = null,
                     contentDescription = null,
                     contentScale = ContentScale.Crop,
                     contentScale = ContentScale.Crop,