Skip to content

Commit

Permalink
Dashboard Integration WIP(2)
Browse files Browse the repository at this point in the history
  • Loading branch information
gab-stargazer committed Jun 7, 2023
1 parent 807bf9c commit c0ae033
Show file tree
Hide file tree
Showing 33 changed files with 538 additions and 174 deletions.
41 changes: 25 additions & 16 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@ android {
namespace 'com.satyamthakur.silver'
compileSdk 33

def Properties properties = new Properties()
properties.load(project.rootProject.file("local.properties").newDataInputStream())

defaultConfig {
applicationId "com.satyamthakur.silver"
minSdk 26
targetSdk 33
versionCode 1
versionName "1.0"

resValue "string", "api_key", properties.getProperty("api.key", "")
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
Expand All @@ -36,6 +40,7 @@ android {
}
buildFeatures {
compose true
buildConfig true
}
composeOptions {
kotlinCompilerExtensionVersion '1.4.6'
Expand Down Expand Up @@ -72,10 +77,10 @@ dependencies {
debugImplementation 'androidx.compose.ui:ui-test-manifest'

// Sys UI Controller - Navigation Animation
def accompanistVersion = "0.31.2-alpha"
implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanistVersion"
implementation "com.google.accompanist:accompanist-navigation-animation:$accompanistVersion"
implementation "com.google.accompanist:accompanist-flowlayout:$accompanistVersion"
def accompanist_version = "0.31.2-alpha"
implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanist_version"
implementation "com.google.accompanist:accompanist-navigation-animation:$accompanist_version"
implementation "com.google.accompanist:accompanist-flowlayout:$accompanist_version"

// Logging Interceptor
implementation "com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.6"
Expand All @@ -84,24 +89,28 @@ dependencies {
implementation "androidx.compose.material:material-icons-extended"

// Koin
implementation "io.insert-koin:koin-android:3.4.1"
implementation "io.insert-koin:koin-androidx-compose:3.4.1"
def koin_version = "3.4.1"
implementation "io.insert-koin:koin-android:$koin_version"
implementation "io.insert-koin:koin-androidx-compose:$koin_version"
testImplementation "io.insert-koin:koin-test:$koin_version"
testImplementation "io.insert-koin:koin-test-junit4:$koin_version"

// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
def retrofit_version = "2.9.0"
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"

// ViewModel - Lifecycle
def lifecycleVersion = "2.6.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycleVersion"
def lifecycle_version = "2.6.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

// Coroutines
def coroutinesVersion = "1.7.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion"
def coroutines_version = "1.7.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"


// Coil
Expand Down
13 changes: 6 additions & 7 deletions app/src/main/java/com/satyamthakur/silver/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,35 @@ package com.satyamthakur.silver
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import com.satyamthakur.silver.ui.screen.dashboard.DashboardScreen
import com.satyamthakur.silver.ui.screen.dashboard.viewmodel.DashboardViewModel
import com.satyamthakur.silver.ui.theme.SilverTheme
import org.koin.androidx.compose.koinViewModel

@OptIn(ExperimentalAnimationApi::class)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberAnimatedNavController()
SilverTheme {
Surface(
modifier = Modifier.fillMaxSize(),
modifier = Modifier.fillMaxSize()
) {
val viewModel = koinViewModel<DashboardViewModel>()
val nowShowingMovies by viewModel.nowShowingMovies.collectAsStateWithLifecycle()
val popularMovies by viewModel.popularMovies.collectAsStateWithLifecycle()
DashboardScreen(
onMovieClicked = {},
nowShowingMovies = nowShowingMovies,
onNowShowingMoviesRetry = {},
onSeeMoreNowShowingMovies = {},
popularMovies = popularMovies,
onSeeMorePopularMoviesClicked = {},
airingMovies = popularMovies,
onSeeMoreAiringMoviesClicked = {}
onPopularMoviesRetry = {}
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ class SilverApplication : Application() {
modules(listOf(networkModule, repositoryModule, viewModelModule))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ data class ErrorDTO(
val statusMessage: String,

@SerializedName("success")
val success: Boolean,
)
val success: Boolean
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ data class GenericResultDTO<T>(
val page: Int,

@SerializedName("results")
val results: T,
val results: T
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ data class MovieDTO(
@SerializedName("adult")
val adult: Boolean,

@SerializedName("backdrop_path")
val backdropPath: String,

@SerializedName("genre_ids")
val genresID: List<Int>,

Expand Down Expand Up @@ -41,5 +44,5 @@ data class MovieDTO(
val voteAverage: Double,

@SerializedName("vote_count")
val voteCount: Int,
val voteCount: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@ import retrofit2.http.Query

interface MovieEndpoint {

@GET("movie/now_playing")
suspend fun getNowShowingMovies(
@Query("page") page: Int = 1,
@Query("language") language: String = "en-US"
): GenericResultDTO<List<MovieDTO>>

@GET("movie/popular")
suspend fun getPopularMovies(
@Query("page") page: Int = 1,
@Query("language") language: String = "en-US"
): GenericResultDTO<List<MovieDTO>>

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ import com.satyamthakur.silver.utility.Resource
import kotlinx.coroutines.flow.Flow

interface IMovieRepository {
fun getNowShowingMovies(): Flow<Resource<List<Movie>>>
fun getPopularMovies(): Flow<Resource<List<Movie>>>
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,26 @@ class MovieRepository(
private val errorParser: ErrorParser,
private val ioDispatcher: CoroutineContext = Dispatchers.IO
) : IMovieRepository {
override fun getNowShowingMovies(): Flow<Resource<List<Movie>>> {
return flow<Resource<List<Movie>>> {
val apiResult = movieApiService.getNowShowingMovies()
emit(Resource.Success(data = apiResult.results.map(MovieDTO::asMovie)))
}.catch { t ->
Timber.w(t)
emit(
Resource.Error(
data = null,
message = errorParser(t)
)
)
}.onStart {
emit(Resource.Loading)
}.flowOn(ioDispatcher)
}

override fun getPopularMovies(): Flow<Resource<List<Movie>>> {
return flow<Resource<List<Movie>>> {
Timber.d("Get Popular Movies called")
val apiResult = movieApiService.getPopularMovies()
Timber.d("API returned ${apiResult.results.size} movies")
emit(Resource.Success(data = apiResult.results.map(MovieDTO::asMovie)))
}.catch { t ->
Timber.w(t)
Expand All @@ -39,4 +53,4 @@ class MovieRepository(
emit(Resource.Loading)
}.flowOn(ioDispatcher)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.satyamthakur.silver.domain.model.Movie

fun MovieDTO.asMovie() = Movie(
adult = adult,
backdropPath = backdropPath,
genresID = genresID,
id = id,
originalLanguage = originalLanguage,
Expand All @@ -17,4 +18,4 @@ fun MovieDTO.asMovie() = Movie(
video = video,
voteAverage = voteAverage,
voteCount = voteCount
)
)
10 changes: 10 additions & 0 deletions app/src/main/java/com/satyamthakur/silver/domain/model/Movie.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.satyamthakur.silver.domain.model

data class Movie(
val adult: Boolean,
val backdropPath: String,
val genresID: List<Int>,
val id: Int,
val originalLanguage: String,
Expand All @@ -19,6 +20,7 @@ data class Movie(
val PopularMovies: List<Movie> = listOf(
Movie(
adult = false,
backdropPath = "/fgw4rFs4XMWdJTWp1eMacHKQqbZ.jpg",
genresID = listOf(
28,
53,
Expand All @@ -38,6 +40,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/2klQ1z1fcHGgQPevbEQdkCnzyuS.jpg",
genresID = listOf(16, 10751, 12, 14, 35),
id = 502356,
originalLanguage = "en",
Expand All @@ -53,6 +56,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/4t0oBFrJyweYPt0hocW6RUa0b6H.jpg",
genresID = listOf(28, 80, 53),
id = 385687,
originalLanguage = "en",
Expand All @@ -68,6 +72,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/2I5eBh98Q4aPq8WdQrHdTC8ARhY.jpg",
genresID = listOf(12, 10751, 14, 10749),
id = 447277,
originalLanguage = "en",
Expand All @@ -83,6 +88,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/1IM8i8HiomFC4y6NRyBuDrHJWg3.jpg",
genresID = listOf(28, 12, 878),
id = 640146,
originalLanguage = "en",
Expand All @@ -98,6 +104,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/aAgGrfBwna1nO4M2USxwFgK5O0t.jpg",
genresID = listOf(28, 10752),
id = 840326,
originalLanguage = "fi",
Expand All @@ -113,6 +120,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/94TIUEhuwv8PhdIADEvSuwPljS5.jpg",
genresID = listOf(28, 12, 16, 878),
id = 569094,
originalLanguage = "en",
Expand All @@ -128,6 +136,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/m8JTwHFwX7I7JY5fPe4SjqejWag.jpg",
genresID = listOf(53, 27),
id = 713704,
originalLanguage = "en",
Expand All @@ -143,6 +152,7 @@ val PopularMovies: List<Movie> = listOf(
),
Movie(
adult = false,
backdropPath = "/5YZbUmjbMa3ClvSW1Wj3D6XGolb.jpg",
genresID = listOf(878, 12, 28),
id = 76600,
originalLanguage = "en",
Expand Down
Loading

0 comments on commit c0ae033

Please sign in to comment.