From e30c583d5a973163263051329f555be8015996f6 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sat, 12 Jul 2025 11:43:47 -0500 Subject: [PATCH] Fix widget update race condition --- app/src/main/java/org/tasks/widget/AppWidgetManager.kt | 10 +++++++--- .../java/org/tasks/widget/RequestPinWidgetReceiver.kt | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/tasks/widget/AppWidgetManager.kt b/app/src/main/java/org/tasks/widget/AppWidgetManager.kt index cb90673e3..a55a3a62b 100644 --- a/app/src/main/java/org/tasks/widget/AppWidgetManager.kt +++ b/app/src/main/java/org/tasks/widget/AppWidgetManager.kt @@ -8,6 +8,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.tasks.R import org.tasks.injection.ApplicationScope import timber.log.Timber @@ -25,18 +26,21 @@ class AppWidgetManager @Inject constructor( ?: intArrayOf() fun reconfigureWidgets(vararg appWidgetIds: Int) = scope.launch(Dispatchers.IO) { + Timber.d("reconfigureWidgets(${appWidgetIds.joinToString()})") val intent = Intent(context, TasksWidget::class.java) intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE intent.putExtra( AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds.takeIf { it.isNotEmpty() } ?: widgetIds) context.sendBroadcast(intent) - updateWidgets() } fun updateWidgets() = scope.launch(Dispatchers.IO) { - Timber.d("Updating widgets") - appWidgetManager?.notifyAppWidgetViewDataChanged(widgetIds, R.id.list_view) + val appWidgetIds = widgetIds + Timber.d("updateWidgets: ${appWidgetIds.joinToString()}") + withContext(Dispatchers.Main) { + appWidgetManager?.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.list_view) + } } fun exists(id: Int) = appWidgetManager?.getAppWidgetInfo(id) != null diff --git a/app/src/main/java/org/tasks/widget/RequestPinWidgetReceiver.kt b/app/src/main/java/org/tasks/widget/RequestPinWidgetReceiver.kt index d30722a6f..c5d13013e 100644 --- a/app/src/main/java/org/tasks/widget/RequestPinWidgetReceiver.kt +++ b/app/src/main/java/org/tasks/widget/RequestPinWidgetReceiver.kt @@ -24,7 +24,7 @@ class RequestPinWidgetReceiver : BroadcastReceiver() { val widgetPreferences = WidgetPreferences(context, preferences, widgetId) widgetPreferences.setFilter(filter) widgetPreferences.setColor(color) - appWidgetManager.reconfigureWidgets() + appWidgetManager.reconfigureWidgets(widgetId) } companion object {