Secretary

Apps/links/changelog
Login

Apps/links/changelog

Secretary Links - Android - Changelog

Every released version of the Secretary Links app, newest first.

App documentation: Apps/links

Status

Status 2026-10-13 (43)

Secretary Links 43 (versionCode 43): Ordner und ihre Einträge sind jetzt sichtbar ineinander verschachtelt. Die gemeinsame FolderRow (common/ui/FolderRow.kt) unterschied sich bisher nicht von den Eintragskarten: Ordner-Kopfzeile und Einträge lagen als gleich aussehende Karten in einer flachen LazyColumn, die Zugehörigkeit der Einträge zum Ordner war nicht zu erkennen. Die Kopfzeile ist jetzt eine getönte, abgerundete Zeile mit Ordner-Glyphe, Name, Anzahl und rotierendem Chevron in der Akzentfarbe; jeder Eintrag eines aufgeklappten Ordners ist über die neue Composable FolderChild eingerückt und links mit einer dünnen Führungslinie an die Kopfzeile gebunden. Die Linie wird in den Kartenabstand hinein verlängert und läuft dadurch über die Einträge eines Ordners durchgehend. Das trifft alle vier Listen-Clients (Notizen, Aufgaben, Links, Kontakte). versionCode 42 -> 43.

Tests: :common:compileDebugKotlin, :notes:compileDebugKotlin, :tasks:compileDebugKotlin, :links:compileDebugKotlin, :contacts:compileDebugKotlin grün.

Status 2026-10-09 (41)

Secretary Links 41 (versionCode 41): Ordner-Gruppierungen starten eingeklappt, mit gemeinsamer Einstellung Ordner eingeklappt.

(1) Eingeklappt per Vorgabe. Die Liste gruppiert nach Ordnern (erster TAG: = Ordner) mit einer Kopfzeile pro Ordner; deren Startzustand ist jetzt eingeklappt, ein Tipp auf die Kopfzeile klappt den Ordner auf/zu (FolderExpansionState/rememberFolderExpansion in common/ui/FolderRow.kt). Eine Liste mit nur einem Ordner zeichnet weder Kopfzeile noch Umschalter.

(2) Gemeinsame Einstellung. Der Startwert kommt aus der gemeinsamen UiPreferences.folders_collapsed (Default true = eingeklappt; SRS/common 1.6.0, FR-C-70..72) und liegt im Einstellungs-Screen in der neuen Sektion Ordner: Checkbox Ordner eingeklappt („Listen starten mit geschlossenen Ordnern"), gerendert von FolderSettingsSection. SecretarySettingsScreen traegt dafuer showFolderSettings – true bei Notizen, Aufgaben, Links und Kontakten, alle übrigen Clients bleiben beim Default false.

Tests: compileDebugKotlin (common + alle Module) und testDebugUnitTest (common + die vier Ordner-Clients) gruen; keine JVM-Verhaltensaenderung, keine neuen Unit-Tests. versionCode 40 -> 41.

Status 2026-10-01 (33)

Secretary Links 33 (versionCode 33): die Sync-Aktion ist ohne Konto weg, Passwortfelder zeigen Klartext. Beides sitzt im gemeinsamen Code und trifft damit alle acht Clients.

(1) Keine Sync-Aktion ohne Konto. AppHeader (Kit.kt) blendet die Sync-Aktion bereits aus, wenn onSync null ist - das war die vorhandene Konvention, nur wurde sie an keiner Stelle benutzt. OfflineBanner (StatusBanners.kt) verlangte dagegen einen nicht-nullbaren onSync und zeichnete den Refresh-Button bedingungslos; der Parameter ist jetzt (() -> Unit)?, und ohne Konto fehlt der Knopf (die Meldung "offline" bleibt stehen). Alle Aufrufstellen reichen den Callback nur noch durch, wenn wirklich ein Konto existiert: loggedIn der jeweiligen ViewModel, im Kalender der collected isLoggedIn-StateFlow. Das Journal ist der einzige Client, bei dem das sichtbar war - es hat keine Login-Sperre und laeuft im lokalen Modus (localMode = !repo.isConfigured()) ohne Konto weiter, zeigte den Sync-Knopf aber trotzdem. Beim Secrets-Tresor war der Knopf vorhanden und nur deaktiviert (enabled = state.connected); er wird jetzt gar nicht erst gezeichnet, der Spinner waehrend state.syncing bleibt. Am Launcher aendert sich nichts: die Server-Sync-Sektion im Settings-Screen war schon an account != null gehaengt.

(2) Passwortfelder zeigen Klartext. Alle Eingabefelder fuer Passwoerter nehmen VisualTransformation.None; die Tastatur bleibt KeyboardType.Password. Betroffen sind der gemeinsame Login-Screen (SecretaryLoginScreen), die Journal-Passwortdialoge (PasswordDialogs: Setzen, Aendern, Abfragen) und das Entschperren (UnlockScreen) sowie im Tresor die Felder fuer Recovery-Passphrase, Entschperr-Passphrase, KDBX-Import und KDBX-Export (SecretsApp) und das Passwortfeld im Eintrags-Editor (Browse). Anlass war die Darstellung, nicht die Sicherheit: die Maske besteht aus U+25CF (●), und die gebundelte Typewriter-Schrift Special Elite deckt dieses Zeichen nicht ab - die Felder zeigten unlesbare Ersatzglyphen. In den Tresor-Dialogen ist der Sichtbarkeits-Umschalter damit ueberfluessig und mit ihm die Felder passwordVisible/visible, der Eye-Button bzw. der Textbutton Anzeigen/Verbergen und die Visibility/VisibilityOff-Imports weg. Der Reveal-Pfad fuer gespeicherte Secrets in Browse (FieldRow) bleibt unberuehrt: das ist eine Anzeige, keine Eingabe.

Tests: keine neuen, kein JVM-Verhalten geaendert. 662 Tests gruen (Kalender 55, common 100, Kontakte 44, Launcher 12, Secrets 405, Tasks 46), verifiziert ueber gradle test; alle neun Module kompilieren (compileDebugKotlin, offline), und die Neuuebersetzung meldet in keiner der geaenderten Dateien eine Warnung. versionCode 32 -> 33.

Status 2026-09-30 (32)

Secretary Links 32 (versionCode 32): die Namensraum-Karte im Einstellungs-Screen ist weg, die Version steht jetzt unten. Beides steckt im gemeinsamen SecretarySettingsScreen in common (SRS common 1.3.0), trifft also alle acht Clients. Der Parameter collectionNamespace und die Karte Namensraum sind raus - sie zeigte eine Konstante, die der Nutzer ohnehin in der Collection-Liste sieht. Die Konstante LINKS_NAMESPACE bleibt als CalDAV-Basispfad, wird aber nicht mehr angezeigt. Neu ist die letzte Zeile des Screens: die Version der jeweils laufenden App aus der PackageInfo des eigenen Pakets, jede App zeigt so ihre eigene Nummer, ohne sie durchzureichen. versionCode 31 -> 32.

Status 2026-09-30 (31)

Secretary Links 31 (versionCode 31): keine Code-Aenderung - der Quelltext ist derselbe wie bei 30. Veraendert wurde in diesem Zug nur der Launcher (Korrektur am Konfigurations-Sync, dort 460). Die Nummer geht trotzdem hoch, weil ein Release alle acht Clients und beide Serverpakete zusammen ausliefert: das Buildsystem ueberspringt einen Lauf, dessen Zieldateinamen alle bereits im Archiv liegen, und ein gleichnamiges Paket mit gleichem Inhalt waere auf dem Geraet nicht von 30 zu unterscheiden - bei einer APK zusaetzlich ein versionCode, den ein Geraet nicht neu installiert. Server und check-links gehen mit auf 0.24.0. versionCode 30 -> 31.

Status 2026-09-29 (30)

Secretary Links 30 (versionCode 30): Abschluss des Release-Zugs, der Signiermaterial aus einer Umgebungsvariablen in eine Datei verlagert hat (siehe 29). Der Sprung ist der von 4d6b02eee5 für alle acht Module gemeinsam gesetzte: BuildManager vergleicht Dateinamen statt Inhalte, also liefert derselbe Code ohne neue versionCode denselben Namen und der Build wird als „bereits im Repo“ abgewiesen. An Links änderte sich in diesem Schritt kein Funktionscode. versionCode 29 -> 30.

Status 2026-09-29 (29)

Secretary Links 29 (versionCode 29): alle acht Clients signieren ihre Release-APKs, nicht nur der Launcher. Vorher hatte nur der Launcher ein signingConfig; die sieben anderen Module bauten *-unsigned.apk und konnten kein signiertes Release liefern. Zwei Nacharbeiten blieben in derselben Version: der Default-Pfad für das Keystore war um eine Ebene zu kurz, und die Zugangsdaten wurden aus dem Prozess-Environment in eine Datei verlagert, damit ein Release nicht von einer in keinem --help genannten Umgebungsvariable abhängt. versionCode 28 -> 29.

Status 2026-09-29 (28)

Secretary Links 28 (versionCode 28): Signiermaterial in ein eigenes Fossil-Repository signing-certs ausgelagert (vorher lag es im Secretary-Repository selbst). An Links änderte das keine Zeile Funktionscode; die Version trägt die neue Signierkonfiguration. versionCode 27 -> 28.

Status 2026-09-29 (27)

Secretary Links 27 (versionCode 27): Konto, gemeinsamer Einstellungs-Screen und Konfigurations-Sync für den Launcher. Der Commit hielt die versionCode aller acht Module gleichzeitig fest. An Links änderte sich dabei keine Zeile; die Funktionsänderung betraf ausschließlich den Launcher. Die Nummern 25 und 26 entstanden am 24.09. mit den neuen Icons (siehe 25) beziehungsweise wurden nie vergeben — dieser Commit sprang von 25 auf 27. versionCode 25 -> 27.

Status 2026-09-24 (25)

Secretary Links 25 (versionCode 25): neue Typewriter-Launcher-Icons für alle Secretary-Apps. Das Schema ist die Glyphe als [glyph] in der Typewriter- Schrift Special Elite, weiß auf einem app-spezifischen Akzent; die Icon- Erzeugung (tools/generate-icons.sh) bekam dazu eine Option, weil Special Elite U+263A nicht abdeckt. versionCode 24 -> 25.

Status 2026-09-22 (24)

Secretary Links 24 (versionCode 24): Geändert-Anzeige + Besuch räumt die Warnung (serverseitiger Link-Checker, server 0.17.0). Der Server prüft nun selbst im 30-min-Timer jede X-LINK-URL im /links/-Storage und schreibt bei Content-Änderung X-LINK-CHANGED:true plus aktualisierte X-LINK-HASH/X-LINK-ETAG/X-LINK-LAST-MODIFIED direkt in die VJOURNAL- Beschreibung (atomar, mit Sync-Token-Bump). Die App ist der Gegenpart:

Status 2026-09-19 (23)

Secretary Links 23 (versionCode 23): Eigener Namespace-Root /links/ statt /calendars/links-* (Namespace-Migration, server 0.16.0). Die Sammlungen liegen jetzt unpräfixiert unter /links/ (kanonisch /links/main/; zuvor /calendars/links-main/). LinkRepository nutzt baseCollectionPath = "/links/" (neue CaldavClient.collectionRoot), der NotesCodec(collectionBasePath = "/links/") und die Sync-Sektion zeigen „Namensraum" statt „Sammlungspräfix". Der Offline-Cache wird beim ersten Lesen via GOfflineStore.legacyPrefix = "links-" automatisch migriert (/calendars/links-* → /links/…, idempotent; /local/-Homes bleiben); auch LinkCheckScheduler.loadCachedLinks und LinkCheckReceiver.refreshFaviconIfMissing lesen/schreiben den Cache im neuen Layout. runServerSync filtert zusätzlich /links/ (Legacy- /calendars/, /addressbooks/ bleiben im Filter). Deployment-Reihenfolge: erst Server auf 0.16.0 updaten + migrate-namespaces.sh, dann die App ausrollen. versionCode 22 -> 23. CONTEXT.md updated.

Status 2026-09-19 (22)

Secretary Links 22 (versionCode 22): Rearm cadence: 12 hours. The periodic rearm alarm that re-programs the per-link check alarms now fires every 12 hours (it was 30 minutes in 21). This keeps the maintenance alarm battery-cost negligible while still recovering lost/deferred check alarms within half a day. Functional code identical to 21; rebuilt as 22 so the package repository receives a fresh APK filename (secretary-links-22.apk instead of the already-shipped 21). versionCode 21 -> 22.

Status 2026-09-19 (21)

Secretary Links 21 (versionCode 21): One icon per link card + regularly re-armed reminders. (1) The link cards in the list show only the open in browser icon now; the Share and "check now" icons were removed. Sharing stays available via the long-press context menu (Bearbeiten / Teilen / Kopieren / Verschieben / Löschen). (2) Reminders / check alarms are re-armed on a fixed cadence. A new periodic rearm alarm fires every 30 minutes (RearmReceiver, LinkCheckScheduler.armRearm); when it fires it reloads all links from the local offline cache (loadCachedLinks, all collections) and re-runs scheduleAll, re-programming every per-link check alarm and re-arming itself. scheduleAll now arms the rearm alarm too, the real check receiver re-arms it on every fire, and the BootReceiver re-arms after restart — so a single lost/deferred alarm no longer kills the chain. scheduleChecks() now schedules all cached links (every collection) instead of only the currently selected collection. versionCode 20 -> 21.

Status 2026-09-16 (20)

Secretary Links 20 (versionCode 20): Sync-Härtung: kein Endlos-Sync, kein Sync-Dienst-400 (gleiche Muster wie Journal v119/v120). runServerSync() konnte syncStatus bei leerer Job-Liste endgültig auf RUNNING stehen lassen (der Guard if (syncStatus?.state == RUNNING) return blockierte danach jede weitere Synchronisation für die Sitzung) und pollte Server-Jobs unbegrenzt. Neu: leere Jobs brechen sauber ab (syncStatus = null), der Poll-Loop ist hart begrenzt (maxPolls = 200 ≈ 100 s bei 500 ms; sonst FAILED „Sync timed out"), und es werden nur echte Server-Collections übertragen (href unter /calendars/ oder /addressbooks/ – eine lokale Pseudo- Collection wie /local/ wird niemals an /sync/start gereicht). versionCode 19 -> 20.

Status 2026-09-16 (19)

Secretary Links 19 (versionCode 19): Offline-Sync-Engine (secretary-common-android v0.30.0). loadLinksInternal nutzt jetzt die gemeinsame OfflineSyncEngine (CrudItemRemote + GOfflineStore + NotesCodec("links-")): Server-Abruf, Rehome-Upload lokaler UIDs, Pending-Delete-Filter, Prepare-Null-Erhalt und Cache-Ersatz liegen in common; die lokale mergeWithPending-Logik wurde entfernt. Offline-Verhalten (goOffline + Cache-Anzeige bei IOException) unverändert; nach dem Merge laufen weiter flushPending(), scheduleChecks() und refreshMissingFavicons(). View bleibt beim Sync stabil. versionCode 18 -> 19.

Status 2026-09-16 (18)

Secretary Links 18 (versionCode 18): Erinnerungen feuern zuverlässig. Die geplanten Checks waren Einmal-Alarme: nach dem ersten Auslösen wurde kein neuer Alarm gesetzt (Kette brach, bis die App wieder geöffnet wurde), der BootReceiver war ein No-Op und auf Android 13+ fehlte die Runtime-Berechtigung für Benachrichtigungen. (1) Selbst-arme-Alarme: LinkCheckScheduler.armNext programmiert nach jedem Auslösen direkt den nächsten Termin aus der RRULE; die RRULE wird dafür als Extra im Alarm-Intent mitgeführt, sodass die Kette auch bei langsamen/fehlgeschlagenen Checks oder Prozess-Neu-Start bestehen bleibt. (2) BootReceiver reschedult: nach BOOT_COMPLETED werden die Links aus dem lokalen Offline-Cache (secretary_links_cache.json) geladen und neu geplant – keine Netzwerk-Anfrage nötig. (3) POST_NOTIFICATIONS Runtime-Berechtigung wird auf Android 13+ beim App-Start angefragt. versionCode 18 == versionName 18.

Status 2026-09-13 (17)

Secretary Links 17 (versionCode 17): Build-Grundlage secretary-common-android v0.26.0 (Kategorie-Escape-Härtung). Version 16 entstand bereits mit dem VJOURNAL-Fix (v0.25.0: CATEGORIES wird nur an unescaped-gespeicherten Kommas gesplittet, Wochentags-Regeln RRULE:FREQ=WEEKLY;BYDAY=MO\,WE\,FR bleiben beim erneuten Öffnen des Wiederholungs-Editors vollständig erhalten). v0.26.0 verallgemeinert das Escaping-Verhalten auf VTODO/VEVENT/VCARD (Tasks/Calendar/Contacts); für Links ist das Verhalten funktional identisch zu Version 16, der APK steht damit aber auf der aktuellen gemeinsamen Bibliothek. versionCode 17 == versionName 17.

Status 2026-09-13 (16)

Secretary Links 16 (versionCode 16, auf secretary-common-android v0.25.0): Wiederholungen: BYDAY-Wochentage gehen verloren + Erinnerungen feuern falsch. Zwei zusammenhängende Fixes. (1) Common-Read- Bug: VJournal.parseNote (secretary-common-android) zerlegte die CATEGORIES-Liste mit .split(',') ohne den RFC-5545-Backslash-Escape zu beachten – eine per Wiederholungs-Editor gespeicherte Wochentags-Regel RRULE:FREQ=WEEKLY;BYDAY=MO\,WE\,FR (escaped by escapeText) wurde beim Laden bei jedem Komma geschnitten, sodass nur der erste Wochentag wiederhergestellt wurde (FREQ=WEEKLY;BYDAY=MO, + verwaiste WE/FR- Kategorien). Dadurch zeigte der erneut geöffnete Wiederholungs-Editor nur noch den ersten Tag („ausgewählte Tage verloren"). Neu splittet splitCategoryList() die Liste nur an unescape-gespeicherten Kommas und reicht Escapes unangetastet an unescapeText weiter (bestehende, bereits \,-escapte Server-Daten werden damit korrekt vollständig gelesen). (2) Links-Scheduler: LinkCheckScheduler.computeNextCheck ignorierte BYDAY komplett (WEEKLY = immer now + 7 Tage), sodass eine „3× pro Woche"-Regel (Mo/Mi/Fr) trotz intakter RRULE nie an den ausgewählten Tagen prüfte. Die Funktion nutzt jetzt den gemeinsamen RFC-5545-Expander Recurrence(rrule).nextAfter(now, now) (unterstützt zusätzlich MONTHLY/ YEARLY und COUNT/UNTIL); unbekannte/ungültige Regeln fallen wie bisher auf now + 1 Tag zurück. versionCode 16 == versionName 16.

Secretary Links 15 (versionCode 15): GET_ACCOUNTS für das zentrale Konto. Die App deklariert jetzt android.permission.GET_ACCOUNTS (neben dem legacy READ_ACCOUNT). Das gemeinsame Sekretär-Konto (AccountManager, Typ org.beowulf.secretary) wird damit direkt lesbar und hängt nicht mehr nur an der Signer-Visibility-Provisionierung des Android-Kontos, die ein App-Update abwerfen konnte (Konto leer nach Update). versionCode 15 == versionName 15.

Status 2026-09-09 (14)

Secretary Links 14 (versionCode 14): Sammlungen: einheitliches Langdruck-Kontextmenü + Kopieren (secretary-common-android v0.19.0). Die Sammlungsübersicht nutzt jetzt das gemeinsame CollectionContextMenu (statt der Icon-Buttons): langer Druck auf eine Sammlungskarte öffnet Umbenennen / Kopieren / Löschen. Kopieren legt eine Duplikat-Sammlung mit allen enthaltenen Links an (CrudManager.copyCollection, Name „<Name> (Kopie)", neue UIDs/hrefs, offline via Write-Behind-Queue). Umbenennen/Anlegen laufen über die gemeinsamen RenameCollectionDialog/ CreateCollectionDialog. versionCode 14 == versionName 14.

Status 2026-09-09 (13)

Secretary Links 13 (versionCode 13): Privates Öffnen robuster. Aktuelle Firefox-für-Android-Versionen ignorieren das private_tab-Intent-Extra – private Fenster werden dort durch Firefox' eigene Einstellung „Links in einem privaten Tab öffnen" gesteuert und sind von fremden Apps nicht mehr erzwingbar. openLinkInBrowser für Links mit „Privat öffnen" nutzt daher folgende Rangfolge: (1) Firefox Focus (org.mozilla.focus, ist immer privat), (2) Firefox mit private_tab-Extra (Best-Effort, je nach Version), (3) Standard-Browser. Ohne privates Fenster bleibt der Fallback der normale Browser. versionCode 13 == versionName 13.

Status 2026-09-09 (12)

Secretary Links 12 (versionCode 12): **412-Konflikt beim Speichern behoben

Status 2026-09-09 (11)

Secretary Links 11 (versionCode 11): Sammlungs-Handling in secretary-common-android + privater Tab korrigiert. (1) Das Sammlungs-Handling (Offline-Merge neu angelegter/gelöschter Sammlungen und die „wartet auf Synchronisierung"-Marker) lebt jetzt gemeinsam in PendingSync (secretary-common-android v0.17.0) – nicht mehr app-lokal. PendingSync.mergeCollections hält lokal bekannte (pending/offline/gerade angelegte) Sammlungen sichtbar und blendet pending-gelöschte aus; PendingSync.snapshotState liefert pendingCollectionIds/ pendingItemHrefs; das neue PendingBadge (SyncProblem) ersetzt die lokalen Icons. (2) Privater Tab korrigiert: Firefox öffnet einen ACTION_VIEW-Intent jetzt per setPackage("org.mozilla.firefox") + Extra private_tab=true (statt IntentReceiverActivity + private_browsing_mode); ohne installiertes Firefox fällt der Handler auf den Standard-Browser (ohne privates Fenster) zurück. versionCode 11 == versionName 11.

Status 2026-09-09 (10)

Secretary Links 10 (versionCode 10): Pending-Sync-Marker + privates Fenster pro Link. (1) Sammlungen und Einträge mit noch nicht synchronisierten Aktionen (neu angelegt, umbenannt, gelöscht, editiert/dupliziert – offline in der Write-Behind-Queue) zeigen jetzt ein „wartet auf Synchronisierung"-Badge (SyncProblem-Icon) in der Liste. Dazu berechnet das ViewModel aus der Pending-Queue pendingCollectionIds/pendingItemHrefs (Created/Rename/Delete für Sammlungen, Put/Delete für Einträge) und aktualisiert sie bei jeder Mutation/Flush. (2) Privates Fenster jetzt pro Link: der bisherige globale Schalter (Einstellungen → Browser) wurde entfernt; stattdessen gibt es pro Link eine „Privat öffnen"-Schalter im Editor, gespeichert als X-LINK-PRIVATE in der VJOURNAL-Beschreibung. openLinkInBrowser respektiert das Flag pro Link. (3) parseXProperties entfernt X-LINK-* Zeilen jetzt aus jedem Teil der Beschreibung (auch wenn Daten bereits fehlerhaft unter body: gespeichert wurden), sodass Legacydaten die X- Felder endgültig nicht mehr im Beschreibungsfeld zeigen. versionCode 10 == versionName 10.

Status 2026-09-09 (9)

Secretary Links 9 (versionCode 9): Löschen im Kontextmenü + Collection- Fixes. (1) Das Langdruck-Kontextmenü der Link-Karten enthält jetzt auch Löschen (mit Bestätigungsdialog aus secretary-common-android), zusätzlich zu Bearbeiten / Teilen / Kopieren / Verschieben. (2) Collection-Anlage sichtbar ohne Sync: loadCollectionsInternal merged nun lokal bekannte (pending, offline oder gerade angelegte) Sammlungen in die Serverliste, sodass eine neue Sammlung sofort lokal erscheint und nicht erst nach einem Sync. (3) Beschreibung clean: Link.fromNote fällt nicht mehr auf die rohe VJOURNAL-Beschreibung zurück, wenn kein body:-Marker vorhanden ist – leere/legacy Links zeigen die X-LINK-* Felder nicht mehr im Beschreibungsfeld. versionCode 9 == versionName 9.

Status 2026-09-08 (8)

Secretary Links 8 (versionCode 8): Konfigurierbares Kontextmenü. Die Aktionen Teilen / Kopieren / Verschieben des Langdruck-Menüs lassen sich in den Einstellungen (gemeinsame Sektion „Langdruck-Kontextmenü" aus secretary-common-android v0.16.0) per Checkbox aktivieren/deaktivieren (UiPreferences, Default: alle aktiv). ItemContextMenu blendet deaktivierte Aktionen aus und sperrt das Menü komplett, wenn alle vier aus sind (dann verhält sich die Karte wie eine gewöhnliche klickbare Karte). versionCode 8 == versionName 8.

Status 2026-09-08 (7)

Secretary Links 7 (versionCode 7): Einheitliches Langdruck- Kontextmenü. Die Link-Karten nutzen jetzt das gemeinsame ItemContextMenu (secretary-common-android): langer Druck auf eine Karte öffnet ein Menü mit Bearbeiten / Teilen (über den bestehenden Share-Aktions-Button) / Kopieren / Verschieben… (statt des bisherigen ⋮-Overflow-Menüs mit nur „Verschieben…"). Kopieren legt ein Duplikat in derselben Sammlung an (neue UID + href, CrudManager.copyItem, offline via Write-Behind-Queue, inkl. erneuter scheduleChecks()). Verschieben läuft über den gemeinsamen MoveCollectionDialog; Löschen bleibt wie bisher nur in der Detailansicht. Die schnellen Inline-Aktionen (Browser öffnen / Teilen / Prüfen) bleiben erhalten. versionCode 7 == versionName 7.

Status 2026-09-08 (1)

Secretary Links 1 (versionCode 1): Initial release. CalDAV-based website change monitor storing monitored URLs as VJOURNAL entries in links-* prefixed collections. Features include:

Status 2026-09-08 (6)

Secretary Links 6 (versionCode 6): Move zwischen Sammlungen + privates Fenster. Ein Link kann per Langdruck auf die Link-Karte über das Kontextmenü in eine andere Sammlung verschoben werden (PUT an neuer Stelle + DELETE an alter, offline als PutItem/DeleteItem gereiht). Die Karte in der Liste hat keinen Löschen-Button mehr – Löschen nur noch in der Detailansicht. Neue Einstellung „Privates Fenster": Aktiviert öffnet die App Links in einem privaten Firefox-Tab (Intent-Extra private_browsing_mode, Firefox ≥ 112) mit Fallback auf den Standard-Browser. versionCode 6 == versionName 6.