Cloud Sync
- Fixed: Android changes not appearing in Electron after hours — Electron's WebDAV client had no request timeout, so a single unresponsive server could hold the sync lock indefinitely, blocking all subsequent polls until the app was restarted. Requests now time out after 30 seconds.
- Fixed: Electron not syncing when switching back to the window —
visibilitychangeonly fires when a tab is hidden or a window is minimised; switching between app windows leftdocument.hiddenunchanged, so changes from other devices only appeared after the 60-second poll. Returning to the Electron window now immediately triggers a download. - Fixed: Mobile sync loop — An earlier attempt to trigger a full download-merge cycle on every save caused a tight loop on mobile:
applyRemoteDataupdates state → the debounce re-fires → another download → repeat. The debounced handler now triggers an upload only; the 60-second poll handles incoming remote changes. - Fixed: Follow-up download reading stale React state — The secondary download that runs after applying remote data was firing before React had flushed state changes, causing
buildSyncPayloadto re-stamp tasks with a fresh timestamp and appear newer than the remote version in the next merge. Now delayed 250 ms to let React commit state first.
Android App
- Fixed: Blank screen / frozen UI when resuming from background — Multiple fixes to the app-resume sequence: removed a conflicting
webView.onPause()call, added a solid-colour overlay to hide the stale WebView frame during resume, and deferred Health Connect and vault-scan bridge calls until after the first paint. - Fixed: Obsidian vault sync blocking the UI thread — The Android vault scan is now non-blocking, with a double-
requestAnimationFrameguard to keep the loading spinner alive during the sync. - Fixed: All Kotlin compiler warnings resolved.
Pro Subscription (Android)
- New: Pro license badge in Settings — Users with an active Pro subscription see a "dayGLANCE Pro · Annual" or "dayGLANCE Pro · Lifetime" badge at the bottom of the Settings screen.
- Fixed: Crash on launch for Pro subscribers — A missing variable binding caused a
ReferenceErroron any render path that reached the Pro badge, crashing the app for all Pro users. - Improved: Dev purchase reset — The hidden reset-test-purchase action (7 taps) has moved from the "More" section heading to the Pro badge, so it's only reachable by Pro users.
- Fixed: Stuck purchase spinner — Billing callbacks are now event-driven; the spinner no longer hangs if the billing flow completes before the listener is registered.
- Fixed: Reset test purchase not allowing re-purchase — The reset button now queries active INAPP purchases directly rather than relying on the cached token, which could be a subscription token when an annual test subscription was active simultaneously. Each INAPP purchase is now consumed and awaited before the paywall reappears, ensuring the lifetime token is always cleared on the Play side.
Notifications & UI
- Fixed: Up Next notification showing raw
[[wikilinks]]— Wikilinks and#hashtagsare now stripped from notification titles. - Fixed: Timeline "Now" row showing raw wikilinks in the countdown label.
- Fixed: Loading spinner broken on Android — Centering the toast without a CSS
transformrestoresanimate-spinon Android WebView. - Fixed: Completed styling not applied to past calendar events in list view.
Electron (Desktop)
- Fixed: iCloud entitlements removed from Developer ID build — Prevents a code-signing rejection on non-Mac-App-Store builds.
- Fixed: CI provisioning profile check moved into a shell script for reliability.
Other
- Added
tailwindcss-animateplugin to the build. - Dependencies updated.