mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-22 11:40:54 -05:00
refactor poster and video grids
This commit is contained in:
@@ -61,7 +61,7 @@ fun StaticGrid(
|
||||
is StaticGridCells.Dynamic -> {
|
||||
BoxWithConstraints(modifier = modifier) {
|
||||
val nColumns = maxOf((maxWidth / cells.minSize).toInt(), 1)
|
||||
val spacing = maxWidth - (cells.minSize * nColumns)
|
||||
val spacing = (maxWidth - (cells.minSize * nColumns)) / 10
|
||||
StaticGridInternal(
|
||||
columns = nColumns,
|
||||
itemCount = itemCount,
|
||||
|
||||
@@ -30,11 +30,14 @@ import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.HorizontalPager
|
||||
import com.google.accompanist.pager.rememberPagerState
|
||||
import com.owenlejeune.tvtime.R
|
||||
import com.owenlejeune.tvtime.utils.TmdbUtils
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.ImageCollection
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.TmdbItem
|
||||
import com.owenlejeune.tvtime.extensions.dpToPx
|
||||
import com.owenlejeune.tvtime.extensions.listItems
|
||||
import com.owenlejeune.tvtime.utils.TmdbUtils
|
||||
|
||||
private val POSTER_WIDTH = 127.dp
|
||||
private val POSTER_HEIGHT = 190.dp
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
@@ -46,7 +49,7 @@ fun PosterGrid(
|
||||
fetchMedia(mediaList)
|
||||
|
||||
LazyVerticalGrid(
|
||||
cells = GridCells.Fixed(count = 3),
|
||||
cells = GridCells.Adaptive(minSize = POSTER_WIDTH),
|
||||
contentPadding = PaddingValues(8.dp)
|
||||
) {
|
||||
listItems(mediaList.value) { item ->
|
||||
@@ -61,8 +64,8 @@ fun PosterGrid(
|
||||
@Composable
|
||||
fun PosterItem(
|
||||
modifier: Modifier = Modifier,
|
||||
width: Dp = 127.dp,
|
||||
height: Dp = 190.dp,
|
||||
width: Dp = POSTER_WIDTH,
|
||||
height: Dp = POSTER_HEIGHT,
|
||||
onClick: (Int) -> Unit = {},
|
||||
mediaItem: TmdbItem?
|
||||
) {
|
||||
|
||||
@@ -29,6 +29,7 @@ import com.owenlejeune.tvtime.api.tmdb.DetailService
|
||||
import com.owenlejeune.tvtime.api.tmdb.MoviesService
|
||||
import com.owenlejeune.tvtime.api.tmdb.TvService
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.*
|
||||
import com.owenlejeune.tvtime.extensions.listItems
|
||||
import com.owenlejeune.tvtime.ui.components.*
|
||||
import com.owenlejeune.tvtime.utils.TmdbUtils
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -70,6 +71,7 @@ fun DetailView(
|
||||
modifier = Modifier.constrainAs(backdropImage) {
|
||||
top.linkTo(parent.top)
|
||||
start.linkTo(parent.start)
|
||||
end.linkTo(parent.end)
|
||||
},
|
||||
mediaItem = mediaItem
|
||||
)
|
||||
@@ -175,7 +177,8 @@ private fun ContentColumn(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.wrapContentHeight()
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 16.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
if (mediaType == MediaViewType.MOVIE) {
|
||||
MiscMovieDetails(mediaItem = mediaItem, service as MoviesService)
|
||||
@@ -184,12 +187,12 @@ private fun ContentColumn(
|
||||
}
|
||||
|
||||
if (mediaItem.value?.overview?.isNotEmpty() == true) {
|
||||
OverviewCard(mediaItem = mediaItem, modifier = Modifier.padding(bottom = 16.dp))
|
||||
OverviewCard(mediaItem = mediaItem)
|
||||
}
|
||||
|
||||
CastCard(itemId = itemId, service = service, modifier = Modifier.padding(bottom = 16.dp))
|
||||
CastCard(itemId = itemId, service = service)
|
||||
|
||||
SimilarContentCard(itemId = itemId, service = service, modifier = Modifier.padding(bottom = 16.dp))
|
||||
SimilarContentCard(itemId = itemId, service = service)
|
||||
|
||||
VideosCard(itemId = itemId, service = service)
|
||||
}
|
||||
@@ -381,7 +384,7 @@ fun VideosCard(itemId: Int?, service: DetailService, modifier: Modifier = Modifi
|
||||
}
|
||||
}
|
||||
|
||||
if (videoResponse.value != null) {
|
||||
if (videoResponse.value != null && videoResponse.value!!.results.any { it.isOfficial }) {
|
||||
val results = videoResponse.value!!.results
|
||||
ExpandableContentCard(
|
||||
modifier = modifier,
|
||||
@@ -406,7 +409,6 @@ fun VideosCard(itemId: Int?, service: DetailService, modifier: Modifier = Modifi
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
private fun VideoGroup(results: List<Video>, type: Video.Type, title: String) {
|
||||
val videos = results.filter { it.isOfficial && it.type == type }
|
||||
@@ -417,18 +419,18 @@ private fun VideoGroup(results: List<Video>, type: Video.Type, title: String) {
|
||||
modifier = Modifier.padding(start = 12.dp, top = 8.dp)
|
||||
)
|
||||
|
||||
StaticGrid(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 12.dp, vertical = 8.dp),
|
||||
cells = StaticGridCells.Dynamic(110.dp),
|
||||
itemCount = videos.size
|
||||
) { i ->
|
||||
val video = videos[i]
|
||||
FullScreenThumbnailVideoPlayer(
|
||||
key = video.key,
|
||||
modifier = Modifier.size(110.dp, 80.dp)
|
||||
)
|
||||
val posterWidth = 120.dp
|
||||
LazyRow(modifier = Modifier
|
||||
.padding(horizontal = 8.dp, vertical = 8.dp)
|
||||
) {
|
||||
listItems(videos) { video ->
|
||||
FullScreenThumbnailVideoPlayer(
|
||||
key = video.key,
|
||||
modifier = Modifier
|
||||
.width(posterWidth)
|
||||
.height(80.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user