24ea7ec59a7d8d48613594c5d47c0b32c300b65c
This commit fixes the critical crash on Android 9 (API 28) that occurred when using WorkManager Expedited Work for background sync operations. ## Root Cause When setExpedited() is used in WorkManager, the CoroutineWorker must implement getForegroundInfo() to return a ForegroundInfo object with a Foreground Service notification. On Android 9-11, WorkManager calls this method, but the default implementation throws: IllegalStateException: Not implemented ## Solution - Implemented getForegroundInfo() in SyncWorker - Returns ForegroundInfo with sync progress notification - Android 10+: Sets FOREGROUND_SERVICE_TYPE_DATA_SYNC for proper service typing - Added required Foreground Service permissions to AndroidManifest.xml ## Technical Changes - SyncWorker.kt: Added getForegroundInfo() override - NotificationHelper.kt: Added createSyncProgressNotification() factory method - strings.xml: Added sync_in_progress UI strings (EN + DE) - AndroidManifest.xml: Added FOREGROUND_SERVICE permissions - Version updated to 1.7.1 (versionCode 18) ## Previously Fixed (in this release) - Kernel-VPN compatibility (Wireguard interface detection) - HTTP connection lifecycle optimization (SafeSardineWrapper) - Stability improvements for sync sessions ## Testing - Tested on Android 9 (API 28) - No crash on second app start - Tested on Android 15 (API 35) - No regressions - WiFi-connect sync working correctly - Expedited work notifications display properly Fixes #15 Thanks to @roughnecks for detailed bug report and testing!
Simple Notes Sync
Clean, offline-first notes with intelligent sync - simplicity meets smart synchronization.
SHA-256 hash of the signing certificate:
42:A1:C6:13:BB:C6:73:04:5A:F3:DC:81:91:BF:9C:B6:45:6E:E4:4C:7D:CE:40:C7:CF:B5:66:FA:CB:69:F1:6A
42:A1:C6:13:BB:C6:73:04:5A:F3:DC:81:91:BF:9C:B6:45:6E:E4:4C:7D:CE:40:C7:CF:B5:66:FA:CB:69:F1:6A
📱 APK Download · 📖 Documentation · 🚀 Quick Start
🌍 Deutsch · English
📱 Screenshots
📝 Offline-first • 🔄 Smart Sync • 🔒 Self-hosted • 🔋 Battery-friendly
✨ Highlights
- 📝 Offline-first - Works without internet
- 📊 Flexible views - Switch between list and grid layout
- ✅ Checklists - Tap-to-check, drag & drop
- 🌍 Multilingual - English/German with language selector
- 🔄 Configurable sync triggers - onSave, onResume, WiFi-connect, periodic (15/30/60 min), boot
- 🔒 Self-hosted - Your data stays with you (WebDAV)
- 💾 Local backup - Export/Import as JSON file (encryption available)
- 🖥️ Desktop integration - Markdown export for Obsidian, VS Code, Typora
- 🔋 Battery-friendly - ~0.2% with defaults, up to ~1.0% with periodic sync
- 🎨 Material Design 3 - Dynamic dark/light mode & colors based on system settings
➡️ Complete feature list: FEATURES.md
🚀 Quick Start
1. Server Setup (5 minutes)
git clone https://github.com/inventory69/simple-notes-sync.git
cd simple-notes-sync/server
cp .env.example .env
# Set password in .env
docker compose up -d
➡️ Details: Server Setup Guide
2. App Installation (2 minutes)
- Download APK
- Install & open
- ⚙️ Settings → Configure server:
- URL:
http://YOUR-SERVER-IP:8080/(base URL only!) - User:
noteuser - Password: (from .env)
- WiFi: (your network name)
- URL:
- Test connection → Enable auto-sync
- Done! 🎉
➡️ Detailed guide: QUICKSTART.md
📚 Documentation
| Document | Content |
|---|---|
| QUICKSTART.md | Step-by-step installation |
| FEATURES.md | Complete feature list |
| BACKUP.md | Backup & restore guide |
| DESKTOP.md | Desktop integration (Markdown) |
| SELF_SIGNED_SSL.md | Self-signed SSL certificate setup |
| DOCS.md | Technical details & troubleshooting |
| CHANGELOG.md | Version history |
| UPCOMING.md | Upcoming features 🚀 |
| TRANSLATING.md | Translation guide 🌍 |
cd android
./gradlew assembleStandardRelease
➡️ Build guide: DOCS.md
💡 Feature Requests & Ideas
Have an idea for a new feature or improvement? We'd love to hear it!
➡️ How to suggest features:
- Check existing discussions to see if someone already suggested it
- If not, start a new discussion in the "Feature Requests / Ideas" category
- Upvote (👍) features you'd like to see
Features with enough community support will be considered for implementation. Please keep in mind that this app is designed to stay simple and user-friendly.
🤝 Contributing
Contributions welcome! See CONTRIBUTING.md
📄 License
MIT License - see LICENSE
v1.7.0 · Built with ❤️ using Kotlin + Jetpack Compose + Material Design 3
Description
📝 Minimalist offline note-taking app with automatic Wi-Fi synchronisation via WebDAV without many permissions 🛡️
androidfdroidkotlinkotlin-androidmarkdownmaterial-design-3notes-appprivacyself-hostedsimple-appwebdav
Readme
MIT
5.7 MiB
Languages
Kotlin
98.1%
Shell
1.9%








