Files
GPS2Audio/RELEASES.md
T
2026-06-22 11:07:32 +00:00

30 KiB
Raw Blame History

GPS2Audio Release-Übersicht

Diese Übersicht fasst die offiziell hochgeladenen GPS2Audio-Releases zusammen. Sie beginnt mit dem ersten signierten Release v1.6.2-osm-layout und dokumentiert danach die fortlaufende 2.x-Entwicklung bis zur aktuellen Basis v2.1.3.

Aktuelle stabile Version

GPS2Audio v2.1.3 ist aktuell die empfohlene Basis. Diese Version enthält die vollständige PTT-Recorder-Funktion mit automatischer Speicherung, Anhören, Zuweisen zu Wegpunkten und sichtbarem Löschen in der PTT-Aufnahmen-Bibliothek.

Release: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.1.3

Veröffentlichte Versionen

Version Schwerpunkt Inhalt
v1.6.2-osm-layout Erstes signiertes Release OSM-Layout, stabile Basis, signierte APK als erste updatefähige Veröffentlichung.
v2.0.0 UI-Überarbeitung Phase 1 Grundlegende Anpassungen nach der neuen UI-Vorlage, modernisierte Startseite und strukturierteres Layout.
v2.0.1 Direkte Reihenfolge-Bearbeitung Waypoints konnten einfacher umgeordnet werden, ohne vorher explizit in einen Bearbeitungsmodus wechseln zu müssen.
v2.0.2 Drag-and-drop-Reihenfolge Umstellung der Waypoint-Sortierung auf direktes Drag-and-drop.
v2.0.3 PTT pausiert Waypoint-Audio Wenn PTT gedrückt wird, pausiert laufendes Waypoint-Audio und wird danach korrekt fortgesetzt.
v2.0.4 Atmo-Hintergrundwiedergabe Erste Anpassungen, damit Atmo-Streams beim Minimieren der App weiterlaufen.
v2.0.5 Atmo-Service-Hotfix Stabilisierung des Hintergrunddienstes für Atmo-Wiedergabe.
v2.0.6 Atmo-Hintergrund-Fix Weitere Korrekturen am Hintergrundverhalten der Atmo-Wiedergabe.
v2.0.7 Service-eigener Atmo-Player Der Atmo-Player wurde in den Service verlagert, damit Streams zuverlässig im Hintergrund weiterlaufen.
v2.0.8 Stream-Playlist Erweiterung von Atmo um eine richtige Stream-Playlist statt nur einer einzelnen URL.
v2.1.0 PTT-Recorder Einführung der Recorder-Funktion für PTT-Notizen.
v2.1.1 PTT-Aufnahmen anhören und zuweisen Aufnahmen können in der Bibliothek angehört und Wegpunkten zugewiesen werden; neue Wegpunkte können aus Aufnahmen erstellt werden.
v2.1.2 Automatisches Speichern Nach dem Loslassen der PTT wird ohne störende Nachfrage automatisch im Hintergrund gespeichert.
v2.1.3 Sichtbarer Löschen-Button Die PTT-Aufnahmen-Bibliothek erhielt einen klar sichtbaren Löschen-Button pro Aufnahme.
v2.4.0 MapLibre Engine Cutover Aktiver Renderer im Explorer wurde auf MapLibre Native umgestellt. osmdroid bleibt nur noch als interner Fallback erhalten.
v2.4.1 Map-Stile und Terrain Modern hell, Dunkel, Topografisch, Terrain/3D und Satellit als auswählbare Stile (persistent).
v2.4.2 Explorer-Routenplanung Eigener Routenplaner direkt im Explorer: Start/Via/Ziel aus mehreren Quellen, OSRM-Routing optional, Planlinien-Fallback ohne Endpunkt, Routen als Tour-Entwurf speicherbar.
v2.4.3 Routenplaner Layout-Hotfix Reines UI-/Layout-Fix: BottomSheet wird scrollbar, respektiert die System-Navigationsleiste (navigationBarsPadding), und die primären Aktionen 'Route berechnen' / 'Planlinie' liegen in einer Sticky Bottom Action Bar oberhalb der Gestenleiste. Keine neuen Features, keine API-Änderungen.
v2.4.4 Routenplaner Endpunkt-Hotfix „Route berechnen" ist nicht mehr stumm/grau, wenn kein Endpunkt gesetzt ist: der Button reagiert mit klarem Statushinweis. Im Sheet steht zusätzlich ein One-Tap-Button „OSRM-Demo nutzen", der den öffentlichen Testserver hinterlegt. Die Endpunkt-URL wird normalisiert — sowohl https://router.project-osrm.org als auch die vollständige /route/v1/driving-Variante werden akzeptiert (keine Doppelprefixe). Fehler werden in Deutsch mit Detail angezeigt. Keine Layout-Regressionen.
v2.4.5 Karten-UX-Hotfix Clip-Linie und Planlinie Reiner Karten-UX-Hotfix. Der Clip-Längenabschnitt beginnt jetzt AM Waypoint und erstreckt sich nach vorne entlang der Route/Track-Geometrie — nicht mehr symmetrisch um den Projektionspunkt. Damit wirkt der Waypoint visuell als Trigger-Start des Clips. Zusätzlich wird die Luftlinie/Planlinie nur noch angezeigt, wenn keine berechnete Route vorhanden ist; die Doppeldarstellung von Route und Planlinie ist entfernt. Legende im Routenplaner spiegelt den aktiven Layer (Route ODER Planlinie). Routing-/Endpunkt-Verhalten und Layout aus v2.4.4/v2.4.3 unverändert.
v2.5.36 MapLibre Phantom-Layer-Fix Root-Cause-Fix der weißen Phantom-GPX-Linie im neutralen Standard-Explorer (0 Wegpunkte). Ursache: currentTrack.isNotEmpty() in visibleTrack feuerte vor der isNeutralStandard-Prüfung, weil loadPersistedTrackForCurrentTour den TrackRecordingManager auch für DEFAULT_TOUR_NAME befüllte. Fix: (1) isNeutralStandard-Guard vor currentTrack.isNotEmpty() verschoben; (2) ViewModel befüllt den Manager-Track nicht mehr für die neutrale Standardtour. Alle echten Touren, laufende Aufzeichnungen und aktive Drafts unverändert. Versionscode 90.
v2.4.6 Persistente Tourrouten Reiner Datenmodell-/Persistenzschritt. Eine Tour kann eine dauerhaft gespeicherte Route besitzen (Start, Ziel, Via, Geometrie, Profil, Endpunkt/Quelle, Distanz/Dauer, Zeitstempel). Routenplaner kann die berechnete Route oder die Planlinie an die aktuelle Tour binden („Tourroute speichern/ersetzen/löschen"). Clipabschnitte folgen primär der frisch berechneten Route, dann der gespeicherten Tourroute, dann dem Track, zuletzt einer Planlinie — keine freien Linien. Wegpunkte bleiben Bausteine ohne fest verdrahtete Route und lassen sich später in andere Touren kopieren. Rückwärtskompatibel: bestehende JSON/Backups ohne Tourroute laden weiterhin; Backup-Export/Import nehmen Tourrouten mit. Versionscode 53.

| v2.6.2 | Route-Persistenz-Fix | Berechnete Route/Tourlinie bleibt beim Workspace-Wechsel erhalten. Root Cause: routeLine lebte nur im Compose-State (remember) und wurde beim Verlassen des Explorers verworfen. Fix: (1) currentSessionRoute StateFlow im ViewModel speichert die zuletzt berechnete Route tour-gebunden. (2) Nach erfolgreicher OSRM-Berechnung wird die Route via setCurrentSessionRoute() im ViewModel gesichert und gleichzeitig dauerhaft als TourRoute persistiert. (3) LaunchedEffect(selectedTour) stellt beim Zurückkehren die Route wieder her — statt des bisherigen LaunchedEffect(selectedTour, activeTourRoute?.id), das beim Auto-Speichern sofort wieder zurücksetzte. (4) Planlinie und Tourverlauf-Begriffe aus v2.6.1/v2.6.0 unverändert. versionCode 105. | | v2.7.0 | Tourverlauf-Editor | Neues TourverlaufEditorSheet (v2.7.0): Verlaufspunkte manuell auf der Karte setzen (Tipp-Modus oder Kartenmitte), letzten Punkt entfernen, Verlauf löschen, Verlaufspunkt als Audio-Wegpunkt erstellen. Einklappbarer Online-Routing-Abschnitt. Race-Guard (v2.7.1) gegen zu frühes Auto-Save (manualRouteInitialized). versionCode 106/107. | | v2.7.2 | Tourverlauf-Persistenz-Fix | Root Cause: routePlan (Start/Via/Ziel des RoutePlannerSheet) lebte nur im lokalen Compose-State und wurde beim Workspace-Wechsel verloren. Planlinie („Planlinie zeigen“) wurde nicht als Session-Route persistiert. Fix: (1) Neuer currentSessionPlan StateFlow im ViewModel — speichert den RoutePlan tour-gebunden und überlebt Workspace-Wechsel. (2) onPlanChange → viewModel.setCurrentSessionPlan(). (3) onShowPlanline → buildTourRouteFromState() + setCurrentSessionRoute() (wie OSRM). (4) LaunchedEffect(selectedTour): restauriert Plan aus Session, kein blindes Reset. (5) Kalt-Start-Restore: activeTourRoute mit Start/Destination wird als RoutePlan wiederhergestellt. (6) manualRouteInitialized-Guard aus v2.7.1 unverändert. versionCode 108. | | v2.7.9 | Explorer State Isolation | v2.7.9 — Explorer-State-Isolation: LaunchedEffect(selectedTour) im ExplorerScreenMapLibre räumt alle Waypoint-Dialog-States (actionMenuWaypoint, editDialogWaypoint, showEditDialog, deleteConfirm, tapMode) bei Tour-Wechsel sofort auf, damit keine alte Wegpunkt-Referenz in den Dialog der neuen Tour gelangen kann. Marker der Vorgänger-Tour werden explizit vor dem waypoints-Redraw-Effekt gelöscht. versionCode 115. | | v2.7.10 | Waypoint-Persistence-Fix (Unbenannte Tour) | Root Cause: selectDefaultTour() setzte bei jedem Einstieg in den Explorer aus der Audio-Bibliothek/Home blind auf DEFAULT_TOUR_NAME („Standard“). War zuvor eine spontane „Unbenannte Tour“ angelegt worden, filterten Waypoints und Explorer-Karte nach „Standard“ und zeigten leere Ansicht. Fix: selectDefaultTour() prüft synchron, ob echte (nicht-Standard) Touren in _tourList vorhanden sind. Ist das der Fall, wird sofort zur ersten echten Tour gewechselt statt auf DEFAULT zu fallen und auf den asynchronen combine-Kollektor (v2.7.5) zu warten, der den Reset dann ggf. rückabwickelte. Keine Regressionen: Lizenz, Backup, Multiclip, PTT, Atmo, Bibliothek, MapLibre, POIs, Tourverlauf, GPS-Track, Explorer-State-Isolation. versionCode 116. | | v2.7.8 | Unbenannte Tour + Planlinie Auto-Render | (1) 'Spontane Tour' → 'Unbenannte Tour': UI-String explorer_spontane_tour und createSpontaneousTour()-Basis geändert, Schlüssel/Funktionsname intern beibehalten. (2) Root Cause Planlinie: savedRouteLine wurde korrekt befüllt, aber nicht in routeLine übertragen; routeLine ist die primäre Zeichnungsquelle im draw-LaunchedEffect. Bei Kaltstart und ohne Button-Druck fehlte der Transfer. Fix 1: Neues LaunchedEffect(savedRouteLine, selectedTour) überträgt savedRouteLine → routeLine, wenn routeLine leer und keine Session-Route vorhanden ist. Fix 2: Auto-Persistenz-Effekt (LaunchedEffect routePlanline) ruft zusätzlich setCurrentSessionRoute() auf, statt nur saveTourRouteFor() — füllt Session-Route auch ohne Button. Fix 3: activeTourRoute als zusätzlicher Key im Zeichen-LaunchedEffect. Keine Regressionen. versionCode 114. |

| v2.7.26 | Persistent Map Preferences | Globale Kartenpräferenzen dauerhaft gespeichert: Wegpunkt-Marker, Audio-Radius/Reichweite, GPS-Track/Draft-Linien, POIs-automatisch-nachladen jetzt persistent (MapStyleStore). Bestehende Persistenz (baseStyle, showAudioLength, showAudioLines, POI-Kategorien, POI-Namen, perspectiveTilt, Standort-Folgen) unverändert erweitert. Standort-Folgen entschärft: Jede manuelle Kartenverschiebung deaktiviert Follow sofort (statt nur bei >40m Distanz). Kein Auto-Zentrieren beim nächsten GPS-Fix. Beim Öffnen des Explorers: Kamera auf Tour/Wegpunkte, nicht auf Live-Standort (sofern Follow aus). Keine Regressionen. versionCode 132. | | v2.7.39 | Audio-Stabilitätsfix ohne manuelle Zwangspause | Die in v2.7.37 eingeführte feste Stille-Pause zwischen Clips/Wegpunkten im manuellen Tour-Play wurde entfernt, weil sie auf Samsung-Geräten zu uneindeutigem Player-State und der Meldung „Audio konnte nicht abgespielt werden“ führen konnte. Manueller Auto-Advance startet den nächsten aktiven Clip/Wegpunkt wieder direkt. GPS-Wiedergabe bleibt getrennt und wurde nicht verändert. Keine Änderung an Lizenz, Backup, Karten/Explorer, PTT, Atmo oder Hintergrundwiedergabe. versionCode 145. |

Installationshinweis

Die signierten Release-APKs sind als Update-Linie gedacht. Für Updates muss eine neuere Version über eine bestehende Installation installiert werden, die mit demselben Release-Keystore signiert wurde. Debug-Builds und parallel installierbare Zwischenstände gehören nicht zur offiziellen Update-Linie.

Sicherheits- und Archivhinweis

Die hochgeladenen Release-Pakete enthalten APK, Quellcode-ZIP und Handoff beziehungsweise Release Notes. Keystore-Dateien, Passwörter und lokale Build-Geheimnisse gehören nicht in das Repository und wurden nicht als Release-Anhang veröffentlicht.

Empfohlene Nutzung

Für neue Nutzer ist v2.1.3 der beste Einstieg. Ältere Versionen bleiben als Archiv erhalten, damit Entwicklungsschritte, Fehlerbehebungen und Zwischenstände nachvollziehbar bleiben.

v2.7.17 — Route-first Explorer (2026)

GPS2Audio v2.7.17 führt den konservativen UI-/Bedienlogik-Umbau „Route-first Explorer" ein.

Was ist neu

  • Route zuerst: Der mentale Ablauf ist jetzt „Route planen → Tourpunkte setzen → Audio hinzufügen".
  • Tourpunkt-Konzept: Verlaufspunkte werden als „Tourpunkte" bezeichnet. Ein Tourpunkt kann zunächst nur die Route formen; Audio wird bewusst nachträglich hinzugefügt.
  • Klarere Labels: „Route planen" statt „Tourverlauf planen", „Routenlinie anzeigen" statt „Planlinie zeigen", „Audio hier hinzufügen" statt technischem „Als Audio-Wegpunkt erstellen".
  • Route bearbeiten: Der Tourverlauf-Editor heißt nun „Route bearbeiten" klarer, weniger abschreckend.
  • Abwärtskompatibel: Bestehende Audio-Wegpunkte und Verlaufslinien aus v2.7.16 bleiben vollständig erhalten.

Geschützte Funktionen

Keine Änderungen an: MapLibre-Rendering, Waypoint-Rendering, routeRenderKey/waypointRenderKey/overlayRenderNonce, Planlinie-Autorender, Explorer-Kontext-Isolation, POI-Autoload, Kartenstile, Lizenzsystem, Backup/Restore, Multiclip, manuelle Wiedergabe, GPS-Aufzeichnung.

Build-Details

  • versionCode: 123
  • versionName: 2.7.17

v2.7.18 — Unified Tour Layers (2026)

GPS2Audio v2.7.18 konsolidiert die Karten-Darstellung zu einem einheitlichen Tour-System.

Was ist neu

  • Einheitliche Tourlinie: Routing, manuelles Zeichnen und gespeicherte Tourlinie wirken jetzt als ein System. Eine manuell gezeichnete Route wird im gespeicherten Zustand als grüne Tourlinie dargestellt (wie eine OSRM-berechnete Route) — keine verwirrende Doppellinie mehr.
  • Bearbeitungs-Vorschau nur im Zeichenmodus: Die violette Vorschaulinie erscheint nur noch, während der Nutzer aktiv Verlaufspunkte zeichnet (manualRouteMode=true). Im Normalbetrieb ist die Karte übersichtlicher.
  • Verlaufspunkt-Marker reduziert: Kleine Punkt-Marker für Verlaufspunkte erscheinen ebenfalls nur im Bearbeitungsmodus — reduziert visuelles Rauschen im Explorer.
  • Planungs-Vorschau bleibt erkennbar: Die orange/gedimmte Planlinie (Routing-Werkzeug) bleibt visuell als Werkzeug-Vorschau erkennbar.
  • Abwärtskompatibel: Kein Datenmodell-Umbau, bestehende Routen/Wegpunkte unverändert.

Geschützte Funktionen

Keine Änderungen an: experimentellem Routing/Route berechnen, Route planen, Routenlinie anzeigen, Route bearbeiten/manuelles Zeichnen, Audio-Waypoints, Multiclip, manuelle Wiedergabe, PTT, Atmo, MapLibre Initial-Render-Fixes, Planlinie-Autorender, routeRenderKey/waypointRenderKey/overlayRenderNonce, Explorer-Kontext-Isolation, POI-Autoload, Kartenstile, Lizenzsystem, Backup/Restore.

Build-Details

  • versionCode: 124
  • versionName: 2.7.18

v2.7.19 — Tourplaner Integration Fix (2026)

GPS2Audio v2.7.19 behebt den Verlust von Start-, Ziel- und Via-Punkten im Tourplaner und integriert das manuelle Zeichnen als Werkzeug des Tourplaners.

Was ist neu

  • Fix: Start/Ziel/Via dauerhaft gespeichert: Der Tourplaner schreibt den Routenplan jetzt sofort in die Datenbank, sobald Start und Ziel gesetzt sind. Bisher wurde nur die In-Memory-Session gespeichert — nach einem Prozess-Kill (App-Neustart) war der Plan verloren. Jetzt bleibt er auch nach Neustart vollständig erhalten.
  • Manuelles Zeichnen im Tourplaner: Die Schaltfläche „Zeichenmodus öffnen“ ist jetzt direkt im Tourplaner (RoutePlannerSheet) eingebettet. Routing und manuelles Zeichnen sind gleichwertige Bearbeitungsmethoden im selben Planer.
  • Kein Rückschritt beim Doppellinien-Fix: Die violette Bearbeitungs-Vorschau erscheint weiterhin nur im aktiven Zeichenmodus (wie in v2.7.18).
  • Abwärtskompatibel: Kein Datenmodell-Umbau, bestehende Routen/Wegpunkte unverändert.

Geschützte Funktionen

Keine Änderungen an: experimentellem Routing/Route berechnen, Routenlinie anzeigen, Route bearbeiten/manuelles Zeichnen, Audio-Waypoints, Multiclip, manuelle Wiedergabe, PTT, Atmo, MapLibre Initial-Render-Fixes, Planlinie-Autorender, routeRenderKey/waypointRenderKey/overlayRenderNonce, Explorer-Kontext-Isolation, POI-Autoload, Kartenstile, Lizenzsystem, Backup/Restore.

Build-Details

  • versionCode: 125
  • versionName: 2.7.19

v2.7.20 — Flexible Route Shaping (2026)

GPS2Audio v2.7.20 führt flexible Routenformung per Karten-Tap ein.

Was ist neu

  • AddViaPoint-Modus: Neuer TapMode für direkte Zwischenpunkt-Setzung per Karten-Tap aus dem Routenplaner heraus.
  • Intuitiver Fallback: 1. Tap = Start, 2. Tap = Ziel, weitere Taps = Zwischenpunkte.
  • Via-Sektion: Im Tourplaner klar als „Zwischenpunkte (Route formen)" bezeichnet.

Build-Details

  • versionCode: 126
  • versionName: 2.7.20

v2.7.21 — Waypoint Preservation Fix (2026)

GPS2Audio v2.7.21 behebt kritischen Datenverlust: Audio-Wegpunkte innerhalb einer Tour wurden beim Öffnen des Routenplaners unter bestimmten Bedingungen gelöscht.

Root Cause

Race-Condition in duplicateTour(), deleteTour() und renameTour(): Diese Funktionen lasen _waypoints.value aus dem In-Memory-State (MutableStateFlow). Wenn der DataStore-Erstladevorgang noch nicht abgeschlossen war, enthielt _waypoints.value noch die initiale leere Liste. Ein saveAll(emptyList() + newWps) überschrieb dann alle bestehenden Wegpunkte aller Touren.

Zusätzlich: Kein globaler Schutz vor einem saveAll([]) bei nicht-leerer DataStore-Wegpunktliste.

Fixes

  1. WaypointStore.saveAll() Preservation-Guard: Wenn die übergebene Liste leer ist, aber die DataStore-Wegpunktliste nicht-leer ist, wird der Schreibvorgang blockiert (atomarer Check in dataStore.edit). Verhindert versehentlichen Totalverlust.
  2. WaypointStore.saveAllForced(): Neue Methode für explizite Lösch-/Restore-Operationen, die den Preservation-Guard umgehen dürfen.
  3. Race-Condition-Fix in duplicateTour/deleteTour/renameTour: Lesen jetzt mit repository.waypoints.first() direkt aus DataStore statt aus dem möglicherweise noch leeren _waypoints.value.
  4. AddViaPoint-Pfad (v2.7.20) bestätigt sicher: Kein Waypoint-Speicherpfad wird durch Route-Planen, AddViaPoint oder Planlinie-Auto-Persistenz ausgelöst.
  5. Architektonische Invariante dokumentiert: saveTourRoute/saveTourRouteFor schreiben ausschließlich in KEY_TOUR_ROUTES, nie in KEY_WAYPOINTS.

Geschützte Funktionen

Alle Funktionen aus v2.7.20 unverändert: AddViaPoint, flexible Routenformung, v2.7.19 Start/Via/Ziel-Persistenz, v2.7.18 Doppellinie-Fix, Audio-Waypoints, Multiclip, manuelle Wiedergabe, PTT, Atmo, MapLibre-Render-Fixes, Planlinie-Autorender, routeRenderKey/waypointRenderKey/overlayRenderNonce, POI-Autoload, Kartenstile, Lizenzsystem, Backup/Restore.

Build-Details

  • versionCode: 127
  • versionName: 2.7.21

v2.7.22 — Saved Route Render Fix

Problem: Ein gespeicherter Tourverlauf (manuell gezeichnet, Quelle MANUAL) war im RoutePlannerSheet sichtbar (Karte mit Buttons "Tourverlauf ersetzen/löschen"), wurde aber visuell nicht als Linie auf der Karte angezeigt. Zusätzlich zeigte der Tourplaner "Noch keine Route. Routenlinie anzeigen genügt — Online-Routing ist optional."

Root Cause: savedRouteLine (die Hilfsliste, aus der die Kartenrenderschicht die grüne Tourlinie zeichnet) schloss MANUAL-Routen explizit mit emptyList() aus (Zeile 290, v2.5.3-Kommentar). Die ursprüngliche Intention war, Doppellinien zu verhindern (v2.7.18). Aber v2.7.18 hat die Bearbeitungs-Vorschau (manualRoutePolylines, violett) bereits auf manualRouteMode == true beschränkt. Damit war der Ausschluss in savedRouteLine überflüssig und verhinderte die korrekte Darstellung.

Fixes (ExplorerScreenMapLibre.kt):

  1. Fix 1savedRouteLine-Berechnung: MANUAL nicht mehr pauschal mit emptyList() ausgeschlossen. Stattdessen gleiches Verhalten wie OSRM: Route wird als Punkte zurückgegeben, Phantom-Guard auf Standardtour bleibt erhalten.
  2. Fix 2LaunchedEffect(savedRouteLine): MANUAL-Quellen überspringen (wie PLANLINE), damit MANUAL via hasSavedRoute-Pfad grün gezeichnet wird (nicht blau als OSRM-Route). Kein routeLine-Load für MANUAL.
  3. Fix 3 — RoutePlannerSheet-Aufruf: hasRoute = routeLine.size >= 2 || savedRouteLine.size >= 2 — "Noch keine Route" erscheint nicht mehr, wenn eine gespeicherte MANUAL- oder OSRM-TourRoute vorhanden ist.

Geschützte Funktionen

Alle Funktionen aus v2.7.21 unverändert: Waypoint-Preservation-Guard, AddViaPoint, flexible Routenformung, v2.7.19 Start/Via/Ziel-Persistenz, v2.7.18 Doppellinie-Fix (manualRouteMode-Guard bleibt), Audio-Waypoints, Multiclip, manuelle Wiedergabe, PTT, Atmo, MapLibre-Render-Fixes, Planlinie-Autorender, routeRenderKey/waypointRenderKey/overlayRenderNonce, POI-Autoload, Kartenstile, Lizenzsystem, Backup/Restore.

Build-Details

  • versionCode: 128
  • versionName: 2.7.22

v2.7.23 — Route Planner Flow Fix

Problem: Der Routenplaner zeigte eine violette/orange Planlinie auf der Karte, aber diese konnte nicht sinnvoll als Tourverlauf gespeichert oder mit dem Tourverlauf verknüpft werden. Audio-Wegpunkte ließen sich zwar als Start/Ziel/Via wählen, aber der Weg von der Planlinie zum persistierten Tourverlauf war unklar.

Root Cause: Es fehlte ein direkt zugänglicher, klar benannter "Als Tourverlauf übernehmen"-Button in der Sticky Action Bar des Tourplaners. Die vorhandene TourRouteStatusCard im scrollbaren Bereich war nicht sichtbar genug, und die Buttons "Speichern"/"Ersetzen" dort waren bei bestehenden Routen in der Karte verborgen. Zusätzlich nutzte onShowPlanline und onSaveTourRoute routePlanline aus der Compose-Remember-Chain, ohne einen Inline-Fallback für den Fall, dass die Recomposition noch nicht stattgefunden hatte.

Fixes:

  1. Neuer "Als Tourverlauf übernehmen"-Button in der Sticky Action Bar (neben "Routenlinie anzeigen"). Aktiviert wenn hasPlanline || hasRoute. Speichert direkt — kein zusätzliches Scrolling nötig.
  2. onAdoptAsTourRoute-Callback in ExplorerScreenMapLibre: Wählt OSRM-Route (wenn vorhanden) oder Planlinie als TourRoute-Quelle, schreibt in DB und Session-Route, zeigt Statusmeldung.
  3. Inline Planline-Fallback: onShowPlanline, onSaveTourRoute, onReplaceTourRoute berechnen die Planline-Koordinaten inline aus routePlan.orderedStops() als Fallback, falls routePlanline (remember-computed) noch leer ist.
  4. setCurrentSessionRoute zusätzlich bei Save/Replace: Session-Route wird nach Speichern auch im ViewModel gesetzt, damit Workspace-Wechsel sofort die neue Route kennt.
  5. TourRouteStatusCard-Hinweis: Zeigt proaktiv route_planner_adopt_planline_hint wenn Planlinie vorhanden aber noch kein gespeicherter Verlauf.

Audio-Wegpunkte als Planpunkte

  • Auswahl eines Audio-Wegpunkts für Start/Ziel/Via: unverändert über WaypointPickerDialog → applyStopToRole() → onPlanChange().
  • Keine Waypoint-Löschung, keine Duplikation (Waypoint-Preservation-Guard aus v2.7.21 bleibt aktiv).
  • Nach Auswahl: routePlanline auto-computed, hasPlanline=true, Buttons aktiv.

Geschützte Funktionen

Alle Funktionen aus v2.7.22 unverändert: Saved Route Render Fix, Waypoint-Preservation-Guard, AddViaPoint, flexible Routenformung, v2.7.19 Start/Via/Ziel-Persistenz, v2.7.18 Doppellinie-Fix, Audio-Waypoints, Multiclip, manuelle Wiedergabe, PTT, Atmo, MapLibre-Render-Fixes, Planlinie-Autorender, routeRenderKey/waypointRenderKey/overlayRenderNonce, POI-Autoload, Kartenstile, Lizenzsystem, Backup/Restore.

Build-Details

  • versionCode: 129
  • versionName: 2.7.23

v2.7.24 — Tourverlauf UX Polish

Tourverlauf-UX-Polish: Verbesserte Nutzererfahrung beim Verwalten gespeicherter Tourverlauf-Linien im Explorer. Keine neue Funktionalität — nur UX-Feinschliff und Code-Qualität.

Build-Details

  • versionCode: 130
  • versionName: 2.7.24

v2.7.25 — Tourline Initial Render Fix

Problem: Die gespeicherte Tourlinie erschien beim ersten Öffnen des Explorers nicht sofort auf der Karte. Erst eine spätere UI-Interaktion (z.B. Abspielen eines Clips) löste den Render aus.

Root Cause: Zwei zusammenwirkende Timing-Probleme:

  1. Doppelter Style-Load: LaunchedEffect(layerState.baseStyle, mapStyleSettings.perspectiveTilt, styleReady) enthielt styleReady als Key. Wenn der initiale Style-Load (im AndroidView factory Callback) styleReady=true setzte, feuerte dieser Effect erneut und rief ml.setStyle() ein zweites Mal auf. Das wischte alle bereits gezeichneten Polylines weg und trigerred einen zweiten asynchronen Style-Load.

  2. Late activeTourRoute: activeTourRoute wird asynchron aus der Datenbank geladen (via StateFlow im ViewModel). Kam der zweite Style-Load vor dem DB-Load ab, war savedRouteLine noch leer. Der overlayRenderNonce-Mechanismus hatte bereits gefeuert, bevor die Route verfügbar war. Obwohl savedRouteLine als Key im Overlay-LaunchedEffect gelistet ist, konnten Compose-Snapshot-Caching-Effekte das erneute Feuern verhindern.

Fixes:

  1. styleReady aus Style-Change-LaunchedEffect-Keys entfernt (v2.7.25): Verhindert den Doppel-Reload. Der Effect feuert jetzt nur noch bei echten baseStyle- oder perspectiveTilt-Änderungen.
  2. Dedizierter LaunchedEffect(savedRouteLine.size, styleReady, mapLibreMap) (v2.7.25): Feuert wenn savedRouteLine mindestens 2 Punkte hat UND Style bereit UND Map initialisiert. Inkrementiert overlayRenderNonce, sodass der Zeichnungseffekt garantiert neu startet — unabhängig davon, wann activeTourRoute aus der DB ankommt.

Nicht geändert:

  • Speicherlogik (keine Änderungen an saveTourRouteFor, activeTourRoute, _tourRoutes)
  • v2.7.24 Tourverlauf UX Polish
  • v2.7.23 'Als Tourverlauf übernehmen' Flow Fix
  • v2.7.22 Saved Route Render Fix
  • v2.7.21 Waypoint Preservation Guard
  • v2.7.18 Doppellinie-Fix (manualRouteMode-Guard)
  • Alle anderen Funktionen (AddViaPoint, OSRM, PLANLINE, MANUAL, Audio-Waypoints, PTT, Atmo, Backup, Lizenzsystem)

Build-Details

  • versionCode: 131
  • versionName: 2.7.25

v2.7.30 — MapLibre Overlay Rebuild Fix

Problem (Nutzerbericht nach v2.7.29): "nein das hat nichts verändert. Das ist der Live Standort und die Waypoints bzw. Planlinie wird nicht angezeigt." Screenshot zeigte nur einen hellen/weißen Kreis als Live-Standort, keine Waypoint-Marker, keine Planlinie.

Root-Cause-Analyse (warum v2.7.29 nicht wirkte):

  1. yield() zu kurz: Das einzige yield() (Wartedauer: 1 Frame ≈ 16ms) nach styleReady in den Overlay-LaunchedEffects war nicht ausreichend für MapLibres GL-Thread und AnnotationManager-Initialisierung nach setStyle(). addMarker() und addPolyline() schlugen still fehl — keine Exception, aber Rückgabewert null/leer.

  2. Kein Retry-Mechanismus: Wenn der erste Render-Versuch (150ms nach Style-Load) scheiterte, gab es keinen weiteren Versuch. Nur Nutzerinteraktion (State-Änderung) löste einen neuen Render aus.

  3. runCatching fehlte: Fehlschlagende addMarker()/addPolyline()-Aufrufe warfen keine Exception in die Coroutine, aber gaben null zurück. Ohne runCatching konnte ein unerwarteter Fehler die Coroutine abbrechen und alle nachfolgenden Zeichenoperationen verhindern.

  4. clearAllAnnotationsCaches Lücke: planlinePolylines und routeStopMarkers wurden beim Style-Cleanup (vor setStyle()) nicht geleert — veraltete Referenzen blieben im Cache und führten zu nutzlosen removePolyline()-Aufrufen auf ungültigen Objekten.

  5. v2.7.29 Puck-Fix: Early-Return-Problem: lastLat ?: return@LaunchedEffect vor yield() bedeutete: Hatte der Nutzer beim Style-Load noch keinen GPS-Fix, blieb der Puck dauerhaft leer (bis zum nächsten GPS-Fix). Wurde der Fix vor GPS-Empfang aufgerufen, war lastLat null → sofortiger Return → kein Puck gezeichnet.

Fixes v2.7.30:

  1. delay(150ms) statt yield() in beiden Overlay-LaunchedEffects (Waypoints/Tracks + Routen/Planline): Gibt dem AnnotationManager ausreichend Zeit nach Style-Load.

  2. Zentraler Retry-Mechanismus (500ms): LaunchedEffect(styleReady, mapLibreMap) wartet 500ms nach jedem Style-Ready und inkrementiert overlayRenderNonce ein zweites Mal. Ergebnis: Zwei Render-Versuche — bei 150ms und bei 650ms nach Style-Load. Der zweite ist garantiert erfolgreich, da der AnnotationManager nach 500ms sicher bereit ist.

  3. delay(200ms) + runCatching im Puck-Rehydrate-LaunchedEffect: Puck-Marker wird robuster gezeichnet, Fehler werden abgefangen.

  4. runCatching um alle addMarker/addPolyline-Aufrufe: In drawExplorerOverlaysMapLibre und der Route-LaunchedEffect — verhindert silent-Crashes und gibt dem 500ms-Retry die Chance, alle fehlgeschlagenen Overlays nachzuzeichnen.

  5. clearAllAnnotationsCaches erweitert: planlinePolylines und routeStopMarkers werden jetzt ebenfalls beim Style-Cleanup geleert (neue optionale Parameter).

Nicht geändert:

  • v2.7.28 Map Style Apply Fix (appliedBaseStyle/appliedPerspectiveTilt guard)
  • v2.7.27 Kartenpräferenz-Persistenz
  • v2.7.26 Standort-Folgen-Fix
  • v2.7.25 Initial-Render-Fix (savedRouteLine.size LaunchedEffect)
  • v2.7.24 UX Polish, v2.7.23 Tourverlauf übernehmen
  • v2.7.21 Waypoint Preservation Guard
  • Alle Funktionen: Routenplanung, POIs, Kartenstile, Audio-Waypoints, Multiclip, PTT, Atmo, Lizenzsystem, Backup/Restore

Build-Details

  • versionCode: 136
  • versionName: 2.7.30