diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..61a9130
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 5cd135a..9bba60d 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -14,6 +14,7 @@
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..372d749
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7bfef59..d5d35ec 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 060cbbf..b2eb137 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,19 +1,19 @@
-apply plugin: 'com.android.application'
-
-apply plugin: 'kotlin-android'
-
-apply plugin: 'kotlin-android-extensions'
-
-apply plugin: 'kotlin-kapt'
-apply plugin: 'de.mannodermaus.android-junit5'
+plugins {
+ id 'com.android.application'
+ id 'kotlin-android'
+ id 'kotlin-android-extensions'
+ id 'kotlin-kapt'
+ id 'de.mannodermaus.android-junit5'
+ id 'dagger.hilt.android.plugin'
+}
android {
- compileSdkVersion 29
- buildToolsVersion "29.0.2"
+ compileSdkVersion 30
+ buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.githubfirebaseissue"
minSdkVersion 21
- targetSdkVersion 29
+ targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -49,7 +49,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0'
api "androidx.appcompat:appcompat:$appcompat_version"
api "androidx.constraintlayout:constraintlayout:$androidx_constraint_layout_version"
@@ -66,7 +66,7 @@ dependencies {
api "com.squareup.retrofit2:converter-gson:$retrofit_version"
api "com.squareup.retrofit2:adapter-rxjava:$retrofit_version"
api 'com.squareup.retrofit2:adapter-rxjava2:2.7.1'
- api "com.squareup.okhttp3:okhttp:4.3.1"
+ api "com.squareup.okhttp3:okhttp:4.6.0"
api "com.squareup.okhttp3:logging-interceptor:$logging_interceptor_version"
api "com.github.bumptech.glide:glide:$glide_version"
@@ -87,7 +87,7 @@ dependencies {
api "com.google.code.gson:gson:$gson_version"
//shimmer
- api 'com.facebook.shimmer:shimmer:0.1.0@aar'
+ api 'com.facebook.shimmer:shimmer:0.5.0@aar'
// dagger
implementation "com.google.dagger:dagger:$dagger_version"
@@ -102,11 +102,15 @@ dependencies {
testImplementation "com.jraska.livedata:testing-ktx:$jraska_version"
testImplementation "junit:junit:$junit_version"
testImplementation "org.mockito:mockito-inline:$mockito_version"
- testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.2'
+ testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.1'
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
testImplementation "org.hamcrest:hamcrest-library:$hamcrest_version"
testImplementation "com.google.truth:truth:1.0"
+ //hilt
+ implementation "com.google.dagger:hilt-android:$hilt_version"
+ kapt "com.google.dagger:hilt-compiler:$hilt_version"
+
//Spek
testImplementation 'org.junit.platform:junit-platform-engine:1.6.2'
testImplementation 'org.jetbrains.spek:spek-api:1.1.5'
diff --git a/app/src/main/java/com/example/githubfirebaseissue/GithubApplication.kt b/app/src/main/java/com/example/githubfirebaseissue/GithubApplication.kt
index 1f38a7f..7d1cb88 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/GithubApplication.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/GithubApplication.kt
@@ -1,13 +1,8 @@
package com.example.githubfirebaseissue
-import com.example.githubfirebaseissue.di.component.DaggerApplicationComponent
-import dagger.android.AndroidInjector
-import dagger.android.DaggerApplication
+import android.app.Application
+import dagger.hilt.android.HiltAndroidApp
-class GithubApplication : DaggerApplication() {
-
- override fun applicationInjector(): AndroidInjector {
- return DaggerApplicationComponent.factory().create(this)
- }
-}
\ No newline at end of file
+@HiltAndroidApp
+class GithubApplication : Application()
diff --git a/app/src/main/java/com/example/githubfirebaseissue/base/BaseActivity.kt b/app/src/main/java/com/example/githubfirebaseissue/base/BaseActivity.kt
index 25ce58f..4becb31 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/base/BaseActivity.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/base/BaseActivity.kt
@@ -1,15 +1,14 @@
package com.example.githubfirebaseissue.base
import android.os.Bundle
-import dagger.android.AndroidInjection
+import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
-import dagger.android.support.DaggerAppCompatActivity
+import dagger.hilt.android.AndroidEntryPoint
-abstract class BaseActivity : DaggerAppCompatActivity() {
+abstract class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
- AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
setContentView(getLayoutRes())
}
diff --git a/app/src/main/java/com/example/githubfirebaseissue/base/BaseFragment.kt b/app/src/main/java/com/example/githubfirebaseissue/base/BaseFragment.kt
index a6337c6..b2fc2a2 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/base/BaseFragment.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/base/BaseFragment.kt
@@ -10,7 +10,6 @@ import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.example.githubfirebaseissue.R
-import dagger.android.support.AndroidSupportInjection
import okio.IOException
import retrofit2.HttpException
@@ -18,7 +17,6 @@ import retrofit2.HttpException
abstract class BaseFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
- AndroidSupportInjection.inject(this)
super.onCreate(savedInstanceState)
}
diff --git a/app/src/main/java/com/example/githubfirebaseissue/base/CustomViewModelFactory.kt b/app/src/main/java/com/example/githubfirebaseissue/base/CustomViewModelFactory.kt
deleted file mode 100644
index a08bd78..0000000
--- a/app/src/main/java/com/example/githubfirebaseissue/base/CustomViewModelFactory.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.example.githubfirebaseissue.base
-
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
-import javax.inject.Inject
-import javax.inject.Provider
-
-class CustomViewModelFactory @Inject constructor(
-
- private val creators: Map, @JvmSuppressWildcards Provider>
-) : ViewModelProvider.Factory {
-
- @Suppress("UNCHECKED_CAST")
- override fun create(modelClass: Class): T {
- var creator: Provider? = creators[modelClass]
- if (creator == null) {
- for ((key, value) in creators) {
- if (modelClass.isAssignableFrom(key)) {
- creator = value
- break
- }
- }
- }
- requireNotNull(creator) { "unknown model class $modelClass" }
- try {
- return creator.get() as T
- } catch (e: Exception) {
- throw RuntimeException(e)
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/common/BaseSchedulerProvider.kt b/app/src/main/java/com/example/githubfirebaseissue/common/BaseSchedulerProvider.kt
index cb16cec..e74a67f 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/common/BaseSchedulerProvider.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/common/BaseSchedulerProvider.kt
@@ -3,13 +3,14 @@ package com.example.githubfirebaseissue.common
import io.reactivex.Scheduler
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
+import javax.inject.Inject
interface RxScheduler {
val io: Scheduler
val main: Scheduler
}
-class BaseSchedulerProvider: RxScheduler {
+class BaseSchedulerProvider @Inject constructor() : RxScheduler {
override val io: Scheduler
get() = Schedulers.io()
override val main: Scheduler
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/component/ApplicationComponent.kt b/app/src/main/java/com/example/githubfirebaseissue/di/component/ApplicationComponent.kt
index acca77e..3d8974d 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/di/component/ApplicationComponent.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/di/component/ApplicationComponent.kt
@@ -1,24 +1,9 @@
package com.example.githubfirebaseissue.di.component
-import com.example.githubfirebaseissue.GithubApplication
import com.example.githubfirebaseissue.di.module.ApiModule
-import com.example.githubfirebaseissue.di.module.ActivityBindingModule
-import com.example.githubfirebaseissue.di.module.ViewModelModule
-import com.example.githubfirebaseissue.di.scope.AppScope
import dagger.Component
-import dagger.android.AndroidInjector
-import dagger.android.support.AndroidSupportInjectionModule
+import javax.inject.Singleton
-@AppScope
-@Component(
- modules = [
- AndroidSupportInjectionModule::class,
- ActivityBindingModule::class,
- ViewModelModule::class,
- ApiModule::class]
-)
-interface ApplicationComponent : AndroidInjector {
-
- @Component.Factory
- abstract class Builder: AndroidInjector.Factory
-}
\ No newline at end of file
+@Singleton
+@Component(modules = [ApiModule::class])
+interface ApplicationComponent
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/module/ActivityBindingModule.kt b/app/src/main/java/com/example/githubfirebaseissue/di/module/ActivityBindingModule.kt
deleted file mode 100644
index ad68bf2..0000000
--- a/app/src/main/java/com/example/githubfirebaseissue/di/module/ActivityBindingModule.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.example.githubfirebaseissue.di.module
-
-import com.example.githubfirebaseissue.ui.activity.MainActivity
-import dagger.Module
-import dagger.android.ContributesAndroidInjector
-
-
-@Module
-internal abstract class ActivityBindingModule {
-
- @ContributesAndroidInjector(modules = [FragmentProviderModule::class])
- internal abstract fun contributeMainActivity(): MainActivity
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/module/ApiModule.kt b/app/src/main/java/com/example/githubfirebaseissue/di/module/ApiModule.kt
index 421fd85..1e4ecef 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/di/module/ApiModule.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/di/module/ApiModule.kt
@@ -4,34 +4,37 @@ import com.example.githubfirebaseissue.api.ApiConstant
import com.example.githubfirebaseissue.api.GithubApi
import com.example.githubfirebaseissue.common.BaseSchedulerProvider
import com.example.githubfirebaseissue.common.RxScheduler
+import dagger.Binds
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
-
+@InstallIn(SingletonComponent::class)
@Module(includes = [InterceptorModule::class, RepositoryModule::class])
-class ApiModule {
+abstract class ApiModule {
- @Provides
- fun provideRetrofit(client: OkHttpClient): Retrofit {
- return Retrofit.Builder()
- .baseUrl(ApiConstant.GITHUB_BASE_URL)
- .addConverterFactory(GsonConverterFactory.create())
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
- .client(client)
- .build()
- }
+ companion object {
+ @Provides
+ fun provideRetrofit(client: OkHttpClient): Retrofit {
+ return Retrofit.Builder()
+ .baseUrl(ApiConstant.GITHUB_BASE_URL)
+ .addConverterFactory(GsonConverterFactory.create())
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .client(client)
+ .build()
+ }
- @Provides
- fun provideApiInterface(retrofit: Retrofit): GithubApi {
- return retrofit.create(GithubApi::class.java)
+ @Provides
+ fun provideApiInterface(retrofit: Retrofit): GithubApi {
+ return retrofit.create(GithubApi::class.java)
+ }
}
- @Provides
- fun provideRxScheduler(): RxScheduler {
- return BaseSchedulerProvider()
- }
+ @Binds
+ abstract fun provideRxScheduler(scheduler: BaseSchedulerProvider): RxScheduler
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/module/FragmentProviderModule.kt b/app/src/main/java/com/example/githubfirebaseissue/di/module/FragmentProviderModule.kt
deleted file mode 100644
index eba84c7..0000000
--- a/app/src/main/java/com/example/githubfirebaseissue/di/module/FragmentProviderModule.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.example.githubfirebaseissue.di.module
-
-import com.example.githubfirebaseissue.ui.fragment.CommentsFragment
-import com.example.githubfirebaseissue.ui.fragment.IssuesFragment
-import dagger.Module
-import dagger.android.ContributesAndroidInjector
-
-@Module
-abstract class FragmentProviderModule {
-
- @ContributesAndroidInjector
- abstract fun provideIssueFragment(): IssuesFragment
-
- @ContributesAndroidInjector
- abstract fun provideCommentFragment(): CommentsFragment
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/module/InterceptorModule.kt b/app/src/main/java/com/example/githubfirebaseissue/di/module/InterceptorModule.kt
index 41e4bd3..67e7c65 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/di/module/InterceptorModule.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/di/module/InterceptorModule.kt
@@ -1,10 +1,10 @@
package com.example.githubfirebaseissue.di.module
+import android.content.Context
import android.util.Log
import com.example.githubfirebaseissue.GithubApplication
import com.example.githubfirebaseissue.api.ApiConstant.Companion.HEADER_CACHE_CONTROL
import com.example.githubfirebaseissue.api.ApiConstant.Companion.HEADER_PRAGMA
-import com.example.githubfirebaseissue.di.scope.AppScope
import dagger.Module
import dagger.Provides
import okhttp3.*
@@ -12,16 +12,19 @@ import okhttp3.logging.HttpLoggingInterceptor
import java.io.File
import okhttp3.CacheControl
import com.example.githubfirebaseissue.helper.ApplicationUtil
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import java.util.concurrent.TimeUnit
@Module
+@InstallIn(SingletonComponent::class)
class InterceptorModule {
@Provides
- @AppScope
fun provideOkHttpClient(
- context: GithubApplication,
+ @ApplicationContext context: Context,
interceptor: HttpLoggingInterceptor
): OkHttpClient {
return OkHttpClient.Builder()
@@ -34,7 +37,6 @@ class InterceptorModule {
@Provides
- @AppScope
fun provideLoggingInterceptor(): HttpLoggingInterceptor {
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
@@ -42,7 +44,7 @@ class InterceptorModule {
}
- private fun provideCache(context: GithubApplication): Cache? {
+ private fun provideCache(context: Context): Cache? {
var cache: Cache? = null
try {
cache = Cache(File(context.cacheDir, "http-cache"), 10 * 1024 * 1024)
@@ -53,7 +55,7 @@ class InterceptorModule {
}
private fun provideOfflineCacheInterceptor(
- context: GithubApplication,
+ context: Context,
chain: Interceptor.Chain
): Response {
var request = chain.request()
@@ -74,7 +76,7 @@ class InterceptorModule {
}
private fun provideCacheInterceptor(
- context: GithubApplication,
+ context: Context,
chain: Interceptor.Chain
): Response {
val response = chain.proceed(chain.request())
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/module/RepositoryModule.kt b/app/src/main/java/com/example/githubfirebaseissue/di/module/RepositoryModule.kt
index 5a22a5f..a384543 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/di/module/RepositoryModule.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/di/module/RepositoryModule.kt
@@ -1,24 +1,22 @@
package com.example.githubfirebaseissue.di.module
-import com.example.githubfirebaseissue.api.GithubApi
import com.example.githubfirebaseissue.repository.GithubRepository
import com.example.githubfirebaseissue.repository.GithubRepositoryImpl
import com.example.githubfirebaseissue.usecase.GetFireBaseIssueUseCase
import com.example.githubfirebaseissue.usecase.GetFireBaseIssueUseCaseImpl
+import dagger.Binds
import dagger.Module
-import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
@Module
-class RepositoryModule {
+@InstallIn(SingletonComponent::class)
+abstract class RepositoryModule {
- @Provides
- fun provideGithubFirebaseUseCase(githubRepository: GithubRepository): GetFireBaseIssueUseCase {
- return GetFireBaseIssueUseCaseImpl(githubRepository)
- }
+ @Binds
+ abstract fun provideGithubFirebaseUseCase(useCaseImpl: GetFireBaseIssueUseCaseImpl): GetFireBaseIssueUseCase
- @Provides
- fun provideGithubRepository(githubApi: GithubApi): GithubRepository {
- return GithubRepositoryImpl(githubApi)
- }
+ @Binds
+ abstract fun provideGithubRepository(repoImpl: GithubRepositoryImpl): GithubRepository
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/module/ViewModelModule.kt b/app/src/main/java/com/example/githubfirebaseissue/di/module/ViewModelModule.kt
deleted file mode 100644
index d0281d6..0000000
--- a/app/src/main/java/com/example/githubfirebaseissue/di/module/ViewModelModule.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.example.githubfirebaseissue.di.module
-
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
-import com.example.githubfirebaseissue.base.CustomViewModelFactory
-import com.example.githubfirebaseissue.di.scope.ViewModelKey
-import com.example.githubfirebaseissue.ui.viewmodel.MainViewModel
-import dagger.Binds
-import dagger.Module
-import dagger.multibindings.IntoMap
-
-
-@Module
-internal abstract class ViewModelModule {
-
- @Binds
- abstract fun bindViewModelFactory(factory: CustomViewModelFactory): ViewModelProvider.Factory
-
- @Binds
- @IntoMap
- @ViewModelKey(MainViewModel::class)
- abstract fun bindMainViewModel(viewModel: MainViewModel): ViewModel
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/scope/AppScope.kt b/app/src/main/java/com/example/githubfirebaseissue/di/scope/AppScope.kt
deleted file mode 100644
index 7b8a3fc..0000000
--- a/app/src/main/java/com/example/githubfirebaseissue/di/scope/AppScope.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.example.githubfirebaseissue.di.scope
-
-import javax.inject.Scope
-
-
-@Scope
-@Retention(AnnotationRetention.RUNTIME)
-@MustBeDocumented
-annotation class AppScope
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/di/scope/ViewModelKey.kt b/app/src/main/java/com/example/githubfirebaseissue/di/scope/ViewModelKey.kt
deleted file mode 100644
index 93dddf3..0000000
--- a/app/src/main/java/com/example/githubfirebaseissue/di/scope/ViewModelKey.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.example.githubfirebaseissue.di.scope
-
-import androidx.lifecycle.ViewModel
-import dagger.MapKey
-import kotlin.reflect.KClass
-
-
-@MustBeDocumented
-@Target(AnnotationTarget.FUNCTION)
-@Retention(AnnotationRetention.RUNTIME)
-@MapKey
-internal annotation class ViewModelKey(val value: KClass)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/githubfirebaseissue/ui/activity/MainActivity.kt b/app/src/main/java/com/example/githubfirebaseissue/ui/activity/MainActivity.kt
index efd98a2..399e06f 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/ui/activity/MainActivity.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/ui/activity/MainActivity.kt
@@ -6,7 +6,9 @@ import com.example.githubfirebaseissue.R
import com.example.githubfirebaseissue.base.BaseActivity
import com.example.githubfirebaseissue.callback.IFragmentChangeCallback
import com.example.githubfirebaseissue.ui.fragment.IssuesFragment
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class MainActivity : BaseActivity(), IFragmentChangeCallback {
override fun getLayoutRes() = R.layout.activity_main
diff --git a/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractCommentsFragment.kt b/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractCommentsFragment.kt
index 3803c84..8f26d08 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractCommentsFragment.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractCommentsFragment.kt
@@ -1,28 +1,21 @@
package com.example.githubfirebaseissue.ui.fragment
-import android.os.Bundle
import android.view.View
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
+import androidx.fragment.app.viewModels
import com.example.githubfirebaseissue.base.BaseFragment
-import com.example.githubfirebaseissue.base.CustomViewModelFactory
import com.example.githubfirebaseissue.common.EventObserver
import com.example.githubfirebaseissue.model.Comment
import com.example.githubfirebaseissue.ui.viewmodel.MainViewModel
-import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
abstract class AbstractCommentsFragment : BaseFragment() {
companion object {
const val ISSUE_NUMBER = "ISSUE_NUMBER"
}
- @Inject
- lateinit var viewModelFactory: CustomViewModelFactory
-
- private val viewModel: MainViewModel by lazy {
- ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)
- }
+ private val viewModel: MainViewModel by viewModels()
override fun viewInitialization(view: View) {
@@ -36,7 +29,7 @@ abstract class AbstractCommentsFragment : BaseFragment() {
private fun observeDataChange() {
- viewModel.loadingState.observe(viewLifecycleOwner, Observer { showLoadingState(it) })
+ viewModel.loadingState.observe(viewLifecycleOwner, { showLoadingState(it) })
viewModel.apiError.observe(viewLifecycleOwner, EventObserver { handleError(it) })
viewModel.commentsLiveData.observe(viewLifecycleOwner, EventObserver {
if (it.isNotEmpty())
diff --git a/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractIssueFragment.kt b/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractIssueFragment.kt
index 5352c62..4080e7b 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractIssueFragment.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/AbstractIssueFragment.kt
@@ -2,24 +2,18 @@ package com.example.githubfirebaseissue.ui.fragment
import android.os.Bundle
import android.view.View
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
+import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.viewModels
import com.example.githubfirebaseissue.base.BaseFragment
-import com.example.githubfirebaseissue.base.CustomViewModelFactory
import com.example.githubfirebaseissue.common.EventObserver
-import com.example.githubfirebaseissue.helper.ApplicationUtil
import com.example.githubfirebaseissue.model.Issue
import com.example.githubfirebaseissue.ui.viewmodel.MainViewModel
-import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
abstract class AbstractIssueFragment : BaseFragment() {
- @Inject
- lateinit var viewModelFactory: CustomViewModelFactory
-
- private val viewModel: MainViewModel by lazy {
- ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)
- }
+ private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
@@ -33,7 +27,7 @@ abstract class AbstractIssueFragment : BaseFragment() {
private fun observeDataChange() {
- viewModel.loadingState.observe(viewLifecycleOwner, Observer { showLoadingState(it) })
+ viewModel.loadingState.observe(viewLifecycleOwner, { showLoadingState(it) })
viewModel.apiError.observe(viewLifecycleOwner, EventObserver { handleError(it) })
viewModel.issueLiveData.observe(viewLifecycleOwner, EventObserver {
setIssuesData(it)
diff --git a/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/IssuesFragment.kt b/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/IssuesFragment.kt
index 3d74b87..d19038e 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/IssuesFragment.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/ui/fragment/IssuesFragment.kt
@@ -53,9 +53,9 @@ class IssuesFragment : AbstractIssueFragment(), IAdapterCallback {
override fun showLoadingState(loading: Boolean) {
if (loading)
- shimmer_view_container.startShimmerAnimation()
+ shimmer_view_container.startShimmer()
else {
- shimmer_view_container.stopShimmerAnimation()
+ shimmer_view_container.stopShimmer()
shimmer_view_container.visibility = View.GONE
}
}
diff --git a/app/src/main/java/com/example/githubfirebaseissue/ui/viewmodel/MainViewModel.kt b/app/src/main/java/com/example/githubfirebaseissue/ui/viewmodel/MainViewModel.kt
index 3fa050a..8a52412 100644
--- a/app/src/main/java/com/example/githubfirebaseissue/ui/viewmodel/MainViewModel.kt
+++ b/app/src/main/java/com/example/githubfirebaseissue/ui/viewmodel/MainViewModel.kt
@@ -8,16 +8,16 @@ import com.example.githubfirebaseissue.common.RxScheduler
import com.example.githubfirebaseissue.model.Comment
import com.example.githubfirebaseissue.model.Issue
import com.example.githubfirebaseissue.usecase.GetFireBaseIssueUseCase
-import io.reactivex.android.schedulers.AndroidSchedulers
+import dagger.hilt.android.lifecycle.HiltViewModel
import io.reactivex.disposables.CompositeDisposable
import javax.inject.Inject
-import io.reactivex.schedulers.Schedulers
-class MainViewModel @Inject constructor(private val useCase: GetFireBaseIssueUseCase,
- private val scheduler : RxScheduler
-) :
- ViewModel() {
+@HiltViewModel
+class MainViewModel @Inject constructor(
+ private val useCase: GetFireBaseIssueUseCase,
+ private val scheduler: RxScheduler
+) : ViewModel() {
private val _issueLiveData by lazy { MutableLiveData>>() }
val issueLiveData: LiveData>> by lazy { _issueLiveData }
@@ -42,8 +42,7 @@ class MainViewModel @Inject constructor(private val useCase: GetFireBaseIssueUse
.doOnError { loadingState.value = false }
.map { it.sortedByDescending { issue -> issue.updatedAt } }
.subscribe(
- { Event(it).run(_issueLiveData::postValue) }
- ,
+ { Event(it).run(_issueLiveData::postValue) },
{ Event(it).run(_apiError::postValue) }
)
disposable.add(issueDisposable)
@@ -69,5 +68,4 @@ class MainViewModel @Inject constructor(private val useCase: GetFireBaseIssueUse
disposable.clear()
}
-
}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 9e458f2..8c91cc4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.61'
+ ext.kotlin_version = '1.4.30'
ext {
//Version
@@ -12,27 +12,28 @@ buildscript {
sdk_min_version = 19
sdk_target_version = 28
sdk_compile_version = 28
- glide_version = '4.11.0'
- appcompat_version = '1.1.0'
+ glide_version = '4.12.0'
+ appcompat_version = '1.2.0'
lifecycle_version = "2.2.0"
androidx_stable_version = "1.2.0-alpha01"
androidx_constraint_layout_version = "2.0.0-beta4"
- logging_interceptor_version = "4.3.1"
+ logging_interceptor_version = "4.6.0"
ktx_version = "1.0.2"
ktx_fragment_version = "1.2.2"
- retrofit_version = "2.4.0"
+ retrofit_version = "2.9.0"
rxJavaVersion = '2.1.1'
android_material_version = "1.2.0-alpha05"
- gson_version = "2.8.5"
- junit_version = '4.12'
+ gson_version = "2.8.6"
+ junit_version = '4.13.2'
test_runner_version = '1.2.0'
test_espresso_version = '3.2.0'
jraska_version = "1.1.0"
hamcrest_version = "1.3"
- mockito_version = "2.21.0"
- dagger_version = "2.23.2"
+ mockito_version = "2.28.2"
+ dagger_version = "2.29.1"
arch_runtime_version = "1.1.1"
arch_version = "1.1.1"
+ hilt_version = "2.33-beta"
}
repositories {
google()
@@ -43,6 +44,7 @@ buildscript {
classpath 'com.android.tools.build:gradle:3.6.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.5.2.0"
+ classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}