Use dependency injection for most singletons
This commit is contained in:
@@ -48,6 +48,8 @@ dependencies {
|
||||
|
||||
implementation(libs.guava)
|
||||
|
||||
implementation(libs.koin.android)
|
||||
|
||||
implementation(project(":search"))
|
||||
implementation(project(":base"))
|
||||
implementation(project(":icons"))
|
||||
|
||||
@@ -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()) }
|
||||
}
|
||||
Reference in New Issue
Block a user