Add hidden item badges (but don't enable them)

This commit is contained in:
MM20
2024-05-03 23:50:34 +02:00
parent 1d6688831c
commit a29475b485
7 changed files with 63 additions and 2 deletions
+1
View File
@@ -50,4 +50,5 @@ dependencies {
implementation(project(":core:preferences"))
implementation(project(":core:base"))
implementation(project(":data:files"))
implementation(project(":data:searchable"))
}
@@ -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
@@ -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<Badge?> {
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
}
}
}
}