diff --git a/core/base/src/main/res/drawable/ic_badge_hidden.xml b/core/base/src/main/res/drawable/ic_badge_hidden.xml new file mode 100644 index 00000000..1db5b35a --- /dev/null +++ b/core/base/src/main/res/drawable/ic_badge_hidden.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/core/base/src/main/res/drawable/ic_badge_suspended.xml b/core/base/src/main/res/drawable/ic_badge_suspended.xml index d4caaef0..d53ed2b3 100644 --- a/core/base/src/main/res/drawable/ic_badge_suspended.xml +++ b/core/base/src/main/res/drawable/ic_badge_suspended.xml @@ -1,6 +1,7 @@ Automatic location Use GPS and location services to determine location automatically Managed by plugin - The location for this provider can be configured in the plugin app + The location for this provider is managed by the plugin app Location Use degrees Fahrenheit and miles per hour Imperial units diff --git a/data/searchable/build.gradle.kts b/data/searchable/build.gradle.kts index e07b9db6..6dbab070 100644 --- a/data/searchable/build.gradle.kts +++ b/data/searchable/build.gradle.kts @@ -47,7 +47,6 @@ dependencies { implementation(project(":core:preferences")) implementation(project(":core:ktx")) implementation(project(":data:wikipedia")) - implementation(project(":services:badges")) implementation(project(":core:crashreporter")) } \ No newline at end of file diff --git a/services/badges/build.gradle.kts b/services/badges/build.gradle.kts index 95bc0123..8a1187c3 100644 --- a/services/badges/build.gradle.kts +++ b/services/badges/build.gradle.kts @@ -50,4 +50,5 @@ dependencies { implementation(project(":core:preferences")) implementation(project(":core:base")) implementation(project(":data:files")) + implementation(project(":data:searchable")) } \ No newline at end of file diff --git a/services/badges/src/main/java/de/mm20/launcher2/badges/BadgeService.kt b/services/badges/src/main/java/de/mm20/launcher2/badges/BadgeService.kt index 3cf8ad27..68890c0a 100644 --- a/services/badges/src/main/java/de/mm20/launcher2/badges/BadgeService.kt +++ b/services/badges/src/main/java/de/mm20/launcher2/badges/BadgeService.kt @@ -4,6 +4,7 @@ import android.content.Context import de.mm20.launcher2.badges.providers.AppShortcutBadgeProvider import de.mm20.launcher2.badges.providers.BadgeProvider import de.mm20.launcher2.badges.providers.CloudBadgeProvider +import de.mm20.launcher2.badges.providers.HiddenItemBadgeProvider import de.mm20.launcher2.badges.providers.NotificationBadgeProvider import de.mm20.launcher2.badges.providers.PluginBadgeProvider import de.mm20.launcher2.badges.providers.SuspendedAppsBadgeProvider diff --git a/services/badges/src/main/java/de/mm20/launcher2/badges/providers/HiddenItemBadgeProvider.kt b/services/badges/src/main/java/de/mm20/launcher2/badges/providers/HiddenItemBadgeProvider.kt new file mode 100644 index 00000000..9a324873 --- /dev/null +++ b/services/badges/src/main/java/de/mm20/launcher2/badges/providers/HiddenItemBadgeProvider.kt @@ -0,0 +1,43 @@ +package de.mm20.launcher2.badges.providers + +import de.mm20.launcher2.badges.Badge +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 kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class HiddenItemBadgeProvider( +) : BadgeProvider, KoinComponent { + + private val searchableRepository: SavableSearchableRepository by inject() + + private val scope = CoroutineScope(Job() + Dispatchers.Default) + + private val hiddenItemKeys = searchableRepository.getKeys( + hidden = true, + limit = 9999, + ).shareIn(scope, SharingStarted.WhileSubscribed(), 1) + + override fun getBadge(searchable: Searchable): Flow { + if (searchable !is SavableSearchable) return flowOf(null) + return hiddenItemKeys.map { keys -> + if (searchable.key in keys) { + Badge( + iconRes = R.drawable.ic_badge_hidden + ) + } else { + null + } + } + } +} \ No newline at end of file