Commit Graph

10 Commits

Author SHA1 Message Date
Matthew Raymer
f746434b6b refactor(plugin): remove echo test method and references
- Remove echo() method from DailyNotificationPlugin.java
- Update Android test app to show 'Plugin is loaded and ready!' instead of echo test
- Update web test app to remove echo method call
- Update iOS test app to remove echo method call
- Update documentation to remove echo test references
- Replace echo test with simple plugin availability check

The echo test was only used for initial plugin verification and is no longer
needed since the plugin now has comprehensive notification functionality.
This simplifies the codebase and removes unnecessary test code.
2025-10-14 06:31:07 +00:00
Matthew Raymer
34ee29f79f refactor(receiver): remove setFetchTime() call from DailyNotificationReceiver
- Remove setFetchTime() call as fetchedAt is now set in constructor
- Align with new immutable timestamp model
- Ensure consistent timestamp handling across all components

This completes the migration to the new timestamp model where
fetchedAt is immutable and set at object creation time.
2025-10-14 06:17:20 +00:00
Matthew Raymer
0d2be9619d refactor(notifications): update supporting classes for new timestamp model
- Remove setFetchTime() calls from DailyNotificationFetchWorker
- Remove setFetchTime() calls from DailyNotificationFetcher
- Update DailyNotificationMaintenanceWorker to use getFetchedAt()
- Update DailyNotificationMigration to use getFetchedAt()
- Align all classes with immutable fetchedAt timestamp approach
- Ensure consistent timestamp handling across the codebase

These changes support the new timestamp model where fetchedAt
is immutable and set at object creation time.
2025-10-14 06:16:57 +00:00
Matthew Raymer
92c843b07e fix(notifications): resolve TTL violation and timestamp issues
- Separate fetchedAt (immutable) and scheduledAt (mutable) timestamps
- Add custom JsonDeserializer to ensure fetchedAt is set by constructor
- Add transient fetchTime field for Gson compatibility
- Update TTL enforcer to use fetchedAt for freshness checks
- Increase DEFAULT_TTL_SECONDS to 25 hours for daily notifications
- Update storage to use custom Gson deserializer
- Add debug logging for timestamp validation
- Fix timestamp initialization in NotificationContent constructor

This resolves the TTL_VIOLATION error that was preventing
notifications from being scheduled due to stale timestamp data.
2025-10-14 06:16:50 +00:00
Matthew Raymer
4c4d306af2 fix(plugin): resolve storage null reference issues
- Add ensureStorageInitialized() helper method for null safety
- Add storage initialization checks to all plugin methods
- Fix null pointer exception in scheduleDailyNotification()
- Add storage initialization to getLastNotification()
- Add storage initialization to cancelAllNotifications()
- Add storage initialization to updateSettings()
- Add storage initialization to setAdaptiveScheduling()
- Add storage initialization to checkAndPerformRecovery()
- Improve exact alarm permission handling with proper Settings intent
- Add comprehensive error handling for storage operations

This resolves the 'Attempt to invoke virtual method on null object'
error that was occurring when plugin methods were called before
storage initialization completed.
2025-10-14 06:16:44 +00:00
Matthew Raymer
c42814e60b fix(android): implement proper boot receiver with Direct Boot support
- Add android:exported="true" for API 31+ compatibility
- Add android:directBootAware="true" for Direct Boot handling
- Add LOCKED_BOOT_COMPLETED action for early boot recovery
- Remove PACKAGE_REPLACED action (not needed for our use case)
- Implement handleLockedBootCompleted() for Direct Boot safety
- Use device protected storage context for Direct Boot operations
- Add comprehensive logging for boot receiver events

This fixes Android 10+ boot receiver restrictions and ensures
notifications are restored after device reboots and app updates.
2025-10-14 06:16:36 +00:00
Matthew Raymer
31f5adcfd1 feat(android): add complete DailyNotification plugin implementation
- Add full DailyNotificationPlugin with @CapacitorPlugin annotation
- Implement echo method for testing plugin connectivity
- Add comprehensive notification functionality with offline-first approach
- Include performance optimization and error handling classes
- Add WorkManager integration for background content fetching
- Plugin now ready for testing with Capacitor 6 registration
2025-10-13 10:50:23 +00:00
Matthew Raymer
07be444b64 fix(android): resolve plugin registration with capacitor.plugins.json
- Add capacitor.plugins.json with correct DailyNotification plugin entry
- Use 'classpath' field instead of 'classname' for Capacitor 6 compatibility
- Add annotation processor dependency to plugin build.gradle
- Plugin now successfully registers with Capacitor bridge

Fixes: PluginLoadException and plugin availability issues
Resolves: DailyNotification plugin not loading despite manual registration
2025-10-13 10:50:03 +00:00
Matthew Raymer
a6d7d39c34 feat: add protection against capacitor.build.gradle overwrites
- Create fix-capacitor-build.sh script to restore fixes after Capacitor operations
- Update build-native.sh to automatically apply fix when needed
- Add warnings to BUILDING.md about auto-generated file risks
- Document which Capacitor commands will overwrite manual fixes

This protects against losing the capacitor.build.gradle fix when running
npx cap sync, npx cap update, or other Capacitor CLI commands.
2025-10-12 06:15:52 +00:00
Matthew Raymer
300bd7f01f fix: resolve Android build issues and create proper plugin module
- Fix capacitor.build.gradle to comment out missing Capacitor integration file
- Create separate plugin module with proper build.gradle configuration
- Copy plugin source code to android/plugin/src/main/java/
- Update settings.gradle to include plugin module
- Fix plugin build.gradle to remove Kotlin plugin dependency
- Successfully build plugin AAR: android/plugin/build/outputs/aar/plugin-release.aar
- Update BUILDING.md with correct build commands and troubleshooting

This resolves the Android Studio build issues by creating a proper
plugin library module separate from the test app.
2025-10-12 06:09:07 +00:00