30 KiB
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. |
Release-Links
v1.6.2-osm-layout: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v1.6.2-osm-layoutv2.0.0: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.0v2.0.1: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.1v2.0.2: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.2v2.0.3: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.3v2.0.4: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.4v2.0.5: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.5v2.0.6: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.6v2.0.7: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.7v2.0.8: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.0.8v2.1.0: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.1.0v2.1.1: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.1.1v2.1.2: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.1.2v2.1.3: https://gitea.nesohub.org/marcel/GPS2Audio/releases/tag/v2.1.3
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
WaypointStore.saveAll()Preservation-Guard: Wenn die übergebene Liste leer ist, aber die DataStore-Wegpunktliste nicht-leer ist, wird der Schreibvorgang blockiert (atomarer Check indataStore.edit). Verhindert versehentlichen Totalverlust.WaypointStore.saveAllForced(): Neue Methode für explizite Lösch-/Restore-Operationen, die den Preservation-Guard umgehen dürfen.- Race-Condition-Fix in
duplicateTour/deleteTour/renameTour: Lesen jetzt mitrepository.waypoints.first()direkt aus DataStore statt aus dem möglicherweise noch leeren_waypoints.value. - AddViaPoint-Pfad (v2.7.20) bestätigt sicher: Kein Waypoint-Speicherpfad wird durch Route-Planen, AddViaPoint oder Planlinie-Auto-Persistenz ausgelöst.
- Architektonische Invariante dokumentiert:
saveTourRoute/saveTourRouteForschreiben ausschließlich inKEY_TOUR_ROUTES, nie inKEY_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):
- Fix 1 —
savedRouteLine-Berechnung: MANUAL nicht mehr pauschal mitemptyList()ausgeschlossen. Stattdessen gleiches Verhalten wie OSRM: Route wird als Punkte zurückgegeben, Phantom-Guard auf Standardtour bleibt erhalten. - Fix 2 —
LaunchedEffect(savedRouteLine): MANUAL-Quellen überspringen (wie PLANLINE), damit MANUAL viahasSavedRoute-Pfad grün gezeichnet wird (nicht blau als OSRM-Route). KeinrouteLine-Load für MANUAL. - 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:
- 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. onAdoptAsTourRoute-Callback in ExplorerScreenMapLibre: Wählt OSRM-Route (wenn vorhanden) oder Planlinie als TourRoute-Quelle, schreibt in DB und Session-Route, zeigt Statusmeldung.- Inline Planline-Fallback:
onShowPlanline,onSaveTourRoute,onReplaceTourRouteberechnen die Planline-Koordinaten inline ausroutePlan.orderedStops()als Fallback, fallsroutePlanline(remember-computed) noch leer ist. - setCurrentSessionRoute zusätzlich bei Save/Replace: Session-Route wird nach Speichern auch im ViewModel gesetzt, damit Workspace-Wechsel sofort die neue Route kennt.
- TourRouteStatusCard-Hinweis: Zeigt proaktiv
route_planner_adopt_planline_hintwenn 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:
-
Doppelter Style-Load:
LaunchedEffect(layerState.baseStyle, mapStyleSettings.perspectiveTilt, styleReady)enthieltstyleReadyals Key. Wenn der initiale Style-Load (imAndroidViewfactory Callback)styleReady=truesetzte, feuerte dieser Effect erneut und riefml.setStyle()ein zweites Mal auf. Das wischte alle bereits gezeichneten Polylines weg und trigerred einen zweiten asynchronen Style-Load. -
Late activeTourRoute:
activeTourRoutewird asynchron aus der Datenbank geladen (viaStateFlowim ViewModel). Kam der zweite Style-Load vor dem DB-Load ab, warsavedRouteLinenoch leer. DeroverlayRenderNonce-Mechanismus hatte bereits gefeuert, bevor die Route verfügbar war. ObwohlsavedRouteLineals Key im Overlay-LaunchedEffectgelistet ist, konnten Compose-Snapshot-Caching-Effekte das erneute Feuern verhindern.
Fixes:
styleReadyaus Style-Change-LaunchedEffect-Keys entfernt (v2.7.25): Verhindert den Doppel-Reload. Der Effect feuert jetzt nur noch bei echtenbaseStyle- oderperspectiveTilt-Änderungen.- Dedizierter
LaunchedEffect(savedRouteLine.size, styleReady, mapLibreMap)(v2.7.25): Feuert wennsavedRouteLinemindestens 2 Punkte hat UND Style bereit UND Map initialisiert. InkrementiertoverlayRenderNonce, sodass der Zeichnungseffekt garantiert neu startet — unabhängig davon, wannactiveTourRouteaus 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):
-
yield() zu kurz: Das einzige
yield()(Wartedauer: 1 Frame ≈ 16ms) nachstyleReadyin den Overlay-LaunchedEffects war nicht ausreichend für MapLibres GL-Thread und AnnotationManager-Initialisierung nachsetStyle().addMarker()undaddPolyline()schlugen still fehl — keine Exception, aber Rückgabewert null/leer. -
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.
-
runCatching fehlte: Fehlschlagende
addMarker()/addPolyline()-Aufrufe warfen keine Exception in die Coroutine, aber gaben null zurück. OhnerunCatchingkonnte ein unerwarteter Fehler die Coroutine abbrechen und alle nachfolgenden Zeichenoperationen verhindern. -
clearAllAnnotationsCaches Lücke:
planlinePolylinesundrouteStopMarkerswurden beim Style-Cleanup (vorsetStyle()) nicht geleert — veraltete Referenzen blieben im Cache und führten zu nutzlosenremovePolyline()-Aufrufen auf ungültigen Objekten. -
v2.7.29 Puck-Fix: Early-Return-Problem:
lastLat ?: return@LaunchedEffectvoryield()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, warlastLatnull → sofortiger Return → kein Puck gezeichnet.
Fixes v2.7.30:
-
delay(150ms) statt yield() in beiden Overlay-LaunchedEffects (Waypoints/Tracks + Routen/Planline): Gibt dem AnnotationManager ausreichend Zeit nach Style-Load.
-
Zentraler Retry-Mechanismus (500ms):
LaunchedEffect(styleReady, mapLibreMap)wartet 500ms nach jedem Style-Ready und inkrementiertoverlayRenderNonceein 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. -
delay(200ms) + runCatching im Puck-Rehydrate-LaunchedEffect: Puck-Marker wird robuster gezeichnet, Fehler werden abgefangen.
-
runCatching um alle addMarker/addPolyline-Aufrufe: In
drawExplorerOverlaysMapLibreund der Route-LaunchedEffect — verhindert silent-Crashes und gibt dem 500ms-Retry die Chance, alle fehlgeschlagenen Overlays nachzuzeichnen. -
clearAllAnnotationsCaches erweitert:
planlinePolylinesundrouteStopMarkerswerden 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