First stable release. Merging this bumps versionName to 1.0.0 and triggers the release pipeline (F-Droid, Codeberg, Play). **App** - CalDAV sync built in, with Agendula's own task store; OpenTasks / tasks.org stay available and can be copied over in Settings → Storage - repeating tasks, several reminders per task, lists managed in the app, iCalendar import/export, widget and Quick Settings tile - a list can be kept out of the smart lists (#18) and gets its own notification channel (#17) - duplicate a task with its subtasks (#16) - HTML descriptions shown as plain text (#15) - relative day words in reminder notifications (#14) - asks for exact-alarm access instead of claiming USE_EXACT_ALARM, and re-arms reminders when that access changes **Release plumbing** - floret-kit bumped to v0.4.0; the old pin was never pushed, so a clean clone couldn't check out the submodule. 0.4.0 drops CrashConfig.issueTitle (crash issues are always filed in English) - prebuilt .so files ship unstripped, so the build no longer depends on whether an NDK is installed; now checked by check_reproducible_release.sh - official F-Droid recipe in docs/fdroid-official/, to submit to fdroiddata once v1.0.0 is tagged - Google Play: fastlane uploads the AAB and every locale's What's New after the F-Droid release; a separate listing lane pushes text and graphics from the fastlane tree, which CI now checks against Play's limits - store listing: title "Agendula: Tasks" in every locale, icon, feature graphic, screenshots and 1.0.0 changelogs in en-US, en-GB, de-DE and pt-BR crash_report_issue_title is now unused but stays until Weblate removes the translated copies. Closes #14, closes #15, closes #16, closes #17, closes #18 Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de> Reviewed-on: https://codeberg.org/jlmakiola/agendula/pulls/20
155 lines
6.9 KiB
Markdown
155 lines
6.9 KiB
Markdown
<div align="center">
|
|
|
|
<h1>Agendula</h1>
|
|
|
|
<p><strong>A modern Material 3 Expressive task app for Android.</strong><br>
|
|
Syncs over CalDAV, or keeps your tasks on the device. Open standards, no account
|
|
required.</p>
|
|
|
|
<p>
|
|
<a href="https://codeberg.org/jlmakiola/agendula/actions"><img src="https://codeberg.org/jlmakiola/agendula/actions/workflows/ci.yaml/badge.svg?branch=main" alt="CI"></a>
|
|
<img src="https://img.shields.io/badge/Android-10%2B-3DDC84?logo=android&logoColor=white" alt="Android 10+">
|
|
<img src="https://img.shields.io/badge/Kotlin-Compose-7F52FF?logo=kotlin&logoColor=white" alt="Kotlin + Compose">
|
|
<img src="https://img.shields.io/badge/Material%203-Expressive-4285F4" alt="Material 3 Expressive">
|
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green" alt="MIT License"></a>
|
|
</p>
|
|
|
|
<p>
|
|
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/jlmakiola/agendula"><img src="https://github.com/ImranR98/Obtainium/blob/main/assets/graphics/badge_obtainium.png?raw=true" alt="Get it on Obtainium" height="56"></a>
|
|
|
|
<a href="https://ko-fi.com/jeanlucmakiola"><img src="https://storage.ko-fi.com/cdn/brandasset/v2/support_me_on_kofi_badge_beige.png" alt="Support me on Ko-fi" height="56"></a>
|
|
</p>
|
|
|
|
</div>
|
|
|
|
Agendula is the task-list sibling to [Calendula](https://codeberg.org/jlmakiola/calendula).
|
|
It keeps its own task store, designed around RFC 5545's `VTODO`, and syncs it
|
|
with any CalDAV server — Nextcloud, Radicale, Baïkal and the rest. No account is
|
|
needed to use it: without one, your tasks simply stay on the phone.
|
|
|
|
The name rhymes with its sibling on purpose: **Agendula** is *agenda* — Latin for
|
|
“things to be done” — given Calendula's `-ula` ending. Calendula keeps your days;
|
|
Agendula keeps your to-dos. (A Calendula flower head is botanically a cluster of
|
|
many small *florets* — so the two apps are florets of one bloom.)
|
|
|
|
## What it does
|
|
|
|
- **Lists** you create, colour, reorder and delete in the app, plus smart lists:
|
|
Today, Upcoming, Overdue, No date, All and Completed.
|
|
- **Tasks** with due and start dates, all-day tasks, subtasks, priorities,
|
|
progress, location and URL, and cancel/restore.
|
|
- **Repeating tasks**, expanded per RFC 5545. Edit or delete one occurrence,
|
|
this and the following ones, or the whole series.
|
|
- **Reminders** that fire at the exact time: several per task, separate defaults
|
|
for timed and all-day tasks (globally and per list), Done and Snooze right on
|
|
the notification, and they survive reboots.
|
|
- **iCalendar import and export** — open an `.ics` or a zip of them, or write any
|
|
list out as standard `.ics` files.
|
|
- A **home-screen widget**, launcher shortcuts, a Quick Settings tile, and
|
|
"share to Agendula" to turn text from another app into a task.
|
|
- **Material 3 Expressive** throughout, with dynamic colour, expressive motion
|
|
and shapes.
|
|
|
|
## Sync
|
|
|
|
Add a CalDAV account under **Settings → Accounts** and choose which of its task
|
|
lists to sync. Nextcloud signs in through its own login flow in the browser, so
|
|
Agendula never sees your password; any other server takes an address, a user
|
|
name and a password — ideally an app password, which you can revoke on its own.
|
|
|
|
Edits you make are sent within about half a minute. Changes from the server
|
|
arrive on a background interval you choose (15 minutes to a day, or only when
|
|
you tap sync), and every time you open the app. Several accounts can sync side
|
|
by side, and lists can be created, renamed and deleted on the server from the
|
|
app.
|
|
|
|
Sync uses `sync-collection` (RFC 6578) where the server supports it and falls
|
|
back to a full comparison where it does not. Everything the store does not model
|
|
is kept verbatim and sent back unchanged, so passing your tasks through Agendula
|
|
does not quietly lose fields another client wrote.
|
|
|
|
## Where your tasks live
|
|
|
|
| | Where | Sync | Needs |
|
|
|---|---|---|---|
|
|
| **In Agendula** *(default)* | Agendula's own database | Agendula's own CalDAV sync, if you add an account | nothing — no permissions, no other app |
|
|
| **In a provider you already use** | OpenTasks or tasks.org | whatever syncs it for you — DAVx5 and friends | that app installed, and its read/write permission |
|
|
|
|
Agendula's own store is an ordinary app database, so it **coexists with
|
|
OpenTasks rather than replacing it**. If you already sync through a provider,
|
|
Agendula can work on top of it exactly as before.
|
|
|
|
Switching between the two moves nothing — each store keeps its own tasks — so
|
|
**Settings → Storage** asks before it switches, and offers to **copy** a
|
|
provider's tasks into Agendula's own store when you want to move over. The copy
|
|
is taken once and the originals stay where they are.
|
|
|
|
Google Tasks and Microsoft To Do are out of scope by design: they are
|
|
proprietary, and open standards — CalDAV and iCalendar — are the lane.
|
|
|
|
## Install
|
|
|
|
### F-Droid repository
|
|
|
|
Every release is built, signed and published to a self-hosted F-Droid
|
|
repository. Add it once and your F-Droid client handles updates from then on:
|
|
|
|
1. In your F-Droid client, open *Settings → Repositories → Add* (or open the
|
|
link below on your phone):
|
|
|
|
```
|
|
https://apps.dev.jeanlucmakiola.de/dev/fdroid/repo?fingerprint=C2C0640402BF458FC0ED957AF0B37AA4C14022E72F89CE90B5965B458CF73425
|
|
```
|
|
|
|
2. Refresh, search for **Agendula**, install.
|
|
|
|
### Codeberg release / Obtainium
|
|
|
|
Every release is also published on
|
|
**[Codeberg](https://codeberg.org/jlmakiola/agendula/releases)** with the signed
|
|
APK and a `.sha256` checksum attached — the same APK the F-Droid repository
|
|
serves. For automatic updates from there, use
|
|
**[Obtainium](https://github.com/ImranR98/Obtainium)** and
|
|
**[add Agendula in one tap](https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/jlmakiola/agendula)**.
|
|
|
|
### Build from source
|
|
|
|
```sh
|
|
git clone --recurse-submodules https://codeberg.org/jlmakiola/agendula.git
|
|
cd agendula
|
|
./gradlew :app:assembleDebug
|
|
```
|
|
|
|
JDK 17 and the Android SDK are all it needs; see
|
|
[`CONTRIBUTING.md`](CONTRIBUTING.md) for tests and lint.
|
|
|
|
## Translations
|
|
|
|
Translations are managed on a self-hosted **Weblate**, and partial ones are
|
|
fine — an untranslated string simply falls back to English. Agendula ships in
|
|
English, German and Brazilian Portuguese so far.
|
|
|
|
**→ [Help translate Agendula](https://weblate.dev.jeanlucmakiola.de/engage/agendula/)**
|
|
|
|
No coding needed: register on the Weblate server, pick (or request) a language,
|
|
and translate the strings in your browser. You can also reach this link in the
|
|
app from the top of **Settings → App language**.
|
|
|
|
## Contributing
|
|
|
|
Issues and pull requests live on
|
|
**[Codeberg](https://codeberg.org/jlmakiola/agendula)**.
|
|
[`CONTRIBUTING.md`](CONTRIBUTING.md) covers the practical how.
|
|
|
|
## Privacy
|
|
|
|
No analytics, no advertising, no tracking, no third-party SDK, and no server of
|
|
the developer's. Your tasks stay on your device unless you add a CalDAV account
|
|
yourself, and then they go only to the server you chose.
|
|
|
|
**→ [Privacy policy](https://jeanlucmakiola.de/agendula/privacy)**
|
|
|
|
## License
|
|
|
|
MIT — see [LICENSE](LICENSE).
|