Release GPS2Audio v2.7.38 Samsung audio fix

This commit is contained in:
Perplexity Computer
2026-06-22 09:55:44 +00:00
parent 2eeb086481
commit a3382bb0aa
23 changed files with 4914 additions and 1564 deletions
+311 -2
View File
@@ -157,8 +157,317 @@ android {
// • Keine Regressionen: Phantom-Layer-Fix, Lizenzsystem, Multi-Clip,
// PTT, Tour-Zähler, Backup/Cover, GPX-Import, Explorer/Routing,
// Tour-/Waypoint-Kopien, Hintergrundwiedergabe.
versionCode = 102
versionName = "2.5.48"
// v2.6.0 — Tourverlauf/Storyboard-Konsolidierung:
// • Routenplaner → "Tourverlauf" (deutsch, klar, kein Auto-Navi-Gefühl).
// • Storyboard-Panel übersichtlicher beschriftet und mit Erklärtext versehen.
// • Routepunkt vs. Wegpunkt (Audio) klar unterschieden in Labels.
// • Online-Routing als optional/sekundär markiert, nicht ausgebaut.
// • Keine Änderung an Logik, Backup, Lizenz, Playback, GPS-Aufzeichnung.
// v2.6.1 — Waypoint-Dialog-Polish: Formatierungsfehler RoutePlannerSheet
// behoben, WaypointEditDialog neu gestaltet (freundlichere Cards).
// Keine Logik-/Datenmodell-Änderungen.
// v2.7.0 — Tourverlauf-Editor:
// • Neues TourverlaufEditorSheet als dedizierter Bearbeitungsmodus.
// • Verlaufspunkte über Kartenmitte oder Tipp-Modus setzen.
// • "Als Audio-Wegpunkt erstellen" aus Verlaufspunkt heraus.
// • Online-Routing in RoutePlannerSheet sekundär (OutlinedButton).
// • Status-Bar zeigt Verlaufspunkt-Anzahl im Editor-Modus.
// • Persistenz/Speicherung über bestehende TourRoute/MANUAL-Infrastruktur.
// • Keine Regressionen: Playback, Backup, Lizenz, GPS-Aufzeichnung unverändert.
// v2.7.1 — Tourverlauf-Linie-Fix:
// • Behebt: Manuelle Tourverlauf-Linie wurde dauerhaft nicht angezeigt bzw.
// verschwand nach Öffnen/Schließen des Editors, Workspace-Wechsel oder
// Kartenstil-Reload.
// • Root Cause 1 (Race-Condition): Beim initialen Laden der Composable feuerte
// der Auto-Save-LaunchedEffect mit leerem manualRoutePoints, bevor der
// Load-Effekt die Punkte aus der DB geladen hatte. Bei leerem Liste UND
// wasManual=true wurde deleteTourRouteForCurrent() aufgerufen — die
// gespeicherte Route wurde gelöscht. Fix: manualRouteInitialized-Guard.
// • Root Cause 2 (Zeichnungs-LaunchedEffect verpasst Map-Init):
// mapLibreMap als Key im Drawing-LaunchedEffect fehlte. Wenn die Karte nach
// einem Workspace-Wechsel asynchron initialisiert wurde, feuerte das Effect
// nicht erneut (manualRoutePoints unverändert). Fix: mapLibreMap als
// zusätzlicher Key.
// • Root Cause 3 (Load-Effect-Keys zu breit):
// activeTourRoute?.id im Load-Effect führte dazu, dass jedes Auto-Save
// (neue updatedAtMillis) den Load neu auslöste. Fix: nur source als Key,
// kein id.
// • Verbesserung: Strichstärke der manuellen Tourverlauf-Linie erhöht
// (10/7 statt 8/5) für bessere Sichtbarkeit.
// • Keine Regressionen: v2.7.0 Editor, v2.6.2 Route-Persistenz, v2.6.1
// Wegpunktdialog, v2.5.48 TrackDraft-Backup, POI, 3D, Playback, Backup,
// Lizenzsystem unverändert.
// v2.7.3 — Planlinie Auto-Show-Fix:
// • Root Cause: "Planlinie zeigen" persistierte die Planroute nur in die
// ViewModel-Session (RAM), nicht in die DB. Nach App-Neustart (Prozess-Kill)
// war kein activeTourRoute-Eintrag vorhanden, savedRouteLine blieb leer →
// keine Linie sichtbar, Button erneut nötig.
// • Fix 1 (Persistenz): onShowPlanline ruft jetzt zusätzlich
// viewModel.saveTourRouteFor() auf. PLANLINE wird in der DB gespeichert.
// activeTourRoute.polyline ist ab dem nächsten App-Start verfügbar.
// • Fix 2 (Zeichnungs-Priorität): savedRouteLine hat jetzt Vorrang vor
// routePlanline. routeLine > savedRouteLine > routePlanline. Doppelte
// Überlagerung (PLANLINE-Quelle) beseitigt.
// • Fix 3 (Clear-Symmetrie): onClear löscht die DB-PLANLINE-Route, wenn
// der Nutzer explizit den Planer leert. OSRM/MANUAL bleiben unangetastet.
// • Keine Änderungen an Datenmodell, Backup, Playback, Lizenz.
// v2.7.4 — Planlinie Auto Render:
// • Root Cause 1 behoben: savedRouteLine-Phantom-Guard schloss PLANLINE-Routen auf
// der Standardtour aus (isNeutralStandard). PLANLINE ist bewusste Nutzeraktion,
// kein Phantom — Ausnahme eingefügt.
// • Root Cause 2 behoben: mapLibreMap fehlte als Key im route-drawing-LaunchedEffect.
// Nach Map-Neuinitialisierung (Stylewechsel, Workspace-Rückkehr) wurde die Linie
// nicht neu gezeichnet, obwohl routePlanline befüllt war.
// • Auto-Persistenz: routePlanline ≥ 2 Stopps → automatisch als PLANLINE-TourRoute
// in DB gespeichert, ohne Button-Druck. Button „Planlinie zeigen“ ist nur noch
// Kamera-Fokus.
// • Zeichnungsfarbe: PLANLINE aus savedRouteLine erhält orangene Farbe (wie routePlanline),
// kein falsches Grün mehr.
// • Priorität v2.7.4: routeLine (OSRM) > routePlanline (wenn PLANLINE-Quelle) >
// savedRouteLine (OSRM/andere) > routePlanline (fallback) > keine Linie.
// • Keine Änderungen an Datenmodell, Backup, Playback, Lizenz.
//
// v2.7.5 — Standard-Tour intern (Konzeptkorrektur):
// • Root Cause: DEFAULT_TOUR_NAME="Standard" war bisher in der Audio-Bibliothek
// als vollwertige bearbeitbare Tour sichtbar, was Phantom-/Kontextprobleme
// erzeugen konnte. Standard-Tour ist eine System-Blaupause, kein Nutzerdatensatz.
// • visibleTourList (neu im ViewModel): filtert Standard-Tour aus der UI-Liste,
// sobald mindestens eine echte Tour existiert. tourList intern unverändert.
// • Audio-Bibliothek (HomeScreen): zeigt Standard-Tour nicht mehr im Cover-Grid.
// • Menü (WaypointListScreen): Umbenennen + Duplizieren für Standard-Tour deaktiviert.
// Löschen war bereits gesperrt (unverändert).
// • Auto-Selektion: Beim App-Start mit echten Touren wird automatisch die erste
// echte Tour gewählt statt "Standard".
// • Explorer isNeutralStandard, Backup, Datenmodell, Lizenz: unverändert.
// v2.7.7 — Spontane Tour Autocreate:
// • Root Cause: ExplorerScreenMapLibre.kt zeigte in der Topbar weiterhin
// "Standard" (selectedTour direkt), da die UI-Entkopplung aus v2.7.6
// (displayTourLabel) dort nicht übernommen wurde. Fix: displayTourLabel
// analog zu ExplorerScreen.kt implementiert.
// • Automatische Tourerstellung beim ersten Wegpunkt im neutralen Explorer:
// upsertFromNeutralExplorer() im ViewModel prüft, ob tourName ==
// DEFAULT_TOUR_NAME. Falls ja, erzeugt createSpontaneousTour() eine
// eindeutige "Spontane Tour" (mit Suffix falls Name existiert), ruft
// addTour() auf (inkl. selectedTour-Wechsel) und speichert den Wegpunkt
// in der neuen Tour. Keine DB-Migration, keine neue Tabelle.
// • Betroffen: neuer Wegpunkt per Tap (PlaceNew), POI als Wegpunkt,
// POI zu Storyboard, Explorer-POI-Karte. Bearbeiten bestehender
// Wegpunkte: normaler upsert-Pfad (keine Auto-Tour).
// • Standard-Tour bleibt intern; visibleTourList (v2.7.5) blendet
// sie weiterhin aus, sobald echte Touren existieren.
// • Keine Änderungen an Backup, Lizenz, Playback, PTT, Atmo, GPS-Track.
// v2.7.8 — Unbenannte Tour + Planlinie Auto-Render:
// • 'Spontane Tour' → 'Unbenannte Tour': UI-String explorer_spontane_tour
// und createSpontaneousTour()-Basisname geändert. Schlüssel bleibt für
// risikoarmes Deployment; Funktionsname intern unverändert.
// • Root Cause Planlinie: Beim ersten Rendern nach App-Neustart oder
// Workspace-Rückkehr war savedRouteLine befüllt, wurde aber nicht in
// routeLine übertragen. routeLine ist die primäre Zeichnungsquelle.
// Folge: LaunchedEffect-Zeichnung lief, zog aber savedRouteLine nur
// als sekundären Fallback (grüne Linie). Die sichtbarkeitsblockierende
// Hürde: manuelle Sitzung (Session-Route) fehlte bei Kaltstart.
// • Fix 1: Neues LaunchedEffect(savedRouteLine, selectedTour) überträgt
// savedRouteLine → routeLine, wenn routeLine leer und keine Session-Route
// vorhanden. Damit ist routeLine immer die aktive Zeichnungsquelle.
// • Fix 2: Auto-Persistenz (LaunchedEffect routePlanline) ruft nun
// viewModel.setCurrentSessionRoute() auf, statt nur saveTourRouteFor().
// Das füllt currentSessionRoute für Workspace-Rückkehr ohne Button-Druck.
// • Fix 3: activeTourRoute als zusätzlicher Key im Zeichen-LaunchedEffect
// (belt-and-suspenders gegen strukturgleiche List-Vergleiche).
// • Keine Regressionen: Lizenz, Backup, Multiclip, PTT, Atmo, Bibliothek,
// MapLibre, POIs, Tourverlauf, GPS-Track, Spontane-Tour-Autocreate.
// v2.7.10 — Waypoint-Persistence-Fix (Unbenannte Tour bleibt nach Verlassen der Karte):
// • Root Cause: selectDefaultTour() wurde bei jedem Einstieg in den Explorer
// aus der Audio-Bibliothek/Home blind auf DEFAULT_TOUR_NAME („Standard“)
// gesetzt. Wenn zuvor eine spontane „Unbenannte Tour“ angelegt worden war,
// filterten Waypoints und Explorer-Karte nach „Standard“ → leere Ansicht.
// • Fix: selectDefaultTour() prüft jetzt vor dem Reset, ob echte (nicht-Standard)
// Touren in _tourList vorhanden sind. Ist das der Fall, wird sofort synchron
// 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ückabwickelt. Das vermeidet die Race-Condition, bei der die Explorer-UI
// in einem Recomposition-Zyklus mit leerem Waypoint-Filter gerendert wurde.
// • Keine Regressionen: Lizenz, Backup, Multiclip, PTT, Atmo, Bibliothek,
// MapLibre, POIs, Tourverlauf, GPS-Track, Explorer-State-Isolation (v2.7.9).
// Bestehende echte Touren werden beim Explorer-Öffnen korrekt vorausgewählt
// (war bereits so via async combine-Autoswitch jetzt deterministisch/synchron).
// v2.7.14 — Explorer Entry Context Fix (Navigations-Bug):
// • Bug: Übersicht → Explorer öffnete nicht neutral, sondern die zuletzt
// bekannte echte Tour. Grund: selectDefaultTour() wählte bei vorhandenen
// echten Touren die erste echte Tour statt DEFAULT_TOUR_NAME.
// • Fix: Neue Funktion selectNeutralTourForNewExplorer() mit _neutralExplorerMode-
// Flag verhindert den automatischen Upgrade durch den combine-Kollektor (v2.7.5)
// und erzwingt bewusst einen leeren Explorer-Kontext aus der Übersicht.
// • Touransicht → Explorer: bleibt unverändert bei der aktiven Tour.
// • selectDefaultTour() für Legacy-Pfade erhalten. Keine Regressionen.
// v2.7.13 Planlinie, v2.7.12 overlayRenderNonce, v2.7.11 waypointRenderKey,
// v2.7.10 Persistenz, v2.7.9 State Isolation alle unberührt.
// v2.7.20 — Flexible Routenformung:
// • Route formen = Start/Ziel/Zwischenpunkte setzen, dann Planlinie oder Online-Route.
// • Neu: Zwischenpunkt direkt per Karten-Tap setzen (neuer AddViaPoint-TapMode).
// • Intuitiver Fallback: 1. Tap = Start, 2. Tap = Ziel, weitere = Zwischenpunkte.
// • Via-Sektion im Tourplaner klar als "Zwischenpunkte (Route formen)" bezeichnet.
// • Freie Linie klar als Fallback gekennzeichnet (UI-Text, kein Verhaltensänderung).
// • Keine Regressionen: v2.7.19 Start/Via/Ziel-Persistenz, v2.7.18 Doppellinie-Fix,
// Audio-Waypoints, PTT, Atmo, Backup, Lizenz, MapLibre-Render-Fixes unverändert.
// v2.7.21 — Waypoint Preservation Fix:
// • Root Cause: Race-Condition in duplicateTour()/deleteTour()/renameTour() liest
// _waypoints.value (könnte noch emptyList() sein vor DataStore-Erstladen) und ruft
// saveAll(leere_liste + newWps) auf — überschreibt alle bestehenden Wegpunkte.
// • Fix 1: saveAll() hat jetzt Preservation-Guard: leere Liste überschreibt niemals
// nicht-leere DataStore-Liste (atomarer Check innerhalb dataStore.edit).
// • Fix 2: saveAllForced() für explizite Lösch-/Restore-Operationen (deleteTour,
// renameTour, Backup-Restore) — bewusster Vollersatz.
// • Fix 3: duplicateTour/deleteTour/renameTour lesen jetzt mit repository.waypoints.first()
// direkt aus DataStore statt aus _waypoints.value.
// • Planlinie/Route-Speicherpfade (saveTourRouteFor) berhren KEY_WAYPOINTS nie.
// • AddViaPoint (v2.7.20) bestätigt sicher: kein Waypoint-Speicherpfad wird ausgelöst.
// • Keine Regressionen: v2.7.20 AddViaPoint, v2.7.19 Start/Via/Ziel-Persistenz,
// v2.7.18 Doppellinie-Fix, Audio-Waypoints, PTT, Atmo, Backup, Lizenz unverändert.
// v2.7.22 — Saved Route Render Fix:
// • Root Cause: savedRouteLine schloss MANUAL-Routen explizit aus (emptyList()),
// damit der v2.7.18 Doppellinien-Fix keine Konflikte erzeugt. Da aber
// manualRoutePolylines (Bearbeitungsvorschau) nur bei manualRouteMode=true
// gezeichnet wird, war das Ausschluss-Kriterium in savedRouteLineüberfüssig
// und verhinderte die Darstellung gespeicherter MANUAL-Routen.
// • Fix 1: MANUAL-Quellen in savedRouteLine eingeschlossen (wie OSRM); Phantom-Guard
// auf Standardtour bleibt.
// • Fix 2: LaunchedEffect(savedRouteLine) überspringt MANUAL (wie PLANLINE), damit
// MANUAL via hasSavedRoute-Pfad grün gezeichnet wird (nicht blau als OSRM).
// • Fix 3: hasRoute im RoutePlannerSheet-Aufruf berücksichtigt savedRouteLine.size,
// damit "Noch keine Route" nicht erscheint wenn eine gespeicherte Route vorhanden ist.
// • Keine Regressionen: v2.7.21 Waypoint-Preservation-Guard, v2.7.18 Doppellinie-Fix,
// PLANLINE, OSRM, AddViaPoint, Audio-Waypoints, PTT, Atmo, Backup, Lizenz unverändert.
// v2.7.26 — Persistent Map Preferences:
// • Globale Kartenpräferenzen dauerhaft gespeichert: Wegpunkt-Marker, Audio-Radius,
// GPS-Track/Draft-Linien, POIs-automatisch-nachladen (autoPoiLoad) jetzt persistent.
// • Bestehende Persistenz (baseStyle, showAudioLength, showAudioLines, POI-Kategorien,
// POI-Namen, Standort-Folgen, perspectiveTilt) unverändert beibehalten und erweitert.
// • Standort-Folgen entschärft: Jede manuelle Kartenverschiebung deaktiviert Standort
// folgen sofort (statt nur bei >40m Distanz). Kein Auto-Rücksprung beim nächsten
// GPS-Fix. Explizite Aktivierung nur per Toggle-Switch oder MyLocation-Button.
// • Beim Öffnen des Explorers mit Tourlinie/Wegpunkten: Kamera auf Tour zentriert,
// nicht auf Live-Standort (sofern Standort folgen aus).
// • Keine Regressionen: v2.7.25 Initial-Render-Fix, v2.7.24 UX Polish, v2.7.23
// Tourverlauf übernehmen, v2.7.22 Saved Route Render, v2.7.21 Waypoint
// Preservation Guard alle unberührt.
// v2.7.29 — Overlay Rehydrate Fix:
// • Root Cause: Nach setStyle() loescht MapLibre alle Annotations (Marker,
// Polylines, Polygons). overlayRenderNonce++ loest Waypoint-Redraw aus,
// aber myLocationMarker/accuracyPolygon wurden auf null gesetzt und nur durch
// eingehende GPS-Updates (LocationCallback) neu gesetzt — fehlende Interaktion
// bis zum naechsten GPS-Fix fuehrte zu fehlendem/hellem Default-Marker.
// • Fix 1 (Live-Standort): Neuer LaunchedEffect(overlayRenderNonce, styleReady,
// mapLibreMap) zeichnet den Puck sofort aus lastLat/lastLng neu, ohne auf
// naechsten GPS-Fix zu warten. Genauigkeitskreis wird ebenfalls rehydriert.
// • Fix 2 (POI-Marker): overlayRenderNonce als Key im explorerPoiResults-
// LaunchedEffect sichert POI-Redraw nach Style-Load.
// • Alle v2.7.28 Fixes (Map Style Apply Fix, appliedBaseStyle/appliedPerspectiveTilt)
// bleiben vollstaendig erhalten.
// • Keine Regressionen: v2.7.27 Kartenpraeferenz-Persistenz, v2.7.26
// Standort-Folgen-Fix, v2.7.25 Initial-Render-Fix, v2.7.24 UX Polish,
// v2.7.23 Tourverlauf uebernehmen, v2.7.21 Waypoint Preservation Guard,
// Routenplanung, POIs, Kartenstile, Audio-Waypoints, Multiclip, PTT, Atmo,
// Lizenzsystem, Backup/Restore alle unberuehrt.
// v2.7.32 — Zwei Regressionsfixes:
// • Touren ordnen: Erste und letzte SICHTBARE Tour ließen sich nicht
// mehr verschieben. Ursache: TourReorderDialog arbeitet auf
// visibleTourList (Standard-Tour ausgeblendet), WaypointViewModel.moveTour
// operierte aber auf _tourList inkl. DEFAULT_TOUR_NAME → Off-by-one,
// wenn die Standard-Tour an Index 0 lag. Fix: moveTour interpretiert
// Indizes im sichtbaren Raum und merged zurück, wobei die ausgeblendete
// Standard-Tour ihre relative Position behält. Hidden-Standard-Verhalten
// bleibt erhalten; echte Touren sind alle frei sortierbar.
// • Audioplayer: Der etablierte GPS2Audio-Player (ClipDetailSheet/
// -Fullscreen) erschien beim manuellen Start eines Tracks/Clips nicht
// mehr. Fix: Neuer LaunchedEffect öffnet die Player-Ansicht automatisch
// für den aktiv abgespielten Wegpunkt, sobald Wiedergabe beginnt.
// • Keine Regressionen: Multi-Clip, Clip-Navigation, Countdown, maximierter
// Detailplayer, Hintergrundwiedergabe, PTT-Pause, Tour-Wiedergabe-
// Persistenz, Explorer/MapLibre, Routing, POIs, Backup, Lizenz unberührt.
// v2.7.33 — UI-Politur Begleitmusik-Dialog (rein gestalterisch):
// • Begleitmusik fühlt sich jetzt wie eine integrierte Musik-Karte der
// Tour an statt wie ein technisches Formular.
// • Neue Status-/Musik-Karte (MusicStatusCard) im Teal/Dark-Stil:
// Tour-Kontext, Aktiv-Status, Kurz-Zusammenfassung + Aktivieren-Schalter.
// • Kompakte Quellen-Chips (Lokale Playlist / Stream), primäre Aktion
// „Musik auswählen" als gefüllter Button, einladender Empty-State
// (MusicEmptyState) statt technischem Text.
// • Verhaltensoptionen mit Klartext-Titeln („Bei Ansagen pausieren",
// „Leiser im Hintergrund", „Weiterlaufen lassen", „Sanft aus-/einblenden")
// unter zusammengefasstem Abschnitt „Verhalten & Optionen".
// • KEINE Änderung an Datenmodell, Speicherung, Backup/Import, Lizenz,
// Playback-Service, PTT, Atmo, Waypoint-/Hintergrundwiedergabe, MapLibre/
// Explorer oder Routing. validateAndSave + alle Optionen unverändert.
// • Keine Regression zu v2.7.32 (Player-Auto-Open, Tour-Reihenfolge).
// v2.7.34 — UI-Politur „Wegpunkt bearbeiten" (rein gestalterisch):
// • Ruhigeres Layout: kompakte Status-/Kopfkarte oben (Name, Tour,
// Kurzüberblick Position/Audio).
// • „Details" (Name + Tour) immer sichtbar; Position, Audio, Auslösung,
// Wiedergabe-Regeln, Zeitplan und „Kopieren & duplizieren" als
// einklappbare Abschnitte mit Kurz-Zusammenfassung.
// • Kopieren/Duplizieren nach ganz unten verschoben (nicht mehr zwischen
// Basisfeldern und Position); Koordinaten nur bei Bedarf aufgeklappt.
// • Abschnitte mit Validierungsfehlern öffnen sich automatisch.
// • KEINE Änderung an Datenmodell, Speicherung, Backup/Import, Lizenz,
// Playback, Multi-Clip, PTT, Atmo, MapLibre/Explorer oder Routing.
// Validation + Save (confirmButton) und alle Felder unverändert.
// v2.7.35 — UI-Politur Hauptseite/Audio-Bibliothek (rein gestalterisch):
// • Abschnittstitel „Meine Touren" mit Anzahl als Chip rechts.
// • Tour-Karten: feste Textblock-Höhe (gleichmäßige Karten), klare
// Metazeile statt abgeschnittenem Text („Route ge…").
// • Leere Touren wirken bewusst („Noch leer") statt „0 Wegpunkte".
// • Chips immer sichtbar: Wegpunkt-Zahl bzw. „Noch leer" + „Route" /
// „Keine Route".
// • Live/PTT-Modul optisch zurückgenommen (Einrückung/kompakter)
// KEINE Verhaltensänderung an LivePttCard.
// • KEINE Änderung an Datenmodell, Speicherung, Backup/Import, Lizenz,
// Playback, Multi-Clip, PTT/Atmo-Verhalten, MapLibre/Explorer, Routing,
// Tour-Reihenfolge oder Player-Auto-Open.
// v2.7.36 — Bugfix: Absturz/ANR nach Backup-Erstellung.
// • Ursache: exportBackupZip() führte Flow-Reads, ZIP-Aufbau und das
// Kopieren aller Mediendateien im viewModelScope auf dem Main-Thread
// aus → ANR ("App reagiert nicht"), obwohl die Datei geschrieben war.
// • Fix: schwere IO läuft jetzt auf Dispatchers.IO (wie der Import-Pfad);
// State-Updates für Erfolg/Fehler bleiben auf Main. Zusätzliche
// Absicherung: unerwartete Fehler werden als nicht-fatale Meldung
// gezeigt statt abzustürzen.
// • KEINE Änderung am Backup-Format/-Inhalt, an der Import-Logik oder an
// anderen Funktionen.
// v2.7.37 — Hörbuch-Gefühl: kurze Stille zwischen Clips/Wegpunkten.
// • Bei der manuellen Sequenz-Wiedergabe (Tour-Play) wird vor dem
// automatischen Start des nächsten Eintrags eine feste Pause von
// 1,7 s eingefügt sowohl Clip→Clip als auch Wegpunkt→Wegpunkt.
// • Kein UI-Setting, keine Persistenz, kein neues Datenmodell.
// • Gilt NUR für die manuelle Sequenz; NICHT für GPS-getriggerte
// Wiedergabe, PTT, Atmo oder die Einzelclip-Vorschau.
// • Die Pause ist als abbrechbarer Coroutine-Job umgesetzt: Next/Skip
// überspringt sie sofort, Pause/Stop/Tour-Wechsel brechen sie ab
// kein verspäteter Auto-Start nach dem Stoppen.
// • KEINE Änderung an Backup/Import, Lizenz, Hintergrund-Playback oder
// am Player-Auto-Open.
//
// v2.7.38 — Audio-Zuverlässigkeit (Regressionsfix, insb. Samsung-Tablets):
// • Die v2.7.37-Stille (Auto-Advance-Gap) bleibt erhalten, ist aber jetzt
// STRIKT auf den Auto-Advance nach einem natürlich beendeten Clip
// innerhalb DERSELBEN Tour beschränkt. Der verzögerte Gap-Job prüft vor
// dem Folge-Start, dass weder die Tour gewechselt wurde noch der Nutzer
// pausiert/gestoppt hat sonst wird er verworfen.
// • Tour-Wechsel (selectTour) und Tour-Löschen (deleteTour) brechen einen
// anstehenden Gap-Job ab, damit kein verspäteter Start in der falschen
// bzw. gelöschten Tour feuert. Aktive Wiedergabe-Persistenz bleibt.
// • ManualAudioPlayer meldet Lade-/Prepare-/Start- und asynchrone
// MediaPlayer-Fehler jetzt über onError zurück. Schlägt der Start fehl
// (z. B. Samsung-SAF-/Codec-Problem), wird der "spielt"-Zustand sauber
// zurückgesetzt und eine Fehlermeldung angezeigt statt still ohne Ton
// auf "spielt" zu verharren.
// • Erster manueller Start wird nie durch einen Gap-Job verzögert
// (unverändert) und kann nicht von einem alten Gap-Job überschrieben
// werden.
// • Keine Änderung an GPS-Wiedergabe, PTT, Atmo, Einzelclip-Vorschau,
// Hintergrund-Playback, Backup/Import, Lizenz oder Player-Auto-Open.
versionCode = 144
versionName = "2.7.38"
}
val storeFilePath = resolveSigningValue("storeFile", "GPS2AUDIO_RELEASE_STORE_FILE")