Add search-only visibility level to items

This commit is contained in:
MM20
2024-06-17 22:59:12 +02:00
parent 1251924553
commit c7ea840fc5
28 changed files with 571 additions and 485 deletions
@@ -1,14 +1,13 @@
package de.mm20.launcher2.badges.providers
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.HourglassBottom
import androidx.compose.material.icons.rounded.VisibilityOff
import de.mm20.launcher2.badges.Badge
import de.mm20.launcher2.badges.BadgeIcon
import de.mm20.launcher2.badges.R
import de.mm20.launcher2.search.SavableSearchable
import de.mm20.launcher2.search.Searchable
import de.mm20.launcher2.searchable.SavableSearchableRepository
import de.mm20.launcher2.searchable.VisibilityLevel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -28,7 +27,7 @@ class HiddenItemBadgeProvider(
private val scope = CoroutineScope(Job() + Dispatchers.Default)
private val hiddenItemKeys = searchableRepository.getKeys(
hidden = true,
maxVisibility = VisibilityLevel.Hidden,
limit = 9999,
).shareIn(scope, SharingStarted.WhileSubscribed(), 1)
@@ -1,7 +1,9 @@
package de.mm20.launcher2.services.favorites
import de.mm20.launcher2.search.SavableSearchable
import de.mm20.launcher2.searchable.PinnedLevel
import de.mm20.launcher2.searchable.SavableSearchableRepository
import de.mm20.launcher2.searchable.VisibilityLevel
import kotlinx.coroutines.flow.Flow
class FavoritesService(
@@ -10,18 +12,17 @@ class FavoritesService(
fun getFavorites(
includeTypes: List<String>? = null,
excludeTypes: List<String>? = null,
manuallySorted: Boolean = false,
automaticallySorted: Boolean = false,
frequentlyUsed: Boolean = false,
minPinnedLevel: PinnedLevel = PinnedLevel.FrequentlyUsed,
maxPinnedLevel: PinnedLevel = PinnedLevel.ManuallySorted,
limit: Int = 100,
): Flow<List<SavableSearchable>> {
return searchableRepository.get(
includeTypes = includeTypes,
excludeTypes = excludeTypes,
manuallySorted = manuallySorted,
automaticallySorted = automaticallySorted,
frequentlyUsed = frequentlyUsed,
minPinnedLevel = minPinnedLevel,
maxPinnedLevel = maxPinnedLevel,
limit = limit,
minVisibility = VisibilityLevel.SearchOnly,
)
}
@@ -29,8 +30,8 @@ class FavoritesService(
return searchableRepository.isPinned(searchable)
}
fun isHidden(searchable: SavableSearchable): Flow<Boolean> {
return searchableRepository.isHidden(searchable)
fun getVisibility(searchable: SavableSearchable): Flow<VisibilityLevel> {
return searchableRepository.getVisibility(searchable)
}
fun pinItem(searchable: SavableSearchable) {
@@ -44,7 +45,7 @@ class FavoritesService(
searchableRepository.update(
searchable,
pinned = false,
hidden = false,
visibility = VisibilityLevel.Default,
weight = 0.0,
launchCount = 0,
)
@@ -57,17 +58,10 @@ class FavoritesService(
)
}
fun hideItem(searchable: SavableSearchable) {
fun setVisibility(searchable: SavableSearchable, visibility: VisibilityLevel) {
searchableRepository.upsert(
searchable,
hidden = true,
)
}
fun unhideItem(searchable: SavableSearchable) {
searchableRepository.upsert(
searchable,
hidden = false,
visibility = visibility,
)
}
@@ -4,6 +4,7 @@ import de.mm20.launcher2.data.customattrs.CustomAttributesRepository
import de.mm20.launcher2.searchable.SavableSearchableRepository
import de.mm20.launcher2.search.SavableSearchable
import de.mm20.launcher2.search.data.Tag
import de.mm20.launcher2.searchable.PinnedLevel
import de.mm20.launcher2.services.tags.TagsService
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -46,8 +47,7 @@ internal class TagsServiceImpl(
customAttributesRepository.renameTag(tag, newName).join()
val pinnedTags = searchableRepository.get(
includeTypes = listOf(Tag.Domain),
manuallySorted = true,
automaticallySorted = true
minPinnedLevel = PinnedLevel.AutomaticallySorted,
).first()
val oldTag = Tag(tag)
if (pinnedTags.any { it.key == oldTag.key }) {