Migrate from Koin to Dagger/Hilt

This commit is contained in:
Koitharu
2022-07-25 17:47:35 +03:00
parent 0757a31381
commit 2bbdd3f044
181 changed files with 1751 additions and 1379 deletions

View File

@@ -1,20 +0,0 @@
package org.koitharu.kotatsu.sync
import androidx.room.InvalidationTracker
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.bind
import org.koin.dsl.module
import org.koitharu.kotatsu.sync.data.SyncAuthApi
import org.koitharu.kotatsu.sync.domain.SyncController
import org.koitharu.kotatsu.sync.ui.SyncAuthViewModel
val syncModule
get() = module {
single { SyncController(androidContext()) } bind InvalidationTracker.Observer::class
factory { SyncAuthApi(androidContext(), get()) }
viewModel { SyncAuthViewModel(get()) }
}

View File

@@ -1,6 +1,8 @@
package org.koitharu.kotatsu.sync.data
import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import okhttp3.OkHttpClient
import okhttp3.Request
import org.json.JSONObject
@@ -11,8 +13,8 @@ import org.koitharu.kotatsu.parsers.util.parseJson
import org.koitharu.kotatsu.parsers.util.removeSurrounding
import org.koitharu.kotatsu.utils.ext.toRequestBody
class SyncAuthApi(
context: Context,
class SyncAuthApi @Inject constructor(
@ApplicationContext context: Context,
private val okHttpClient: OkHttpClient,
) {
@@ -20,7 +22,7 @@ class SyncAuthApi(
suspend fun authenticate(email: String, password: String): String {
val body = JSONObject(
mapOf("email" to email, "password" to password)
mapOf("email" to email, "password" to password),
).toRequestBody()
val request = Request.Builder()
.url("$baseUrl/auth")

View File

@@ -8,6 +8,10 @@ import android.os.Bundle
import android.util.ArrayMap
import androidx.room.InvalidationTracker
import androidx.room.withTransaction
import dagger.hilt.android.qualifiers.ApplicationContext
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Singleton
import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
@@ -18,10 +22,10 @@ import org.koitharu.kotatsu.core.db.TABLE_FAVOURITES
import org.koitharu.kotatsu.core.db.TABLE_FAVOURITE_CATEGORIES
import org.koitharu.kotatsu.core.db.TABLE_HISTORY
import org.koitharu.kotatsu.utils.ext.processLifecycleScope
import java.util.concurrent.TimeUnit
class SyncController(
context: Context,
@Singleton
class SyncController @Inject constructor(
@ApplicationContext context: Context,
) : InvalidationTracker.Observer(arrayOf(TABLE_HISTORY, TABLE_FAVOURITES, TABLE_FAVOURITE_CATEGORIES)) {
private val am = AccountManager.get(context)

View File

@@ -8,13 +8,13 @@ import android.text.Editable
import android.text.TextWatcher
import android.view.View
import android.widget.Button
import androidx.activity.viewModels
import androidx.core.graphics.Insets
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.transition.Fade
import androidx.transition.TransitionManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.ui.BaseActivity
import org.koitharu.kotatsu.databinding.ActivitySyncAuthBinding
@@ -26,7 +26,7 @@ class SyncAuthActivity : BaseActivity<ActivitySyncAuthBinding>(), View.OnClickLi
private var accountAuthenticatorResponse: AccountAuthenticatorResponse? = null
private var resultBundle: Bundle? = null
private val viewModel by viewModel<SyncAuthViewModel>()
private val viewModel by viewModels<SyncAuthViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -156,4 +156,4 @@ class SyncAuthActivity : BaseActivity<ActivitySyncAuthBinding>(), View.OnClickLi
button.isEnabled = text != null && text.length >= 4
}
}
}
}

View File

@@ -1,12 +1,15 @@
package org.koitharu.kotatsu.sync.ui
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import org.koitharu.kotatsu.base.ui.BaseViewModel
import org.koitharu.kotatsu.sync.data.SyncAuthApi
import org.koitharu.kotatsu.sync.domain.SyncAuthResult
import org.koitharu.kotatsu.utils.SingleLiveEvent
class SyncAuthViewModel(
@HiltViewModel
class SyncAuthViewModel @Inject constructor(
private val api: SyncAuthApi,
) : BaseViewModel() {
@@ -19,4 +22,4 @@ class SyncAuthViewModel(
onTokenObtained.postCall(result)
}
}
}
}

View File

@@ -9,13 +9,22 @@ import android.database.sqlite.SQLiteDatabase
import android.net.Uri
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteQueryBuilder
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.components.SingletonComponent
import java.util.concurrent.Callable
import org.koin.android.ext.android.inject
import org.koitharu.kotatsu.core.db.*
abstract class SyncProvider : ContentProvider() {
private val database by inject<MangaDatabase>()
private val database by lazy {
val appContext = checkNotNull(context?.applicationContext)
val entryPoint = EntryPointAccessors.fromApplication(appContext, SyncProviderEntryPoint::class.java)
entryPoint.database()
}
private val supportedTables = setOf(
TABLE_FAVOURITES,
TABLE_MANGA,
@@ -34,7 +43,7 @@ abstract class SyncProvider : ContentProvider() {
projection: Array<out String>?,
selection: String?,
selectionArgs: Array<out String>?,
sortOrder: String?
sortOrder: String?,
): Cursor? = if (getTableName(uri) != null) {
val sqlQuery = SupportSQLiteQueryBuilder.builder(uri.lastPathSegment)
.columns(projection)
@@ -108,4 +117,10 @@ abstract class SyncProvider : ContentProvider() {
val whereArgs = Array<Any>(keys.size) { i -> values.get("`${keys[i]}`") ?: values.get(keys[i]) }
this.update(table, SQLiteDatabase.CONFLICT_IGNORE, values, whereClause, whereArgs)
}
}
@EntryPoint
@InstallIn(SingletonComponent::class)
interface SyncProviderEntryPoint {
fun database(): MangaDatabase
}
}