Skip to content

Commit

Permalink
pass movie item with parcelable
Browse files Browse the repository at this point in the history
  • Loading branch information
DanilaSidukov committed Jun 16, 2023
1 parent c362587 commit d850dbe
Show file tree
Hide file tree
Showing 7 changed files with 202 additions and 195 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id "org.jlleitschuh.gradle.ktlint" version "11.3.1"
id 'kotlin-parcelize'
}

android {
Expand Down
51 changes: 8 additions & 43 deletions app/src/main/java/com/satyamthakur/silver/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,35 +1,22 @@
package com.satyamthakur.silver

import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.BackHandler
import androidx.activity.compose.setContent
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import com.google.gson.Gson
import com.satyamthakur.silver.domain.model.Movie
import com.satyamthakur.silver.domain.model.MovieArgumentType
import com.satyamthakur.silver.domain.model.PopularMovies
import com.satyamthakur.silver.ui.screen.dashboard.DashboardScreen
import com.satyamthakur.silver.ui.screen.dashboard.movie.MovieScreen
import com.satyamthakur.silver.ui.screen.dashboard.viewmodel.DashboardViewModel
Expand All @@ -47,30 +34,18 @@ class MainActivity : ComponentActivity() {
val viewModel = koinViewModel<DashboardViewModel>()
val nowShowingMovies by viewModel.nowShowingMovies.collectAsStateWithLifecycle()
val popularMovies by viewModel.popularMovies.collectAsStateWithLifecycle()
val creditsData by viewModel.credits.collectAsStateWithLifecycle()

SilverTheme {
Surface {
Scaffold(
topBar = {
CenterAlignedTopAppBar(title = {
Text(
text = stringResource(id = R.string.app_name),
style = MaterialTheme.typography.titleMedium.copy(
fontWeight = FontWeight.Black,
fontSize = 16.sp
)
)
})
}

) { paddingValues ->
NavHost(
navController = navController,
startDestination = Screen.Dashboard.route
) {
composable(route = Screen.Dashboard.route) {


DashboardScreen(
onMovieClicked = {},
onSeeMoreNowShowingMovies = {},
Expand All @@ -85,24 +60,14 @@ class MainActivity : ComponentActivity() {
navController = navController
)
}
composable(route = Screen.MovieScreen.route
+ "/{movieItem}",
arguments = listOf(
navArgument("movieItem"){
type = NavType.SerializableType(Movie::class.java)
}
)
){ navBackStackEntry ->

val movieItem = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
navBackStackEntry.arguments?.getSerializable("movieItem", Movie::class.java)
} else {
navBackStackEntry.arguments?.getSerializable("movieItem")
} as Movie

MovieScreen(movie = movieItem, creditsData )
composable(route = Screen.MovieScreen.route){
val movieItem = navController.previousBackStackEntry?.savedStateHandle?.get<Movie>("movie")
MovieScreen(movie = movieItem!!, navController = navController)
}
}
BackHandler(true) {
navController.popBackStack()
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.onStart
Expand Down Expand Up @@ -75,7 +76,7 @@ class MovieRepository(
message = errorParser(t)
)
)
}.distinctUntilChanged().onStart {
}.onStart {
emit(Resource.Loading)
}.flowOn(ioDispatcher)
}
Expand All @@ -96,7 +97,7 @@ class MovieRepository(
message = errorParser(t)
)
)
}.distinctUntilChanged().onStart {
}.onStart {
emit(Resource.Loading)
}.flowOn(ioDispatcher)
}
Expand Down
17 changes: 4 additions & 13 deletions app/src/main/java/com/satyamthakur/silver/domain/model/Movie.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.satyamthakur.silver.domain.model

import android.os.Bundle
import com.google.gson.Gson
import com.google.gson.annotations.JsonAdapter
import com.satyamthakur.silver.utility.JsonNavType
import java.io.Serializable
import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class Movie(
val adult: Boolean,
val backdropPath: String,
Expand All @@ -21,14 +19,7 @@ data class Movie(
val video: Boolean,
val voteAverage: Double,
val voteCount: Int
) : Serializable

class MovieArgumentType: JsonNavType<Movie>(){
override fun fromJsonParse(value: String): Movie = Gson().fromJson(value, Movie::class.java)

override fun Movie.getJsonParse(): String = Gson().toJson(this)

}
) : Parcelable

val PopularMovies: List<Movie> = listOf(
Movie(
Expand Down
Loading

0 comments on commit d850dbe

Please sign in to comment.