Migrate from Koin to Dagger/Hilt
This commit is contained in:
@@ -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()) }
|
||||
}
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user