Secretary

Apps/tasks
Login

Apps/tasks

Secretary Tasks (Android)

Android-Client für Aufgaben auf dem secretary-server (CalDAV/CardDAV). Jede Aufgabe ist ein VTODO-Komponent (RFC 5545 §3.6.2) in einer .ics-Datei unter einer Kalender-Collection.

What it does

Changelog

Every released version: Apps/tasks/changelog

Screenshots

Fällige Aufgaben Zukünftige Aufgaben Aufgabendetail

Verzeichnisstruktur

secretary-tasks-android/
├── build.gradle.kts              # Root-Build
├── settings.gradle.kts
├── gradle.properties
├── CONTEXT.md
├── doc/                          # (GUI-/Protokoll-Notizen: Wiki Apps/tasks/gui-protocol)
├── gradle/wrapper/
└── app/
    ├── build.gradle.kts
    ├── proguard-rules.pro
    └── src/main/
        ├── AndroidManifest.xml
        ├── res/values/
        │   ├── strings.xml
        │   └── themes.xml
        └── java/org/beowulf/secretarytasks/
            ├── SecretaryTasksApp.kt          # Application (Service-Locator)
            ├── MainActivity.kt               # Single-Activity
            ├── data/
            │   ├── Models.kt                 # TasksCollection, Task, Priority
            │   ├── Recurrence.kt             # RRULE-Expander (FREQ/INTERVAL/…)
            │   ├── VTodo.kt                  # RFC-5545-Parser/-Writer
            │   ├── CaldavClient.kt           # CalDAV-Client (PROPFIND/PUT/…)
            │   ├── AccountResolver.kt        # Zentrales Konto (ContentProvider)
            │   ├── TasksRepository.kt        # Config-Persistenz
            │   └── OfflineStore.kt           # JSON-Cache + Write-Behind-Queue
            ├── notify/
            │   ├── NotificationScheduler.kt  # AlarmManager-Planung
            │   ├── TaskReminderReceiver.kt   # fällige Aufgabe → Notification
            │   └── BootReceiver.kt           # Alarme nach Reboot neu planen
            ├── vm/
            │   └── TasksViewModel.kt         # App-State
            └── ui/
                ├── Theme.kt                  # Material 3
                ├── LoginScreen.kt            # Server + Basic-Auth
                ├── TaskListScreen.kt         # Collections + Aufgabenliste
                ├── TaskEditScreen.kt         # Editor (Titel/Priorität/Fälligkeit/…)
                ├── SettingsScreen.kt         # Verbindung/Benachrichtigungen/Abmelden
                └── navigation/NavGraph.kt    # Routen: login, tasks, task, settings

Befehle

Voraussetzungen: JDK 21, Android-SDK (Platform 37, Build-Tools 34) und Gradle 9.x. Im Repository liegt bewusst kein Gradle-Wrapper -- entweder Android Studio nutzen (bringt sein Gradle mit) oder Gradle 9 selbst installieren; die Beispiele unten rufen deshalb gradle direkt.

export ANDROID_HOME="$HOME/Android/Sdk"   # bzw. sdk.dir=... in local.properties

gradle :tasks:assembleDebug           # Debug-APK
gradle :tasks:testDebugUnitTest       # Unit-Tests
gradle :tasks:lintDebug               # Lint

Builds laufen im Hintergrund via setsid, Logging geht ins Syslog. Alle acht Module werden gemeinsam gebaut; ein Release-Build signiert die APKs (gradle assembleRelease, siehe Docs).

Datenmodell (VTODO)

App-Feld ICS-Eigenschaft Hinweis
uid UID Ressourcenname <uid>.ics
summary SUMMARY Titel
description DESCRIPTION Text, \n-escaped
priority PRIORITY 0=None, 1=High, 3=Medium, 5=Low, 9=Lowest
dueRaw DUE Datum YYYYMMDD oder Datum+Uhrzeit
startRaw DTSTART optionaler Beginn
rrule RRULE Wiederholung (siehe Recurrence)
status STATUS NEEDS-ACTION / IN-PROCESS / COMPLETED / CANCELLED
percentComplete PERCENT-COMPLETE 0–100
completedRaw COMPLETED UTC-Stempel bei Erledigung
categories CATEGORIES Tags, kommagetrennt
createdRaw CREATED UTC-Stempel
lastModifiedRaw LAST-MODIFIED UTC-Stempel
href / etag – (DAV) Ressourcen-URL + ETag (If-Match beim PUT)

Protokoll

Der secretary-server (≥ 0.16.0) benötigt keine Server-Änderungen für VTODO – VTODO wird erkannt (Storage-Sniff) und in supported-calendar-component-set gemeldet; seit 0.16.0 liegt Aufgaben unter dem top-level Namespace-Root /tasks/ (zuvor /calendars/tasks-*).

Wiederholungen (RRULE)

Recurrence (app/src/main/java/org/beowulf/secretarytasks/data/Recurrence.kt) ist ein minimaler RFC-5545-Expander:

Wiederholungs-Dialog (tasks.org-Stil)

RecurrenceSpec (dieselbe Datei) baut aus Formularwerten eine RRULE (toRrule), erzeugt ein lesbares Label (toLabel, z.B. "Alle 2 Wochen (Mo, Mi)" oder "Monatlich am letzten Freitag") und parst eine bestehende RRULE zurück (fromRrule, best-effort). Der Dialog in TaskEditScreen.kt bietet:

Nicht durch das Formular abbildbare Regeln (z.B. BYMONTHDAY=1,15) werden aus fromRrule als null geliefert und als benutzerdefinierte Regel angezeigt statt zerstört.

Abhaken wiederkehrender Aufgaben (tasks.org-Stil)

Listen-Chips (Fällig / Zukünftig)

Benachrichtigungen

NotificationScheduler plant pro bevorstehender Fälligkeit einen AlarmManager-Alarm (Channel tasks_due, IMPORTANCE_HIGH). Geplante Ressourcen-hrefs liegen in SharedPreferences (secretary_tasks_notif), damit Alarme gelöschter Aufgaben abgeräumt werden.

Schnellaktionen in der Benachrichtigung

Jede Fälligkeits-Benachrichtigung hat zwei Aktionen (TaskReminderReceiver):

Action-PendingIntents nutzen actionRequestCode (getrennt vom Alarm- Request-Code). Tests: NotificationSchedulerTest (7 Tests, nextFireAt).

Offline (Stale-While-Revalidate)

OfflineStore (app/src/main/java/org/beowulf/secretarytasks/data/OfflineStore.kt) hält Collections + Aufgaben als JSON-Cache (filesDir/secretary_tasks_cache.json, atomare Schreibvorgänge) und eine Write-Behind-PendingAction-Warteschlange.

Konventionen

Server-Referenz


Attachments: