Skip to content
This repository has been archived by the owner on May 16, 2024. It is now read-only.

Replacing dagger for koin #48

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 6 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,12 @@ dependencies {
implementation "androidx.constraintlayout:constraintlayout:${versions.constraint_layout}"
implementation 'androidx.multidex:multidex:2.0.1'

implementation "com.google.dagger:dagger-android:${versions.dagger}"
implementation "com.google.dagger:dagger-android-support:${versions.dagger}"
kapt "com.google.dagger:dagger-compiler:${versions.dagger}"
kapt "com.google.dagger:dagger-android-processor:${versions.dagger}"
implementation "org.koin:koin-core:${versions.koin}"

implementation "org.koin:koin-android-scope:${versions.koin}"
implementation "org.koin:koin-android-viewmodel:${versions.koin}"
implementation "org.koin:koin-android-ext:${versions.koin}"


implementation "net.hockeyapp.android:HockeySDK:${versions.hockey_sdk}"
implementation "com.jakewharton.timber:timber:${versions.timber}"
Expand Down
33 changes: 23 additions & 10 deletions app/src/main/java/dk/nodes/template/App.kt
Original file line number Diff line number Diff line change
@@ -1,27 +1,40 @@
package dk.nodes.template

import android.app.Application
import android.content.Context
import androidx.multidex.MultiDex
import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
import dk.nodes.template.domain.modules.interactorModule
import dk.nodes.template.inititializers.AppInitializer
import dk.nodes.template.injection.components.DaggerAppComponent
import javax.inject.Inject
import dk.nodes.template.injection.modules.appModule
import dk.nodes.template.injection.modules.restModule
import dk.nodes.template.injection.modules.restRepositoryModule
import dk.nodes.template.injection.modules.storageModule
import dk.nodes.template.presentation.injection.viewModelModule
import org.koin.android.ext.android.inject
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

class App : DaggerApplication() {
class App : Application() {

@Inject lateinit var initializer: AppInitializer
private val initializer by inject<AppInitializer>()
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@App)
modules(
viewModelModule +
appModule +
restModule +
restRepositoryModule +
storageModule +
interactorModule
)
}
initializer.init(this)
}

override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}

override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.factory().create(this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ import dk.nodes.nstack.kotlin.NStack
import dk.nodes.template.BuildConfig
import dk.nodes.template.presentation.nstack.Translation
import timber.log.Timber
import javax.inject.Inject

interface AppInitializer {
fun init(app: Application)
}

class AppInitializerImpl @Inject constructor() : AppInitializer {
class AppInitializerImpl : AppInitializer {
override fun init(app: Application) {
NStack.translationClass = Translation::class.java
NStack.init(app)
Expand Down

This file was deleted.

23 changes: 0 additions & 23 deletions app/src/main/java/dk/nodes/template/injection/modules/AppModule.kt

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dk.nodes.template.injection.modules

import dk.nodes.template.inititializers.AppInitializer
import dk.nodes.template.inititializers.AppInitializerImpl
import org.koin.dsl.module

val appModule = module {
single<AppInitializer> { AppInitializerImpl() }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package dk.nodes.template.injection.modules

import com.google.gson.GsonBuilder
import com.google.gson.TypeAdapterFactory
import dk.nodes.nstack.kotlin.providers.NMetaInterceptor
import dk.nodes.template.BuildConfig
import dk.nodes.template.network.Api
import dk.nodes.template.network.util.BufferedSourceConverterFactory
import dk.nodes.template.network.util.DateDeserializer
import dk.nodes.template.network.util.ItemTypeAdapterFactory
import okhttp3.OkHttpClient
import org.koin.core.qualifier.named
import org.koin.dsl.module
import retrofit2.Converter
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.util.Date
import java.util.concurrent.TimeUnit

val restModule = module {

factory<TypeAdapterFactory> { ItemTypeAdapterFactory() }
factory { DateDeserializer() }
single {
GsonBuilder()
.registerTypeAdapterFactory(get())
.registerTypeAdapter(Date::class.java, get<DateDeserializer>())
.setDateFormat(DateDeserializer.DATE_FORMATS[0])
.create()

}
single(named("NAME_BASE_URL")) { BuildConfig.API_URL }
single<Converter.Factory> { GsonConverterFactory.create(get()) }
single {
val clientBuilder = OkHttpClient.Builder()
.connectTimeout(45, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(NMetaInterceptor(BuildConfig.BUILD_TYPE))

if (BuildConfig.DEBUG) {
val logging = okhttp3.logging.HttpLoggingInterceptor()
logging.level = okhttp3.logging.HttpLoggingInterceptor.Level.BODY
clientBuilder.addInterceptor(logging)
}

clientBuilder.build()
}
single {
Retrofit.Builder()
.client(get())
.baseUrl(get<String>(qualifier = named("NAME_BASE_URL")))
.addConverterFactory(BufferedSourceConverterFactory())
.addConverterFactory(get())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}

single { get<Retrofit>().create<Api>(Api::class.java) }

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dk.nodes.template.injection.modules

import dk.nodes.template.network.RestPostRepository
import dk.nodes.template.repositories.PostRepository
import org.koin.dsl.module

val restRepositoryModule = module {
single<PostRepository> { RestPostRepository(get()) }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dk.nodes.template.injection.modules

import dk.nodes.template.domain.managers.PrefManager
import dk.nodes.template.storage.PrefManagerImpl
import org.koin.dsl.module

val storageModule = module {
single<PrefManager> { PrefManagerImpl(get()) }
}