From 9efd239523439a8cf09e112fec534ea1ab9a2255 Mon Sep 17 00:00:00 2001 From: Iiro Krankka Date: Fri, 3 Feb 2017 16:16:34 +0200 Subject: [PATCH] Removed unnecessary manual instantiation of usecases, because Dagger can do that for us. --- .../koffeemate/di/components/AppComponent.kt | 8 ++-- .../koffeemate/di/modules/AppModule.kt | 47 ------------------- .../koffeemate/di/modules/ThreadingModule.kt | 35 ++++++++++++++ .../koffeemate/usecases/LoadUsersUseCase.kt | 8 ++-- .../usecases/PostAccidentUseCase.kt | 8 ++-- .../usecases/SendCoffeeAnnouncementUseCase.kt | 8 ++-- 6 files changed, 53 insertions(+), 61 deletions(-) create mode 100644 app/src/main/java/com/codemate/koffeemate/di/modules/ThreadingModule.kt diff --git a/app/src/main/java/com/codemate/koffeemate/di/components/AppComponent.kt b/app/src/main/java/com/codemate/koffeemate/di/components/AppComponent.kt index 50bb9b4..2bb6c0e 100644 --- a/app/src/main/java/com/codemate/koffeemate/di/components/AppComponent.kt +++ b/app/src/main/java/com/codemate/koffeemate/di/components/AppComponent.kt @@ -16,10 +16,7 @@ package com.codemate.koffeemate.di.components -import com.codemate.koffeemate.di.modules.ActivityModule -import com.codemate.koffeemate.di.modules.AppModule -import com.codemate.koffeemate.di.modules.NetModule -import com.codemate.koffeemate.di.modules.PersistenceModule +import com.codemate.koffeemate.di.modules.* import com.codemate.koffeemate.ui.userselector.UserSelectorActivity import com.codemate.koffeemate.ui.userselector.UserSelectorFragment import dagger.Component @@ -29,7 +26,8 @@ import javax.inject.Singleton @Component(modules = arrayOf( AppModule::class, PersistenceModule::class, - NetModule::class) + NetModule::class, + ThreadingModule::class) ) interface AppComponent { fun inject(userSelectorFragment: UserSelectorFragment) diff --git a/app/src/main/java/com/codemate/koffeemate/di/modules/AppModule.kt b/app/src/main/java/com/codemate/koffeemate/di/modules/AppModule.kt index d28eb12..d25e57f 100644 --- a/app/src/main/java/com/codemate/koffeemate/di/modules/AppModule.kt +++ b/app/src/main/java/com/codemate/koffeemate/di/modules/AppModule.kt @@ -21,17 +21,8 @@ import com.codemate.koffeemate.KoffeemateApp import com.codemate.koffeemate.common.AndroidAwardBadgeCreator import com.codemate.koffeemate.common.AwardBadgeCreator import com.codemate.koffeemate.common.BrewingProgressUpdater -import com.codemate.koffeemate.data.local.CoffeeEventRepository -import com.codemate.koffeemate.data.local.CoffeePreferences -import com.codemate.koffeemate.data.local.UserRepository -import com.codemate.koffeemate.data.network.SlackApi -import com.codemate.koffeemate.usecases.LoadUsersUseCase -import com.codemate.koffeemate.usecases.PostAccidentUseCase -import com.codemate.koffeemate.usecases.SendCoffeeAnnouncementUseCase import dagger.Module import dagger.Provides -import rx.android.schedulers.AndroidSchedulers -import rx.schedulers.Schedulers import java.util.concurrent.TimeUnit import javax.inject.Singleton @@ -52,42 +43,4 @@ class AppModule(val app: KoffeemateApp) { @Provides @Singleton fun provideAwardBadgeCreator(ctx: Context): AwardBadgeCreator = AndroidAwardBadgeCreator(ctx) - - /** - * Move these to a better place once you actually understand Dagger ¯\_(ツ)_/¯ - */ - @Provides - @Singleton - fun provideSendCoffeeAnnouncementUseCase(slackApi: SlackApi) = - SendCoffeeAnnouncementUseCase( - slackApi, - Schedulers.newThread(), - AndroidSchedulers.mainThread() - ) - - @Provides - @Singleton - fun provideLoadUsersUseCase(userRepository: UserRepository, slackApi: SlackApi) = - LoadUsersUseCase( - userRepository, - slackApi, - Schedulers.newThread(), - AndroidSchedulers.mainThread() - ) - - @Provides - @Singleton - fun providePostAccidentUseCase( - slackApi: SlackApi, - coffeeEventRepository: CoffeeEventRepository, - coffeePreferences: CoffeePreferences, - awardBadgeCreator: AwardBadgeCreator - ) = PostAccidentUseCase( - slackApi, - coffeeEventRepository, - coffeePreferences, - awardBadgeCreator, - Schedulers.newThread(), - AndroidSchedulers.mainThread() - ) } \ No newline at end of file diff --git a/app/src/main/java/com/codemate/koffeemate/di/modules/ThreadingModule.kt b/app/src/main/java/com/codemate/koffeemate/di/modules/ThreadingModule.kt new file mode 100644 index 0000000..7e11cfb --- /dev/null +++ b/app/src/main/java/com/codemate/koffeemate/di/modules/ThreadingModule.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2017 Codemate Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.codemate.koffeemate.di.modules + +import dagger.Module +import dagger.Provides +import rx.Scheduler +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import javax.inject.Named + +@Module +class ThreadingModule { + @Provides + @Named("subscriber") + fun provideSubscriber(): Scheduler = Schedulers.newThread() + + @Provides + @Named("observer") + fun provideObserver(): Scheduler = AndroidSchedulers.mainThread() +} \ No newline at end of file diff --git a/app/src/main/java/com/codemate/koffeemate/usecases/LoadUsersUseCase.kt b/app/src/main/java/com/codemate/koffeemate/usecases/LoadUsersUseCase.kt index cba4988..48fa8bc 100644 --- a/app/src/main/java/com/codemate/koffeemate/usecases/LoadUsersUseCase.kt +++ b/app/src/main/java/com/codemate/koffeemate/usecases/LoadUsersUseCase.kt @@ -24,12 +24,14 @@ import com.codemate.koffeemate.data.network.SlackApi import rx.Observable import rx.Scheduler import java.util.concurrent.TimeUnit +import javax.inject.Inject +import javax.inject.Named -open class LoadUsersUseCase( +open class LoadUsersUseCase @Inject constructor( var userRepository: UserRepository, var slackApi: SlackApi, - var subscriber: Scheduler, - var observer: Scheduler + @Named("subscriber") var subscriber: Scheduler, + @Named("observer") var observer: Scheduler ) { val MAX_CACHE_STALENESS = TimeUnit.HOURS.toMillis(12) diff --git a/app/src/main/java/com/codemate/koffeemate/usecases/PostAccidentUseCase.kt b/app/src/main/java/com/codemate/koffeemate/usecases/PostAccidentUseCase.kt index 86e3bfd..aa23397 100644 --- a/app/src/main/java/com/codemate/koffeemate/usecases/PostAccidentUseCase.kt +++ b/app/src/main/java/com/codemate/koffeemate/usecases/PostAccidentUseCase.kt @@ -30,14 +30,16 @@ import okhttp3.ResponseBody import retrofit2.Response import rx.Observable import rx.Scheduler +import javax.inject.Inject +import javax.inject.Named -open class PostAccidentUseCase( +open class PostAccidentUseCase @Inject constructor( var slackApi: SlackApi, val coffeeEventRepository: CoffeeEventRepository, val coffeePreferences: CoffeePreferences, val awardBadgeCreator: AwardBadgeCreator, - var subscriber: Scheduler, - var observer: Scheduler + @Named("subscriber") var subscriber: Scheduler, + @Named("observer") var observer: Scheduler ) { fun execute( comment: String, diff --git a/app/src/main/java/com/codemate/koffeemate/usecases/SendCoffeeAnnouncementUseCase.kt b/app/src/main/java/com/codemate/koffeemate/usecases/SendCoffeeAnnouncementUseCase.kt index c0d838e..6e94b48 100644 --- a/app/src/main/java/com/codemate/koffeemate/usecases/SendCoffeeAnnouncementUseCase.kt +++ b/app/src/main/java/com/codemate/koffeemate/usecases/SendCoffeeAnnouncementUseCase.kt @@ -21,11 +21,13 @@ import okhttp3.ResponseBody import retrofit2.Response import rx.Observable import rx.Scheduler +import javax.inject.Inject +import javax.inject.Named -open class SendCoffeeAnnouncementUseCase( +open class SendCoffeeAnnouncementUseCase @Inject constructor( var slackApi: SlackApi, - var subscriber: Scheduler, - var observer: Scheduler + @Named("subscriber") var subscriber: Scheduler, + @Named("observer") var observer: Scheduler ) { fun execute(channel: String, newCoffeeMessage: String): Observable> { return slackApi.postMessage(channel, newCoffeeMessage)