package com.alorma.github.injector.module.repository.tags; import com.alorma.github.injector.named.IOScheduler; import com.alorma.github.injector.named.MainScheduler; import com.alorma.github.injector.named.SortOrder; import com.alorma.github.injector.named.Token; import com.alorma.github.injector.scope.PerActivity; import com.alorma.github.presenter.CommitInfoPresenter; import com.alorma.github.presenter.repos.releases.tags.RepositoryTagsPresenter; import com.alorma.github.presenter.repos.releases.tags.TagsCacheDataSource; import core.ApiClient; import core.repositories.releases.tags.TagsCloudDataSource; import core.repositories.releases.tags.TagsRetrofitWrapper; import core.repository.GenericRepository; import dagger.Module; import dagger.Provides; import rx.Scheduler; @Module public class RepositoryTagsModule { @Provides @PerActivity TagsCacheDataSource provideTagsCacheDataSource() { return new TagsCacheDataSource(); } @Provides @PerActivity TagsRetrofitWrapper provideTagsRetrofitWrapper(ApiClient apiClient, @Token String token) { return new TagsRetrofitWrapper(apiClient, token); } @Provides @PerActivity TagsCloudDataSource provideTagsCloudDataSource(TagsRetrofitWrapper tagsRetrofitWrapper, @SortOrder String sortOrder) { return new TagsCloudDataSource(tagsRetrofitWrapper, sortOrder); } @Provides @PerActivity RepositoryTagsPresenter provideRepositoryTagsPresenter(@MainScheduler Scheduler mainScheduler, @IOScheduler Scheduler ioScheduler, TagsCacheDataSource tagsCacheDataSource, TagsCloudDataSource tagsCloudDataSource) { return new RepositoryTagsPresenter(mainScheduler, ioScheduler, new GenericRepository<>(tagsCacheDataSource, tagsCloudDataSource)); } @Provides @PerActivity CommitInfoPresenter provideCommitInfoPresenter(@MainScheduler Scheduler mainScheduler, @IOScheduler Scheduler ioScheduler) { return new CommitInfoPresenter(mainScheduler, ioScheduler); } }