Selaa lähdekoodia

featured items #1

Milan Jurkulak 3 vuotta sitten
vanhempi
sitoutus
c8d2da831e

+ 9 - 4
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/carousel/CarouselCard.kt

@@ -26,6 +26,7 @@ import org.mjdev.tvapp.base.extensions.ModifierExt.conditional
 import org.mjdev.tvapp.base.extensions.ModifierExt.recomposeHighlighter
 import org.mjdev.tvapp.base.interfaces.ItemWithBackground
 import org.mjdev.tvapp.base.interfaces.ItemWithDescription
+import org.mjdev.tvapp.base.interfaces.ItemWithImage
 import org.mjdev.tvapp.base.ui.components.card.PhotoCard
 import org.mjdev.tvapp.base.ui.components.image.ImageAny
 
@@ -41,9 +42,11 @@ fun CarouselCard(
     focusState: MutableState<FocusState?> = rememberFocusState(item),
     placeholder: @Composable () -> Unit = {}, // todo
     imageRenderer: @Composable () -> Unit = {
+        val image = (item as? ItemWithImage<*>)?.image
+        val background = (item as? ItemWithBackground<*>)?.background
         ImageAny(
             modifier = Modifier.fillMaxSize(),
-            src = (item as? ItemWithBackground<*>)?.background,
+            src = background ?: image,
             contentDescription = (item as? ItemWithDescription<*>)?.description?.toString(),
             contentScale = contentScale,
             placeholder = placeholder
@@ -54,9 +57,11 @@ fun CarouselCard(
     val isEdit = isEditMode()
     PhotoCard(
         item = item,
-        modifier = modifier.conditional(isEdit) {
-            defaultMinSize(260.dp)
-        }.recomposeHighlighter(),
+        modifier = modifier
+            .conditional(isEdit) {
+                defaultMinSize(260.dp)
+            }
+            .recomposeHighlighter(),
         aspectRatio = 1f,
         contentScale = contentScale,
         scale = scale,

+ 27 - 13
app/src/main/kotlin/org/mjdev/tvapp/viewmodel/MainViewModel.kt

@@ -37,6 +37,18 @@ class MainViewModel @Inject constructor(
     var networkInfo: NetworkConnectivityService
 ) : BaseViewModel() {
 
+    @Inject
+    lateinit var appsList: AppsManager
+
+    @Inject
+    lateinit var localAudioCursor: AudioCursor
+
+    @Inject
+    lateinit var localVideoCursor: VideoCursor
+
+    @Inject
+    lateinit var localPhotoCursor: PhotoCursor
+
     val messages: StateFlow<List<Message>> = channelFlow {
         send(repository.getMessages().getOrThrow())
     }.stateIn(
@@ -45,8 +57,21 @@ class MainViewModel @Inject constructor(
         listOf()
     )
 
-    val featuredMovieList: StateFlow<List<Movie>> = flow {
-        emit(repository.getMovies().getOrThrow().takeLast(32))
+    val featuredMovieList: StateFlow<List<Any?>> = flow {
+        mutableListOf<Any?>().apply {
+            add(repository.getMovies().getOrThrow().takeLast(8))
+            if (localAudioCursor.count > 0) {
+                add(localAudioCursor.getData(0))
+            }
+            if (localVideoCursor.count > 0) {
+                add(localVideoCursor.getData(0))
+            }
+            if (localPhotoCursor.count > 0) {
+                add(localPhotoCursor.getData(0))
+            }
+        }.also { result ->
+            emit(result)
+        }
     }.stateIn(
         viewModelScope,
         SharingStarted.WhileSubscribed(5000L),
@@ -61,17 +86,6 @@ class MainViewModel @Inject constructor(
         mapOf()
     )
 
-    @Inject
-    lateinit var appsList : AppsManager
-
-    @Inject
-    lateinit var localAudioCursor : AudioCursor
-
-    @Inject
-    lateinit var localVideoCursor : VideoCursor
-
-    @Inject
-    lateinit var localPhotoCursor : PhotoCursor
 
     companion object {