Ver Fonte

Replaced dagger with koin di library

Vadik Sirekanyan há 7 anos atrás
pai
commit
064d9b3e91

+ 2 - 3
app/build.gradle

@@ -43,9 +43,8 @@ dependencies {
     implementation "com.squareup.retrofit2:converter-gson:2.3.0"
     implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
 
-    // dagger
-    implementation "com.google.dagger:dagger:2.14.1"
-    kapt "com.google.dagger:dagger-compiler:2.14.1"
+    // dependency injection
+    implementation 'org.koin:koin-android:0.9.1'
 
     // etc
     implementation 'com.github.bumptech.glide:glide:4.5.0'

+ 6 - 6
app/src/main/java/me/vadik/knigopis/App.kt

@@ -1,12 +1,12 @@
 package me.vadik.knigopis
 
 import android.app.Application
-import android.content.Context
-import me.vadik.knigopis.dependency.AppComponent
-import me.vadik.knigopis.dependency.DaggerAppComponent
-
-val Context.app get() = applicationContext as App
+import me.vadik.knigopis.dependency.appModule
+import org.koin.android.ext.android.startKoin
 
 class App : Application() {
-    val component: AppComponent = DaggerAppComponent.create()
+    override fun onCreate() {
+        super.onCreate()
+        startKoin(this, listOf(appModule))
+    }
 }

+ 3 - 8
app/src/main/java/me/vadik/knigopis/BookActivity.kt

@@ -18,8 +18,8 @@ import me.vadik.knigopis.model.FinishedBook
 import me.vadik.knigopis.model.FinishedBookToSend
 import me.vadik.knigopis.model.PlannedBook
 import me.vadik.knigopis.model.PlannedBookToSend
+import org.koin.android.ext.android.inject
 import java.util.*
-import javax.inject.Inject
 
 private const val IMAGE_PRELOAD_COUNT = 3
 private const val EXTRA_BOOK_ID = "me.vadik.knigopis.extra_book_id"
@@ -57,12 +57,8 @@ fun Context.createEditBookIntent(book: FinishedBook): Intent =
 
 class BookActivity : AppCompatActivity() {
 
-    @Inject
-    protected lateinit var api: Endpoint
-
-    @Inject
-    protected lateinit var imageApi: ImageEndpoint
-
+    private val api by inject<Endpoint>()
+    private val imageApi by inject<ImageEndpoint>()
     private val config by lazy { ConfigurationImpl(applicationContext) as Configuration }
     private val repository by lazy {
         val auth = KAuthImpl(applicationContext, api)
@@ -84,7 +80,6 @@ class BookActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.book_edit)
-        app.component.inject(this)
         bookId = intent.getStringExtra(EXTRA_BOOK_ID)
         toolbar.inflateMenu(R.menu.book_menu)
         if (bookId == null) titleEditText.requestFocus()

+ 3 - 8
app/src/main/java/me/vadik/knigopis/MainActivity.kt

@@ -32,8 +32,8 @@ import me.vadik.knigopis.model.note.Identity
 import me.vadik.knigopis.model.note.Note
 import me.vadik.knigopis.model.subscription.Subscription
 import me.vadik.knigopis.user.createUserIntent
+import org.koin.android.ext.android.inject
 import retrofit2.HttpException
-import javax.inject.Inject
 
 private const val ULOGIN_REQUEST_CODE = 0
 private const val BOOK_REQUEST_CODE = 1
@@ -42,12 +42,8 @@ private const val VERSION_CLICK_COUNT_ON = 12
 
 class MainActivity : AppCompatActivity(), Router {
 
-    @Inject
-    protected lateinit var api: Endpoint
-
-    @Inject
-    protected lateinit var imageApi: ImageEndpoint
-
+    private val api by inject<Endpoint>()
+    private val imageApi by inject<ImageEndpoint>()
     private val config by lazy { ConfigurationImpl(applicationContext) as Configuration }
     private val auth by lazy { KAuthImpl(applicationContext, api) as KAuth }
     private val allBooks = mutableListOf<Book>()
@@ -80,7 +76,6 @@ class MainActivity : AppCompatActivity(), Router {
         }
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
-        app.component.inject(this)
         initRecyclerView(booksRecyclerView)
         initRecyclerView(usersRecyclerView)
         initRecyclerView(notesRecyclerView)

+ 0 - 15
app/src/main/java/me/vadik/knigopis/dependency/AppComponent.kt

@@ -1,15 +0,0 @@
-package me.vadik.knigopis.dependency
-
-import dagger.Component
-import me.vadik.knigopis.BookActivity
-import me.vadik.knigopis.MainActivity
-import me.vadik.knigopis.user.UserActivity
-import javax.inject.Singleton
-
-@Singleton
-@Component(modules = [AppModule::class])
-interface AppComponent {
-    fun inject(activity: MainActivity)
-    fun inject(activity: BookActivity)
-    fun inject(activity: UserActivity)
-}

+ 0 - 69
app/src/main/java/me/vadik/knigopis/dependency/AppModule.kt

@@ -1,69 +0,0 @@
-package me.vadik.knigopis.dependency
-
-import com.google.gson.GsonBuilder
-import dagger.Module
-import dagger.Provides
-import me.vadik.knigopis.BuildConfig
-import me.vadik.knigopis.api.Endpoint
-import me.vadik.knigopis.api.ImageEndpoint
-import me.vadik.knigopis.api.gson.ImageThumbnailDeserializer
-import me.vadik.knigopis.model.ImageThumbnail
-import okhttp3.OkHttpClient
-import okhttp3.logging.HttpLoggingInterceptor
-import retrofit2.Retrofit
-import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
-import retrofit2.converter.gson.GsonConverterFactory
-import javax.inject.Singleton
-
-private const val MAIN_API_URL = "http://api.knigopis.com"
-private const val IMAGE_API_URL = "https://api.qwant.com/api/"
-private const val DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"
-
-@Module
-class AppModule {
-
-    @Provides
-    @Singleton
-    fun provideBaseApi(): Endpoint =
-        Retrofit.Builder()
-            .baseUrl(MAIN_API_URL)
-            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
-            .addConverterFactory(
-                GsonConverterFactory.create(
-                    GsonBuilder().setDateFormat(DATE_FORMAT).create()
-                )
-            )
-            .client(
-                OkHttpClient.Builder()
-                    .setDebugEnabled(BuildConfig.DEBUG)
-                    .build()
-            )
-            .build()
-            .create(Endpoint::class.java)
-
-    @Provides
-    @Singleton
-    fun provideImageApi(): ImageEndpoint =
-        Retrofit.Builder()
-            .baseUrl(IMAGE_API_URL)
-            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
-            .addConverterFactory(
-                GsonConverterFactory.create(
-                    GsonBuilder().registerTypeAdapter(
-                        ImageThumbnail::class.java,
-                        ImageThumbnailDeserializer()
-                    ).create()
-                )
-            )
-            .build()
-            .create(ImageEndpoint::class.java)
-}
-
-private fun OkHttpClient.Builder.setDebugEnabled(debugEnabled: Boolean): OkHttpClient.Builder {
-    if (debugEnabled) {
-        addNetworkInterceptor(HttpLoggingInterceptor().also {
-            it.level = HttpLoggingInterceptor.Level.BODY
-        })
-    }
-    return this
-}

+ 62 - 0
app/src/main/java/me/vadik/knigopis/dependency/modules.kt

@@ -0,0 +1,62 @@
+package me.vadik.knigopis.dependency
+
+import com.google.gson.GsonBuilder
+import me.vadik.knigopis.BuildConfig
+import me.vadik.knigopis.api.Endpoint
+import me.vadik.knigopis.api.ImageEndpoint
+import me.vadik.knigopis.api.gson.ImageThumbnailDeserializer
+import me.vadik.knigopis.model.ImageThumbnail
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+import org.koin.dsl.module.applicationContext
+import retrofit2.Retrofit
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
+import retrofit2.converter.gson.GsonConverterFactory
+
+private const val MAIN_API_URL = "http://api.knigopis.com"
+private const val IMAGE_API_URL = "https://api.qwant.com/api/"
+private const val DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"
+
+val appModule = applicationContext {
+    bean { getEndpointBuilder().create(Endpoint::class.java) }
+    bean { getImageEndpointBuilder().create(ImageEndpoint::class.java) }
+}
+
+private fun getEndpointBuilder() =
+    Retrofit.Builder()
+        .baseUrl(MAIN_API_URL)
+        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+        .addConverterFactory(
+            GsonConverterFactory.create(
+                GsonBuilder().setDateFormat(DATE_FORMAT).create()
+            )
+        )
+        .client(
+            OkHttpClient.Builder()
+                .setDebugEnabled(BuildConfig.DEBUG)
+                .build()
+        )
+        .build()
+
+private fun getImageEndpointBuilder() =
+    Retrofit.Builder()
+        .baseUrl(IMAGE_API_URL)
+        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+        .addConverterFactory(
+            GsonConverterFactory.create(
+                GsonBuilder().registerTypeAdapter(
+                    ImageThumbnail::class.java,
+                    ImageThumbnailDeserializer()
+                ).create()
+            )
+        )
+        .build()
+
+private fun OkHttpClient.Builder.setDebugEnabled(debugEnabled: Boolean) =
+    apply {
+        if (debugEnabled) {
+            addNetworkInterceptor(HttpLoggingInterceptor().also {
+                it.level = HttpLoggingInterceptor.Level.BODY
+            })
+        }
+    }

+ 2 - 8
app/src/main/java/me/vadik/knigopis/user/UserActivity.kt

@@ -20,7 +20,7 @@ import me.vadik.knigopis.auth.KAuth
 import me.vadik.knigopis.auth.KAuthImpl
 import me.vadik.knigopis.model.note.Identity
 import me.vadik.knigopis.model.subscription.Subscription
-import javax.inject.Inject
+import org.koin.android.ext.android.inject
 
 private const val EXTRA_USER_ID = "me.vadik.knigopis.extra_user_id"
 private const val EXTRA_USER_NAME = "me.vadik.knigopis.extra_user_name"
@@ -42,12 +42,7 @@ fun Context.createUserIntent(user: Identity): Intent =
 
 class UserActivity : AppCompatActivity() {
 
-    @Inject
-    protected lateinit var api: Endpoint
-
-    @Inject
-    protected lateinit var imageApi: ImageEndpoint
-
+    private val api by inject<Endpoint>()
     private val auth by lazy { KAuthImpl(applicationContext, api) as KAuth }
     private val userId by lazy { intent.getStringExtra(EXTRA_USER_ID) }
     private val books = mutableListOf<UserBook>()
@@ -57,7 +52,6 @@ class UserActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.user_activity)
-        app.component.inject(this)
         toolbar.title = intent.getStringExtra(EXTRA_USER_NAME)
         setSupportActionBar(toolbar)
         fab.setOnClickListener { view ->