From a29475b485bc7af84fca9d761a720401e2eb7031 Mon Sep 17 00:00:00 2001
From: MM20 <15646950+MM2-0@users.noreply.github.com>
Date: Fri, 3 May 2024 23:50:34 +0200
Subject: [PATCH] Add hidden item badges (but don't enable them)
---
.../src/main/res/drawable/ic_badge_hidden.xml | 16 +++++++
.../main/res/drawable/ic_badge_suspended.xml | 1 +
core/i18n/src/main/res/values/strings.xml | 2 +-
data/searchable/build.gradle.kts | 1 -
services/badges/build.gradle.kts | 1 +
.../de/mm20/launcher2/badges/BadgeService.kt | 1 +
.../providers/HiddenItemBadgeProvider.kt | 43 +++++++++++++++++++
7 files changed, 63 insertions(+), 2 deletions(-)
create mode 100644 core/base/src/main/res/drawable/ic_badge_hidden.xml
create mode 100644 services/badges/src/main/java/de/mm20/launcher2/badges/providers/HiddenItemBadgeProvider.kt
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