فهرست منبع

photo improvements

Milan Jurkulak 3 سال پیش
والد
کامیت
d0869dfb4a

+ 1 - 1
app/src/main/kotlin/org/mjdev/tvapp/ui/pages/MainPage.kt

@@ -40,7 +40,7 @@ import org.mjdev.tvlib.interfaces.ItemPhoto
 import org.mjdev.tvlib.interfaces.ItemVideo
 import org.mjdev.tvlib.interfaces.ItemWithBackground
 import org.mjdev.tvlib.interfaces.ItemWithImage
-import org.mjdev.tvlib.ui.components.tv.FadingPhotoImage
+import org.mjdev.tvlib.ui.components.image.FadingPhotoImage
 
 @SuppressLint("ComposableNaming")
 class MainPage : Page() {

+ 3 - 1
tvlib/build.gradle.kts

@@ -23,7 +23,7 @@ android {
 
     defaultConfig {
         minSdk = 21
-        targetSdk = 34
+//        targetSdk = 34
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles("consumer-rules.pro")
     }
@@ -141,6 +141,8 @@ dependencies {
     implementation("com.google.accompanist:accompanist-permissions:0.31.5-beta")
     // for previews
     debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
+    // pallette
+    implementation("androidx.palette:palette-ktx:1.0.0")
     // constraints
     constraints {
         implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0")?.apply {

+ 15 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/BitmapExt.kt

@@ -9,9 +9,23 @@
 package org.mjdev.tvlib.extensions
 
 import android.graphics.Bitmap
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
+import androidx.palette.graphics.Palette
 
+@Suppress("unused")
 object BitmapExt {
 
-    fun Bitmap.bimapCopy() = copy(Bitmap.Config.ARGB_8888, false)
+    fun Bitmap.bimapCopy(): Bitmap = copy(Bitmap.Config.ARGB_8888, false)
+
+    fun Bitmap?.majorColor(
+        defaultColor: Color
+    ): Color = this?.let { bmp ->
+        Palette.from(bmp)
+            .generate()
+            .let { pal ->
+                Color(pal.getDominantColor(defaultColor.toArgb()))
+            }
+    } ?: defaultColor
 
 }

+ 1 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/tv/FadingPhotoImage.kt → tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/image/FadingPhotoImage.kt

@@ -6,7 +6,7 @@
  *  w: https://mjdev.org
  */
 
-package org.mjdev.tvlib.ui.components.tv
+package org.mjdev.tvlib.ui.components.image
 
 import androidx.annotation.FloatRange
 import androidx.compose.animation.Crossfade
@@ -28,7 +28,6 @@ import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import kotlinx.coroutines.delay
-import org.mjdev.tvlib.ui.components.image.PhotoImage
 
 @Composable
 fun FadingPhotoImage(

+ 27 - 17
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/image/PhotoImage.kt

@@ -11,7 +11,9 @@ package org.mjdev.tvlib.ui.components.image
 import android.annotation.SuppressLint
 import androidx.annotation.FloatRange
 import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.background
 import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.aspectRatio
 import androidx.compose.foundation.layout.defaultMinSize
 import androidx.compose.foundation.shape.RoundedCornerShape
@@ -33,6 +35,7 @@ import androidx.core.graphics.drawable.toDrawable
 import com.skydoves.landscapist.ImageOptions
 import com.skydoves.landscapist.coil.CoilImage
 import org.mjdev.tvlib.R
+import org.mjdev.tvlib.extensions.BitmapExt.majorColor
 import org.mjdev.tvlib.extensions.ComposeExt.isEditMode
 import org.mjdev.tvlib.extensions.ComposeExt.rememberImageLoader
 import org.mjdev.tvlib.extensions.DrawableExt.asPhoto
@@ -55,6 +58,7 @@ fun PhotoImage(
     brightness: Float = -255f,
     borderSize: Dp = 2.dp,
     borderColor: Color = Color.Black,
+    backgroundColor: Color = Color.Black,
     roundCornerSize: Dp = 8.dp,
     shape: Shape = RoundedCornerShape(roundCornerSize),
     colorFilter: ColorFilter? = null,
@@ -63,11 +67,11 @@ fun PhotoImage(
     val isEdit = isEditMode()
     val context = LocalContext.current
     val imageLoader = rememberImageLoader()
-    // todo coil image does not shows
     CoilImage(
         imageLoader = { imageLoader },
         imageModel = { src },
-        modifier = modifier.recomposeHighlighter()
+        modifier = modifier
+            .recomposeHighlighter()
             .conditional(isEdit) {
                 aspectRatio(16f / 9f).defaultMinSize(80.dp)
             }
@@ -88,21 +92,27 @@ fun PhotoImage(
         onImageStateChanged = {
         },
         success = { state, _ ->
-            ImageAny(
-                src = state.imageBitmap
-                    ?.asAndroidBitmap()
-                    ?.toDrawable(context.resources)
-                    ?.asPhoto(),
-                modifier = modifier.recomposeHighlighter(),
-                alignment = alignment,
-                contentScale = contentScale,
-                alpha = alpha,
-                colorFilter = contrastAndBrightness(
-                    contrast,
-                    brightness
-                ),
-                contentDescription = contentDescription,
-            )
+            val bitmap = state.imageBitmap?.asAndroidBitmap()
+            Box(
+                modifier = modifier
+                    .recomposeHighlighter()
+                    .background(bitmap.majorColor(backgroundColor), shape),
+            ) {
+                ImageAny(
+                    src = bitmap
+                        ?.toDrawable(context.resources)
+                        ?.asPhoto(),
+                    modifier = modifier.recomposeHighlighter(),
+                    alignment = alignment,
+                    contentScale = contentScale,
+                    alpha = alpha,
+                    colorFilter = contrastAndBrightness(
+                        contrast,
+                        brightness
+                    ),
+                    contentDescription = contentDescription,
+                )
+            }
         }
     )
 }