Commit graph

342 commits

Author SHA1 Message Date
Johannes Millan
06b8831948
fix(android): match navigation bar color to system theme on startup (#6872)
Add values-night/colors.xml with dark theme colors (#131314) so the
navigation bar and status bar match the system dark theme before the
Angular app boots. Also fix light-mode status bar initial color to
#f8f8f7 to match what the app sets dynamically.

https://claude.ai/code/session_017CVEn9yTUqcPiRzoafP24R

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 01:43:14 +01:00
Johannes Millan
945b8ed15c fix(android): improve startup overlay to webapp add task bar transition
- Match webapp styling: replace colored border stroke with 12dp
  elevation shadow matching the webapp's global bar variant
- Show webapp add task bar when native overlay bar is open but empty,
  not just when it contains text
- Target global add task bar specifically (add-task-bar.global) to
  avoid focusing an inline bar that may already exist on the page
2026-03-18 13:14:10 +01:00
Johannes Millan
49952c5c6a feat(android): add native startup overlay for quick task entry
Show a native FAB button during app startup so users can add tasks
while Angular bootstraps. Tapping the FAB expands a themed input bar
with keyboard tracking. Submitted tasks queue in SharedPreferences
via WidgetTaskQueue and are processed by AndroidEffects after
hydration. Partial (unsubmitted) text transfers to the web AddTaskBar
via sessionStorage.

Design:
- Two-phase dismiss keeps native overlay visible until web input mounts
- MutationObserver with resolved guard detects AddTaskBar readiness
- Day/night theme support with primary-colored border
- FAB color (#6495ED) matches the loading spinner
- Overlay cleaned up in onDestroy to prevent listener leaks

Also removes the old Quick Add Widget (QuickAddActivity,
QuickAddWidgetProvider, and all associated resources).

Also modernizes the loading spinner from double-bounce to a subtle
pulse animation.
2026-03-18 13:14:10 +01:00
Johannes Millan
8a4473541e fix(android): set navigation bar color to match app theme
Add NavigationBarPlugin Capacitor plugin to dynamically update the
Android system navigation bar color and icon style when the app theme
changes. Set initial color in native XML styles for all themes
including the launch theme. Reduce bottom nav and FAB shadows to
prevent visual cutoff at the system navigation bar boundary.
2026-03-18 13:14:10 +01:00
Johannes Millan
42dc92b10d fix(sync): prevent empty-upload to WebDAV on Android
Add defense-in-depth guards to prevent the Capacitor bridge from
silently uploading zero-byte files to WebDAV, which corrupts sync
state for all clients.

- Add empty-data guard in WebdavApi.upload() with tests
- Reject empty PUT body in Android WebDavHttpPlugin (Kotlin)
- Validate compressAndEncryptData() output for all providers
- Add payload size diagnostic logging in WebDavHttpAdapter
- Use android.util.Log instead of println for proper logcat filtering

Closes #6855
2026-03-17 13:59:40 +01:00
Johannes Millan
d401e6169e feat(tasks): add deadlines feature with reminders and planner integration
Add deadline support for tasks with date-only and time-specific deadlines.

Core:
- Add deadlineDay, deadlineWithTime, deadlineRemindAt fields to task model
- Add NgRx actions (setDeadline, removeDeadline, clearDeadlineReminder)
- Add meta-reducer with mutual exclusivity and input validation
- Register deadline actions in ActionType enum and op-log codes

UI:
- Create deadline dialog with calendar, time input, and reminder options
- Add deadline badge to task list row with overdue warning color
- Add deadline item to task detail panel with flag icon
- Add deadline options to task context menu
- Show deadlines in scheduled list page

Reminders:
- Add deadline reminder effects and selectors
- Show reminder dialog with grouped deadline/schedule sections
- Handle deadline reminder clearing on dismiss, done, add-to-today
- Cancel Android native deadline notifications on delete/archive

Planner:
- Show deadline tasks in planner day view and overdue section
- Create dedicated planner-deadline-task component
- Optimize deadline grouping with O(N) single-pass selector

Other:
- Add deadline-today banner effect for unplanned deadline tasks
- Add translation keys for all deadline UI strings
- Add E2E tests for deadline reminder flows
- Add unit tests for deadline reducer and overdue utility
- Extract shared isDeadlineOverdue utility function
- Guard app-state selectors against undefined during teardown
2026-03-15 18:48:00 +01:00
Johannes Millan
591fc42483 17.4.1 2026-03-13 19:54:39 +01:00
Johannes Millan
f410aff077 17.4.0 2026-03-13 16:41:54 +01:00
Johannes Millan
6768eaeb22 fix(android): show correct notification text for due date reminders
The notification body incorrectly showed "Note reminder" for all
non-TASK reminder types, including DUE_DATE reminders. Replace the
if/else with a when expression that handles each type explicitly.
2026-03-10 15:58:22 +01:00
Johannes Millan
b0335c6ee5 17.3.0 2026-03-07 13:28:20 +01:00
Johannes Millan
fd28c04cce feat(reminder): overhaul mobile notification UX for Android and iOS
- Add notification actions: Done, Snooze 10m, Snooze 1h (Android + iOS)
- Add BootReceiver to re-register alarms after device reboot
- Add SharedPreferences queues for background-to-frontend communication
  (ReminderDoneQueue, ReminderSnoozeQueue, ReminderTapQueue)
- Add "fire and verify" pattern: sync before acting on stale notifications
- Add due-date notification scheduling (configurable hour, default 9 AM)
- Add exact alarm permission warning for Android 12+
- Add notification grouping (Android groups, iOS thread identifiers)
- Add isOngoing flag for persistent alarm-style notifications
- Sanitize REMINDER_TASK_ID to prevent JS injection
2026-03-06 21:19:55 +01:00
Johannes Millan
ed92ea7933 17.2.4 2026-03-01 00:19:19 +01:00
Johannes Millan
a87bff8661 17.2.3 2026-02-28 21:52:29 +01:00
Johannes Millan
9372a14f4f 17.2.2 2026-02-28 21:41:25 +01:00
Johannes Millan
f44e6b54cf 17.2.1 2026-02-21 15:15:34 +01:00
Johannes Millan
b79fa5ac29 17.2.0 2026-02-21 13:49:15 +01:00
Johannes Millan
de03a2d11e fix(android): prevent crash on SAF folder selection (#6545)
Wrap takePersistableUriPermission() in try/catch to handle SecurityException
thrown on certain Samsung/Android 13 devices. Reject the Capacitor call on
failure so the error propagates cleanly. Add .catch() to FormlyBtnComponent
promise chain to prevent unhandled rejections.
2026-02-16 18:44:27 +01:00
Johannes Millan
f9fff40402 17.1.8 2026-02-15 11:20:46 +01:00
Johannes Millan
f3eb92c617 17.1.7 2026-02-13 16:16:25 +01:00
Johannes Millan
02fe1a5ff2 fix(android): persist share intent to SharedPreferences for cold-start reliability
Share-to-app via Android SEND intent was unreliable on cold start because
share data was stored only in memory (pendingShareIntent). If the process
died before Angular loaded, the data was lost. Now share data is persisted
to SharedPreferences immediately and pulled synchronously by the frontend.
2026-02-13 14:06:43 +01:00
Johannes Millan
4c4a0a3afd fix(android): use native safe area insets for proper status bar padding
Install capacitor-plugin-safe-area to read native safe area insets and
inject them as CSS variables, working around Capacitor 7's broken
adjustMarginsForEdgeToEdge and Android WebView's unreliable
env(safe-area-inset-*) values.

- Add _initSafeAreaInsets() to GlobalThemeService
- Remove broken adjustMarginsForEdgeToEdge: 'auto' from capacitor config
- Clamp context menu trigger Y to safe area top
- Fix light mode status bar color to match theme (#f8f8f7)
2026-02-11 20:37:40 +01:00
Johannes Millan
ec7e6da161 17.1.6 2026-02-09 18:14:03 +01:00
Johannes Millan
6f85fb4ea6 17.1.5 2026-02-08 16:25:57 +01:00
Johannes Millan
8300eaa6a7 17.1.4 2026-02-08 15:49:17 +01:00
Johannes Millan
f5669b60c4 17.1.3 2026-02-06 20:11:32 +01:00
Johannes Millan
cffbbcfe09 17.1.2 2026-02-05 16:01:03 +01:00
Johannes Millan
dba49e3722 17.1.1 2026-02-05 14:35:02 +01:00
Johannes Millan
197ec4d3a8 17.1.0 2026-02-04 20:55:51 +01:00
Johannes Millan
e97d530d2a 17.0.12 2026-01-30 21:13:40 +01:00
Johannes Millan
25d3cbe81e 17.0.11 2026-01-29 18:24:47 +01:00
Johannes Millan
2c004a445d 17.0.10 2026-01-29 18:24:15 +01:00
Johannes Millan
2d835f9e73 17.0.9 2026-01-28 22:42:29 +01:00
Johannes Millan
821d05d495 17.0.8 2026-01-28 22:16:05 +01:00
Johannes Millan
819671de6d 17.0.7 2026-01-28 22:01:01 +01:00
Johannes Millan
c0f4f8be6c 17.0.6 2026-01-27 22:22:24 +01:00
Johannes Millan
a1af9d5d59 17.0.5 2026-01-26 19:48:56 +01:00
Johannes Millan
0f68c35932 17.0.4 2026-01-26 18:14:43 +01:00
Johannes Millan
73b9bb580f 17.0.3 2026-01-26 16:50:58 +01:00
Johannes Millan
1138c2c1c0 feat(sync): enhance vector clock management and improve error handling in sync process 2026-01-25 20:09:19 +01:00
Johannes Millan
298c956518 17.0.2 2026-01-25 13:50:41 +01:00
Johannes Millan
a51b2c5106 17.0.1 2026-01-24 23:12:31 +01:00
Johannes Millan
044495999b 17.0.0 2026-01-23 22:19:10 +01:00
Johannes Millan
0775650e6e 17.0.0-RC.13 2026-01-21 22:12:01 +01:00
Johannes Millan
40b18c4693 fix(sync): implement OAuth redirect for Dropbox on mobile
- Add redirect_uri parameter to OAuth flow for mobile platforms
- Create OAuthCallbackHandlerService to handle deep link callbacks
- Register custom URI scheme (com.super-productivity.app://) in Android/iOS
- Add platform-specific UI for OAuth flow (automatic vs manual)
- Implement proper error handling for OAuth callback errors
- Add comprehensive unit tests for callback handler
- Fix memory leak by properly cleaning up event listeners
- Use IS_NATIVE_PLATFORM constant for consistent platform detection

Web/Electron continue using manual code entry (no regression).
Mobile (iOS/Android) now use automatic redirect with deep linking.

Fixes Dropbox OAuth authentication on iOS and Android platforms.
2026-01-21 14:30:24 +01:00
Johannes Millan
2844560ef8 refactor(tasks): remove isEnableUrl config, always enable URL parsing 2026-01-20 17:07:24 +01:00
Johannes Millan
6771fa77a2 17.0.0-RC.12 2026-01-18 14:00:52 +01:00
Johannes Millan
0dd33fe4b6 17.0.0-RC.11 2026-01-18 12:29:38 +01:00
Johannes Millan
d9e27a0da7 17.0.0-RC.10 2026-01-18 02:20:51 +01:00
Johannes Millan
7d5bb1a709 17.0.0-RC.9 2026-01-17 16:08:01 +01:00
Johannes Millan
0a7e0c317e 17.0.0-RC.8 2026-01-17 15:47:15 +01:00