Skip to content

Refactor/restructure injection to match modularisation and allow multiple ViewModels #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlin_version = '1.1.4-3'
ext.kotlin_version = '1.1.51'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta6'
classpath 'com.android.tools.build:gradle:3.0.0-rc1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.dicedmelon.gradle:jacoco-android:0.1.1"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import javax.inject.Inject
* data sources
*/
class BufferooDataRepository @Inject constructor(private val factory: BufferooDataStoreFactory,
private val bufferooMapper: BufferooMapper):
private val bufferooMapper: BufferooMapper) :
BufferooRepository {

override fun clearBufferoos(): Completable {
Expand Down
2 changes: 1 addition & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ allprojects {

ext {
//Android
androidBuildToolsVersion = "26.0.0"
androidBuildToolsVersion = "26.0.2"
androidMinSdkVersion = 15
androidTargetSdkVersion = 26
androidCompileSdkVersion = 26
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,20 @@ import dagger.android.support.AndroidSupportInjectionModule
import org.buffer.android.boilerplate.domain.executor.PostExecutionThread
import org.buffer.android.boilerplate.domain.repository.BufferooRepository
import org.buffer.android.boilerplate.ui.injection.ApplicationComponent
import org.buffer.android.boilerplate.ui.injection.module.ActivityBindingModule
import org.buffer.android.boilerplate.ui.injection.module.TestApplicationModule
import org.buffer.android.boilerplate.ui.injection.module.*
import org.buffer.android.boilerplate.ui.injection.scopes.PerApplication
import org.buffer.android.boilerplate.ui.test.TestApplication

@Component(modules = arrayOf(TestApplicationModule::class, ActivityBindingModule::class,
AndroidSupportInjectionModule::class))
@PerApplication
import javax.inject.Singleton

@Singleton
@Component(modules = arrayOf(
TestApplicationModule::class,
AndroidSupportInjectionModule::class,
TestCacheModule::class,
TestRemoteModule::class,
TestDataModule::class,
PresentationModule::class,
UiModule::class))
interface TestApplicationComponent : ApplicationComponent {

fun bufferooRepository(): BufferooRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.buffer.android.boilerplate.ui.injection.module
import android.app.Application
import android.content.Context
import com.nhaarman.mockito_kotlin.mock
import dagger.Binds
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are a lot of unused imports here that could be removed :)

import dagger.Module
import dagger.Provides
import org.buffer.android.boilerplate.cache.PreferencesHelper
Expand All @@ -17,54 +18,8 @@ import org.buffer.android.boilerplate.ui.UiThread
import org.buffer.android.boilerplate.ui.injection.scopes.PerApplication

@Module
class TestApplicationModule {

@Provides
@PerApplication
fun provideContext(application: Application): Context {
return application
}

@Provides
@PerApplication
internal fun providePreferencesHelper(): PreferencesHelper {
return mock()
}

@Provides
@PerApplication
internal fun provideBufferooRepository(): BufferooRepository {
return mock()
}

@Provides
@PerApplication
internal fun provideBufferooCache(): BufferooCache {
return mock()
}

@Provides
@PerApplication
internal fun provideBufferooRemote(): BufferooRemote {
return mock()
}

@Provides
@PerApplication
internal fun provideThreadExecutor(jobExecutor: JobExecutor): ThreadExecutor {
return jobExecutor
}

@Provides
@PerApplication
internal fun providePostExecutionThread(uiThread: UiThread): PostExecutionThread {
return uiThread
}

@Provides
@PerApplication
internal fun provideBufferooService(): BufferooService {
return mock()
}
abstract class TestApplicationModule {

@Binds
abstract fun bindContext(application: Application): Context
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.buffer.android.boilerplate.ui.injection.module

import android.app.Application
import android.arch.persistence.room.Room
import com.nhaarman.mockito_kotlin.mock
import dagger.Module
import dagger.Provides
import org.buffer.android.boilerplate.cache.PreferencesHelper
import org.buffer.android.boilerplate.cache.db.BufferoosDatabase
import org.buffer.android.boilerplate.data.repository.BufferooCache
import javax.inject.Singleton

@Module
object TestCacheModule {

@Provides
@JvmStatic
fun provideBufferoosDatabase(application: Application): BufferoosDatabase {
return Room.databaseBuilder(
application.applicationContext,
BufferoosDatabase::class.java, "bufferoos.db")
.build()
}

@Provides
@JvmStatic
@Singleton
fun provideBufferooCache(): BufferooCache {
return mock()
}

@Provides
@JvmStatic
@Singleton
fun providePreferencesHelper(): PreferencesHelper {
return mock()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.buffer.android.boilerplate.ui.injection.module

import com.nhaarman.mockito_kotlin.mock
import dagger.Binds
import dagger.Module
import dagger.Provides
import org.buffer.android.boilerplate.data.executor.JobExecutor
import org.buffer.android.boilerplate.domain.executor.ThreadExecutor
import org.buffer.android.boilerplate.domain.repository.BufferooRepository
import javax.inject.Singleton

@Module
abstract class TestDataModule {

@Module
companion object {

@Provides
@JvmStatic
@Singleton
fun provideBufferooRepository(): BufferooRepository {
return mock()
}
}

@Binds
abstract fun bindThreadExecutor(jobExecutor: JobExecutor): ThreadExecutor
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.buffer.android.boilerplate.ui.injection.module

import com.nhaarman.mockito_kotlin.mock
import dagger.Module
import dagger.Provides
import org.buffer.android.boilerplate.data.repository.BufferooRemote
import org.buffer.android.boilerplate.remote.BufferooService
import javax.inject.Singleton

@Module
object TestRemoteModule {

@Provides
@JvmStatic
@Singleton
fun provideBufferooRemote(): BufferooRemote {
return mock()
}

@Provides
@JvmStatic
@Singleton
fun provideBufferooService(): BufferooService {
return mock()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,21 @@ import android.support.v7.widget.LinearLayoutManager
import android.view.View
import dagger.android.AndroidInjection
import kotlinx.android.synthetic.main.activity_browse.*
import org.buffer.android.boilerplate.presentation.ViewModelFactory
import org.buffer.android.boilerplate.presentation.browse.BrowseBufferoosViewModel
import org.buffer.android.boilerplate.presentation.browse.BrowseBufferoosViewModelFactory
import org.buffer.android.boilerplate.presentation.data.ResourceState
import org.buffer.android.boilerplate.presentation.data.Resource
import org.buffer.android.boilerplate.presentation.model.BufferooView
import org.buffer.android.boilerplate.ui.R
import org.buffer.android.boilerplate.ui.mapper.BufferooMapper
import org.buffer.android.boilerplate.ui.widget.empty.EmptyListener
import org.buffer.android.boilerplate.ui.widget.error.ErrorListener
import javax.inject.Inject

class BrowseActivity: AppCompatActivity() {
class BrowseActivity : AppCompatActivity() {

@Inject lateinit var browseAdapter: BrowseAdapter
@Inject lateinit var mapper: BufferooMapper
@Inject lateinit var viewModelFactory: BrowseBufferoosViewModelFactory
@Inject lateinit var viewModelFactory: ViewModelFactory
private lateinit var browseBufferoosViewModel: BrowseBufferoosViewModel

override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -40,9 +39,9 @@ class BrowseActivity: AppCompatActivity() {

override fun onStart() {
super.onStart()
browseBufferoosViewModel.getBufferoos().observe(this,
Observer<Resource<List<BufferooView>>> {
if (it != null) this.handleDataState(it.status, it.data, it.message) })
browseBufferoosViewModel.getBufferoos().observe(this, Observer {
if (it != null) this.handleDataState(it.status, it.data, it.message)
})
}

private fun setupBrowseRecycler() {
Expand All @@ -69,7 +68,7 @@ class BrowseActivity: AppCompatActivity() {
private fun setupScreenForSuccess(data: List<BufferooView>?) {
view_error.visibility = View.GONE
progress.visibility = View.GONE
if (data!= null && data.isNotEmpty()) {
if (data != null && data.isNotEmpty()) {
updateListView(data)
recycler_browse.visibility = View.VISIBLE
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,27 @@ import dagger.BindsInstance
import dagger.Component
import dagger.android.support.AndroidSupportInjectionModule
import org.buffer.android.boilerplate.ui.BufferooApplication
import org.buffer.android.boilerplate.ui.injection.module.ActivityBindingModule
import org.buffer.android.boilerplate.ui.injection.module.ApplicationModule
import org.buffer.android.boilerplate.ui.injection.scopes.PerApplication
import org.buffer.android.boilerplate.ui.injection.module.*
import javax.inject.Singleton

@PerApplication
@Component(modules = arrayOf(ActivityBindingModule::class, ApplicationModule::class,
AndroidSupportInjectionModule::class))
@Singleton
@Component(modules = arrayOf(
ApplicationModule::class,
AndroidSupportInjectionModule::class,
CacheModule::class,
DataModule::class,
DomainModule::class,
PresentationModule::class,
RemoteModule::class,
UiModule::class)
)
interface ApplicationComponent {

@Component.Builder
interface Builder {
@BindsInstance fun application(application: Application): Builder
@BindsInstance
fun application(application: Application): Builder

fun build(): ApplicationComponent
}

Expand Down

This file was deleted.

This file was deleted.

Loading