diff --git a/.gitignore b/.gitignore index 428a6f63..89e5840b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,5 @@ # gradle -gradle/ -gradlew* +#gradle/ +#gradlew* diff --git a/app/build.gradle b/app/build.gradle index c462488c..f8e4a53d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,18 +15,22 @@ * */ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' -apply plugin: "androidx.navigation.safeargs" -apply plugin: 'kotlin-android-extensions' +plugins { + id 'com.android.application' + id 'kotlin-android' + id 'kotlin-kapt' + id 'kotlin-parcelize' +// id 'kotlin-android-extensions' + id 'androidx.navigation.safeargs.kotlin' + id 'org.jetbrains.kotlin.android' +} android { - compileSdkVersion 30 + compileSdkVersion 33 defaultConfig { applicationId "com.example.android.devbyteviewer" minSdkVersion 19 - targetSdkVersion 30 + targetSdkVersion 33 versionCode 1 versionName "1.0" multiDexEnabled true @@ -41,11 +45,13 @@ android { buildFeatures { dataBinding true + viewBinding true } kotlinOptions { jvmTarget = "1.8" } + namespace 'com.example.android.devbyteviewer' } @@ -55,15 +61,14 @@ dependencies { // Support libraries implementation "androidx.appcompat:appcompat:$version_appcompat" - implementation "androidx.fragment:fragment:$version_fragment" + implementation "androidx.fragment:fragment-ktx:$version_fragment" implementation "androidx.constraintlayout:constraintlayout:$version_constraint_layout" - // Android KTX - implementation "androidx.core:core-ktx:$version_core" - // Navigation - implementation "android.arch.navigation:navigation-fragment-ktx:$version_navigation" - implementation "android.arch.navigation:navigation-ui-ktx:$version_navigation" +// implementation "android.arch.navigation:navigation-fragment-ktx:$version_navigation" +// implementation "android.arch.navigation:navigation-ui-ktx:$version_navigation" + implementation "androidx.navigation:navigation-fragment-ktx:$version_navigation" + implementation "androidx.navigation:navigation-ui-ktx:$version_navigation" // Coroutines for getting off the UI thread implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version_kotlin_coroutines" @@ -82,14 +87,25 @@ dependencies { implementation "joda-time:joda-time:$version_joda" // ViewModel and LiveData (arch components) - implementation "androidx.lifecycle:lifecycle-extensions:$version_lifecycle_extensions" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" + + // Saved state module for ViewModel + implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" + + // Annotation processor + kapt "androidx.lifecycle:lifecycle-common-java8:$version_lifecycle_extensions" + // Logging implementation "com.jakewharton.timber:timber:$version_timber" // Glide for images implementation "com.github.bumptech.glide:glide:$version_glide" + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' + kapt "com.github.bumptech.glide:compiler:$version_glide" // Room database implementation "androidx.room:room-runtime:$version_room" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5572a6be..a260a3d8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,8 +17,7 @@ --> + xmlns:tools="http://schemas.android.com/tools"> @@ -31,7 +30,8 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning"> - + diff --git a/app/src/main/java/com/example/android/devbyteviewer/util/AppNameGlideModule.kt b/app/src/main/java/com/example/android/devbyteviewer/util/AppNameGlideModule.kt new file mode 100644 index 00000000..8dd5ae2a --- /dev/null +++ b/app/src/main/java/com/example/android/devbyteviewer/util/AppNameGlideModule.kt @@ -0,0 +1,16 @@ +package com.example.android.devbyteviewer.util + +import android.content.Context +import com.bumptech.glide.GlideBuilder +import com.bumptech.glide.annotation.GlideModule +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.module.AppGlideModule +import com.bumptech.glide.request.RequestOptions + +@GlideModule +class AppNameGlideModule: AppGlideModule() { + override fun applyOptions(context: Context, builder: GlideBuilder) { + super.applyOptions(context, builder) + builder.apply { RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL) } + } +} diff --git a/app/src/main/java/com/example/android/devbyteviewer/util/BindingAdapters.kt b/app/src/main/java/com/example/android/devbyteviewer/util/BindingAdapters.kt index 46c0a6c5..28834321 100644 --- a/app/src/main/java/com/example/android/devbyteviewer/util/BindingAdapters.kt +++ b/app/src/main/java/com/example/android/devbyteviewer/util/BindingAdapters.kt @@ -20,7 +20,6 @@ package com.example.android.devbyteviewer.util import android.view.View import android.widget.ImageView import androidx.databinding.BindingAdapter -import com.bumptech.glide.Glide /** * Binding adapter used to hide the spinner once data is available @@ -35,5 +34,5 @@ fun goneIfNotNull(view: View, it: Any?) { */ @BindingAdapter("imageUrl") fun setImageUrl(imageView: ImageView, url: String) { - Glide.with(imageView.context).load(url).into(imageView) + GlideApp.with(imageView.context).load(url).into(imageView) } diff --git a/app/src/main/java/com/example/android/devbyteviewer/viewmodels/DevByteViewModel.kt b/app/src/main/java/com/example/android/devbyteviewer/viewmodels/DevByteViewModel.kt index 24ab7016..1cd14a8c 100644 --- a/app/src/main/java/com/example/android/devbyteviewer/viewmodels/DevByteViewModel.kt +++ b/app/src/main/java/com/example/android/devbyteviewer/viewmodels/DevByteViewModel.kt @@ -70,7 +70,7 @@ class DevByteViewModel(application: Application) : AndroidViewModel(application) * Factory for constructing DevByteViewModel with parameter */ class Factory(val app: Application) : ViewModelProvider.Factory { - override fun create(modelClass: Class): T { + override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(DevByteViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return DevByteViewModel(app) as T diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6b5d7f25..d652850f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -18,7 +18,7 @@ -