diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index fb7f4a8..b589d56 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 87ecdc6..8bba0c4 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -7,7 +7,7 @@
-
+
@@ -16,7 +16,6 @@
-
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..103e00c
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 0000000..0fc3113
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index c8382d2..bb9c992 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
@@ -10,7 +9,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 6814918..09623dc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,12 +6,12 @@ plugins {
}
android {
- compileSdk 32
+ compileSdk 33
defaultConfig {
applicationId "com.farhan.tanvir.androidcleanarchitecture"
minSdk 21
- targetSdk 32
+ targetSdk 34
versionCode 1
versionName "1.0"
@@ -20,6 +20,7 @@ android {
useSupportLibrary true
}
buildConfigField("String","BASE_URL",BASE_URL)
+ buildConfigField("String","API_KEY",API_KEY)
buildConfigField("String","POSTER_URL",POSTER_URL)
}
@@ -52,20 +53,20 @@ android {
dependencies {
- implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.core:core-ktx:1.10.1'
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
- implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0'
- implementation 'androidx.activity:activity-compose:1.4.0'
+ implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
+ implementation 'androidx.activity:activity-compose:1.7.2'
implementation project(path: ':data')
implementation project(path: ':domain')
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
- implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
@@ -73,6 +74,7 @@ dependencies {
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"
implementation 'androidx.hilt:hilt-navigation-compose:1.0.0'
+ implementation 'androidx.navigation:navigation-compose:2.6.0'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
@@ -80,13 +82,13 @@ dependencies {
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")
//GSON
- implementation 'com.google.code.gson:gson:2.8.9'
+ implementation 'com.google.code.gson:gson:2.10.1'
// Coil
- implementation("io.coil-kt:coil-compose:1.4.0")
+ implementation("io.coil-kt:coil-compose:2.3.0")
// System UI Controller - Accompanist
- implementation "com.google.accompanist:accompanist-systemuicontroller:0.17.0"
+ implementation "com.google.accompanist:accompanist-systemuicontroller:0.30.1"
//ROOM DB
implementation "androidx.room:room-runtime:$room_version"
@@ -95,7 +97,7 @@ dependencies {
implementation "androidx.room:room-paging:$room_version"
// Paging 3.0
- implementation 'androidx.paging:paging-compose:1.0.0-alpha14'
+ implementation 'androidx.paging:paging-compose:3.2.0-rc01'
}
diff --git a/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/details/MovieDetailsContent.kt b/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/details/MovieDetailsContent.kt
index d97b989..d874c03 100644
--- a/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/details/MovieDetailsContent.kt
+++ b/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/details/MovieDetailsContent.kt
@@ -10,9 +10,12 @@ import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
+import coil.compose.AsyncImage
import coil.compose.rememberImagePainter
+import coil.request.ImageRequest
import coil.size.Scale
import com.farhan.tanvir.androidcleanarchitecture.BuildConfig
import com.farhan.tanvir.androidcleanarchitecture.presentation.components.RatingComponent
@@ -32,12 +35,13 @@ fun MovieDetailsContent(movie: Movie) {
.fillMaxWidth()
.verticalScroll(scrollState)
) {
- Image(
- painter = rememberImagePainter(
- data = BuildConfig.POSTER_URL + movie.posterPath, builder = {
- crossfade(true)
- scale(Scale.FIT)
- }),
+ AsyncImage(
+ model = ImageRequest.Builder(LocalContext.current)
+ .data(
+ BuildConfig.POSTER_URL + movie.posterPath
+ )
+ .crossfade(true)
+ .build(),
contentDescription = null,
modifier = Modifier
.fillMaxWidth()
diff --git a/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/HomeScreen.kt b/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/HomeScreen.kt
index 4f66464..f6273da 100644
--- a/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/HomeScreen.kt
+++ b/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/HomeScreen.kt
@@ -31,7 +31,7 @@ fun HomeScreen(navController: NavHostController, viewModel: HomeViewModel = hilt
topBar = {
HomeTopBar()
},
- content = {
+ content = { it
MovieListContent(allMovies = allMovies, navController = navController)
}
)
diff --git a/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/MovieList.kt b/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/MovieList.kt
index e7d5658..f3b7073 100644
--- a/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/MovieList.kt
+++ b/app/src/main/java/com/farhan/tanvir/androidcleanarchitecture/presentation/screen/home/MovieList.kt
@@ -1,6 +1,5 @@
package com.farhan.tanvir.androidcleanarchitecture.presentation.screen.home
-import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
@@ -11,13 +10,15 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import androidx.paging.compose.LazyPagingItems
-import androidx.paging.compose.items
-import coil.compose.rememberImagePainter
-import coil.size.Scale
+import androidx.paging.compose.itemContentType
+import androidx.paging.compose.itemKey
+import coil.compose.AsyncImage
+import coil.request.ImageRequest
import com.farhan.tanvir.androidcleanarchitecture.BuildConfig
import com.farhan.tanvir.androidcleanarchitecture.presentation.components.RatingComponent
import com.farhan.tanvir.androidcleanarchitecture.presentation.navigation.Screen
@@ -26,15 +27,16 @@ import com.farhan.tanvir.domain.model.Movie
@Composable
fun MovieListContent(allMovies: LazyPagingItems, navController: NavHostController) {
+
LazyColumn(
contentPadding = PaddingValues(horizontal = 8.dp, vertical = 4.dp)
) {
items(
- items = allMovies,
- key = { movie ->
- movie.pk
- }
- ) { movie ->
+ contentType = allMovies.itemContentType { "MyPagingItems" },
+ key = allMovies.itemKey { it },
+ count = allMovies.itemCount,
+ ) { index ->
+ val movie = allMovies[index]
if (movie != null) {
MovieListItem(movie = movie, navController = navController)
}
@@ -62,26 +64,29 @@ fun MovieListItem(movie: Movie, navController: NavHostController) {
verticalAlignment = Alignment.CenterVertically
) {
movie.posterPath?.let {
- Image(
+ AsyncImage(
modifier = Modifier
.padding(
end = 4.dp,
)
.width(120.dp),
- painter = rememberImagePainter(
- data = BuildConfig.POSTER_URL + movie.posterPath, builder = {
- crossfade(true)
- scale(Scale.FILL)
- }),
+ model = ImageRequest.Builder(LocalContext.current)
+ .data(
+ BuildConfig.POSTER_URL + movie.posterPath
+ )
+ .crossfade(true)
+ .build(),
contentDescription = null,
contentScale = ContentScale.Fit
)
}
- Column(Modifier
- .height(IntrinsicSize.Max)
- .padding(
- end = 2.dp,
- )) {
+ Column(
+ Modifier
+ .height(IntrinsicSize.Max)
+ .padding(
+ end = 2.dp,
+ )
+ ) {
movie.title?.let { Text(text = it, style = MaterialTheme.typography.body1) }
Spacer(modifier = Modifier.height(4.dp))
movie.overview?.let {
diff --git a/build.gradle b/build.gradle
index efe752b..15dbd57 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,9 +1,9 @@
buildscript {
ext {
- compose_version = '1.1.0'
- hilt_version = "2.40.5"
+ compose_version = '1.4.3'
+ hilt_version = "2.46"
coroutine_version="1.6.0"
- room_version="2.4.1"
+ room_version="2.5.2"
}
dependencies {
@@ -13,7 +13,7 @@ buildscript {
plugins {
id 'com.android.application' version '7.1.0' apply false
id 'com.android.library' version '7.1.0' apply false
- id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
+ id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}
task clean(type: Delete) {
diff --git a/data/build.gradle b/data/build.gradle
index d2051d5..4945954 100644
--- a/data/build.gradle
+++ b/data/build.gradle
@@ -5,15 +5,16 @@ plugins {
}
android {
- compileSdk 32
+ compileSdk 33
defaultConfig {
minSdk 21
- targetSdk 32
+ targetSdk 34
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
buildConfigField("String","API_KEY",API_KEY)
+ buildConfigField("String","POSTER_URL",POSTER_URL)
}
buildTypes {
@@ -33,21 +34,21 @@ android {
dependencies {
- implementation 'androidx.core:core-ktx:1.7.0'
- implementation 'androidx.appcompat:appcompat:1.4.1'
- implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.core:core-ktx:1.10.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'com.google.android.material:material:1.9.0'
implementation project(path: ':domain')
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
//Coroutines
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
//ROOM DB
implementation "androidx.room:room-runtime:$room_version"
@@ -56,7 +57,7 @@ dependencies {
implementation "androidx.room:room-paging:$room_version"
// Paging 3.0
- implementation 'androidx.paging:paging-compose:1.0.0-alpha14'
+ implementation 'androidx.paging:paging-compose:3.2.0-rc01'
}
\ No newline at end of file
diff --git a/domain/build.gradle b/domain/build.gradle
index ec5d872..4c44924 100644
--- a/domain/build.gradle
+++ b/domain/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
android {
- compileSdk 32
+ compileSdk 33
defaultConfig {
minSdk 21
@@ -31,23 +31,23 @@ android {
dependencies {
- implementation 'androidx.core:core-ktx:1.7.0'
- implementation 'androidx.appcompat:appcompat:1.4.1'
- implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.core:core-ktx:1.10.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'com.google.android.material:material:1.9.0'
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
//Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutine_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version"
//GSON
- implementation 'com.google.code.gson:gson:2.8.9'
+ implementation 'com.google.code.gson:gson:2.9.0'
//ROOM DB
implementation "androidx.room:room-ktx:$room_version"
// Paging 3.0
- implementation 'androidx.paging:paging-compose:1.0.0-alpha14'
+ implementation 'androidx.paging:paging-compose:3.2.0-rc01'
}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index cfea692..1527d1a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -21,6 +21,6 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
-API_KEY="API_KEY"
-BASE_URL="BASE_URL"
-POSTER_URL = "POSTER_URL"
\ No newline at end of file
+API_KEY=""
+BASE_URL="https://api.themoviedb.org/3/"
+POSTER_URL="https://image.tmdb.org/t/p/original"
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 2ee05d1..3f09d9f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Jan 28 18:20:57 JST 2022
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME