diff --git a/src/services/widgetSync.ts b/src/services/widgetSync.ts index 5d7693e..0b6555b 100644 --- a/src/services/widgetSync.ts +++ b/src/services/widgetSync.ts @@ -8,6 +8,7 @@ import { startOfDay, endOfDay, addWeeks } from 'date-fns'; import { TaskListWidget } from '../widgets/TaskListWidget'; export const WIDGET_STATE_KEY = 'widget:state'; +export const WIDGET_NAMES = ['SimplListeSmall', 'SimplListeMedium', 'SimplListeLarge'] as const; // Legacy keys — used for migration only const LEGACY_DATA_KEY = 'widget:tasks'; @@ -214,7 +215,7 @@ export async function syncWidgetData(): Promise { await setWidgetState(state); // Request widget update for all 3 sizes - const widgetNames = ['SimplListeSmall', 'SimplListeMedium', 'SimplListeLarge']; + const widgetNames = WIDGET_NAMES; for (const widgetName of widgetNames) { try { await requestWidgetUpdate({ diff --git a/src/widgets/widgetTaskHandler.ts b/src/widgets/widgetTaskHandler.ts index 90c33f8..1e3ab43 100644 --- a/src/widgets/widgetTaskHandler.ts +++ b/src/widgets/widgetTaskHandler.ts @@ -1,6 +1,7 @@ import type { WidgetTaskHandlerProps } from 'react-native-android-widget'; +import { requestWidgetUpdate } from 'react-native-android-widget'; import { TaskListWidget } from './TaskListWidget'; -import { getWidgetState, setWidgetState, type WidgetTask } from '../services/widgetSync'; +import { getWidgetState, setWidgetState, WIDGET_NAMES, type WidgetTask } from '../services/widgetSync'; import { isValidUUID } from '../lib/validation'; const EXPAND_DEBOUNCE_MS = 2000; @@ -24,6 +25,25 @@ function renderWithState( ); } +async function forceWidgetRefresh( + tasks: WidgetTask[], + isDark: boolean, + expandedTaskIds: string[], +): Promise { + for (const widgetName of WIDGET_NAMES) { + try { + await requestWidgetUpdate({ + widgetName, + renderWidget: (props) => + TaskListWidget({ ...props, widgetName, tasks, isDark, expandedTaskIds }), + widgetNotFound: () => {}, + }); + } catch { + // Widget not placed on home screen + } + } +} + export async function widgetTaskHandler( props: WidgetTaskHandlerProps ): Promise { @@ -102,7 +122,7 @@ export async function widgetTaskHandler( } await setWidgetState(state); - renderWithState(renderWidget, widgetInfo, state.tasks, state.isDark, state.expandedTaskIds); + await forceWidgetRefresh(state.tasks, state.isDark, state.expandedTaskIds); try { const { toggleComplete } = await import('../db/repository/tasks');