From 5523aa6e89ed91f3d4d645342da89f1592df42ee Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Fri, 11 Feb 2022 12:26:38 -0500 Subject: [PATCH] refactor click actions out of poser view --- .../tvtime/ui/components/Posters.kt | 23 +++++++----------- .../tvtime/ui/screens/DetailView.kt | 1 - .../tvtime/ui/screens/tabs/MoviesTab.kt | 24 ++++++++++++------- .../tvtime/ui/screens/tabs/TvTab.kt | 24 ++++++++++++------- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt index 1de0fb7..06f0a97 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt @@ -32,9 +32,8 @@ import com.owenlejeune.tvtime.ui.screens.DetailViewType @OptIn(ExperimentalFoundationApi::class) @Composable fun PosterGrid( - appNavController: NavController, - type: DetailViewType, - fetchMedia: (MutableState>) -> Unit + fetchMedia: (MutableState>) -> Unit = {}, + onClick: (Int) -> Unit = {} ) { val mediaList = remember { mutableStateOf(emptyList()) } fetchMedia(mediaList) @@ -45,9 +44,8 @@ fun PosterGrid( ) { listItems(mediaList.value) { item -> PosterItem( - appNavController = appNavController, mediaItem = item, - type = type + onClick = onClick ) } } @@ -56,11 +54,10 @@ fun PosterGrid( @Composable fun PosterItem( modifier: Modifier = Modifier, - appNavController: NavController, - mediaItem: TmdbItem?, - type: DetailViewType? = null, width: Dp = 127.dp, - height: Dp = 190.dp + height: Dp = 190.dp, + onClick: (Int) -> Unit = {}, + mediaItem: TmdbItem? ) { val context = LocalContext.current val poster = mediaItem?.let { TmdbUtils.getFullPosterPath(mediaItem) } @@ -81,12 +78,8 @@ fun PosterItem( .size(width = width, height = height) .padding(5.dp) .clickable { - type?.let { - mediaItem?.let { - appNavController.navigate( - "${MainNavItem.DetailView.route}/${type}/${mediaItem.id}" - ) - } + mediaItem?.let { + onClick(mediaItem.id) } } ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt index eb9024c..f9a7a42 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt @@ -43,7 +43,6 @@ fun DetailView( ) = createRefs() PosterItem( - appNavController = appNavController, mediaItem = mediaItem.value, modifier = Modifier .constrainAs(posterImage) { diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt index 370ec7a..3f05d7f 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavController import com.owenlejeune.tvtime.api.tmdb.MoviesService import com.owenlejeune.tvtime.ui.components.PosterGrid +import com.owenlejeune.tvtime.ui.navigation.MainNavItem import com.owenlejeune.tvtime.ui.screens.DetailViewType import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -17,15 +18,22 @@ fun MoviesTab(appNavController: NavController) { // val moviesViewModel = viewModel(PopularMovieViewModel::class.java) // val moviesList = moviesViewModel.moviePage // val movieListItems: LazyPagingItems = moviesList.collectAsLazyPagingItems() - PosterGrid(appNavController = appNavController, type = DetailViewType.MOVIE) { moviesList -> - val service = MoviesService() - CoroutineScope(Dispatchers.IO).launch { - val response = service.getPopularMovies() - if (response.isSuccessful) { - withContext(Dispatchers.Main) { - moviesList.value = response.body()!!.movies + PosterGrid( + fetchMedia = { moviesList -> + val service = MoviesService() + CoroutineScope(Dispatchers.IO).launch { + val response = service.getPopularMovies() + if (response.isSuccessful) { + withContext(Dispatchers.Main) { + moviesList.value = response.body()!!.movies + } } } + }, + onClick = { id -> + appNavController.navigate( + "${MainNavItem.DetailView.route}/${DetailViewType.MOVIE}/${id}" + ) } - } + ) } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt index 79a2a48..24de917 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavController import com.owenlejeune.tvtime.api.tmdb.TvService import com.owenlejeune.tvtime.ui.components.PosterGrid +import com.owenlejeune.tvtime.ui.navigation.MainNavItem import com.owenlejeune.tvtime.ui.screens.DetailViewType import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -14,15 +15,22 @@ import kotlinx.coroutines.withContext @OptIn(ExperimentalFoundationApi::class) @Composable fun TvTab(appNavController: NavController) { - PosterGrid(appNavController = appNavController, type = DetailViewType.TV) { tvList -> - val service = TvService() - CoroutineScope(Dispatchers.IO).launch { - val response = service.getPopularTv() - if (response.isSuccessful) { - withContext(Dispatchers.Main) { - tvList.value = response.body()!!.tv + PosterGrid( + fetchMedia = { tvList -> + val service = TvService() + CoroutineScope(Dispatchers.IO).launch { + val response = service.getPopularTv() + if (response.isSuccessful) { + withContext(Dispatchers.Main) { + tvList.value = response.body()!!.tv + } } } + }, + onClick = { id -> + appNavController.navigate( + "${MainNavItem.DetailView.route}/${DetailViewType.TV}/${id}" + ) } - } + ) } \ No newline at end of file