From 10d5a823fc12573913ac87e75155b6a910e0a4fa Mon Sep 17 00:00:00 2001 From: darken Date: Sun, 9 Nov 2025 09:32:26 +0100 Subject: [PATCH] fix: Make widget clicks unique Use the widget ID as the request code for `PendingIntent`. This ensures that each widget instance has a distinct `PendingIntent`, preventing them from overwriting each other and allowing clicks on multiple widgets to work correctly. --- .../capod/main/ui/widget/WidgetProvider.kt | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt index 3cbbc296..20f7495d 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetProvider.kt @@ -141,7 +141,7 @@ class WidgetProvider : AppWidgetProvider() { val device: PodDevice? = profileId?.let { podMonitor.getDeviceForProfile(it) } val layout = when { - !upgradeRepo.isPro() -> createUpgradeRequiredLayout(context) + !upgradeRepo.isPro() -> createUpgradeRequiredLayout(context, widgetId) device is DualPodDevice -> { val minWidth = widgetManager.getAppWidgetOptions(widgetId) .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH) @@ -157,23 +157,24 @@ class WidgetProvider : AppWidgetProvider() { else -> R.layout.widget_pod_dual_wide_layout } - createDualPodLayout(context, device, layout) + createDualPodLayout(context, device, layout, widgetId) } - device is SinglePodDevice -> createSinglePodLayout(context, device) - device is PodDevice -> createUnknownPodLayout(context, device) - else -> createNoDeviceLayout(context, profileId != null) + device is SinglePodDevice -> createSinglePodLayout(context, device, widgetId) + device is PodDevice -> createUnknownPodLayout(context, device, widgetId) + else -> createNoDeviceLayout(context, profileId != null, widgetId) } widgetManager.updateAppWidget(widgetId, layout) } private suspend fun createUpgradeRequiredLayout( - context: Context + context: Context, + widgetId: Int ) = RemoteViews(context.packageName, R.layout.widget_message_layout).apply { log(TAG, VERBOSE) { "createUpgradeRequiredLayout(context=$context)" } val pendingIntent: PendingIntent = PendingIntent.getActivity( context, - 0, + widgetId, Intent(context, MainActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) @@ -188,11 +189,12 @@ class WidgetProvider : AppWidgetProvider() { private fun createUnknownPodLayout( context: Context, podDevice: PodDevice, + widgetId: Int ): RemoteViews = RemoteViews(context.packageName, R.layout.widget_message_layout).apply { log(TAG, VERBOSE) { "createUnknownPodLayout(context=$context, podDevice=$podDevice)" } val pendingIntent: PendingIntent = PendingIntent.getActivity( context, - 0, + widgetId, Intent(context, MainActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) @@ -204,12 +206,13 @@ class WidgetProvider : AppWidgetProvider() { private fun createNoDeviceLayout( context: Context, - hasConfiguredProfile: Boolean = false + hasConfiguredProfile: Boolean = false, + widgetId: Int ): RemoteViews = RemoteViews(context.packageName, R.layout.widget_message_layout).apply { log(TAG, VERBOSE) { "createNoDeviceLayout(context=$context, hasConfiguredProfile=$hasConfiguredProfile)" } val pendingIntent: PendingIntent = PendingIntent.getActivity( context, - 0, + widgetId, Intent(context, MainActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) @@ -227,12 +230,13 @@ class WidgetProvider : AppWidgetProvider() { private fun createDualPodLayout( context: Context, podDevice: DualPodDevice, - @LayoutRes layout: Int + @LayoutRes layout: Int, + widgetId: Int ): RemoteViews = RemoteViews(context.packageName, layout).apply { log(TAG, VERBOSE) { "createSinglePodLayout(context=$context, podDevice=$podDevice), layout=${layout}" } val pendingIntent: PendingIntent = PendingIntent.getActivity( context, - 0, + widgetId, Intent(context, MainActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) @@ -277,11 +281,12 @@ class WidgetProvider : AppWidgetProvider() { private fun createSinglePodLayout( context: Context, podDevice: SinglePodDevice, + widgetId: Int ): RemoteViews = RemoteViews(context.packageName, R.layout.widget_pod_single_layout).apply { log(TAG, VERBOSE) { "createSinglePodLayout(context=$context, podDevice=$podDevice)" } val pendingIntent: PendingIntent = PendingIntent.getActivity( context, - 0, + widgetId, Intent(context, MainActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE )