From 2bfbade41ca4df58c4b0e79c5d0192e4015c98d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vi=CC=81ctor=20Gonza=CC=81lez?= Date: Tue, 10 Apr 2018 17:26:06 +0200 Subject: [PATCH 1/3] Migrate to Kodein 5.0. --- app/build.gradle.kts | 56 +++---- .../com/antonioleiva/bandhookkotlin/App.kt | 28 ++-- .../bandhookkotlin/di/ActivityModule.kt | 17 -- .../bandhookkotlin/di/AppModules.kt | 84 ++++++++++ .../bandhookkotlin/di/ApplicationComponent.kt | 22 --- .../bandhookkotlin/di/ApplicationModule.kt | 42 ----- .../bandhookkotlin/di/DataModule.kt | 58 ------- .../bandhookkotlin/di/DomainModule.kt | 30 ---- .../bandhookkotlin/di/RepositoryModule.kt | 25 --- .../bandhookkotlin/di/qualifier/ApiKey.kt | 6 - .../di/qualifier/ApplicationQualifier.kt | 6 - .../di/qualifier/CacheDuration.kt | 6 - .../di/qualifier/LanguageSelection.kt | 6 - .../bandhookkotlin/di/scope/ActivityScope.kt | 6 - .../album/AlbumActivityComponent.kt | 11 -- .../subcomponent/album/AlbumActivityModule.kt | 45 ------ .../detail/ArtistActivityComponent.kt | 12 -- .../detail/ArtistActivityModule.kt | 47 ------ .../main/MainActivityComponent.kt | 12 -- .../subcomponent/main/MainActivityModule.kt | 31 ---- .../ui/activity/BaseActivity.kt | 5 - .../ui/screens/album/AlbumActivity.kt | 148 ++++++++---------- .../ui/screens/detail/ArtistActivity.kt | 80 +++++----- .../ui/screens/main/MainActivity.kt | 50 +++--- app/src/main/res/values/strings.xml | 2 + buildSrc/src/main/java/Config.kt | 8 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 27 files changed, 263 insertions(+), 582 deletions(-) delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/ActivityModule.kt create mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/AppModules.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationComponent.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationModule.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/DataModule.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/DomainModule.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/RepositoryModule.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApiKey.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApplicationQualifier.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/CacheDuration.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/LanguageSelection.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/scope/ActivityScope.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityComponent.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityModule.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityComponent.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityModule.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityComponent.kt delete mode 100644 app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityModule.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a28b90c..fcde7ce 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -48,34 +48,34 @@ android { } dependencies { - compile(Config.Libs.kotlin_std) - compile(Config.Libs.appcompat) - compile(Config.Libs.recyclerview) - compile(Config.Libs.cardview) - compile(Config.Libs.palette) - compile(Config.Libs.design) - compile(Config.Libs.eventbus) - compile(Config.Libs.picasso) - compile(Config.Libs.okhttp) - compile(Config.Libs.okhttp_interceptor) - compile(Config.Libs.retrofit) - compile(Config.Libs.retrofit_gson) - compile(Config.Libs.jobqueue) - compile(Config.Libs.anko_sdk15) - compile(Config.Libs.anko_support) - compile(Config.Libs.anko_appcompat) - compile(Config.Libs.anko_design) - compile(Config.Libs.anko_cardview) - compile(Config.Libs.anko_recyclerview) - kapt(Config.Libs.dagger_compiler) - compile(Config.Libs.dagger) + implementation(Config.Libs.kotlin_std) + implementation(Config.Libs.appcompat) + implementation(Config.Libs.recyclerview) + implementation(Config.Libs.cardview) + implementation(Config.Libs.palette) + implementation(Config.Libs.design) + implementation(Config.Libs.eventbus) + implementation(Config.Libs.picasso) + implementation(Config.Libs.okhttp) + implementation(Config.Libs.okhttp_interceptor) + implementation(Config.Libs.retrofit) + implementation(Config.Libs.retrofit_gson) + implementation(Config.Libs.jobqueue) + implementation(Config.Libs.anko_sdk15) + implementation(Config.Libs.anko_support) + implementation(Config.Libs.anko_appcompat) + implementation(Config.Libs.anko_design) + implementation(Config.Libs.anko_cardview) + implementation(Config.Libs.anko_recyclerview) + implementation(Config.Libs.kodein_generic_jvm) + implementation(Config.Libs.kodein_android) - testCompile(Config.TestLibs.junit) - testCompile(Config.TestLibs.mockito) + testImplementation(Config.TestLibs.junit) + testImplementation(Config.TestLibs.mockito) - androidTestCompile(Config.TestLibs.mockito) - androidTestCompile(Config.TestLibs.dexmaker) - androidTestCompile(Config.TestLibs.dexmaker_mockito) - androidTestCompile(Config.TestLibs.annotations) - androidTestCompile(Config.TestLibs.espresso) + androidTestImplementation(Config.TestLibs.mockito) + androidTestImplementation(Config.TestLibs.dexmaker) + androidTestImplementation(Config.TestLibs.dexmaker_mockito) + androidTestImplementation(Config.TestLibs.annotations) + androidTestImplementation(Config.TestLibs.espresso) } \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt index 462d15c..44aff12 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt @@ -17,25 +17,19 @@ package com.antonioleiva.bandhookkotlin import android.app.Application -import com.antonioleiva.bandhookkotlin.di.ApplicationComponent -import com.antonioleiva.bandhookkotlin.di.ApplicationModule -import com.antonioleiva.bandhookkotlin.di.DaggerApplicationComponent +import com.antonioleiva.bandhookkotlin.di.* +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware +import org.kodein.di.android.androidModule -class App : Application() { +class App : Application(), KodeinAware { - companion object { - lateinit var graph: ApplicationComponent - } - - override fun onCreate() { - super.onCreate() - initializeDagger() - } - - private fun initializeDagger() { - graph = DaggerApplicationComponent.builder() - .applicationModule(ApplicationModule(this)) - .build() + override val kodein = Kodein.lazy { + import(androidModule(this@App)) + import(appModule(this@App)) + import(dataModule(this@App)) + import(domainModule) + import(repositoryModule) } } diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ActivityModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ActivityModule.kt deleted file mode 100644 index cb2f4de..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ActivityModule.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di - -import android.content.Context -import android.support.v7.app.AppCompatActivity -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import dagger.Module -import dagger.Provides - -@Module -abstract class ActivityModule(protected val activity: AppCompatActivity) { - - @Provides @ActivityScope - fun provideActivity(): AppCompatActivity = activity - - @Provides @ActivityScope - fun provideActiviyContext(): Context = activity.baseContext -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/AppModules.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/AppModules.kt new file mode 100644 index 0000000..acf1fc7 --- /dev/null +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/AppModules.kt @@ -0,0 +1,84 @@ +package com.antonioleiva.bandhookkotlin.di + +import android.content.* +import com.antonioleiva.bandhookkotlin.* +import com.antonioleiva.bandhookkotlin.BuildConfig +import com.antonioleiva.bandhookkotlin.R +import com.antonioleiva.bandhookkotlin.data.* +import com.antonioleiva.bandhookkotlin.data.lastfm.* +import com.antonioleiva.bandhookkotlin.domain.* +import com.antonioleiva.bandhookkotlin.domain.interactor.* +import com.antonioleiva.bandhookkotlin.domain.interactor.base.* +import com.antonioleiva.bandhookkotlin.domain.repository.* +import com.antonioleiva.bandhookkotlin.repository.* +import com.birbit.android.jobqueue.* +import com.squareup.picasso.* +import okhttp3.* +import okhttp3.Cache +import okhttp3.logging.* +import org.kodein.di.Kodein +import org.kodein.di.generic.bind +import org.kodein.di.generic.instance +import org.kodein.di.generic.provider +import org.kodein.di.generic.singleton +import retrofit2.* +import retrofit2.converter.gson.* +import java.util.* + + +enum class Qualifiers { + ApplicationContext, + LanguageSelection, + ApiKey, + CacheDuration +} + +fun appModule(app: App) = Kodein.Module { + bind() from singleton { app } + bind(Qualifiers.ApplicationContext) with singleton { app } + bind() with singleton { BusImpl() } + bind() from singleton { Picasso.Builder(app).build() } + bind() with singleton { CustomJobManager(app) } + bind() with singleton { InteractorExecutorImpl(instance(), instance()) } + bind(Qualifiers.LanguageSelection) with singleton { Locale.getDefault().language } +} + +fun dataModule(appContext: Context) = Kodein.Module { + + bind() from singleton { Cache(appContext.cacheDir, 10 * 1024 * 1024.toLong()) } + bind(Qualifiers.ApiKey) from singleton { appContext.getString(R.string.last_fm_api_key) } + bind(Qualifiers.CacheDuration) from singleton { appContext.resources.getInteger(R.integer.cache_duration) } + bind() with singleton { LastFmRequestInterceptor(instance(Qualifiers.ApiKey), instance(Qualifiers.CacheDuration)) } + + bind() from singleton { + OkHttpClient().newBuilder() + .cache(instance()) + .addInterceptor(instance()) + .addInterceptor(HttpLoggingInterceptor().apply { + level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE + }) + .build() + } + + bind() from singleton { + Retrofit.Builder() + .baseUrl("http://ws.audioscrobbler.com") + .client(instance()) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + bind() from singleton { instance().create(LastFmService::class.java) } +} + +val domainModule = Kodein.Module { + bind() from provider { GetRecommendedArtistsInteractor(instance()) } + bind() from provider { GetArtistDetailInteractor(instance()) } + bind() from provider { GetTopAlbumsInteractor(instance()) } + bind() from provider { GetAlbumDetailInteractor(instance()) } +} + +val repositoryModule = Kodein.Module { + bind() with singleton { ArtistRepositoryImpl(listOf(CloudArtistDataSet(instance(Qualifiers.LanguageSelection), instance()))) } + bind() with singleton { AlbumRepositoryImpl(listOf(CloudAlbumDataSet(instance()))) } +} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationComponent.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationComponent.kt deleted file mode 100644 index d49be53..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationComponent.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di - -import com.antonioleiva.bandhookkotlin.di.subcomponent.album.AlbumActivityComponent -import com.antonioleiva.bandhookkotlin.di.subcomponent.album.AlbumActivityModule -import com.antonioleiva.bandhookkotlin.di.subcomponent.detail.ArtistActivityComponent -import com.antonioleiva.bandhookkotlin.di.subcomponent.detail.ArtistActivityModule -import com.antonioleiva.bandhookkotlin.di.subcomponent.main.MainActivityComponent -import com.antonioleiva.bandhookkotlin.di.subcomponent.main.MainActivityModule -import dagger.Component -import javax.inject.Singleton - -@Singleton -@Component( - modules = [(ApplicationModule::class), (DataModule::class), (RepositoryModule::class), - (DomainModule::class)] -) -interface ApplicationComponent { - - fun plus(module: MainActivityModule): MainActivityComponent - fun plus(module: ArtistActivityModule): ArtistActivityComponent - fun plus(module: AlbumActivityModule): AlbumActivityComponent -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationModule.kt deleted file mode 100644 index a98f9b4..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/ApplicationModule.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di - -import android.content.Context -import com.antonioleiva.bandhookkotlin.App -import com.antonioleiva.bandhookkotlin.di.qualifier.ApplicationQualifier -import com.antonioleiva.bandhookkotlin.di.qualifier.LanguageSelection -import com.antonioleiva.bandhookkotlin.domain.BusImpl -import com.antonioleiva.bandhookkotlin.domain.interactor.base.Bus -import com.antonioleiva.bandhookkotlin.domain.interactor.base.CustomJobManager -import com.antonioleiva.bandhookkotlin.domain.interactor.base.InteractorExecutor -import com.antonioleiva.bandhookkotlin.domain.interactor.base.InteractorExecutorImpl -import com.birbit.android.jobqueue.JobManager -import com.squareup.picasso.Picasso -import dagger.Module -import dagger.Provides -import java.util.* -import javax.inject.Singleton - -@Module -class ApplicationModule(private val app: App) { - - @Provides @Singleton - fun provideApplication(): App = app - - @Provides @Singleton @ApplicationQualifier - fun provideApplicationContext(): Context = app - - @Provides @Singleton - fun provideBus(): Bus = BusImpl() - - @Provides @Singleton - fun providePicasso(@ApplicationQualifier context: Context): Picasso = Picasso.Builder(context).build() - - @Provides @Singleton - fun provideJobManager(@ApplicationQualifier context: Context): JobManager = CustomJobManager(context) - - @Provides @Singleton - fun provideInteractorExecutor(jobManager: JobManager, bus: Bus): InteractorExecutor = InteractorExecutorImpl(jobManager, bus) - - @Provides @Singleton @LanguageSelection - fun provideLanguageSelection(): String = Locale.getDefault().language -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/DataModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/DataModule.kt deleted file mode 100644 index fc121cd..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/DataModule.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di - -import android.content.Context -import com.antonioleiva.bandhookkotlin.BuildConfig -import com.antonioleiva.bandhookkotlin.R -import com.antonioleiva.bandhookkotlin.data.lastfm.LastFmRequestInterceptor -import com.antonioleiva.bandhookkotlin.data.lastfm.LastFmService -import com.antonioleiva.bandhookkotlin.di.qualifier.ApiKey -import com.antonioleiva.bandhookkotlin.di.qualifier.ApplicationQualifier -import com.antonioleiva.bandhookkotlin.di.qualifier.CacheDuration -import dagger.Module -import dagger.Provides -import okhttp3.Cache -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import okhttp3.logging.HttpLoggingInterceptor.Level -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import javax.inject.Singleton - -@Module -class DataModule { - - @Provides @Singleton - fun provideCache(@ApplicationQualifier context: Context) = Cache(context.cacheDir, 10 * 1024 * 1024.toLong()) - - @Provides @Singleton @ApiKey - fun provideApiKey(@ApplicationQualifier context: Context): String = context.getString(R.string.last_fm_api_key) - - @Provides @Singleton @CacheDuration - fun provideCacheDuration(@ApplicationQualifier context: Context) = context.resources.getInteger(R.integer.cache_duration) - - @Provides @Singleton - fun provideOkHttpClient(cache: Cache, interceptor: LastFmRequestInterceptor): OkHttpClient = - OkHttpClient().newBuilder() - .cache(cache) - .addInterceptor(interceptor) - .addInterceptor(HttpLoggingInterceptor().apply { - level = if (BuildConfig.DEBUG) Level.BODY else Level.NONE - }) - .build() - - @Provides @Singleton - fun provideRequestInterceptor(@ApiKey apiKey: String, @CacheDuration cacheDuration: Int) - = LastFmRequestInterceptor(apiKey, cacheDuration) - - @Provides @Singleton - fun provideRestAdapter(client: OkHttpClient): Retrofit { - return Retrofit.Builder() - .baseUrl("http://ws.audioscrobbler.com") - .client(client) - .addConverterFactory(GsonConverterFactory.create()) - .build() - } - - @Provides @Singleton - fun providesLastFmService(retrofit: Retrofit): LastFmService = retrofit.create(LastFmService::class.java) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/DomainModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/DomainModule.kt deleted file mode 100644 index 3ad7614..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/DomainModule.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di - -import com.antonioleiva.bandhookkotlin.domain.interactor.GetAlbumDetailInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.GetArtistDetailInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.GetRecommendedArtistsInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.GetTopAlbumsInteractor -import com.antonioleiva.bandhookkotlin.domain.repository.AlbumRepository -import com.antonioleiva.bandhookkotlin.domain.repository.ArtistRepository -import dagger.Module -import dagger.Provides - -@Module -class DomainModule { - - @Provides - fun provideRecommendedArtistsInteractor(artistRepository: ArtistRepository) - = GetRecommendedArtistsInteractor(artistRepository) - - @Provides - fun provideArtistDetailInteractor(artistRepository: ArtistRepository) - = GetArtistDetailInteractor(artistRepository) - - @Provides - fun provideTopAlbumsInteractor(albumRepository: AlbumRepository) - = GetTopAlbumsInteractor(albumRepository) - - @Provides - fun provideAlbumsDetailInteractor(albumRepository: AlbumRepository) - = GetAlbumDetailInteractor(albumRepository) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/RepositoryModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/RepositoryModule.kt deleted file mode 100644 index 1776c9a..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/RepositoryModule.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di - -import com.antonioleiva.bandhookkotlin.data.CloudAlbumDataSet -import com.antonioleiva.bandhookkotlin.data.CloudArtistDataSet -import com.antonioleiva.bandhookkotlin.data.lastfm.LastFmService -import com.antonioleiva.bandhookkotlin.di.qualifier.LanguageSelection -import com.antonioleiva.bandhookkotlin.domain.repository.AlbumRepository -import com.antonioleiva.bandhookkotlin.domain.repository.ArtistRepository -import com.antonioleiva.bandhookkotlin.repository.AlbumRepositoryImpl -import com.antonioleiva.bandhookkotlin.repository.ArtistRepositoryImpl -import dagger.Module -import dagger.Provides -import javax.inject.Singleton - -@Module -class RepositoryModule { - - @Provides @Singleton - fun provideArtistRepo(@LanguageSelection language: String, lastFmService: LastFmService): ArtistRepository - = ArtistRepositoryImpl(listOf(CloudArtistDataSet(language, lastFmService))) - - @Provides @Singleton - fun provideAlbumRepo(lastFmService: LastFmService): AlbumRepository - = AlbumRepositoryImpl(listOf(CloudAlbumDataSet(lastFmService))) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApiKey.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApiKey.kt deleted file mode 100644 index 7b809ec..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApiKey.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.qualifier - -import javax.inject.Qualifier - -@Qualifier -annotation class ApiKey \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApplicationQualifier.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApplicationQualifier.kt deleted file mode 100644 index a93b95d..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/ApplicationQualifier.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.qualifier - -import javax.inject.Qualifier - -@Qualifier -annotation class ApplicationQualifier \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/CacheDuration.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/CacheDuration.kt deleted file mode 100644 index 0b44f25..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/CacheDuration.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.qualifier - -import javax.inject.Qualifier - -@Qualifier -annotation class CacheDuration \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/LanguageSelection.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/LanguageSelection.kt deleted file mode 100644 index 1b2d426..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/qualifier/LanguageSelection.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.qualifier - -import javax.inject.Qualifier - -@Qualifier -annotation class LanguageSelection diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/scope/ActivityScope.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/scope/ActivityScope.kt deleted file mode 100644 index d8d3655..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/scope/ActivityScope.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.scope - -import javax.inject.Scope - -@Scope -annotation class ActivityScope diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityComponent.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityComponent.kt deleted file mode 100644 index b4165fb..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityComponent.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.subcomponent.album - -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import com.antonioleiva.bandhookkotlin.ui.screens.album.AlbumActivity -import dagger.Subcomponent - -@ActivityScope -@Subcomponent(modules = [(AlbumActivityModule::class)]) -interface AlbumActivityComponent { - fun injectTo(activity: AlbumActivity) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityModule.kt deleted file mode 100644 index 68371a8..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/album/AlbumActivityModule.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.subcomponent.album - -import android.content.Context -import android.support.v7.widget.LinearLayoutManager -import com.antonioleiva.bandhookkotlin.di.ActivityModule -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import com.antonioleiva.bandhookkotlin.domain.interactor.GetAlbumDetailInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.base.Bus -import com.antonioleiva.bandhookkotlin.domain.interactor.base.InteractorExecutor -import com.antonioleiva.bandhookkotlin.ui.adapter.TracksAdapter -import com.antonioleiva.bandhookkotlin.ui.entity.mapper.AlbumDetailDataMapper -import com.antonioleiva.bandhookkotlin.ui.entity.mapper.TrackDataMapper -import com.antonioleiva.bandhookkotlin.ui.presenter.AlbumPresenter -import com.antonioleiva.bandhookkotlin.ui.screens.album.AlbumActivity -import com.antonioleiva.bandhookkotlin.ui.view.AlbumView -import dagger.Module -import dagger.Provides - -@Module -class AlbumActivityModule(activity: AlbumActivity) : ActivityModule(activity) { - - @Provides @ActivityScope - fun provideAlbumView(): AlbumView = activity as AlbumView - - @Provides @ActivityScope - fun provideAlbumDataMapper() = AlbumDetailDataMapper() - - @Provides @ActivityScope - fun provideTrackDataMapper() = TrackDataMapper() - - @Provides @ActivityScope - fun provideLinearLayoutManager(context: Context) = LinearLayoutManager(context) - - @Provides @ActivityScope - fun provideTracksAdapter() = TracksAdapter() - - @Provides @ActivityScope - fun provideAlbumPresenter(view: AlbumView, - bus: Bus, - albumInteractor: GetAlbumDetailInteractor, - interactorExecutor: InteractorExecutor, - albumDetailDataMapper: AlbumDetailDataMapper) - = AlbumPresenter(view, bus, albumInteractor, - interactorExecutor, albumDetailDataMapper) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityComponent.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityComponent.kt deleted file mode 100644 index 7e55350..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityComponent.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.subcomponent.detail - -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import com.antonioleiva.bandhookkotlin.ui.screens.detail.ArtistActivity -import dagger.Subcomponent - -@ActivityScope -@Subcomponent(modules = [(ArtistActivityModule::class)]) -interface ArtistActivityComponent { - - fun injectTo(activity: ArtistActivity) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityModule.kt deleted file mode 100644 index 6f6a27c..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/detail/ArtistActivityModule.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.subcomponent.detail - -import com.antonioleiva.bandhookkotlin.di.ActivityModule -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import com.antonioleiva.bandhookkotlin.domain.interactor.GetArtistDetailInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.GetTopAlbumsInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.base.Bus -import com.antonioleiva.bandhookkotlin.domain.interactor.base.InteractorExecutor -import com.antonioleiva.bandhookkotlin.ui.entity.mapper.ArtistDetailDataMapper -import com.antonioleiva.bandhookkotlin.ui.entity.mapper.ImageTitleDataMapper -import com.antonioleiva.bandhookkotlin.ui.presenter.ArtistPresenter -import com.antonioleiva.bandhookkotlin.ui.screens.detail.AlbumsFragment -import com.antonioleiva.bandhookkotlin.ui.screens.detail.ArtistActivity -import com.antonioleiva.bandhookkotlin.ui.screens.detail.BiographyFragment -import com.antonioleiva.bandhookkotlin.ui.view.ArtistView -import dagger.Module -import dagger.Provides - -@Module -class ArtistActivityModule(activity: ArtistActivity) : ActivityModule(activity) { - - @Provides @ActivityScope - fun provideArtistView(): ArtistView = activity as ArtistView - - @Provides @ActivityScope - fun provideArtistDataMapper() = ArtistDetailDataMapper() - - @Provides @ActivityScope - fun provideImageTitleDataMapper() = ImageTitleDataMapper() - - @Provides @ActivityScope - fun provideActivityPresenter(view: ArtistView, - bus: Bus, - artistDetailInteractor: GetArtistDetailInteractor, - topAlbumsInteractor: GetTopAlbumsInteractor, - interactorExecutor: InteractorExecutor, - detailDataMapper: ArtistDetailDataMapper, - imageTitleDataMapper: ImageTitleDataMapper) - = ArtistPresenter(view, bus, artistDetailInteractor, topAlbumsInteractor, - interactorExecutor, detailDataMapper, imageTitleDataMapper) - - @Provides @ActivityScope - fun provideAlbumsFragment() = AlbumsFragment() - - @Provides @ActivityScope - fun provideBiographyFragment() = BiographyFragment() -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityComponent.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityComponent.kt deleted file mode 100644 index dae22f0..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityComponent.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.subcomponent.main - -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import com.antonioleiva.bandhookkotlin.ui.screens.main.MainActivity -import dagger.Subcomponent - -@ActivityScope -@Subcomponent(modules = [(MainActivityModule::class)]) -interface MainActivityComponent { - - fun injectTo(activity: MainActivity) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityModule.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityModule.kt deleted file mode 100644 index 26ed01f..0000000 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/di/subcomponent/main/MainActivityModule.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.antonioleiva.bandhookkotlin.di.subcomponent.main - -import com.antonioleiva.bandhookkotlin.di.ActivityModule -import com.antonioleiva.bandhookkotlin.di.scope.ActivityScope -import com.antonioleiva.bandhookkotlin.domain.interactor.GetRecommendedArtistsInteractor -import com.antonioleiva.bandhookkotlin.domain.interactor.base.Bus -import com.antonioleiva.bandhookkotlin.domain.interactor.base.InteractorExecutor -import com.antonioleiva.bandhookkotlin.ui.adapter.ImageTitleAdapter -import com.antonioleiva.bandhookkotlin.ui.entity.mapper.ImageTitleDataMapper -import com.antonioleiva.bandhookkotlin.ui.presenter.MainPresenter -import com.antonioleiva.bandhookkotlin.ui.screens.main.MainActivity -import com.antonioleiva.bandhookkotlin.ui.view.MainView -import dagger.Module -import dagger.Provides - -@Module -class MainActivityModule(activity: MainActivity) : ActivityModule(activity) { - - @Provides @ActivityScope - fun provideMainView(): MainView = activity as MainView - - @Provides @ActivityScope - fun provideImageTitleMapper() = ImageTitleDataMapper() - - @Provides @ActivityScope - fun provideMainPresenter(view: MainView, bus: Bus, - recommendedArtistsInteractor: GetRecommendedArtistsInteractor, - interactorExecutor: InteractorExecutor, - imageMapper: ImageTitleDataMapper) = MainPresenter(view, bus, recommendedArtistsInteractor, - interactorExecutor, imageMapper) -} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/activity/BaseActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/activity/BaseActivity.kt index 2d697d5..35465a7 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/activity/BaseActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/activity/BaseActivity.kt @@ -18,8 +18,6 @@ package com.antonioleiva.bandhookkotlin.ui.activity import android.os.Bundle import android.support.v7.app.AppCompatActivity -import com.antonioleiva.bandhookkotlin.App -import com.antonioleiva.bandhookkotlin.di.ApplicationComponent import org.jetbrains.anko.setContentView abstract class BaseActivity> : AppCompatActivity() { @@ -33,10 +31,7 @@ abstract class BaseActivity).setContentView(this) setSupportActionBar(ui.toolbar) } - - abstract fun injectDependencies(applicationComponent: ApplicationComponent) } \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt index bbffd3f..2534561 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt @@ -16,59 +16,60 @@ package com.antonioleiva.bandhookkotlin.ui.screens.album -import android.animation.Animator -import android.animation.AnimatorListenerAdapter -import android.annotation.SuppressLint -import android.os.Bundle -import android.support.annotation.VisibleForTesting -import android.support.v7.widget.LinearLayoutManager -import android.view.MenuItem -import android.view.ViewPropertyAnimator -import android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS -import com.antonioleiva.bandhookkotlin.R -import com.antonioleiva.bandhookkotlin.di.ApplicationComponent -import com.antonioleiva.bandhookkotlin.di.subcomponent.album.AlbumActivityModule -import com.antonioleiva.bandhookkotlin.ui.activity.BaseActivity -import com.antonioleiva.bandhookkotlin.ui.adapter.TracksAdapter -import com.antonioleiva.bandhookkotlin.ui.entity.AlbumDetail -import com.antonioleiva.bandhookkotlin.ui.entity.TrackDetail -import com.antonioleiva.bandhookkotlin.ui.entity.mapper.TrackDataMapper -import com.antonioleiva.bandhookkotlin.ui.presenter.AlbumPresenter -import com.antonioleiva.bandhookkotlin.ui.util.getNavigationId -import com.antonioleiva.bandhookkotlin.ui.util.supportsLollipop -import com.antonioleiva.bandhookkotlin.ui.view.AlbumView -import com.squareup.picasso.Callback -import com.squareup.picasso.Picasso -import org.jetbrains.anko.dimen -import javax.inject.Inject - -class AlbumActivity : BaseActivity(), AlbumView { +import android.animation.* +import android.annotation.* +import android.os.* +import android.support.v7.widget.* +import android.view.* +import com.antonioleiva.bandhookkotlin.* +import com.antonioleiva.bandhookkotlin.ui.activity.* +import com.antonioleiva.bandhookkotlin.ui.adapter.* +import com.antonioleiva.bandhookkotlin.ui.entity.* +import com.antonioleiva.bandhookkotlin.ui.entity.mapper.* +import com.antonioleiva.bandhookkotlin.ui.presenter.* +import com.antonioleiva.bandhookkotlin.ui.util.* +import com.antonioleiva.bandhookkotlin.ui.view.* +import com.squareup.picasso.* +import org.jetbrains.anko.* +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware +import org.kodein.di.android.closestKodein +import org.kodein.di.generic.bind +import org.kodein.di.generic.instance +import org.kodein.di.generic.provider + +class AlbumActivity : BaseActivity(), AlbumView, KodeinAware { + + private val _parentKodein by closestKodein() + + override val kodein: Kodein = Kodein { + extend(_parentKodein) + bind() from provider { + AlbumPresenter(this@AlbumActivity, instance(), instance(), instance(), + AlbumDetailDataMapper()) + + } + + bind() from provider { TrackDataMapper() } + } override val ui = AlbumLayout() companion object { - private const val LIST_ANIMATION_START_DELAY = 500L - private const val NO_TRANSLATION = 0f - private const val TRANSPARENT = 0f + private val listAnimationStartDelay = 500L + private val noTranslation = 0f + private val transparent = 0f } val albumListBreakingEdgeHeight by lazy { dimen(R.dimen.album_breaking_edge_height).toFloat() } - @Inject - @VisibleForTesting - lateinit var presenter: AlbumPresenter - - @Inject - lateinit var trackDataMapper: TrackDataMapper + val presenter: AlbumPresenter by instance() - @Inject - lateinit var adapter: TracksAdapter + val trackDataMapper: TrackDataMapper by instance() - @Inject - lateinit var layoutManager: LinearLayoutManager + val adapter: TracksAdapter = TracksAdapter() - @Inject - lateinit var picasso: Picasso + val picasso: Picasso by instance() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -77,11 +78,6 @@ class AlbumActivity : BaseActivity(), AlbumView { setUpTrackList() } - override fun injectDependencies(applicationComponent: ApplicationComponent) { - applicationComponent.plus(AlbumActivityModule(this)) - .injectTo(this) - } - @SuppressLint("NewApi") private fun setUpTransition() { supportPostponeEnterTransition() @@ -90,7 +86,7 @@ class AlbumActivity : BaseActivity(), AlbumView { private fun setUpTrackList() { ui.trackList.adapter = adapter - ui.trackList.layoutManager = layoutManager + ui.trackList.layoutManager = LinearLayoutManager(this) ui.listCard.translationY = -albumListBreakingEdgeHeight } @@ -111,30 +107,23 @@ class AlbumActivity : BaseActivity(), AlbumView { } override fun showAlbum(albumDetail: AlbumDetail?) { - - albumDetail?.let(this::updateAlbumDetail) - ?: postponeTransitions() - - } - - private fun updateAlbumDetail(albumDetail: AlbumDetail) { - picasso.load(albumDetail.url).fit().centerCrop().into(ui.image, object : Callback.EmptyCallback() { - override fun onSuccess() { - makeStatusBarTransparent() - supportStartPostponedEnterTransition() - populateTrackList(trackDataMapper.transform(albumDetail.tracks)) - animateTrackListUp() - } - }) - } - - private fun postponeTransitions() { - supportStartPostponedEnterTransition() - supportFinishAfterTransition() + if (albumDetail != null) { + picasso.load(albumDetail.url).fit().centerCrop().into(ui.image, object : Callback.EmptyCallback() { + override fun onSuccess() { + makeStatusBarTransparent() + supportStartPostponedEnterTransition() + populateTrackList(trackDataMapper.transform(albumDetail.tracks)) + animateTrackListUp() + } + }) + } else { + supportStartPostponedEnterTransition() + supportFinishAfterTransition() + } } private fun animateTrackListUp() { - ui.listCard.animate().setStartDelay(LIST_ANIMATION_START_DELAY).translationY(NO_TRANSLATION) + ui.listCard.animate().setStartDelay(listAnimationStartDelay).translationY(noTranslation) } private fun populateTrackList(trackDetails: List) { @@ -144,7 +133,8 @@ class AlbumActivity : BaseActivity(), AlbumView { @SuppressLint("InlinedApi") private fun makeStatusBarTransparent() { supportsLollipop { - window.setFlags(FLAG_TRANSLUCENT_STATUS, FLAG_TRANSLUCENT_STATUS) + window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, + WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) } } @@ -157,18 +147,10 @@ class AlbumActivity : BaseActivity(), AlbumView { } override fun onBackPressed() { - ui.listCard.animate().alpha(TRANSPARENT) - .onAnimationEnd { supportFinishAfterTransition() } + ui.listCard.animate().alpha(transparent).setListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator?) { + supportFinishAfterTransition() + } + }) } -} - -inline fun ViewPropertyAnimator.onAnimationEnd( - crossinline continuation: (Animator) -> Unit) { - - setListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - continuation(animation) - } - }) - } \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt index fca03ad..0ee1ec3 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt @@ -16,47 +16,50 @@ package com.antonioleiva.bandhookkotlin.ui.screens.detail -import android.annotation.SuppressLint -import android.graphics.drawable.BitmapDrawable -import android.os.Bundle -import android.support.annotation.VisibleForTesting -import android.support.v7.graphics.Palette -import android.view.MenuItem -import android.view.WindowManager -import com.antonioleiva.bandhookkotlin.R -import com.antonioleiva.bandhookkotlin.di.ApplicationComponent -import com.antonioleiva.bandhookkotlin.di.subcomponent.detail.ArtistActivityModule -import com.antonioleiva.bandhookkotlin.ui.activity.BaseActivity -import com.antonioleiva.bandhookkotlin.ui.adapter.ArtistDetailPagerAdapter -import com.antonioleiva.bandhookkotlin.ui.entity.ArtistDetail -import com.antonioleiva.bandhookkotlin.ui.entity.ImageTitle -import com.antonioleiva.bandhookkotlin.ui.fragment.AlbumsFragmentContainer -import com.antonioleiva.bandhookkotlin.ui.presenter.AlbumsPresenter -import com.antonioleiva.bandhookkotlin.ui.presenter.ArtistPresenter -import com.antonioleiva.bandhookkotlin.ui.screens.album.AlbumActivity -import com.antonioleiva.bandhookkotlin.ui.util.getNavigationId -import com.antonioleiva.bandhookkotlin.ui.util.navigate -import com.antonioleiva.bandhookkotlin.ui.util.supportsLollipop -import com.antonioleiva.bandhookkotlin.ui.view.ArtistView -import com.squareup.picasso.Callback -import com.squareup.picasso.Picasso -import javax.inject.Inject - -class ArtistActivity : BaseActivity(), ArtistView, AlbumsFragmentContainer { +import android.annotation.* +import android.graphics.drawable.* +import android.os.* +import android.support.v7.graphics.* +import android.view.* +import com.antonioleiva.bandhookkotlin.* +import com.antonioleiva.bandhookkotlin.ui.activity.* +import com.antonioleiva.bandhookkotlin.ui.adapter.* +import com.antonioleiva.bandhookkotlin.ui.entity.* +import com.antonioleiva.bandhookkotlin.ui.entity.mapper.* +import com.antonioleiva.bandhookkotlin.ui.fragment.* +import com.antonioleiva.bandhookkotlin.ui.presenter.* +import com.antonioleiva.bandhookkotlin.ui.screens.album.* +import com.antonioleiva.bandhookkotlin.ui.util.* +import com.antonioleiva.bandhookkotlin.ui.view.* +import com.squareup.picasso.* +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware +import org.kodein.di.android.closestKodein +import org.kodein.di.generic.bind +import org.kodein.di.generic.instance +import org.kodein.di.generic.provider + +class ArtistActivity : BaseActivity(), ArtistView, AlbumsFragmentContainer, KodeinAware { + + private val _parentKodein by closestKodein() + + override val kodein: Kodein = Kodein { + extend(_parentKodein) + bind() from provider { + ArtistPresenter(this@ArtistActivity, instance(), instance(), instance(), instance(), + ArtistDetailDataMapper(), ImageTitleDataMapper()) + } + } override val ui = ArtistLayout() - @Inject @VisibleForTesting - lateinit var presenter: ArtistPresenter + val presenter: ArtistPresenter by instance() - @Inject - lateinit var picasso: Picasso + val picasso: Picasso by instance() - @Inject - lateinit var biographyFragment: BiographyFragment + val biographyFragment = BiographyFragment() - @Inject - lateinit var albumsFragment: AlbumsFragment + val albumsFragment = AlbumsFragment() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -67,11 +70,6 @@ class ArtistActivity : BaseActivity(), ArtistView, AlbumsFragmentC setUpTabLayout() } - override fun injectDependencies(applicationComponent: ApplicationComponent) { - applicationComponent.plus(ArtistActivityModule(this)) - .injectTo(this) - } - @SuppressLint("NewApi") private fun setUpTransition() { supportPostponeEnterTransition() @@ -160,4 +158,4 @@ class ArtistActivity : BaseActivity(), ArtistView, AlbumsFragmentC override fun getAlbumsPresenter(): AlbumsPresenter { return presenter } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt index 5ad792f..af0324a 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt @@ -16,26 +16,38 @@ package com.antonioleiva.bandhookkotlin.ui.screens.main -import android.os.Bundle -import android.view.View -import com.antonioleiva.bandhookkotlin.di.ApplicationComponent -import com.antonioleiva.bandhookkotlin.di.subcomponent.main.MainActivityModule -import com.antonioleiva.bandhookkotlin.ui.activity.BaseActivity -import com.antonioleiva.bandhookkotlin.ui.adapter.BaseAdapter -import com.antonioleiva.bandhookkotlin.ui.adapter.ImageTitleAdapter -import com.antonioleiva.bandhookkotlin.ui.entity.ImageTitle -import com.antonioleiva.bandhookkotlin.ui.presenter.MainPresenter -import com.antonioleiva.bandhookkotlin.ui.screens.detail.ArtistActivity -import com.antonioleiva.bandhookkotlin.ui.util.navigate -import com.antonioleiva.bandhookkotlin.ui.view.MainView -import javax.inject.Inject +import android.os.* +import android.view.* +import com.antonioleiva.bandhookkotlin.ui.activity.* +import com.antonioleiva.bandhookkotlin.ui.adapter.* +import com.antonioleiva.bandhookkotlin.ui.entity.* +import com.antonioleiva.bandhookkotlin.ui.entity.mapper.* +import com.antonioleiva.bandhookkotlin.ui.presenter.* +import com.antonioleiva.bandhookkotlin.ui.screens.detail.* +import com.antonioleiva.bandhookkotlin.ui.util.* +import com.antonioleiva.bandhookkotlin.ui.view.* +import org.kodein.di.Kodein +import org.kodein.di.KodeinAware +import org.kodein.di.android.closestKodein +import org.kodein.di.generic.bind +import org.kodein.di.generic.instance +import org.kodein.di.generic.provider -class MainActivity : BaseActivity(), MainView { +class MainActivity : BaseActivity(), MainView, KodeinAware { + + private val _parentKodein by closestKodein() + + override val kodein: Kodein = Kodein { + extend(_parentKodein) + bind() from provider { + MainPresenter(this@MainActivity, instance(), instance(), instance(), + ImageTitleDataMapper()) + } + } override val ui = MainLayout() - @Inject - lateinit var presenter: MainPresenter + val presenter: MainPresenter by instance() val adapter = ImageTitleAdapter { presenter.onArtistClicked(it) } @@ -44,11 +56,6 @@ class MainActivity : BaseActivity(), MainView { ui.recycler.adapter = adapter } - override fun injectDependencies(applicationComponent: ApplicationComponent) { - applicationComponent.plus(MainActivityModule(this)) - .injectTo(this) - } - override fun onResume() { super.onResume() presenter.onResume() @@ -67,6 +74,7 @@ class MainActivity : BaseActivity(), MainView { navigate(id, findItemById(id), BaseActivity.IMAGE_TRANSITION_NAME) } + @Suppress("UNCHECKED_CAST") private fun findItemById(id: String): View { val pos = adapter.findPositionById(id) val holder = ui.recycler.findViewHolderForLayoutPosition(pos) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7d9beaa..5e169a7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,4 +20,6 @@ Albums Bio + bb7e49ab41c4ba8b712b2d7faf234a09 + diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index fa79be2..6972e45 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -1,10 +1,10 @@ -private const val kotlinVersion = "1.2.21" +private const val kotlinVersion = "1.2.31" private const val androidGradleVersion = "3.0.1" // Compile dependencies private const val supportVersion = "27.0.2" private const val ankoVersion = "0.10.4" -private const val daggerVersion = "2.14.1" +private const val kodeinVersion = "5.0.0" private const val retrofitVersion = "2.3.0" private const val okhttpVersion = "3.9.1" private const val eventBusVersion = "2.4.1" @@ -52,8 +52,8 @@ object Config { val anko_design = "org.jetbrains.anko:anko-design:$ankoVersion" val anko_cardview = "org.jetbrains.anko:anko-cardview-v7:$ankoVersion" val anko_recyclerview = "org.jetbrains.anko:anko-recyclerview-v7:$ankoVersion" - val dagger_compiler = "com.google.dagger:dagger-compiler:$daggerVersion" - val dagger = "com.google.dagger:dagger:$daggerVersion" + val kodein_generic_jvm = "org.kodein.di:kodein-di-generic-jvm:$kodeinVersion" + val kodein_android = "org.kodein.di:kodein-di-framework-android:$kodeinVersion" } object TestLibs { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4e87ce6..f5cb2d3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip From f410f2dbf112c74a62188a1e4c80b16e1313ffb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vi=CC=81ctor=20Gonza=CC=81lez?= Date: Tue, 10 Apr 2018 17:51:12 +0200 Subject: [PATCH 2/3] Update Android support version. --- buildSrc/src/main/java/Config.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 6972e45..a1f74a7 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -2,7 +2,7 @@ private const val kotlinVersion = "1.2.31" private const val androidGradleVersion = "3.0.1" // Compile dependencies -private const val supportVersion = "27.0.2" +private const val supportVersion = "27.1.0" private const val ankoVersion = "0.10.4" private const val kodeinVersion = "5.0.0" private const val retrofitVersion = "2.3.0" From 3989051faf35de18a3fe4499ea7c3316e1fc9095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vi=CC=81ctor=20Gonza=CC=81lez?= Date: Tue, 10 Apr 2018 18:45:39 +0200 Subject: [PATCH 3/3] Fix lazy initializations. --- app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt | 2 +- .../bandhookkotlin/ui/screens/album/AlbumActivity.kt | 2 +- .../bandhookkotlin/ui/screens/detail/ArtistActivity.kt | 2 +- .../antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt index 44aff12..473e3d2 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/App.kt @@ -24,7 +24,7 @@ import org.kodein.di.android.androidModule class App : Application(), KodeinAware { - override val kodein = Kodein.lazy { + override val kodein = Kodein { import(androidModule(this@App)) import(appModule(this@App)) import(dataModule(this@App)) diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt index 2534561..760aa4c 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/album/AlbumActivity.kt @@ -42,7 +42,7 @@ class AlbumActivity : BaseActivity(), AlbumView, KodeinAware { private val _parentKodein by closestKodein() - override val kodein: Kodein = Kodein { + override val kodein: Kodein = Kodein.lazy { extend(_parentKodein) bind() from provider { AlbumPresenter(this@AlbumActivity, instance(), instance(), instance(), diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt index 0ee1ec3..ebe552a 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/detail/ArtistActivity.kt @@ -43,7 +43,7 @@ class ArtistActivity : BaseActivity(), ArtistView, AlbumsFragmentC private val _parentKodein by closestKodein() - override val kodein: Kodein = Kodein { + override val kodein: Kodein = Kodein.lazy { extend(_parentKodein) bind() from provider { ArtistPresenter(this@ArtistActivity, instance(), instance(), instance(), instance(), diff --git a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt index af0324a..eb3d837 100644 --- a/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt +++ b/app/src/main/java/com/antonioleiva/bandhookkotlin/ui/screens/main/MainActivity.kt @@ -37,7 +37,7 @@ class MainActivity : BaseActivity(), MainView, KodeinAware { private val _parentKodein by closestKodein() - override val kodein: Kodein = Kodein { + override val kodein: Kodein = Kodein.lazy { extend(_parentKodein) bind() from provider { MainPresenter(this@MainActivity, instance(), instance(), instance(),