Filter hidden items in UI layer

This commit is contained in:
MM20
2022-06-12 13:28:02 +02:00
parent aa0cd9a062
commit 5ae0ec42b7
30 changed files with 96 additions and 245 deletions
-1
View File
@@ -46,7 +46,6 @@ dependencies {
implementation(project(":preferences"))
implementation(project(":ktx"))
implementation(project(":base"))
implementation(project(":hiddenitems"))
implementation(project(":permissions"))
}
@@ -2,7 +2,6 @@ package de.mm20.launcher2.contacts
import android.content.Context
import android.provider.ContactsContract
import de.mm20.launcher2.hiddenitems.HiddenItemsRepository
import de.mm20.launcher2.permissions.PermissionGroup
import de.mm20.launcher2.permissions.PermissionsManager
import de.mm20.launcher2.preferences.LauncherDataStore
@@ -19,23 +18,22 @@ interface ContactRepository {
internal class ContactRepositoryImpl(
private val context: Context,
hiddenItemsRepository: HiddenItemsRepository
) : ContactRepository, KoinComponent {
private val permissionsManager: PermissionsManager by inject()
private val dataStore: LauncherDataStore by inject()
private val hiddenItems = hiddenItemsRepository.hiddenItemsKeys
override fun search(query: String): Flow<List<Contact>> = channelFlow {
override fun search(query: String): Flow<List<Contact>> {
val searchContacts = dataStore.data.map { it.contactsSearch.enabled }
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Contacts)
if (query.length < 3) {
send(emptyList())
return@channelFlow
return flow {
emit(emptyList())
}
}
combine(searchContacts, hasPermission) { search, permission ->
return combine(searchContacts, hasPermission) { search, permission ->
search && permission
}.map {
if (it) {
@@ -43,12 +41,6 @@ internal class ContactRepositoryImpl(
} else {
emptyList()
}
}.flatMapLatest { contacts ->
hiddenItems.map { hidden ->
contacts.filter { !hidden.contains(it.key) }
}
}.collectLatest {
send(it)
}
}
@@ -5,5 +5,5 @@ import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module
val contactsModule = module {
single<ContactRepository> { ContactRepositoryImpl(androidContext(), get()) }
single<ContactRepository> { ContactRepositoryImpl(androidContext()) }
}