Explorar el Código

item info improvement

Milan Jurkulak hace 3 años
padre
commit
655a032e96

+ 16 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/ColorFilterExt.kt → tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/ColorExt.kt

@@ -11,10 +11,24 @@
 package org.mjdev.tvlib.extensions
 
 import androidx.annotation.FloatRange
+import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.ColorMatrix
-
-object ColorFilterExt {
+import kotlin.math.roundToInt
+
+object ColorExt {
+
+    fun Color.invert(): Color {
+        val a :Int = alpha.roundToInt()
+        val r :Int = 255 - red.roundToInt()
+        val g :Int = 255 - green.roundToInt()
+        val b :Int = 255 - blue.roundToInt()
+        val color = ((a and 0xFF) shl 24) or
+                ((r and 0xFF) shl 16) or
+                ((g and 0xFF) shl 8) or
+                (b and 0xFF)
+        return Color(color)
+    }
 
     fun contrastAndBrightness(
         @FloatRange(from = 0.0, to = 10.0)

+ 8 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/gallery/Gallery.kt

@@ -52,6 +52,7 @@ import androidx.tv.foundation.lazy.list.itemsIndexed
 import androidx.tv.foundation.lazy.list.rememberTvLazyListState
 import androidx.tv.material3.ExperimentalTvMaterial3Api
 import kotlinx.coroutines.delay
+import org.mjdev.tvlib.annotations.TvPreview
 import org.mjdev.tvlib.extensions.GlobalExt.toggle
 import org.mjdev.tvlib.interfaces.ItemPhoto
 import org.mjdev.tvlib.interfaces.ItemWithBackground
@@ -64,10 +65,11 @@ import org.mjdev.tvlib.ui.components.tv.TVRow
 import timber.log.Timber
 
 @OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
+@TvPreview
 @Composable
 fun Gallery(
     modifier: Modifier = Modifier,
-    list: List<Any?> = listOf(),
+    list: List<Any?> = listOf(Unit),
     index: Int = 0,
     createColorBrush: (
         color: Color,
@@ -128,6 +130,7 @@ fun Gallery(
     },
     listState: TvLazyListState = rememberTvLazyListState(),
 ) {
+    val initialized = remember { mutableStateOf(false) }
     Box(
         modifier = modifier.background(Color.Black, RectangleShape),
         contentAlignment = Alignment.BottomCenter,
@@ -210,6 +213,10 @@ fun Gallery(
             }
         }
         LaunchedEffect(currentItemIndex.intValue) {
+            if (!initialized.value) {
+                listState.scrollToItem(currentItemIndex.intValue)
+                initialized.value = true
+            }
             delay(5000)
             infoVisible.value = false
         }

+ 6 - 4
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/gallery/ItemInfo.kt

@@ -30,6 +30,7 @@ import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import org.mjdev.tvlib.annotations.TvPreview
+import org.mjdev.tvlib.extensions.ColorExt.invert
 import org.mjdev.tvlib.helpers.media.MetadataRetriever
 import org.mjdev.tvlib.helpers.media.MetadataRetriever.Companion.rememberMetaDataRetriever
 import org.mjdev.tvlib.interfaces.ItemPhoto
@@ -88,6 +89,7 @@ fun ItemInfo(
         metadataRetriever.getInfo(src)
     },
 ) {
+    // todo color invert text does not work properly?
     AnimatedVisibility(
         visible = infoVisible.value,
         enter = fadeIn(),
@@ -101,24 +103,24 @@ fun ItemInfo(
                 modifier = Modifier.fillMaxWidth(),
                 image = imageFromItem(),
                 transform = { color -> createColorBrush(color, Gravity.TOP) }
-            ) {
+            ) { bckColor ->
                 Column(
                     modifier = Modifier.padding(16.dp, 0.dp, 0.dp, 16.dp)
                 ) {
                     Spacer(modifier = Modifier.height(16.dp))
                     AutoHideEmptyText(
                         text = titleFromItem(),
-                        color = Color.White,
+                        color = bckColor.invert().copy(alpha = 1.0f),
                         fontSize = 24.sp
                     )
                     AutoHideEmptyText(
                         text = dateFromItem(),
-                        color = Color.White,
+                        color = bckColor.invert().copy(alpha = 1.0f),
                         fontSize = 16.sp
                     )
                     AutoHideEmptyText(
                         text = detailsFromItem(),
-                        color = Color.White,
+                        color = bckColor.invert().copy(alpha = 1.0f),
                         fontSize = 12.sp,
                         lineHeight = 12.sp
                     )

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/image/ImageBackground.kt

@@ -32,7 +32,7 @@ fun ImageBackground(
     image: Any? = null,
     transform: ((color: Color) -> Brush)? = null,
     contentAlignment: Alignment = Alignment.TopStart,
-    content: @Composable () -> Unit = {}
+    content: @Composable (bckColor: Color) -> Unit = {}
 ) {
     val context = LocalContext.current
     val imageLoader = rememberImageLoader()
@@ -47,7 +47,7 @@ fun ImageBackground(
             },
         contentAlignment = contentAlignment
     ) {
-        content()
+        content(bckColor.value)
     }
     LaunchedEffect(image) {
         bckColor.value = imageLoader.execute(

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

@@ -22,7 +22,6 @@ import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.ColorFilter
-import org.mjdev.tvlib.extensions.ColorFilterExt.contrastAndBrightness
 import androidx.compose.ui.graphics.DefaultAlpha
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.asAndroidBitmap
@@ -37,6 +36,7 @@ import com.skydoves.landscapist.coil.CoilImage
 import com.skydoves.landscapist.coil.CoilImageState
 import org.mjdev.tvlib.R
 import org.mjdev.tvlib.extensions.BitmapExt.majorColor
+import org.mjdev.tvlib.extensions.ColorExt.contrastAndBrightness
 import org.mjdev.tvlib.extensions.ComposeExt.isEditMode
 import org.mjdev.tvlib.extensions.ComposeExt.rememberImageLoader
 import org.mjdev.tvlib.extensions.DrawableExt.asPhoto