Use dependency injection for most singletons

This commit is contained in:
MM20
2021-10-10 12:15:54 +02:00
parent 023bb2cbb1
commit 087d4fd455
144 changed files with 1789 additions and 1277 deletions
@@ -16,14 +16,17 @@ import kotlinx.coroutines.withContext
import java.util.concurrent.Executors
import kotlin.coroutines.suspendCoroutine
class AppSearchRepository private constructor(val context: Context) : BaseSearchableRepository() {
class AppSearchRepository(
val context: Context,
hiddenItemsRepository: HiddenItemsRepository
) : BaseSearchableRepository() {
private var session: GlobalSearchSession? = null
val appSearchResults = MediatorLiveData<List<AppSearchResult>?>()
private val allAppSearchResults = MutableLiveData<List<AppSearchResult>?>(emptyList())
private val hiddenItemKeys = HiddenItemsRepository.getInstance(context).hiddenItemsKeys
private val hiddenItemKeys = hiddenItemsRepository.hiddenItemsKeys
init {
appSearchResults.addSource(hiddenItemKeys) { keys ->
@@ -57,13 +60,4 @@ class AppSearchRepository private constructor(val context: Context) : BaseSearch
}
allAppSearchResults.value = results
}
companion object {
private lateinit var instance: AppSearchRepository
fun getInstance(context: Context): AppSearchRepository {
if (!::instance.isInitialized) instance = AppSearchRepository(context.applicationContext)
return instance
}
}
}
@@ -3,9 +3,11 @@ package de.mm20.launcher2.appsearch
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import de.mm20.launcher2.search.data.AppSearchResult
class AppSearchViewModel(app: Application) : AndroidViewModel(app) {
private val repository = AppSearchRepository.getInstance(app)
private val appSearch: LiveData<List<AppSearchResult>?> = repository.appSearchResults
class AppSearchViewModel(
appSearchRepository: AppSearchRepository
) : ViewModel() {
private val appSearch: LiveData<List<AppSearchResult>?> = appSearchRepository.appSearchResults
}
@@ -0,0 +1,10 @@
package de.mm20.launcher2.appsearch
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module
val appSearchModule = module {
single { AppSearchRepository(androidContext(), get()) }
viewModel { AppSearchViewModel(get()) }
}