Skip to content

Commit 0ed920b

Browse files
Merge pull request #549 from MadridSquad/refactor/SeriesDetails
Refactor/series details code
2 parents 3d9bbf6 + e502aaf commit 0ed920b

30 files changed

Lines changed: 1228 additions & 939 deletions

domain/src/main/java/com/madrid/domain/usecase/series/AddSeriesToHistoryUseCase.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.madrid.domain.usecase.series
22

3-
import com.madrid.domain.repository.AuthenticationRepository
43
import com.madrid.domain.repository.SeriesRepository
54
import com.madrid.domain.usecase.authentication.GetCurrentUserDetailsUseCase
65
import javax.inject.Inject

presentation/src/main/java/com/madrid/presentation/component/TopCastHorizontalScroll.kt

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,22 @@ import com.madrid.designSystem.R
1919
import com.madrid.designSystem.component.CustomTextTitle
2020
import com.madrid.designSystem.theme.MovioTheme
2121
import com.madrid.presentation.component.movioCards.MovioArtistsCard
22-
23-
data class CastMember(
24-
val id: String,
25-
val name: String,
26-
val imageUrl: String
27-
)
22+
import com.madrid.presentation.viewModel.detailsViewModel.ArtistUiState
23+
import com.madrid.presentation.viewModel.detailsViewModel.SeeAllType
2824

2925
@Composable
3026
fun TopCastHorizontalScroll(
3127
modifier: Modifier = Modifier,
32-
castMembers: List<CastMember>,
28+
castMembers: List<ArtistUiState>,
3329
onSeeAllClick: () -> Unit = {},
34-
onCastMemberClick: (Int) -> Unit,
30+
onCastMemberClick: (Int) -> Unit
3531
) {
3632
Column(
3733
modifier = modifier
3834
.fillMaxWidth()
3935
) {
4036
CustomTextTitle(
41-
primaryText = stringResource(com.madrid.presentation.R.string.top_cast),
37+
primaryText = stringResource(SeeAllType.TopCast.stringResId),
4238
secondaryText = stringResource(com.madrid.presentation.R.string.see_all),
4339
endIcon = painterResource(R.drawable.outline_alt_arrow_left),
4440
onSeeAllClick = { onSeeAllClick() },
@@ -64,7 +60,7 @@ fun TopCastHorizontalScroll(
6460
@Composable
6561
private fun CastMemberItem(
6662
onCastMemberClick: (Int) -> Unit,
67-
castMember: CastMember,
63+
castMember: ArtistUiState,
6864
modifier: Modifier = Modifier
6965
) {
7066
Column(
@@ -87,18 +83,18 @@ private fun TopCastSectionPreview() {
8783
MovioTheme {
8884
TopCastHorizontalScroll(
8985
castMembers = listOf(
90-
CastMember(
91-
id = "1",
86+
ArtistUiState(
87+
id = 1,
9288
name = "Ana de Armas",
9389
imageUrl = "https://image.tmdb.org/t/p/w500/3vxvsmYLTf4jnr163SUlBIWX8qx.jpg"
9490
),
95-
CastMember(
96-
id = "2",
91+
ArtistUiState(
92+
id = 2,
9793
name = "Keanu Reeves",
9894
imageUrl = "https://image.tmdb.org/t/p/w500/4D0PpNI0km5B9Gk7SZOo6hJxJ9P.jpg"
9995
),
100-
CastMember(
101-
id = "3",
96+
ArtistUiState(
97+
id = 3,
10298
name = "Ian McShane",
10399
imageUrl = "https://image.tmdb.org/t/p/w500/9H7oVx4b6Z0j3EjLZN9mzcqcJjU.jpg"
104100
)

presentation/src/main/java/com/madrid/presentation/screens/detailsScreen/movieDetail/MovieDetail.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ import com.madrid.designSystem.component.TopAppBar
5454
import com.madrid.designSystem.theme.Theme
5555
import com.madrid.presentation.R
5656
import com.madrid.presentation.component.BottomMediaActions
57-
import com.madrid.presentation.component.CastMember
5857
import com.madrid.presentation.component.TopCastHorizontalScroll
5958
import com.madrid.presentation.component.header.MovieDetailsHeader
6059
import com.madrid.presentation.component.logout.LogoutConfirmationBottomSheet
@@ -64,9 +63,9 @@ import com.madrid.presentation.navigation.Destinations
6463
import com.madrid.presentation.navigation.LocalNavController
6564
import com.madrid.presentation.screens.addtolist.ListManagementBottomSheet
6665
import com.madrid.presentation.screens.detailsScreen.reviewsScreen.composables.ReviewScreen
67-
import com.madrid.presentation.screens.detailsScreen.seriesDetails.toReviewScreenUiState
6866
import com.madrid.presentation.screens.detailsScreen.similarMedia.SimilarMovie
6967
import com.madrid.presentation.screens.detailsScreen.similarMedia.SimilarMoviesSection
68+
import com.madrid.presentation.viewModel.detailsViewModel.ArtistUiState
7069
import com.madrid.presentation.viewModel.detailsViewModel.DetailsMovieViewModel
7170
import com.madrid.presentation.viewModel.libraryViewModel.addtolist.MovieListViewModel
7271

@@ -454,15 +453,15 @@ fun MovieDetailsScreen(
454453
},
455454
modifier = Modifier.padding(top = 32.dp),
456455
castMembers = uiState.casts.map { cast ->
457-
CastMember(
458-
id = cast.id.toString(),
456+
ArtistUiState(
457+
id = cast.id,
459458
name = cast.name,
460459
imageUrl = cast.imageUrl
461460
)
462461
}
463462
)
464463
ReviewScreen(
465-
modifier = Modifier.padding(top = 32.dp),
464+
reviews = uiState.reviews,
466465
onSeeAllReviews = {
467466
navController.navigate(
468467
Destinations.ReviewsScreen(
@@ -471,7 +470,7 @@ fun MovieDetailsScreen(
471470
)
472471
)
473472
},
474-
uiState = uiState.reviews.toReviewScreenUiState()
473+
modifier = Modifier.padding(top = 32.dp),
475474
)
476475
SimilarMoviesSection(
477476
modifier = Modifier.padding(vertical = 32.dp),

presentation/src/main/java/com/madrid/presentation/screens/detailsScreen/reviewsScreen/composables/ReviewsSection.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,26 @@ import androidx.compose.ui.unit.dp
1616
import com.madrid.designSystem.component.CustomTextTitle
1717
import com.madrid.presentation.R
1818
import com.madrid.presentation.viewModel.detailsViewModel.ReviewUiState
19-
import com.madrid.presentation.viewModel.detailsViewModel.ReviewsScreenUiState
19+
import com.madrid.presentation.viewModel.detailsViewModel.SeeAllType
2020

2121
@Composable
2222
fun ReviewScreen(
23-
uiState: ReviewsScreenUiState,
23+
reviews: List<ReviewUiState>,
2424
modifier: Modifier = Modifier,
25-
onSeeAllReviews: () -> Unit = {},
26-
reviews: List<ReviewUiState> = uiState.reviews,
25+
onSeeAllReviews: () -> Unit = {}
2726
) {
2827
if (reviews.isNotEmpty()) {
2928
Column(
3029
modifier = modifier.fillMaxWidth()
3130
) {
3231
CustomTextTitle(
33-
primaryText = stringResource(R.string.reviews),
32+
primaryText = stringResource(SeeAllType.Review.stringResId),
3433
secondaryText = stringResource(R.string.see_all),
3534
endIcon = painterResource(com.madrid.designSystem.R.drawable.outline_alt_arrow_left),
3635
onSeeAllClick = { onSeeAllReviews() },
3736
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 12.dp)
3837
)
39-
ReviewsSectionContent(reviews = uiState.reviews)
38+
ReviewsSectionContent(reviews = reviews)
4039
}
4140
}
4241
}

presentation/src/main/java/com/madrid/presentation/screens/detailsScreen/seriesDetails/EpisodesScreen.kt

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.madrid.presentation.screens.detailsScreen.seriesDetails
22

3+
import android.content.Context
34
import android.content.Intent
45
import androidx.compose.foundation.background
56
import androidx.compose.foundation.layout.Box
@@ -36,30 +37,29 @@ import com.madrid.presentation.component.movieActorBackground.MoviePosterDetailS
3637
import com.madrid.presentation.component.movioCards.MovioEpisodesCard
3738
import com.madrid.presentation.navigation.LocalNavController
3839
import com.madrid.presentation.viewModel.detailsViewModel.EpisodeUiState
40+
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetails.SeriesDetailsInteractionListener
41+
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetails.SeriesDetailsViewModel
3942
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetailsUiState
40-
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetailsViewModel
4143

4244
@Composable
43-
fun EpisodesScreen(viewModel: SeriesDetailsViewModel = hiltViewModel()) {
45+
fun EpisodesScreen(viewModel: SeriesDetailsViewModel = hiltViewModel()
46+
) {
4447
val uiState by viewModel.state.collectAsState()
48+
val interactionListener = viewModel as SeriesDetailsInteractionListener
4549
val navController = LocalNavController.current
4650
val context = LocalContext.current
51+
4752
EpisodesScreenContent(
4853
uiState = uiState,
4954
onSeasonSelection = viewModel::updateSelectedSeason,
5055
onClickEpisode = { episode ->
51-
viewModel.loadEpisodeTrailer(
56+
57+
interactionListener.onEpisodePlayItClick(
5258
seriesId = uiState.seriesId,
5359
seasonNumber = uiState.selectedSeasonUiState.seasonNumber,
5460
episodeNumber = episode.episodeNumber
5561
) { trailerKey ->
56-
trailerKey?.let {
57-
val intent = Intent(
58-
Intent.ACTION_VIEW,
59-
"https://www.youtube.com/watch?v=$it".toUri()
60-
)
61-
context.startActivity(intent)
62-
}
62+
openTrailer(trailerKey, context)
6363
}
6464
},
6565
onClickBack = { navController.popBackStack() }
@@ -168,4 +168,14 @@ fun EpisodesScreenContent(
168168
)
169169
}
170170
}
171+
}
172+
173+
private fun openTrailer(trailerKey:String?,context:Context){
174+
trailerKey?.let {
175+
val intent = Intent(
176+
Intent.ACTION_VIEW,
177+
"https://www.youtube.com/watch?v=$it".toUri()
178+
)
179+
context.startActivity(intent)
180+
}
171181
}

presentation/src/main/java/com/madrid/presentation/screens/detailsScreen/seriesDetails/SeasonsScreen.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import androidx.compose.foundation.layout.fillMaxSize
77
import androidx.compose.foundation.layout.height
88
import androidx.compose.foundation.layout.padding
99
import androidx.compose.foundation.lazy.LazyColumn
10-
import androidx.compose.foundation.lazy.itemsIndexed
10+
import androidx.compose.foundation.lazy.items
1111
import androidx.compose.runtime.Composable
1212
import androidx.compose.runtime.collectAsState
1313
import androidx.compose.runtime.getValue
@@ -20,8 +20,8 @@ import com.madrid.presentation.R
2020
import com.madrid.presentation.component.movioCards.MovioSeasonCard
2121
import com.madrid.presentation.navigation.Destinations
2222
import com.madrid.presentation.navigation.LocalNavController
23+
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetails.SeriesDetailsViewModel
2324
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetailsUiState
24-
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetailsViewModel
2525
import com.madrid.presentation.viewModel.shared.parser.formatFullDateKtx
2626
import com.madrid.presentation.viewModel.shared.parser.formatYearKtx
2727

@@ -66,7 +66,7 @@ fun SeasonsScreenContent(
6666
LazyColumn(
6767
contentPadding = PaddingValues(bottom = 40.dp)
6868
) {
69-
itemsIndexed(seasons) { index, season ->
69+
items(seasons) { season ->
7070
MovioSeasonCard(
7171
movieTitle = season.title,
7272
movieImage = season.imageUrl,

0 commit comments

Comments
 (0)