Commit graph

249 commits

Author SHA1 Message Date
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
Johannes Millan
53324bac08 17.0.0-RC.7 2026-01-17 13:33:56 +01:00
Johannes Millan
ce595ba212 17.0.0-RC.6 2026-01-17 13:32:33 +01:00
Johannes Millan
3c5b441046 17.0.0-RC.5 2026-01-16 22:35:17 +01:00
Johannes Millan
0cd6dfaf43 17.0.0-RC.4 2026-01-16 22:34:50 +01:00
Johannes Millan
7aee741c1d Merge branch 'feat/ios' into master
Resolves merge conflicts in:
- src/app/core/startup/startup.service.ts: Keep both _store and _platformService injections
- src/app/features/android/store/android.effects.ts: Refactor to use platform-agnostic CapacitorReminderService

The feat/ios branch adds iOS support via Capacitor, introducing platform-agnostic
services for notifications, reminders, and platform detection that work across
web, Android, and iOS.
2026-01-16 13:45:31 +01:00
Johannes Millan
566760bd4a feat(android): add optional alarm-style notifications and fix reminder cancellation
- Fix bug where native Android alarms weren't cancelled when reminders were removed
- Add cancelNativeReminderOnUnschedule$ effect to cancel alarms on unschedule/dismiss
- Add useAlarmStyleReminders setting (default: false) for regular vs alarm notifications
- Create separate notification channels for alarm-style and regular reminders
- Add IS_ANDROID_WEB_VIEW_TOKEN injection token for testability
- Pass useAlarmStyle parameter through JS bridge to native Kotlin layer
2026-01-15 17:49:56 +01:00
Johannes Millan
23c6691daa 17.0.0-RC.3 2026-01-14 16:26:13 +01:00
Johannes Millan
aee3b656df 17.0.0-RC.2 2026-01-14 14:26:09 +01:00
Johannes Millan
4d17ae8f2f feat(ios): add keyboard and status bar support 2026-01-14 13:45:42 +01:00
Johannes Millan
b583454327 fix(android): support pre-release versions in APK builds
- Update bump-android-version.js to handle RC/alpha/beta versions
- Pre-releases use versionCode suffix 0001-8999, stable uses 9000
- This ensures users can upgrade from RC to stable without uninstalling
- Skip Play Store upload for pre-release tags (GitHub only)
- Skip fastlane changelog generation for pre-releases

Fixes #5964
2026-01-12 15:25:18 +01:00
Johannes Millan
f9656ceb70 16.9.4 2026-01-10 12:58:17 +01:00
Johannes Millan
6dcede853f 16.9.3 2026-01-10 12:23:21 +01:00
Johannes Millan
7fcec38476 16.9.2 2026-01-09 18:28:21 +01:00
Johannes Millan
79276f3fc7 16.9.1 2026-01-09 17:59:07 +01:00
Johannes Millan
4919ab188b 16.9.0 2026-01-09 16:41:59 +01:00
Johannes Millan
dfa6a94a4b fix(android): show notification with sound when focus mode timer completes in background
When the app is backgrounded on Android, the focus mode countdown timer
now triggers a high-priority notification with alarm sound and vibration
when it completes. Previously, only the silent foreground service
notification was shown, causing users to miss timer completion.

Changes:
- Add completion notification channel with IMPORTANCE_HIGH
- Detect timer completion in FocusModeForegroundService
- Broadcast completion event to activity via LocalBroadcastManager
- Forward event to Angular via onFocusModeTimerComplete$ subject
- Handle native completion in effects to sync app state

Fixes #5923
2026-01-09 15:01:06 +01:00
Johannes Millan
1a79592aca build: update links to match our new organization 2026-01-05 14:45:06 +01:00
Johannes Millan
2cc06178e5 16.8.3 2026-01-04 17:27:04 +01:00
Johannes Millan
70f1e4ba73 16.8.2 2026-01-04 14:57:50 +01:00
Johannes Millan
b7cbef2f79 feat(android): add alarm sound and vibration to task reminders
Use default alarm ringtone with USAGE_ALARM audio attributes so
reminders play even when phone is on silent. Add vibration pattern
and change notification category from REMINDER to ALARM.

Fixes #5603
2026-01-04 12:45:00 +01:00
Johannes Millan
ac31531ca6 16.8.1 2026-01-02 20:12:41 +01:00
Johannes Millan
092d32a39e 16.8.0 2026-01-02 19:26:41 +01:00
Johannes Millan
a14c95093d fix(android): add error handling for native service calls
Wrap all androidInterface native method calls in try-catch blocks to
prevent app crashes when Java exceptions are raised during method
invocation. Users are now notified via snackbar when service start
fails, while update/stop failures are logged silently.

Changes:
- Add _safeNativeCall helper to TypeScript effects for DRY error handling
- Add safeCall inline helper to Kotlin JavaScriptInterface
- Wrap focus mode and tracking service calls with error handling
- Show user-friendly error notification on service start failures
- Add unit tests for error handling logic

Fixes #5819
2026-01-02 17:09:08 +01:00
Johannes Millan
00fdb29db9 fix(android): resolve race condition and improve widget reliability
- Add @Synchronized to WidgetTaskQueue methods to prevent task loss
- Use apply() instead of commit() in addTask() to avoid UI blocking
- Change QuickAddActivity to extend AppCompatActivity for consistency
- Add unit tests for setCounter() plugin API method
2026-01-01 12:34:39 +01:00
Johannes Millan
4a89c05d32 feat(android): add quick add widget 2025-12-31 12:45:17 +01:00
Johannes Millan
25edb4ff1e perf(android): prewarm WebView during idle time to speed up startup
Load WebView native libraries during main thread idle time using
IdleHandler and WebSettings.getDefaultUserAgent(). This reduces
the 200-300ms freeze on first WebView creation.
2025-12-31 11:45:52 +01:00
Johannes Millan
d11435808e fix(focus-mode): address critical focus mode and Android notification issues
- Fix pausedTaskId race condition: pass pausedTaskId in action payload
  instead of reading from state (reducer clears before effect reads)
- Fix Android focus notification: update title/isBreak on transitions,
  restart timer runnable on resume from paused state
- Fix Android reminder cancellation: track scheduled IDs and cancel
  alarms when reminders are removed
- Fix banner Start button: dispatch skipBreak first when isBreakTimeUp
  to properly resume task tracking
- Fix WebDAV validation: use translation key instead of hardcoded string

Addresses code review feedback for sync issues identified in focus mode,
Android notifications, and reminder scheduling.
2025-12-22 19:00:02 +01:00
Johannes Millan
2c910f6753 fix(android): sync notification timer when time spent is manually changed
Add updateTrackingService method to reset the notification timer when
the user manually edits time spent on a task. Previously, the Android
foreground service maintained its own timer that was only set at
tracking start, causing desync when users manually reset time.

Fixes #5772
2025-12-22 14:40:40 +01:00
Johannes Millan
77b991c75c 16.7.3 2025-12-20 11:43:20 +01:00
Johannes Millan
1d52bb91be 16.7.2 2025-12-19 21:17:46 +01:00
Johannes Millan
4a40af6f14 16.7.1 2025-12-19 21:15:45 +01:00
Johannes Millan
592eb3ba39 16.7.0 2025-12-19 21:10:21 +01:00
Johannes Millan
f7901ba47f feat(android): add better notifications and permanent notification for focus mode 2025-12-19 15:52:11 +01:00
Johannes Millan
ffa7122aea feat(android): add background time tracking via foreground service
When a task is being tracked and the app goes to the background on Android,
JavaScript execution is paused/throttled, causing time tracking to stop.

This adds a native Foreground Service that:
- Shows a persistent notification with task title and elapsed time
- Tracks time independently using timestamps (not JS ticks)
- Provides Pause and Done action buttons on the notification
- Syncs elapsed time back to Angular when the app resumes or task changes

Architecture:
- Native service stores startTimestamp + accumulatedMs
- Calculates elapsed = (now - startTimestamp) + accumulated
- Angular effects sync time on resume, task switch, and notification actions
2025-12-19 13:38:52 +01:00
Johannes Millan
0e17203d0a 16.6.1 2025-12-14 12:33:38 +01:00
Johannes Millan
a10eb2fcf8 16.6.0 2025-12-12 19:06:20 +01:00
Johannes Millan
102ac1c330 16.5.5 2025-12-09 14:26:48 +01:00
johannesjo
7ce0d784ce 16.5.4 2025-12-07 09:57:23 +01:00
Johannes Millan
4bf3754fef 16.5.3 2025-12-06 16:29:09 +01:00
Johannes Millan
6a150ea8a2 16.5.2 2025-12-06 13:41:30 +01:00
Johannes Millan
5ef527990a 16.5.1 2025-12-06 12:08:14 +01:00
Johannes Millan
02093f871d 16.5.0 2025-12-05 17:24:02 +01:00
Johannes Millan
e69c39c3cc fix(android): address cold start share race condition and type mismatch
- Introduce `isFrontendReady` flag in Main Activity to strictly coordinate share intent flushing.
- Queue all share intents until the frontend explicitly signals readiness via `triggerGetShareData`.
- Change default share type from 'TEXT' (invalid) to 'NOTE' (valid) to match frontend type definitions.
- Fix race condition where `callJSInterfaceFunctionIfExists` was called before Angular subscriptions were active.
2025-12-02 13:30:36 +01:00