From f38b06abed83ddc1b5dae8c302bc2f1c26506782 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Tue, 30 Dec 2025 09:40:38 +0000 Subject: [PATCH] chore: sync test app UI with improved logging - Update test app index.html with JSON.stringify improvements for better log readability - This file is synced from www/index.html during build process - Includes date formatting improvements for debugging UI refresh issues --- .../app/src/main/assets/public/index.html | 82 ++++++++++++++++--- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/test-apps/android-test-app/app/src/main/assets/public/index.html b/test-apps/android-test-app/app/src/main/assets/public/index.html index a42df1e..4e85d40 100644 --- a/test-apps/android-test-app/app/src/main/assets/public/index.html +++ b/test-apps/android-test-app/app/src/main/assets/public/index.html @@ -196,22 +196,27 @@ console.log('[UI Refresh] Calling getNotificationStatus()...'); window.DailyNotification.getNotificationStatus() .then(result => { - console.log('[UI Refresh] getNotificationStatus result:', { + console.log('[UI Refresh] getNotificationStatus result:', JSON.stringify({ nextNotificationTime: result.nextNotificationTime, + nextNotificationTimeDate: result.nextNotificationTime ? new Date(result.nextNotificationTime).toISOString() : null, isEnabled: result.isEnabled, pending: result.pending, - lastNotificationTime: result.lastNotificationTime - }); + lastNotificationTime: result.lastNotificationTime, + lastNotificationTimeDate: result.lastNotificationTime ? new Date(result.lastNotificationTime).toISOString() : null + }, null, 2)); const nextTime = formatDateTimeNormalized(result.nextNotificationTime); const hasSchedules = result.isEnabled || (result.pending && result.pending > 0); const statusIcon = hasSchedules ? 'βœ…' : '⏸️'; - console.log('[UI Refresh] Updating UI:', { + console.log('[UI Refresh] Updating UI:', JSON.stringify({ nextTime: nextTime, + nextNotificationTimeRaw: result.nextNotificationTime, + nextNotificationTimeDate: result.nextNotificationTime ? new Date(result.nextNotificationTime).toISOString() : null, hasSchedules: hasSchedules, - statusIcon: statusIcon - }); + statusIcon: statusIcon, + pending: result.pending + }, null, 2)); pluginStatusContent.innerHTML = `${statusIcon} Active Schedules: ${hasSchedules ? 'Yes' : 'No'}
πŸ“… Next Notification: ${nextTime}
@@ -472,11 +477,14 @@ console.log('[Poll] checkNotificationDelivery called'); window.DailyNotification.getNotificationStatus() .then(result => { - console.log('[Poll] Status check result:', { + console.log('[Poll] Status check result:', JSON.stringify({ nextNotificationTime: result.nextNotificationTime, + nextNotificationTimeDate: result.nextNotificationTime ? new Date(result.nextNotificationTime).toISOString() : null, lastNotificationTime: result.lastNotificationTime, - lastKnownNextNotificationTime: lastKnownNextNotificationTime - }); + lastNotificationTimeDate: result.lastNotificationTime ? new Date(result.lastNotificationTime).toISOString() : null, + lastKnownNextNotificationTime: lastKnownNextNotificationTime, + lastKnownNextNotificationTimeDate: lastKnownNextNotificationTime ? new Date(lastKnownNextNotificationTime).toISOString() : null + }, null, 2)); // Check for notification delivery if (result.lastNotificationTime) { @@ -520,11 +528,13 @@ // Detect if nextNotificationTime changed (rollover occurred) const currentNextTime = result.nextNotificationTime; - console.log('[Poll] Comparing nextNotificationTime:', { + console.log('[Poll] Comparing nextNotificationTime:', JSON.stringify({ current: currentNextTime, + currentDate: currentNextTime ? new Date(currentNextTime).toISOString() : null, lastKnown: lastKnownNextNotificationTime, + lastKnownDate: lastKnownNextNotificationTime ? new Date(lastKnownNextNotificationTime).toISOString() : null, changed: currentNextTime && currentNextTime !== lastKnownNextNotificationTime - }); + }, null, 2)); if (currentNextTime && currentNextTime !== lastKnownNextNotificationTime) { if (lastKnownNextNotificationTime !== null) { @@ -580,6 +590,56 @@ }, 500); }); + // Refresh UI when app comes back to foreground (after force-stop, app resume, etc.) + // This ensures the UI updates after recovery from force-stop + document.addEventListener('visibilitychange', () => { + if (!document.hidden) { + console.log('[Visibility] App became visible, refreshing UI status...'); + // Small delay to allow recovery to complete + setTimeout(() => { + loadPluginStatus(); + loadPermissionStatus(); + loadChannelStatus(); + + // Also check for recent notifications that might have been missed + if (window.DailyNotification) { + window.DailyNotification.getNotificationStatus() + .then(result => { + // Check if a notification was received recently (within last 2 minutes) + if (result.lastNotificationTime) { + const lastTime = new Date(result.lastNotificationTime); + const now = new Date(); + const timeDiff = now - lastTime; + + if (timeDiff > 0 && timeDiff < 120000) { + console.log('[Visibility] Recent notification detected, showing indicator'); + const indicator = document.getElementById('notificationReceivedIndicator'); + const timeSpan = document.getElementById('notificationReceivedTime'); + + if (indicator && timeSpan) { + indicator.style.display = 'block'; + lastTime.setSeconds(0, 0); + timeSpan.textContent = `Received at ${lastTime.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true })}`; + + // Hide after 30 seconds + setTimeout(() => { + indicator.style.display = 'none'; + }, 30000); + } + } + } + + // Update last known next notification time + lastKnownNextNotificationTime = result.nextNotificationTime; + }) + .catch(error => { + console.error('[Visibility] Failed to get notification status:', error); + }); + } + }, 1000); // Wait 1 second for recovery to complete + } + }); + console.log('Functions attached to window:', {