diff --git a/app/build.gradle b/app/build.gradle index 78a2d23..10410f0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,6 +4,7 @@ apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs.kotlin' apply plugin: "kotlin-allopen" +apply plugin: 'dagger.hilt.android.plugin' def getProperty(String filename, String propName) { def propsFile = rootProject.file(filename) @@ -105,7 +106,8 @@ dependencies { def archComponentVersion = '2.1.0' def roomVersion = '2.2.5' def lifecycleVersion = '2.2.0' - def daggerVersion = '2.28.1' + def hiltVersion = '2.28.3-alpha' + def hiltViewModelVersion = '1.0.0-alpha02' def retrofitVersion = '2.9.0' def googleJsonVersion = '2.8.6' def okhttpVersion = '4.7.2' @@ -153,11 +155,10 @@ dependencies { implementation "androidx.navigation:navigation-ui-ktx:$nav_version" // dependency injection - implementation "com.google.dagger:dagger:$daggerVersion" - implementation "com.google.dagger:dagger-android:$daggerVersion" - implementation "com.google.dagger:dagger-android-support:$daggerVersion" - kapt "com.google.dagger:dagger-compiler:$daggerVersion" - kapt "com.google.dagger:dagger-android-processor:$daggerVersion" + implementation "com.google.dagger:hilt-android:$hiltVersion" + kapt "com.google.dagger:hilt-android-compiler:$hiltVersion" + implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hiltViewModelVersion" + kapt "androidx.hilt:hilt-compiler:$hiltViewModelVersion" debugImplementation "androidx.fragment:fragment-testing:$androidFragment" diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieDetailFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieDetailFragmentTest.kt index dff6d38..66053eb 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieDetailFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieDetailFragmentTest.kt @@ -81,9 +81,7 @@ class MovieDetailFragmentTest { val scenario = launchFragmentInContainer( bundle, themeResId = R.style.AppTheme ) { - MovieDetailFragment().apply { - viewModelFactory = ViewModelUtil.createFor(viewModel) - } + MovieDetailFragment() } dataBindingIdlingResourceRule.monitorFragment(scenario) diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieListFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieListFragmentTest.kt index 98ef5d6..7d6b523 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieListFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieListFragmentTest.kt @@ -68,7 +68,6 @@ class MovieListFragmentTest { val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) { MovieListFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchFragmentTest.kt index 56253fd..a864243 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchFragmentTest.kt @@ -69,7 +69,6 @@ class MovieSearchFragmentTest { val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) { MovieSearchFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFilterFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFilterFragmentTest.kt index e0721f1..cad0406 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFilterFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFilterFragmentTest.kt @@ -81,7 +81,6 @@ class MovieSearchResultFilterFragmentTest { ) { MovieSearchResultFilterFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFragmentTest.kt index 5f97ec0..24114f6 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/movie/MovieSearchResultFragmentTest.kt @@ -76,7 +76,6 @@ class MovieSearchResultFragmentTest { ) { MovieSearchResultFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebritiesListFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebritiesListFragmentTest.kt index 313b091..2b079b6 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebritiesListFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebritiesListFragmentTest.kt @@ -67,7 +67,6 @@ class CelebritiesListFragmentTest { ) { CelebritiesListFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebrityDetailFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebrityDetailFragmentTest.kt index fc72e7c..68dbfc5 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebrityDetailFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/CelebrityDetailFragmentTest.kt @@ -75,7 +75,6 @@ class CelebrityDetailFragmentTest { bundle, themeResId = R.style.AppTheme ) { CelebrityDetailFragment().apply { - viewModelFactory = ViewModelUtil.createFor(viewModel) appExecutors = countingAppExecutors.appExecutors } } diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesFragmentTest.kt index 8330402..846db8e 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesFragmentTest.kt @@ -68,7 +68,6 @@ class SearchCelebritiesFragmentTest { val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) { SearchCelebritiesFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesResultFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesResultFragmentTest.kt index af709f6..b6500fd 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesResultFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/people/SearchCelebritiesResultFragmentTest.kt @@ -64,7 +64,6 @@ class SearchCelebritiesResultFragmentTest { ) { SearchCelebritiesResultFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvDetailFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvDetailFragmentTest.kt index 51d82e8..dbd1efa 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvDetailFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvDetailFragmentTest.kt @@ -78,9 +78,7 @@ class TvDetailFragmentTest { val scenario = launchFragmentInContainer( bundle, themeResId = R.style.AppTheme ) { - TvDetailFragment().apply { - viewModelFactory = ViewModelUtil.createFor(viewModel) - } + TvDetailFragment() } dataBindingIdlingResourceRule.monitorFragment(scenario) diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvListFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvListFragmentTest.kt index c8a3451..ef56f98 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvListFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvListFragmentTest.kt @@ -68,7 +68,6 @@ class TvListFragmentTest { val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) { TvListFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchFragmentTest.kt index e737829..0b5cc1f 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchFragmentTest.kt @@ -69,7 +69,6 @@ class TvSearchFragmentTest { val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) { TvSearchFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFilterFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFilterFragmentTest.kt index 86bca04..c8619d7 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFilterFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFilterFragmentTest.kt @@ -81,7 +81,6 @@ class TvSearchResultFilterFragmentTest { ) { TvSearchResultFilterFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFragmentTest.kt b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFragmentTest.kt index 723b928..459cc30 100644 --- a/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFragmentTest.kt +++ b/app/src/androidTest/java/com/mustafa/movieguideapp/fragment/tv/TvSearchResultFragmentTest.kt @@ -76,7 +76,6 @@ class TvSearchResultFragmentTest { ) { TvSearchResultFragment().apply { appExecutors = countingAppExecutors.appExecutors - viewModelFactory = ViewModelUtil.createFor(viewModel) dataBindingComponent = object : DataBindingComponent { override fun getFragmentBindingAdapters(): FragmentBindingAdapters { return mockBindingAdapter diff --git a/app/src/debug/java/com/mustafa/movieguideapp/testing/SingleFragmentActivity.kt b/app/src/debug/java/com/mustafa/movieguideapp/testing/SingleFragmentActivity.kt index 71bf282..ecdfab5 100644 --- a/app/src/debug/java/com/mustafa/movieguideapp/testing/SingleFragmentActivity.kt +++ b/app/src/debug/java/com/mustafa/movieguideapp/testing/SingleFragmentActivity.kt @@ -7,10 +7,12 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.fragment.app.FragmentContainerView import com.mustafa.movieguideapp.R +import dagger.hilt.android.AndroidEntryPoint /** * Used for testing fragments inside a fake activity. */ +@AndroidEntryPoint class SingleFragmentActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/com/mustafa/movieguideapp/MovieGuideApp.kt b/app/src/main/java/com/mustafa/movieguideapp/MovieGuideApp.kt index d74a38f..c6ecdd8 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/MovieGuideApp.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/MovieGuideApp.kt @@ -1,31 +1,17 @@ package com.mustafa.movieguideapp import android.app.Application -import com.mustafa.movieguideapp.di.AppInjector -import dagger.android.AndroidInjector -import dagger.android.DispatchingAndroidInjector -import dagger.android.HasAndroidInjector +import dagger.hilt.android.HiltAndroidApp import timber.log.Timber -import javax.inject.Inject - -@Suppress("unused") -class MovieGuideApp : Application(), HasAndroidInjector { - - @Inject - lateinit var androidInjector: DispatchingAndroidInjector +@HiltAndroidApp +class MovieGuideApp : Application() { override fun onCreate() { super.onCreate() - AppInjector.init(this) - if (BuildConfig.DEBUG) { Timber.plant(Timber.DebugTree()) } } - - override fun androidInjector(): AndroidInjector { - return androidInjector - } } diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/AppComponent.kt b/app/src/main/java/com/mustafa/movieguideapp/di/AppComponent.kt deleted file mode 100644 index 94b473d..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/AppComponent.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.mustafa.movieguideapp.di - -import android.app.Application -import com.mustafa.movieguideapp.MovieGuideApp -import dagger.BindsInstance -import dagger.Component -import dagger.android.AndroidInjectionModule -import javax.inject.Singleton - -@Singleton -@Component(modules = [ - AndroidInjectionModule ::class, - MainActivityModule::class, - AppModule::class]) -interface AppComponent { - - fun inject(movieGuideApp: MovieGuideApp) - - @Component.Builder - interface Builder { - @BindsInstance - fun application(application: Application): Builder - - fun build(): AppComponent - } - -} diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/AppInjector.kt b/app/src/main/java/com/mustafa/movieguideapp/di/AppInjector.kt deleted file mode 100644 index 7c73c74..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/AppInjector.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.mustafa.movieguideapp.di - -import android.app.Activity -import android.app.Application -import android.os.Bundle -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity -import androidx.fragment.app.FragmentManager -import com.mustafa.movieguideapp.MovieGuideApp -import dagger.android.AndroidInjection -import dagger.android.HasAndroidInjector -import dagger.android.support.AndroidSupportInjection - -/** - * Helper class to automatically inject fragments if they implement [Injectable]. - */ -object AppInjector { - fun init(movieGuideApp: MovieGuideApp) { - - DaggerAppComponent.builder().application(movieGuideApp).build().inject(movieGuideApp) - - movieGuideApp.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { - override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { handleActivity(activity) } - - override fun onActivityStarted(activity: Activity) {} - - override fun onActivityResumed(activity: Activity) {} - - override fun onActivityPaused(activity: Activity) {} - - override fun onActivityStopped(activity: Activity) {} - - override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {} - - override fun onActivityDestroyed(activity: Activity) {} - }) - } - - private fun handleActivity(activity: Activity) { - if (activity is HasAndroidInjector) { - AndroidInjection.inject(activity) - } - if (activity is FragmentActivity) { - activity.supportFragmentManager - .registerFragmentLifecycleCallbacks( - object : FragmentManager.FragmentLifecycleCallbacks() { - override fun onFragmentCreated( - fm: FragmentManager, - f: Fragment, - savedInstanceState: Bundle? - ) { - if (f is Injectable) { - AndroidSupportInjection.inject(f) - } - } - }, true - ) - } - } -} diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/AppModule.kt b/app/src/main/java/com/mustafa/movieguideapp/di/AppModule.kt index 8bcc9fa..67f8b9e 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/di/AppModule.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/di/AppModule.kt @@ -1,6 +1,7 @@ package com.mustafa.movieguideapp.di import android.app.Application +import android.content.Context import androidx.annotation.NonNull import androidx.room.Room import com.facebook.stetho.okhttp3.StethoInterceptor @@ -11,17 +12,21 @@ import com.mustafa.movieguideapp.room.PeopleDao import com.mustafa.movieguideapp.room.TvDao import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ApplicationComponent +import dagger.hilt.android.qualifiers.ApplicationContext import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import javax.inject.Singleton -@Module(includes = [ViewModelModule::class]) +@InstallIn(ApplicationComponent::class) +@Module class AppModule { @Provides @Singleton - fun provideDatabase(@NonNull application: Application): AppDatabase { + fun provideDatabase(@ApplicationContext application: Context): AppDatabase { return Room .databaseBuilder(application, AppDatabase::class.java, "Movie.db") .allowMainThreadQueries() diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/FragmentBuildersModule.kt b/app/src/main/java/com/mustafa/movieguideapp/di/FragmentBuildersModule.kt deleted file mode 100644 index 9aea87e..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/FragmentBuildersModule.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.mustafa.movieguideapp.di - -import com.mustafa.movieguideapp.view.ui.search.MovieSearchFragment -import com.mustafa.movieguideapp.view.ui.movies.moviedetail.MovieDetailFragment -import com.mustafa.movieguideapp.view.ui.movies.movielist.MovieListFragment -import com.mustafa.movieguideapp.view.ui.search.filter.MovieSearchResultFilterFragment -import com.mustafa.movieguideapp.view.ui.search.result.MovieSearchResultFragment -import com.mustafa.movieguideapp.view.ui.search.result.TvSearchResultFragment -import com.mustafa.movieguideapp.view.ui.person.celebrities.CelebritiesListFragment -import com.mustafa.movieguideapp.view.ui.person.detail.CelebrityDetailFragment -import com.mustafa.movieguideapp.view.ui.person.detail.MoviePersonDetailFragment -import com.mustafa.movieguideapp.view.ui.person.detail.TvPersonDetailFragment -import com.mustafa.movieguideapp.view.ui.person.search.SearchCelebritiesFragment -import com.mustafa.movieguideapp.view.ui.person.search.SearchCelebritiesResultFragment -import com.mustafa.movieguideapp.view.ui.search.TvSearchFragment -import com.mustafa.movieguideapp.view.ui.search.filter.TvSearchResultFilterFragment -import com.mustafa.movieguideapp.view.ui.tv.tvdetail.TvDetailFragment -import com.mustafa.movieguideapp.view.ui.tv.tvlist.TvListFragment -import dagger.Module -import dagger.android.ContributesAndroidInjector - -@Suppress("unused") -@Module -abstract class FragmentBuildersModule { - - @ContributesAndroidInjector - abstract fun contributeMovieListFragment(): MovieListFragment - - @ContributesAndroidInjector - abstract fun contributeMovieDetailFragment(): MovieDetailFragment - - @ContributesAndroidInjector - abstract fun contributeTvDetailFragment(): TvDetailFragment - - @ContributesAndroidInjector - abstract fun contributeTvListFragment(): TvListFragment - - @ContributesAndroidInjector - abstract fun contributeCelebritiesListFragment(): CelebritiesListFragment - - @ContributesAndroidInjector - abstract fun contributeCelebrityDetailFragment(): CelebrityDetailFragment - - @ContributesAndroidInjector - abstract fun contributeMoviesSearchFragment(): MovieSearchFragment - - @ContributesAndroidInjector - abstract fun contributeTvSearchFragment(): TvSearchFragment - - @ContributesAndroidInjector - abstract fun contributeSearchResultFragment(): MovieSearchResultFragment - - @ContributesAndroidInjector - abstract fun contributeTvSearchResultFragment(): TvSearchResultFragment - - @ContributesAndroidInjector - abstract fun contributeMovieSearchResultFilterFragment(): MovieSearchResultFilterFragment - - @ContributesAndroidInjector - abstract fun contributeTvSearchResultFilterFragment(): TvSearchResultFilterFragment - - @ContributesAndroidInjector - abstract fun contributeMoviePersonDetailFragment(): MoviePersonDetailFragment - - @ContributesAndroidInjector - abstract fun contributeTvPersonDetailFragment(): TvPersonDetailFragment - - @ContributesAndroidInjector - abstract fun contributeSearchCelebritiesFragment(): SearchCelebritiesFragment - - @ContributesAndroidInjector - abstract fun contributeSearchCelebritiesResultFragment(): SearchCelebritiesResultFragment - -} \ No newline at end of file diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/Injectable.kt b/app/src/main/java/com/mustafa/movieguideapp/di/Injectable.kt deleted file mode 100644 index 6515bdb..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/Injectable.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.mustafa.movieguideapp.di - -/** - * Marks an activity / fragment injectable. - */ -interface Injectable diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/MainActivityModule.kt b/app/src/main/java/com/mustafa/movieguideapp/di/MainActivityModule.kt deleted file mode 100644 index 7893227..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/MainActivityModule.kt +++ /dev/null @@ -1,14 +0,0 @@ - -package com.mustafa.movieguideapp.di - -import com.mustafa.movieguideapp.view.ui.main.MainActivity -import dagger.Module -import dagger.android.ContributesAndroidInjector - -@Suppress("unused") -@Module -abstract class MainActivityModule { - - @ContributesAndroidInjector (modules = [FragmentBuildersModule::class]) - abstract fun contributeMainActivity(): MainActivity -} diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/ViewModelKey.kt b/app/src/main/java/com/mustafa/movieguideapp/di/ViewModelKey.kt deleted file mode 100644 index bab1f06..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/ViewModelKey.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.mustafa.movieguideapp.di - -import androidx.lifecycle.ViewModel -import dagger.MapKey -import kotlin.reflect.KClass - -@MustBeDocumented -@Target( - AnnotationTarget.FUNCTION, - AnnotationTarget.PROPERTY_GETTER, - AnnotationTarget.PROPERTY_SETTER -) -@Retention(AnnotationRetention.RUNTIME) -@MapKey -annotation class ViewModelKey(val value: KClass) diff --git a/app/src/main/java/com/mustafa/movieguideapp/di/ViewModelModule.kt b/app/src/main/java/com/mustafa/movieguideapp/di/ViewModelModule.kt deleted file mode 100644 index 260ddbd..0000000 --- a/app/src/main/java/com/mustafa/movieguideapp/di/ViewModelModule.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.mustafa.movieguideapp.di - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.mustafa.movieguideapp.factory.AppViewModelFactory -import com.mustafa.movieguideapp.view.ui.movies.moviedetail.MovieDetailViewModel -import com.mustafa.movieguideapp.view.ui.movies.movielist.MovieListViewModel -import com.mustafa.movieguideapp.view.ui.person.celebrities.CelebritiesListViewModel -import com.mustafa.movieguideapp.view.ui.person.detail.PersonDetailViewModel -import com.mustafa.movieguideapp.view.ui.person.search.SearchCelebritiesResultViewModel -import com.mustafa.movieguideapp.view.ui.search.MovieSearchViewModel -import com.mustafa.movieguideapp.view.ui.search.TvSearchViewModel -import com.mustafa.movieguideapp.view.ui.search.filter.MovieSearchFilterViewModel -import com.mustafa.movieguideapp.view.ui.search.filter.TvSearchFilterViewModel -import com.mustafa.movieguideapp.view.ui.tv.tvdetail.TvDetailViewModel -import com.mustafa.movieguideapp.view.ui.tv.tvlist.TvListViewModel -import dagger.Binds -import dagger.Module -import dagger.multibindings.IntoMap - -@Suppress("unused") -@Module -abstract class ViewModelModule { - - @Binds - @IntoMap - @ViewModelKey(MovieListViewModel::class) - abstract fun bindMovieListFragmentViewModel(movieListViewModel: MovieListViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(MovieDetailViewModel::class) - abstract fun bindMovieDetailViewModel(movieDetailViewModel: MovieDetailViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(TvDetailViewModel::class) - abstract fun bindTvDetailViewModel(tvDetailViewModel: TvDetailViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(CelebritiesListViewModel::class) - abstract fun bindCelebritiesListViewModel(celebritiesListViewModel: CelebritiesListViewModel): ViewModel - - - @Binds - @IntoMap - @ViewModelKey(TvListViewModel::class) - abstract fun bindTvListViewModel(tvListViewModel: TvListViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(PersonDetailViewModel::class) - abstract fun bindPersonDetailViewModel(personDetailViewModel: PersonDetailViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(MovieSearchViewModel::class) - abstract fun bindMovieSearchViewModel(movieSearchViewModel: MovieSearchViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(TvSearchViewModel::class) - abstract fun bindTvSearchViewModel(tvSearchViewModel: TvSearchViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(MovieSearchFilterViewModel::class) - abstract fun bindMovieSearchFilterViewModel(movieSearchFilterViewModel: MovieSearchFilterViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(TvSearchFilterViewModel::class) - abstract fun bindTvSearchFilterViewModel(tvSearchFilterViewModel: TvSearchFilterViewModel): ViewModel - - @Binds - @IntoMap - @ViewModelKey(SearchCelebritiesResultViewModel::class) - abstract fun bindSearchCelebritiesResultViewModel(searchCelebritiesResultViewModel: SearchCelebritiesResultViewModel): ViewModel - - - @Binds - abstract fun bindViewModelFactory(factory: AppViewModelFactory): ViewModelProvider.Factory -} \ No newline at end of file diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/main/MainActivity.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/main/MainActivity.kt index b028719..edea355 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/main/MainActivity.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/main/MainActivity.kt @@ -12,19 +12,15 @@ import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.extension.* import com.mustafa.movieguideapp.utils.setupWithNavController import com.rbddevs.splashy.Splashy -import dagger.android.AndroidInjector -import dagger.android.DispatchingAndroidInjector -import dagger.android.HasAndroidInjector +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.activity_main.* -import javax.inject.Inject /** * An activity that inflates a layout that has a [BottomNavigationView]. */ -class MainActivity : AppCompatActivity(), HasAndroidInjector { - @Inject - lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector +@AndroidEntryPoint +class MainActivity : AppCompatActivity() { private var currentNavController: LiveData? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -138,8 +134,6 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { destination.id == R.id.moviesFragment || destination.id == R.id.tvsFragment || destination.id == R.id.celebritiesFragment - override fun androidInjector(): AndroidInjector = dispatchingAndroidInjector - private fun setSplashy() { Splashy(this) .setLogo(R.mipmap.ic_launcher_foreground) diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailFragment.kt index 44cd1b8..b84d015 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailFragment.kt @@ -9,28 +9,24 @@ import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels -import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.api.Api import com.mustafa.movieguideapp.databinding.FragmentMovieDetailBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Video import com.mustafa.movieguideapp.models.entity.Movie import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.ReviewListAdapter import com.mustafa.movieguideapp.view.adapter.VideoListAdapter import com.mustafa.movieguideapp.view.viewholder.VideoListViewHolder +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.layout_movie_detail_body.* -import javax.inject.Inject -class MovieDetailFragment : Fragment(), VideoListViewHolder.Delegate, Injectable { +@AndroidEntryPoint +class MovieDetailFragment : Fragment(), VideoListViewHolder.Delegate { - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory - - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() private var binding by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailViewModel.kt index c3a69c2..5c2f541 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/moviedetail/MovieDetailViewModel.kt @@ -1,17 +1,18 @@ package com.mustafa.movieguideapp.view.ui.movies.moviedetail +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations import androidx.lifecycle.ViewModel import com.mustafa.movieguideapp.repository.MovieRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class MovieDetailViewModel @Inject constructor(private val repository: MovieRepository) : - ViewModel() { +class MovieDetailViewModel @ViewModelInject constructor( + private val repository: MovieRepository +) : ViewModel() { private val movieIdLiveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListFragment.kt index be3f2fc..0c0d9fd 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListFragment.kt @@ -10,33 +10,29 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentMoviesBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.MovieListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_movies.* import kotlinx.android.synthetic.main.toolbar_search.* import javax.inject.Inject -class MovieListFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class MovieListFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } - + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListViewModel.kt index 1c30fe4..8d2dc42 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/movies/movielist/MovieListViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.movies.movielist +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -13,7 +14,7 @@ import com.mustafa.movieguideapp.view.ui.common.AppExecutors import javax.inject.Inject @OpenForTesting -class MovieListViewModel @Inject constructor( +class MovieListViewModel @ViewModelInject constructor( private val discoverRepository: DiscoverRepository ) : ViewModel() { diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListFragment.kt index cd96935..6aa3569 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListFragment.kt @@ -9,7 +9,6 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager @@ -17,29 +16,25 @@ import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentCelebritiesBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.PeopleAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_celebrities.* import kotlinx.android.synthetic.main.toolbar_search.* import javax.inject.Inject -class CelebritiesListFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class CelebritiesListFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) - private val viewModel by viewModels { - viewModelFactory - } + private val viewModel by viewModels() private var binding by autoCleared() private var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListViewModel.kt index ac5bac3..f5d7da3 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/celebrities/CelebritiesListViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.person.celebrities +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -9,12 +10,12 @@ import com.mustafa.movieguideapp.models.entity.Person import com.mustafa.movieguideapp.repository.PeopleRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class CelebritiesListViewModel @Inject -constructor(private val peopleRepository: PeopleRepository) : ViewModel() { +class CelebritiesListViewModel @ViewModelInject constructor( + private val peopleRepository: PeopleRepository +) : ViewModel() { private var pageNumber = 1 private var peoplePageLiveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/CelebrityDetailFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/CelebrityDetailFragment.kt index db5a7e3..7992f4c 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/CelebrityDetailFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/CelebrityDetailFragment.kt @@ -8,34 +8,30 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentCelebrityDetailBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.entity.Person import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.MoviePersonListAdapter import com.mustafa.movieguideapp.view.adapter.TvPersonListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_celebrity_detail.* import kotlinx.android.synthetic.main.toolbar_detail.* import javax.inject.Inject -class CelebrityDetailFragment : Fragment(), Injectable { - - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class CelebrityDetailFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors var dataBindingComponent = FragmentDataBindingComponent(this) - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() private var binding by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/MoviePersonDetailFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/MoviePersonDetailFragment.kt index b2c220e..a9213b2 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/MoviePersonDetailFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/MoviePersonDetailFragment.kt @@ -8,12 +8,12 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.databinding.FragmentMovieCelebrityDetailBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.entity.MoviePerson import com.mustafa.movieguideapp.utils.autoCleared +import dagger.hilt.android.AndroidEntryPoint - -class MoviePersonDetailFragment : Fragment(), Injectable { +@AndroidEntryPoint +class MoviePersonDetailFragment : Fragment() { private var binding by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/PersonDetailViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/PersonDetailViewModel.kt index 4a3b53e..8b9dcf1 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/PersonDetailViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/PersonDetailViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.person.detail +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.* import com.mustafa.movieguideapp.models.Resource import com.mustafa.movieguideapp.models.entity.MoviePerson @@ -7,11 +8,10 @@ import com.mustafa.movieguideapp.models.entity.TvPerson import com.mustafa.movieguideapp.repository.PeopleRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class PersonDetailViewModel @Inject +class PersonDetailViewModel @ViewModelInject constructor(private val repository: PeopleRepository) : ViewModel() { private val personIdLiveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/TvPersonDetailFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/TvPersonDetailFragment.kt index 4ec13e5..80149b4 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/TvPersonDetailFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/detail/TvPersonDetailFragment.kt @@ -11,13 +11,14 @@ import androidx.fragment.app.Fragment import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.api.Api import com.mustafa.movieguideapp.databinding.FragmentTvCelebrityDetailBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Video import com.mustafa.movieguideapp.models.entity.TvPerson import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.viewholder.VideoListViewHolder +import dagger.hilt.android.AndroidEntryPoint -class TvPersonDetailFragment : Fragment(), VideoListViewHolder.Delegate, Injectable { +@AndroidEntryPoint +class TvPersonDetailFragment : Fragment(), VideoListViewHolder.Delegate { private var binding by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesFragment.kt index 9bb0075..06acb94 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesFragment.kt @@ -16,33 +16,30 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentCelebritiesSearchBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.extension.gone import com.mustafa.movieguideapp.extension.inVisible import com.mustafa.movieguideapp.extension.visible import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.PeopleSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_search.* import kotlinx.android.synthetic.main.toolbar_search_iconfied.* import java.util.* import javax.inject.Inject -class SearchCelebritiesFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class SearchCelebritiesFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) @@ -181,7 +178,7 @@ class SearchCelebritiesFragment : Fragment(), Injectable { * */ private fun setListViewOfRecentQueries(queries: List) { - arrayAdapter = ArrayAdapter( + arrayAdapter = ArrayAdapter( requireContext(), R.layout.recent_query_item, queries.requireNoNulls() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultFragment.kt index 9ed8ea6..d417abe 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultFragment.kt @@ -12,34 +12,31 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentCelebritiesSearchResultBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.extension.hideKeyboard import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.PeopleSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_celebrities_search_result.* import kotlinx.android.synthetic.main.fragment_celebrities_search_result.view.* import kotlinx.android.synthetic.main.toolbar_search_result.* import javax.inject.Inject -class SearchCelebritiesResultFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class SearchCelebritiesResultFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) private var binding by autoCleared() private var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultViewModel.kt index 21427c3..e2a9782 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/person/search/SearchCelebritiesResultViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.person.search +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -11,12 +12,12 @@ import com.mustafa.movieguideapp.repository.PeopleRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData import java.util.* -import javax.inject.Inject @OpenForTesting -class SearchCelebritiesResultViewModel @Inject -constructor(private val peopleRepository: PeopleRepository) : ViewModel() { +class SearchCelebritiesResultViewModel @ViewModelInject constructor( + private val peopleRepository: PeopleRepository +) : ViewModel() { private val searchPeoplePageLiveData: MutableLiveData = MutableLiveData() private var peoplePageNumber = 1 diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchFragment.kt index 0ce5166..bc12b8a 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchFragment.kt @@ -8,32 +8,30 @@ import androidx.databinding.DataBindingComponent import androidx.databinding.DataBindingUtil import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.tabs.TabLayout import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentSearchBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.MovieSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.search.base.SearchFragmentBase +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_search.* import kotlinx.android.synthetic.main.fragment_search.view.* import kotlinx.android.synthetic.main.toolbar_search_iconfied.* import javax.inject.Inject -class MovieSearchFragment : SearchFragmentBase(), Injectable { +@AndroidEntryPoint +class MovieSearchFragment : SearchFragmentBase() { - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchViewModel.kt index 479e28e..a987472 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/MovieSearchViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.search +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -11,10 +12,9 @@ import com.mustafa.movieguideapp.repository.DiscoverRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData import java.util.* -import javax.inject.Inject @OpenForTesting -class MovieSearchViewModel @Inject constructor( +class MovieSearchViewModel @ViewModelInject constructor( private val discoverRepository: DiscoverRepository ) : ViewModel() { diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchFragment.kt index 88f9a0e..cfd9046 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchFragment.kt @@ -8,33 +8,30 @@ import androidx.databinding.DataBindingComponent import androidx.databinding.DataBindingUtil import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.tabs.TabLayout import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentSearchBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.TvSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.search.base.SearchFragmentBase +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_search.* import kotlinx.android.synthetic.main.fragment_search.view.* import kotlinx.android.synthetic.main.toolbar_search_iconfied.* import javax.inject.Inject -class TvSearchFragment : SearchFragmentBase(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class TvSearchFragment : SearchFragmentBase() { @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) private var binding by autoCleared() private var tvAdapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchViewModel.kt index b1dac82..1385498 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/TvSearchViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.search +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -11,10 +12,9 @@ import com.mustafa.movieguideapp.repository.DiscoverRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData import java.util.* -import javax.inject.Inject @OpenForTesting -class TvSearchViewModel @Inject constructor( +class TvSearchViewModel @ViewModelInject constructor( private val discoverRepository: DiscoverRepository ) : ViewModel() { diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchFilterViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchFilterViewModel.kt index 955c64a..4435246 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchFilterViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchFilterViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.search.filter +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -9,10 +10,9 @@ import com.mustafa.movieguideapp.models.entity.Movie import com.mustafa.movieguideapp.repository.DiscoverRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class MovieSearchFilterViewModel @Inject constructor( +class MovieSearchFilterViewModel @ViewModelInject constructor( private val discoverRepository: DiscoverRepository ) : ViewModel() { diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchResultFilterFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchResultFilterFragment.kt index 077be08..d47bd11 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchResultFilterFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/MovieSearchResultFilterFragment.kt @@ -9,32 +9,29 @@ import androidx.databinding.DataBindingComponent import androidx.databinding.DataBindingUtil import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentSearchResultFilterBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.MovieSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_search_result_filter.* import kotlinx.android.synthetic.main.fragment_search_result_filter.view.* import javax.inject.Inject -class MovieSearchResultFilterFragment : SearchResultFilterFragmentBase(), Injectable, +@AndroidEntryPoint +class MovieSearchResultFilterFragment : SearchResultFilterFragmentBase(), PopupMenu.OnMenuItemClickListener { - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory - @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) private var binding by autoCleared() private var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/SearchResultFilterFragmentBase.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/SearchResultFilterFragmentBase.kt index 84ac184..726d0a0 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/SearchResultFilterFragmentBase.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/SearchResultFilterFragmentBase.kt @@ -8,13 +8,12 @@ import androidx.appcompat.widget.PopupMenu import androidx.core.widget.NestedScrollView import androidx.fragment.app.Fragment import com.mustafa.movieguideapp.R -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.utils.FiltersConstants import com.mustafa.movieguideapp.utils.FiltersConstants.Companion.RATINGS import com.mustafa.movieguideapp.utils.StringUtils import kotlinx.android.synthetic.main.fragment_search_result_filter.* -abstract class SearchResultFilterFragmentBase : Fragment(), Injectable, +abstract class SearchResultFilterFragmentBase : Fragment(), PopupMenu.OnMenuItemClickListener { diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchFilterViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchFilterViewModel.kt index 3daa0a5..a59ded2 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchFilterViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchFilterViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.search.filter +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -9,10 +10,9 @@ import com.mustafa.movieguideapp.models.entity.Tv import com.mustafa.movieguideapp.repository.DiscoverRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class TvSearchFilterViewModel @Inject constructor( +class TvSearchFilterViewModel @ViewModelInject constructor( private val discoverRepository: DiscoverRepository ) : ViewModel() { diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchResultFilterFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchResultFilterFragment.kt index cb752c2..fa7ecf4 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchResultFilterFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/filter/TvSearchResultFilterFragment.kt @@ -8,32 +8,29 @@ import androidx.databinding.DataBindingComponent import androidx.databinding.DataBindingUtil import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentSearchResultFilterBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.TvSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_search_result_filter.* import kotlinx.android.synthetic.main.fragment_search_result_filter.view.* import javax.inject.Inject -class TvSearchResultFilterFragment : SearchResultFilterFragmentBase(), Injectable, +@AndroidEntryPoint +class TvSearchResultFilterFragment : SearchResultFilterFragmentBase(), androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener { - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory - @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) private var binding by autoCleared() private var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/MovieSearchResultFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/MovieSearchResultFragment.kt index b0d5f45..3a85daa 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/MovieSearchResultFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/MovieSearchResultFragment.kt @@ -9,14 +9,12 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentMovieSearchResultBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.extension.hideKeyboard import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared @@ -24,20 +22,19 @@ import com.mustafa.movieguideapp.view.adapter.MovieSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback import com.mustafa.movieguideapp.view.ui.search.MovieSearchViewModel +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_movie_search_result.* import kotlinx.android.synthetic.main.fragment_movie_search_result.view.* import kotlinx.android.synthetic.main.toolbar_search_result.* import javax.inject.Inject -class MovieSearchResultFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class MovieSearchResultFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) var binding by autoCleared() var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/TvSearchResultFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/TvSearchResultFragment.kt index 3d366b3..57007fe 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/TvSearchResultFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/search/result/TvSearchResultFragment.kt @@ -9,14 +9,12 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentTvSearchResultBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.extension.hideKeyboard import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared @@ -24,20 +22,19 @@ import com.mustafa.movieguideapp.view.adapter.TvSearchListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback import com.mustafa.movieguideapp.view.ui.search.TvSearchViewModel +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_tv_search_result.* import kotlinx.android.synthetic.main.fragment_tv_search_result.view.* import kotlinx.android.synthetic.main.toolbar_search_result.* import javax.inject.Inject -class TvSearchResultFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class TvSearchResultFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) var binding by autoCleared() var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailFragment.kt index b3754e3..5cb8e6e 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailFragment.kt @@ -10,29 +10,25 @@ import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels -import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.api.Api import com.mustafa.movieguideapp.databinding.FragmentTvDetailBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Video import com.mustafa.movieguideapp.models.entity.Tv import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.ReviewListAdapter import com.mustafa.movieguideapp.view.adapter.VideoListAdapter import com.mustafa.movieguideapp.view.viewholder.VideoListViewHolder +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.layout_tv_detail_body.* -import javax.inject.Inject -class TvDetailFragment : Fragment(), VideoListViewHolder.Delegate, Injectable { +@AndroidEntryPoint +class TvDetailFragment : Fragment(), VideoListViewHolder.Delegate { - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory - - private val viewModel by viewModels { viewModelFactory } + private val viewModel by viewModels() private var binding by autoCleared() override fun onCreateView( diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailViewModel.kt index 549f616..e333657 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvdetail/TvDetailViewModel.kt @@ -1,15 +1,16 @@ package com.mustafa.movieguideapp.view.ui.tv.tvdetail +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.* import com.mustafa.movieguideapp.repository.TvRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class TvDetailViewModel @Inject -constructor(private val repository: TvRepository) : ViewModel() { +class TvDetailViewModel @ViewModelInject constructor( + private val repository: TvRepository +) : ViewModel() { private val tvIdLiveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListFragment.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListFragment.kt index 7d89c1e..9cd354b 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListFragment.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListFragment.kt @@ -9,36 +9,31 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mustafa.movieguideapp.R import com.mustafa.movieguideapp.binding.FragmentDataBindingComponent import com.mustafa.movieguideapp.databinding.FragmentTvsBinding -import com.mustafa.movieguideapp.di.Injectable import com.mustafa.movieguideapp.models.Status import com.mustafa.movieguideapp.utils.autoCleared import com.mustafa.movieguideapp.view.adapter.TvListAdapter import com.mustafa.movieguideapp.view.ui.common.AppExecutors import com.mustafa.movieguideapp.view.ui.common.RetryCallback +import dagger.hilt.android.AndroidEntryPoint import kotlinx.android.synthetic.main.fragment_tvs.* import kotlinx.android.synthetic.main.toolbar_search.* import javax.inject.Inject -class TvListFragment : Fragment(), Injectable { - - @Inject - lateinit var viewModelFactory: ViewModelProvider.Factory +@AndroidEntryPoint +class TvListFragment : Fragment() { @Inject lateinit var appExecutors: AppExecutors var dataBindingComponent: DataBindingComponent = FragmentDataBindingComponent(this) - private val viewModel by viewModels { - viewModelFactory - } + private val viewModel by viewModels() private var binding by autoCleared() private var adapter by autoCleared() diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListViewModel.kt b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListViewModel.kt index 6453f36..5cddfdc 100644 --- a/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListViewModel.kt +++ b/app/src/main/java/com/mustafa/movieguideapp/view/ui/tv/tvlist/TvListViewModel.kt @@ -1,5 +1,6 @@ package com.mustafa.movieguideapp.view.ui.tv.tvlist +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations @@ -9,11 +10,11 @@ import com.mustafa.movieguideapp.models.entity.Tv import com.mustafa.movieguideapp.repository.DiscoverRepository import com.mustafa.movieguideapp.testing.OpenForTesting import com.mustafa.movieguideapp.utils.AbsentLiveData -import javax.inject.Inject @OpenForTesting -class TvListViewModel @Inject -constructor(private val discoverRepository: DiscoverRepository) : ViewModel() { +class TvListViewModel @ViewModelInject constructor( + private val discoverRepository: DiscoverRepository +) : ViewModel() { private var pageNumber = 1 diff --git a/app/src/main/java/com/mustafa/movieguideapp/view/viewholder/Base ViewHolder.kt b/app/src/main/java/com/mustafa/movieguideapp/view/viewholder/BaseViewHolder.kt similarity index 100% rename from app/src/main/java/com/mustafa/movieguideapp/view/viewholder/Base ViewHolder.kt rename to app/src/main/java/com/mustafa/movieguideapp/view/viewholder/BaseViewHolder.kt diff --git a/build.gradle b/build.gradle index e8dd77c..ee5b762 100644 --- a/build.gradle +++ b/build.gradle @@ -15,10 +15,11 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0' + classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navVersion" classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion" + classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28.3-alpha' } }