From 4b325c01331dce88793617f7f81d4044c88e983a Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 15 Mar 2023 10:13:33 -0500 Subject: [PATCH] Attempt to filter out inactive widgets --- .../tasks/preferences/fragments/Widgets.kt | 51 +++++++++++-------- .../java/org/tasks/widget/AppWidgetManager.kt | 2 + 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt index 8ba1a7ba6..141f974c8 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.os.Bundle import androidx.appcompat.content.res.AppCompatResources import androidx.lifecycle.lifecycleScope +import androidx.preference.Preference import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import org.tasks.R @@ -32,28 +33,34 @@ class Widgets : InjectingPreferenceFragment() { lifecycleScope.launch { preferenceScreen.removeAll() - appWidgetManager.widgetIds.forEach { - val widgetPrefs = WidgetPreferences(context, preferences, it) - val pref = IconPreference(requireContext()) - tintColorPreference(pref, widgetPrefs.color) - pref.drawable = AppCompatResources.getDrawable( - requireContext(), - R.drawable.ic_keyboard_arrow_right_24px - )?.mutate() - pref.tint = context?.getColor(R.color.icon_tint_with_alpha) - pref.iconVisible = true - val filter = defaultFilterProvider.getFilterFromPreference(widgetPrefs.filterId) - pref.title = filter.listingTitle - pref.summary = getString(R.string.widget_id, it) - val intent = Intent(context, WidgetConfigActivity::class.java) - intent.putExtra(android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID, it) - intent.action = "widget_settings" - pref.setOnPreferenceClickListener { - startActivity(intent) - false - } - preferenceScreen.addPreference(pref) - } + appWidgetManager + .widgetIds + .filter { appWidgetManager.exists(it) } + .map { createPreference(it) } + .forEach { preferenceScreen.addPreference(it) } } } + + private suspend fun createPreference(id: Int): Preference { + val widgetPrefs = WidgetPreferences(context, preferences, id) + val pref = IconPreference(requireContext()) + tintColorPreference(pref, widgetPrefs.color) + pref.drawable = AppCompatResources.getDrawable( + requireContext(), + R.drawable.ic_keyboard_arrow_right_24px + )?.mutate() + pref.tint = context?.getColor(R.color.icon_tint_with_alpha) + pref.iconVisible = true + val filter = defaultFilterProvider.getFilterFromPreference(widgetPrefs.filterId) + pref.title = filter.listingTitle + pref.summary = getString(R.string.widget_id, id) + val intent = Intent(context, WidgetConfigActivity::class.java) + intent.putExtra(android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID, id) + intent.action = "widget_settings" + pref.setOnPreferenceClickListener { + startActivity(intent) + false + } + return pref + } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/widget/AppWidgetManager.kt b/app/src/main/java/org/tasks/widget/AppWidgetManager.kt index baa8eaa4b..e4c4a087e 100644 --- a/app/src/main/java/org/tasks/widget/AppWidgetManager.kt +++ b/app/src/main/java/org/tasks/widget/AppWidgetManager.kt @@ -32,4 +32,6 @@ class AppWidgetManager @Inject constructor( fun updateWidgets() { appWidgetManager?.notifyAppWidgetViewDataChanged(widgetIds, R.id.list_view) } + + fun exists(id: Int) = appWidgetManager?.getAppWidgetInfo(id) != null } \ No newline at end of file