Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion app/src/main/java/com/london/app/NovixApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import androidx.hilt.work.HiltWorkerFactory
import androidx.work.Configuration
import androidx.work.WorkManager
import com.london.data.BuildConfig
import com.london.data.worker.MovieListSyncWorker
import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber
import javax.inject.Inject
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/com/london/app/navigation/appDestination.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ fun NavController.navigateToEpisodeDetails(tvShowId: Int, seasonNumber: Int, epi
navigate(EpisodeDetails(tvShowId, episodeNumber, seasonNumber))

fun NavController.navigateToMovieDetails(movieId: Int) =
navigate(MovieDetails(movieId))
navigate(MovieDetails(movieId = movieId))

fun NavController.navigateToTvShowDetails(tvShowId: Int) =
navigate(TvShowDetails(tvShowId))
Expand All @@ -59,9 +59,9 @@ fun NavController.navigateToMovieCategory(genre: MovieGenreUi) =
fun NavController.navigateToReviews(movieId: Int, mediaType: MediaType) =
navigate(Reviews(movieId, mediaType))

fun NavController.navigateToLoginWithPopUp() = navigateTo(Login)
fun NavController.navigateToLoginWithPopUp(source: Screen? = null) = navigateTo(Login.withSource(source))

fun NavController.navigateToLogin() = navigate(Login)
fun NavController.navigateToLogin(source: Screen? = null) = navigate(Login.withSource(source))

fun NavController.navigateToWatchingHistory() = navigate(WatchingHistory)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package com.london.app.navigation.graph
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.navigation
import androidx.navigation.toRoute
import com.london.app.navigation.AppNavGraph
import com.london.app.navigation.appComposable
import com.london.app.navigation.navigateTo
import com.london.app.navigation.navigateToLoginWithPopUp
import com.london.app.navigation.navigateToMainGraph
import com.london.app.navigation.navigateToRegister
Expand All @@ -18,8 +20,12 @@ fun NavGraphBuilder.authNavGraph(
navController: NavHostController
) = navigation<AppNavGraph.Auth>(startDestination = Login) {
appComposable<Login> {
val currentRoute = it.toRoute<Login>()
LoginScreen(
onNavigateToHome = navController::navigateToMainGraph,
onNavigateToHome = {
currentRoute.source?.let(navController::navigateTo)
?: navController.navigateToMainGraph()
},
onNavigateBack = navController::navigateToWelcome,
onNavigateToRegister = navController::navigateToRegister
)
Expand Down
56 changes: 33 additions & 23 deletions app/src/main/java/com/london/app/navigation/graph/mainNavGraph.kt
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ fun NavGraphBuilder.mainNavGraph(
AccountScreen(
onNavigateToWatchingHistory = ::navigateToWatchingHistory,
onNavigateToMyRating = ::navigateToMyRating,
onNavigateToLogin = ::navigateToLoginWithPopUp
onNavigateToLogin = { navigateToLoginWithPopUp(source = Account) }
)
}

Expand Down Expand Up @@ -172,7 +172,7 @@ private fun NavGraphBuilder.onListNavGraph(navController: NavHostController) =
appComposable<Lists> {
ListScreen(
onNavigateToListDetails = ::navigateToListDetails,
onNavigateToLogin = ::navigateToLogin,
onNavigateToLogin = { navigateToLogin(source = Lists()) },
)
}
appComposable<ViewListItems> {
Expand All @@ -183,26 +183,27 @@ private fun NavGraphBuilder.onListNavGraph(navController: NavHostController) =
}
}

private fun NavGraphBuilder.movieDetailsNavGraph(navController: NavHostController) =
with(navController) {
appComposable<MovieDetails> {
MovieDetailsScreen(
onNavigateBack = ::navigateUp,
onNavigateToMovieCategory = ::navigateToMovieCategory,
onNavigateToMovie = ::navigateToMovieDetails,
onNavigateToActor = ::navigateToActorDetails,
onNavigateToReviews = ::navigateToReviews,
onNavigateToLogin = ::navigateToLogin,
)
}
private fun NavGraphBuilder.movieDetailsNavGraph(navController: NavHostController) = with(navController) {
appComposable<MovieDetails> {
MovieDetailsScreen(
onNavigateBack = ::navigateUp,
onNavigateToMovieCategory = ::navigateToMovieCategory,
onNavigateToMovie = ::navigateToMovieDetails,
onNavigateToActor = ::navigateToActorDetails,
onNavigateToReviews = ::navigateToReviews,
onNavigateToLogin = { movieId ->
navigateToLogin(source = MovieDetails(movieId = movieId))
},
)
}

appComposable<MoviesByCategory> {
MoviesByCategoryScreen(
onNavigateToMovieDetails = ::navigateToMovieDetails,
onNavigateBack = ::navigateUp,
)
}
appComposable<MoviesByCategory> {
MoviesByCategoryScreen(
onNavigateToMovieDetails = ::navigateToMovieDetails,
onNavigateBack = ::navigateUp,
)
}
}

private fun NavGraphBuilder.tvShowDetailsNavGraph(navController: NavHostController) =
with(navController) {
Expand All @@ -213,15 +214,25 @@ private fun NavGraphBuilder.tvShowDetailsNavGraph(navController: NavHostControll
onNavigateToActorDetails = ::navigateToActorDetails,
onNavigateBack = ::navigateUp,
onNavigateToTvShowCategory = ::navigateToTvShowsByCategory,
onNavigateToLogin = ::navigateToLogin
onNavigateToLogin = { tvShowId ->
navigateToLogin(source = TvShowDetails(tvShowId = tvShowId))
}
)
}

appComposable<EpisodeDetails> {
EpisodeDetailsScreen(
onNavigateBack = ::navigateUp,
onNavigateToActorDetails = ::navigateToActorDetails,
onNavigateToLogin = ::navigateToLogin
onNavigateToLogin = { tvShowId, seasonNumber, episodeNumber ->
navigateToLogin(
source = EpisodeDetails(
tvShowId = tvShowId,
seasonNumber = seasonNumber,
episodeNumber = episodeNumber
)
)
}
)
}

Expand Down Expand Up @@ -284,5 +295,4 @@ private fun NavGraphBuilder.trendingNavGraph(navController: NavHostController) =
onNavigateBack = ::navigateUp
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.london.designsystem.component.NovixChip
import com.london.designsystem.component.TopBar
import com.london.designsystem.theme.NovixTheme
import com.london.designsystem.theme.ThemePreviews
import com.london.designsystem.utils.string
import com.london.domain.entity.shared.MediaType
import com.london.presentation.R
import com.london.presentation.shared.BackgroundGradient
Expand Down Expand Up @@ -145,11 +146,11 @@ private fun RatingSnackBar(state: MyRatingUiState) {
if (!state.isSnackBarVisible) return

if (state.errorState is ErrorState.RequestFailed) {
SnackBarAnimation(state.errorState.message)
SnackBarAnimation(message = R.string.rating_delete_fail.string)
} else {
SnackBarAnimation(
stringResource(R.string.delete_list_successfully),
dsR.drawable.ic_success
message = R.string.rating_delete_success.string,
icon = dsR.drawable.ic_success
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.london.presentation.shared.genre.MovieGenreUi

interface MovieDetailsContract {
fun onBackClick()
fun onLoginClick()
fun onLoginClick(movieId: Int)
fun onRetryClick()
fun onExpandClick()
fun onRateBottomSheetClick()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.london.presentation.shared.genre.MovieGenreUi

sealed interface MovieDetailsEffect {
data object BackNavigation : MovieDetailsEffect
data object LoginNavigation : MovieDetailsEffect
data class LoginNavigation(val movieId: Int) : MovieDetailsEffect
data class MovieNavigation(val movieId: Int) : MovieDetailsEffect
data class ActorNavigation(val actorId: Int) : MovieDetailsEffect
data class GenreNavigation(val genre: MovieGenreUi) : MovieDetailsEffect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,11 @@ import com.london.presentation.utils.toLocalizedNumbers
@Composable
fun MovieDetailsScreen(
onNavigateBack: () -> Unit,
onNavigateToLogin: () -> Unit,
onNavigateToMovie: (Int) -> Unit,
onNavigateToActor: (Int) -> Unit,
onNavigateToReviews: (Int, MediaType) -> Unit,
onNavigateToMovieCategory: (MovieGenreUi) -> Unit,
onNavigateToLogin: (movieId: Int) -> Unit,
onNavigateToMovie: (movieId: Int) -> Unit,
onNavigateToActor: (movieId: Int) -> Unit,
onNavigateToReviews: (movieId: Int, mediaType: MediaType) -> Unit,
onNavigateToMovieCategory: (genre: MovieGenreUi) -> Unit,
viewModel: MovieDetailsViewModel = hiltViewModel()
) {
val state by viewModel.state.collectAsStateWithLifecycle()
Expand All @@ -108,7 +108,7 @@ fun MovieDetailsScreen(
currentEffect.mediaType
)

is MovieDetailsEffect.LoginNavigation -> onNavigateToLogin()
is MovieDetailsEffect.LoginNavigation -> onNavigateToLogin(currentEffect.movieId)
}
}

Expand Down Expand Up @@ -381,7 +381,7 @@ private fun BottomSheetsHandler(
)
else if (uiState.isGuestUserBottomSheetVisible) GuestUserLoginBottomSheet(
onDismissClick = movieDetailsContract::onRateBottomSheetClick,
onLoginClick = movieDetailsContract::onLoginClick,
onLoginClick = { movieDetailsContract.onLoginClick(uiState.movieId) },
)
}

Expand All @@ -399,8 +399,7 @@ private fun RatingAndMetaRow(
TextWithIcon(
text = rate.toLocalizedNumbers(),
icon = painterResource(drawable.star),
tint = NovixTheme.colors.yellowAccent,
hasInitialDot = false
tint = NovixTheme.colors.yellowAccent
)
}

Expand All @@ -415,6 +414,7 @@ private fun RatingAndMetaRow(
TextWithIcon(
icon = painterResource(drawable.time_04),
text = text,
hasInitialDot = false
)

if (!date.isNullOrBlank()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class MovieDetailsViewModel @Inject constructor(

init {
loadMovieDetails()
args?.let { updateState { copy(isBookmarkSheetVisible = it.isBookmarkSheetVisible) } }
}

private fun loadMovieDetails() {
Expand Down Expand Up @@ -75,9 +76,6 @@ class MovieDetailsViewModel @Inject constructor(
emitEffect(MovieDetailsEffect.ActorNavigation(actorId))
}

override fun onLoginClick() = emitEffect(MovieDetailsEffect.LoginNavigation)


override fun onReviewsClick(movieId: Int, mediaType: MediaType) {
clearRatedState()
emitEffect(MovieDetailsEffect.ReviewsNavigation(movieId, mediaType))
Expand All @@ -93,6 +91,9 @@ class MovieDetailsViewModel @Inject constructor(
loadMovieDetails()
}

override fun onLoginClick(movieId: Int) {
emitEffect(MovieDetailsEffect.LoginNavigation(movieId))
}
override fun onRateBottomSheetClick() = checkUserAuthenticationForRating()

override fun onSelectRatingClick(rating: Int) = submitMovieRating(rating)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ import com.london.designsystem.R as Res
@Composable
fun EpisodeDetailsScreen(
onNavigateBack: () -> Unit,
onNavigateToLogin: () -> Unit,
onNavigateToLogin: (tvShowId: Int, seasonNumber: Int, episodeNumber: Int) -> Unit,
onNavigateToActorDetails: (Int) -> Unit,
viewModel: EpisodeDetailsViewModel = hiltViewModel()
) {
Expand All @@ -76,7 +76,11 @@ fun EpisodeDetailsScreen(
when (currentEffect) {
EpisodeDetailsEffect.BackNavigation -> onNavigateBack()
is EpisodeDetailsEffect.CastNavigation -> onNavigateToActorDetails(currentEffect.episodeId)
is EpisodeDetailsEffect.LoginNavigation -> onNavigateToLogin()
is EpisodeDetailsEffect.LoginNavigation -> onNavigateToLogin(
currentEffect.tvShowId,
currentEffect.seasonNumber,
currentEffect.episodeNumber
)
}
}

Expand Down Expand Up @@ -192,7 +196,15 @@ private fun Content(
)
if (uiState.isGuestUserBottomSheetVisible) GuestUserLoginBottomSheet(
onDismissClick = contract::onRateEpisodeClick,
onLoginClick = contract::onLoginClick,
onLoginClick = {
uiState.episode?.let {
contract.onLoginClick(
tvShowId = it.tvShowId,
episodeNumber = it.id,
seasonNumber = it.seasonNumber
)
}
},
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.london.presentation.feature.details.tvshow.episode

interface EpisodeDetailsContract {
fun onBackClick()
fun onLoginClick()
fun onLoginClick(tvShowId: Int, seasonNumber: Int, episodeNumber: Int)
fun onRateEpisodeClick()
fun onSelectRatingClick(rating: Int)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ package com.london.presentation.feature.details.tvshow.episode

sealed interface EpisodeDetailsEffect {
data object BackNavigation : EpisodeDetailsEffect
data object LoginNavigation : EpisodeDetailsEffect
data class LoginNavigation(
val tvShowId: Int,
val seasonNumber: Int,
val episodeNumber: Int
) :
EpisodeDetailsEffect

data class CastNavigation(val episodeId: Int) : EpisodeDetailsEffect
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,13 @@ class EpisodeDetailsViewModel @Inject constructor(

override fun onBackClick() = emitEffect(EpisodeDetailsEffect.BackNavigation)

override fun onLoginClick() = emitEffect(EpisodeDetailsEffect.LoginNavigation)
override fun onLoginClick(tvShowId: Int, seasonNumber: Int, episodeNumber: Int) = emitEffect(
EpisodeDetailsEffect.LoginNavigation(
tvShowId = tvShowId,
seasonNumber = seasonNumber,
episodeNumber = episodeNumber
)
)

override fun onRateEpisodeClick() {
tryToExecute(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ import com.london.presentation.utils.toLocalizedNumbers

@Composable
fun TvShowsDetailsScreen(
onNavigateToLogin: () -> Unit,
onNavigateToActorDetails: (Int) -> Unit,
onNavigateToTvShowCategory: (TvShowGenreUi) -> Unit,
onNavigateToLogin: (tvShowId: Int) -> Unit,
onNavigateToActorDetails: (tvShowId: Int) -> Unit,
onNavigateToTvShowCategory: (genre: TvShowGenreUi) -> Unit,
onNavigateToReviews: (tvShowId: Int, mediaType: MediaType) -> Unit,
onNavigateBack: () -> Unit = {},
onNavigateToEpisodeDetails: (tvShowId: Int, episodeNumber: Int, seasonNumber: Int) -> Unit,
Expand Down Expand Up @@ -116,7 +116,7 @@ fun TvShowsDetailsScreen(
currentEffect.category
)

is TvShowDetailsEffect.OnLoginNavigation -> onNavigateToLogin()
is TvShowDetailsEffect.OnLoginNavigation -> onNavigateToLogin(currentEffect.tvShowId)
}
}

Expand Down Expand Up @@ -318,7 +318,7 @@ private fun Content(
)
else if (uiState.isGuestUserBottomSheetVisible) GuestUserLoginBottomSheet(
onDismissClick = tvShowDetailsContract::onRateBottomSheetClick,
onLoginClick = tvShowDetailsContract::onLoginClick,
onLoginClick = { tvShowDetailsContract.onLoginClick(uiState.id) },
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.london.domain.entity.shared.MediaType
import com.london.presentation.shared.genre.TvShowGenreUi

interface TvShowDetailsContract {
fun onLoginClick()
fun onLoginClick(tvShowId: Int)
fun onBackClicked()
fun onRateBottomSheetClick()
fun onCastClicked(tvShowId: Int)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ sealed interface TvShowDetailsEffect {
) : TvShowDetailsEffect

data object NavigateBack : TvShowDetailsEffect
data object OnLoginNavigation : TvShowDetailsEffect
data class OnLoginNavigation(val tvShowId: Int) : TvShowDetailsEffect
data class NavigateToCast(val tvShowId: Int) : TvShowDetailsEffect
data class NavigateToTvShowsByCategoryId(val category: TvShowGenreUi) : TvShowDetailsEffect
data class NavigateToReviews(val tvShowId: Int, val mediaType: MediaType) : TvShowDetailsEffect
Expand Down
Loading
Loading