Use dependency injection for most singletons
This commit is contained in:
@@ -42,6 +42,8 @@ dependencies {
|
||||
|
||||
implementation(libs.bundles.androidx.lifecycle)
|
||||
|
||||
implementation(libs.koin.android)
|
||||
|
||||
implementation(project(":preferences"))
|
||||
implementation(project(":currencies"))
|
||||
implementation(project(":search"))
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package de.mm20.launcher2.unitconverter
|
||||
|
||||
import de.mm20.launcher2.currencies.CurrencyRepository
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
import org.koin.androidx.viewmodel.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val unitConverterModule = module {
|
||||
single { CurrencyRepository(androidContext()) }
|
||||
single { UnitConverterRepository(androidContext()) }
|
||||
viewModel { UnitConverterViewModel(get()) }
|
||||
}
|
||||
+1
-15
@@ -6,25 +6,11 @@ import de.mm20.launcher2.currencies.CurrencyRepository
|
||||
import de.mm20.launcher2.search.BaseSearchableRepository
|
||||
import de.mm20.launcher2.search.data.UnitConverter
|
||||
|
||||
class UnitConverterRepository private constructor(val context: Context) : BaseSearchableRepository() {
|
||||
|
||||
init {
|
||||
CurrencyRepository.getInstance(context)
|
||||
}
|
||||
class UnitConverterRepository(val context: Context) : BaseSearchableRepository() {
|
||||
|
||||
val unitConverter = MutableLiveData<UnitConverter?>()
|
||||
|
||||
override suspend fun search(query: String) {
|
||||
unitConverter.value = UnitConverter.search(context, query)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private lateinit var instance : UnitConverterRepository
|
||||
|
||||
fun getInstance(context: Context) : UnitConverterRepository {
|
||||
if(!::instance.isInitialized) instance = UnitConverterRepository(context.applicationContext)
|
||||
return instance
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+5
-4
@@ -1,8 +1,9 @@
|
||||
package de.mm20.launcher2.unitconverter
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.ViewModel
|
||||
|
||||
class UnitConverterViewModel(app: Application): AndroidViewModel(app) {
|
||||
val unitConverter = UnitConverterRepository.getInstance(app).unitConverter
|
||||
class UnitConverterViewModel(
|
||||
unitConverterRepository: UnitConverterRepository
|
||||
): ViewModel() {
|
||||
val unitConverter = unitConverterRepository.unitConverter
|
||||
}
|
||||
+4
-3
@@ -3,7 +3,6 @@ package de.mm20.launcher2.unitconverter.converters
|
||||
import android.content.Context
|
||||
import android.icu.text.PluralRules
|
||||
import android.icu.util.Currency
|
||||
import android.os.Build
|
||||
import de.mm20.launcher2.currencies.CurrencyRepository
|
||||
import de.mm20.launcher2.search.data.CurrencyUnitConverter
|
||||
import de.mm20.launcher2.search.data.UnitConverter
|
||||
@@ -13,12 +12,14 @@ import java.text.DecimalFormat
|
||||
import java.util.Locale
|
||||
import java.util.Currency as JCurrency
|
||||
import kotlin.math.abs
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
|
||||
class CurrencyConverter(context: Context) : Converter() {
|
||||
class CurrencyConverter(context: Context) : Converter(), KoinComponent {
|
||||
|
||||
override val dimension: Dimension = Dimension.Currency
|
||||
|
||||
val repository = CurrencyRepository.getInstance(context)
|
||||
val repository: CurrencyRepository by inject()
|
||||
|
||||
private val topCurrencies = arrayOf("USD", "EUR", "JPY", "GBP", "AUD")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user