From 4db54fc038ae4c61dc83203edb69d129538caf11 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Mon, 10 Apr 2023 14:09:29 +0200 Subject: [PATCH] Hide widgets that are already in use from widget picker --- .../ui/launcher/sheets/WidgetPickerSheetVM.kt | 6 +++--- .../launcher2/services/widgets/WidgetsService.kt | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheetVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheetVM.kt index ee470292..fceac108 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheetVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheetVM.kt @@ -42,9 +42,9 @@ class WidgetPickerSheetVM( private val enabledWidgets = widgetsService.getWidgets() .stateIn(viewModelScope, SharingStarted.WhileSubscribed(100), emptyList()) - private val allBuiltInWidgets = enabledWidgets.map { w -> - widgetsService.getBuiltInWidgets().filter { b -> !w.any { it::class == b::class } } - }.shareIn(viewModelScope, SharingStarted.WhileSubscribed(100)) + private val allBuiltInWidgets = + widgetsService.getAvailableBuiltInWidgets() + .shareIn(viewModelScope, SharingStarted.WhileSubscribed(100)) val builtInWidgets = allBuiltInWidgets .combine(searchQuery) { widgets, query -> diff --git a/services/widgets/src/main/java/de/mm20/launcher2/services/widgets/WidgetsService.kt b/services/widgets/src/main/java/de/mm20/launcher2/services/widgets/WidgetsService.kt index 615003e5..10484a6e 100644 --- a/services/widgets/src/main/java/de/mm20/launcher2/services/widgets/WidgetsService.kt +++ b/services/widgets/src/main/java/de/mm20/launcher2/services/widgets/WidgetsService.kt @@ -23,7 +23,8 @@ class WidgetsService( ) { suspend fun getAppWidgetProviders(): List = withContext(Dispatchers.IO) { val appWidgetManager = AppWidgetManager.getInstance(context) - val launcherApps = context.getSystemService() ?: return@withContext emptyList() + val launcherApps = + context.getSystemService() ?: return@withContext emptyList() val profiles = launcherApps.profiles val widgets = mutableListOf() for (profile in profiles) { @@ -32,6 +33,18 @@ class WidgetsService( widgets } + fun getAvailableBuiltInWidgets(): Flow> { + return widgetRepository.get().map { widgets -> + getBuiltInWidgets().filter { + it.type == FavoritesWidget.Type && !widgets.any { it is FavoritesWidget } || + it.type == WeatherWidget.Type && !widgets.any { it is WeatherWidget } || + it.type == MusicWidget.Type && !widgets.any { it is MusicWidget } || + it.type == CalendarWidget.Type && !widgets.any { it is CalendarWidget } + + } + } + } + fun getBuiltInWidgets(): List { return listOf( BuiltInWidgetInfo(