|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
/*
|
|
|
- * Copyright (c) Milan Jurkulák 2023.
|
|
|
|
|
|
|
+ * Copyright (c) Milan Jurkulák 2024.
|
|
|
* Contact:
|
|
* Contact:
|
|
|
* e: mimoccc@gmail.com
|
|
* e: mimoccc@gmail.com
|
|
|
* e: mj@mjdev.org
|
|
* e: mj@mjdev.org
|
|
@@ -10,34 +10,31 @@ package org.mjdev.tvlib.ui.components.tv
|
|
|
|
|
|
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
|
|
|
+import androidx.compose.foundation.lazy.LazyListScope
|
|
|
|
|
+import androidx.compose.foundation.lazy.LazyListState
|
|
|
|
|
+import androidx.compose.foundation.lazy.LazyRow
|
|
|
|
|
+import androidx.compose.foundation.lazy.rememberLazyListState
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Alignment
|
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.Modifier
|
|
|
import androidx.compose.ui.unit.Dp
|
|
import androidx.compose.ui.unit.Dp
|
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.dp
|
|
|
-import androidx.tv.foundation.PivotOffsets
|
|
|
|
|
-import androidx.tv.foundation.lazy.list.TvLazyListItemScope
|
|
|
|
|
-import androidx.tv.foundation.lazy.list.TvLazyListScope
|
|
|
|
|
-import androidx.tv.foundation.lazy.list.TvLazyListState
|
|
|
|
|
-import androidx.tv.foundation.lazy.list.TvLazyRow
|
|
|
|
|
-import androidx.tv.foundation.lazy.list.rememberTvLazyListState
|
|
|
|
|
import org.mjdev.tvlib.annotations.Previews
|
|
import org.mjdev.tvlib.annotations.Previews
|
|
|
|
|
|
|
|
@Previews
|
|
@Previews
|
|
|
@Composable
|
|
@Composable
|
|
|
fun TVRow(
|
|
fun TVRow(
|
|
|
modifier: Modifier = Modifier,
|
|
modifier: Modifier = Modifier,
|
|
|
- state: TvLazyListState = rememberTvLazyListState(),
|
|
|
|
|
|
|
+ state: LazyListState = rememberLazyListState(),
|
|
|
contentPadding: Dp = 0.dp,
|
|
contentPadding: Dp = 0.dp,
|
|
|
reverseLayout: Boolean = false,
|
|
reverseLayout: Boolean = false,
|
|
|
horizontalArrangement: Arrangement.Horizontal = if (!reverseLayout) Arrangement.Start
|
|
horizontalArrangement: Arrangement.Horizontal = if (!reverseLayout) Arrangement.Start
|
|
|
else Arrangement.End,
|
|
else Arrangement.End,
|
|
|
verticalAlignment: Alignment.Vertical = Alignment.Top,
|
|
verticalAlignment: Alignment.Vertical = Alignment.Top,
|
|
|
userScrollEnabled: Boolean = true,
|
|
userScrollEnabled: Boolean = true,
|
|
|
- pivotOffsets: PivotOffsets = PivotOffsets(),
|
|
|
|
|
- content: TvLazyListScope.() -> Unit = {}
|
|
|
|
|
|
|
+ content: LazyListScope.() -> Unit = {}
|
|
|
) {
|
|
) {
|
|
|
- TvLazyRow(
|
|
|
|
|
|
|
+ LazyRow(
|
|
|
modifier = modifier,
|
|
modifier = modifier,
|
|
|
state = state,
|
|
state = state,
|
|
|
contentPadding = PaddingValues(contentPadding * 2, contentPadding),
|
|
contentPadding = PaddingValues(contentPadding * 2, contentPadding),
|
|
@@ -45,20 +42,6 @@ fun TVRow(
|
|
|
horizontalArrangement = horizontalArrangement,
|
|
horizontalArrangement = horizontalArrangement,
|
|
|
verticalAlignment = verticalAlignment,
|
|
verticalAlignment = verticalAlignment,
|
|
|
userScrollEnabled = userScrollEnabled,
|
|
userScrollEnabled = userScrollEnabled,
|
|
|
- pivotOffsets = pivotOffsets,
|
|
|
|
|
content = content
|
|
content = content
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-inline fun <T> TvLazyListScope.items(
|
|
|
|
|
- items: List<T>,
|
|
|
|
|
- noinline key: ((item: T) -> Any)? = null,
|
|
|
|
|
- noinline contentType: (item: T) -> Any? = { null },
|
|
|
|
|
- crossinline itemContent: @Composable TvLazyListItemScope.(item: T) -> Unit
|
|
|
|
|
-) = items(
|
|
|
|
|
- count = items.size,
|
|
|
|
|
- key = if (key != null) { index: Int -> key(items[index]) } else null,
|
|
|
|
|
- contentType = { index: Int -> contentType(items[index]) }
|
|
|
|
|
-) {
|
|
|
|
|
- itemContent(items[it])
|
|
|
|
|
-}
|
|
|