-
released this
2026-05-15 14:32:48 +02:00 | 7 commits to main since this releaseGPS2Audio v2.1.1 – PTT-Aufnahmen anhören & sinnvoll zuweisen
Build:
2.1.1· versionCode:38
Basis: stabile Code-Basis ausGPS2Audio_v2_1_0_ptt_recorder_source.zip
Build-Host: Linux, JDK 21, Android SDK 35, Gradle 8.9 (AGP 8.5.2)
1. Ursache der gemeldeten Probleme
In v2.1.0 war der PTT-Recorder zwar funktional (Aufnahme, Speicherung,
Bibliothek, Datenmodell), aber die UI hatte zwei Lücken, die ihn aus
Nutzersicht teilweise nutzlos machten:-
Keine Anhörmöglichkeit in der Bibliothek
Der DialogPttRecordingsLibraryDialogzeigte zwar Aufnahmen mit
Metadaten an (Datum, Dauer, optional GPS), bot aber pro Eintrag nur
die Buttons „Als Waypoint-Audio zuweisen" und „Löschen". Es gab
keinerlei Möglichkeit, eine Aufnahme im Dialog vorzuhören. (Screenshot
1000014484.jpg.) -
„Wegpunkt auswählen" war in leeren Touren eine Sackgasse
WaypointChooserDialoglistete ausschließlich die Wegpunkte der
aktuell ausgewählten Tour. War diese Tour leer – z.B. „Standard"
direkt nach App-Installation – zeigte der Dialog lediglich den Text
„Keine Wegpunkte in dieser Tour." an, ohne Möglichkeit, eine andere
Tour zu wählen oder einen Wegpunkt aus der Aufnahme zu erzeugen.
(Screenshots1000014485.jpg,1000014486.jpg.)
2. Umsetzung (UI + Logik)
2.1 Vorhörfunktion in der PTT-Bibliothek
- Neuer Button „Anhören" / „Pause" pro Aufnahme im Dialog.
- Ein dedizierter, lokaler Preview-Player (
MediaPlayer-basiert)
innerhalb des Dialogs, der bewusst nicht beim
WaypointAudioInterruptionCoordinatorregistriert wird. Dadurch
bleibt der bestehende Audiopfad (Atmo-Service, manueller
Wegpunkt-Player, PTT-Interruption) vollständig unverändert. - Genau eine Vorschau gleichzeitig: beim Wechsel auf eine andere
Aufnahme wird die vorherige automatisch gestoppt und freigegeben. - Cleanup garantiert über:
DisposableEffect(Unit) { onDispose { previewPlayer.release() } }- explizites Stoppen bei: Schließen-Icon,
onDismissRequest,
Klick auf „Zuweisen" (vor Wechsel inWaypointChooserDialog),
Klick auf „Löschen" (falls gerade gespielt), natürlichem
Wiedergabe-Ende.
- Wiedergabe nutzt die
file://-URI der Aufnahme (wie bisher von
PttRecordererzeugt). Kein neuer Permission-Bedarf.
2.2 Wegpunkt-Auswahl/-Erstellung im Chooser
- Tour-Dropdown im Dialogkopf: Nutzer kann während der Zuweisung
zu einer anderen Tour wechseln. Initialwert = aktuell aktive Tour. - Liste zeigt Wegpunkte der gewählten Tour mit dem bestehenden
Pfad: Klick auf einen Wegpunkt setztsoundUriundsoundNameder
Aufnahme überviewModel.upsert(...). Erfolgsmeldung auf Deutsch via
viewModel.postInfo(...)→ bestehender Info-Snackbar-Mechanismus. - Neuer Wegpunkt aus Aufnahme (Button):
- Sichtbar auch in leeren Touren (prominent) und zusätzlich
in nicht-leeren Touren (sekundär,OutlinedButton). - Erzeugt einen neuen
Waypointmit:name = displayNameder Aufnahme (Fallback „PTT-Aufnahme"),soundUri/soundNameaus der Aufnahme,radiusMeters = 50f,isActive = true,tourName = Dropdown-Auswahl(ggf.Waypoint.DEFAULT_TOUR_NAME).
- Position mit Prioritätskette:
- Aktuelle GPS-Position (
viewModel.currentLocation, falls
gesetzt – nutzt die bestehendefetchCurrentLocation-Logik). - GPS-Metadaten aus der Aufnahme (
recording.latitude/longitude,
diePttRecorder.stop()beim Speichern bereits anlegt). - Sicherer Default
0.0 / 0.0(entspricht dem Default des
Waypoint-Datenmodells – Nutzer kann den Wegpunkt anschließend
jederzeit per Karten-Editor oder Bearbeiten-Dialog korrigieren).
- Aktuelle GPS-Position (
- Persistiert via
viewModel.upsert(...); das bestehende
WaypointRepositorylegt den Wegpunkt an. Tour-Auswahl wird auf
die Zieltour gewechselt, damit der neu erzeugte Wegpunkt in der
Liste sichtbar wird.
- Sichtbar auch in leeren Touren (prominent) und zusätzlich
- Feedback auf Deutsch: Neue String-Ressourcen
ptt_waypoint_chooser_createdund
ptt_waypoint_chooser_empty_hint; bestehende
ptt_waypoint_chooser_assignedbleibt für reine Zuweisungen.
2.3 ViewModel-Erweiterung (minimal)
Zwei kleine öffentliche Setter in
WaypointViewModel:fun postInfo(message: String)setzt_infoMessage(für Erfolgs-Banner).fun postError(message: String)setzt_errorMessage(für Fehler-Banner).
Beide nutzen die existierenden, bereits in der UI gehosteten
StateFlows (infoMessage/errorMessage) und führen keine eigenen
Side-Effects ein.
3. Geänderte Dateien
Datei Änderung app/build.gradle.ktsversionCode 37 → 38,versionName 2.1.0 → 2.1.1app/src/main/res/values/strings.xmlNeue Strings: ptt_waypoint_chooser_empty_hint,ptt_waypoint_chooser_tour_label,ptt_waypoint_chooser_create_new,ptt_waypoint_chooser_created,ptt_recording_preview_play,ptt_recording_preview_pauseapp/src/main/kotlin/de/waypointaudio/ui/PttRecordingDialogs.ktPreview-Player + Play/Pause in der Bibliothek; Tour-Dropdown + „Neuen Wegpunkt erstellen" im Chooser; deutsche Erfolgs-/Hinweistexte app/src/main/kotlin/de/waypointaudio/viewmodel/WaypointViewModel.ktÖffentliche postInfo/postErrorSetter (additive Änderung).gitignoreSchutz vor versehentlichem Einchecken von keystore.propertiesund*.jksEs wurden keine anderen Klassen / Services / Player / Stores
verändert.
4. Build- und Signaturstatus
- Toolchain: JDK 21, Android SDK 35, Build-Tools 35.0.0,
Gradle 8.9, AGP 8.5.2, Kotlin 2.0.21. - Build-Befehl:
gradle :app:assembleRelease(kein Daemon). - Signatur: v2 APK Signature Scheme – verifiziert mit
apksigner.
Signiert mit dem produktiven Release-Keystoregps2audio_release
(PKCS12, RSA 4096, SHA384withRSA). Der signierte Build ist damit
updatefähig zu früheren v2.x-Installationen. - Apk-Pfad:
/home/user/workspace/GPS2Audio_v2_1_1_ptt_recorder_play_assign_signed.apk - Größe / Metadaten:
package: name='de.waypointaudio' versionCode='38' versionName='2.1.1'targetSdkVersion='35',sdkVersion:'26'
- Gradle-Ausgabe:
BUILD SUCCESSFUL in 1m 22s. Nur Compiler-
Warnungen (deprecation hints aus bestehenden Modulen, kein Bezug
zu den neuen Änderungen außerIcons.Filled.Assignment– bewusst
beibehalten zur visuellen Konsistenz mit v2.1.0).
5. Manuelle Tests (Schritt für Schritt)
PTT-Aufnahmen anhören
- App öffnen → Tour „Standard" auswählen.
- PTT-Einstellungen → „Aufnahme speichern" aktivieren.
- Mehrere kurze PTT-Aufnahmen erzeugen (PTT-Toggle aus/an).
- Menü → „Aufnahmen…" öffnen → Dialog „PTT-Aufnahmen" erscheint.
- Auf „Anhören" einer Aufnahme tippen → Wiedergabe startet, Button
wechselt zu „Pause". - Auf „Pause" tippen → Wiedergabe pausiert; erneutes Tippen auf
„Anhören" derselben Aufnahme → resumed. - Auf „Anhören" einer anderen Aufnahme tippen → erste Vorschau
stoppt automatisch, zweite startet. - Dialog schließen (X / Außerhalb) → Wiedergabe stoppt sofort.
- Aufnahme während laufender Vorschau löschen → Vorschau stoppt
sicher, Datei + Eintrag entfernt.
Zuweisung an Wegpunkte
- In leerer Tour „Standard": Eine Aufnahme „Zuweisen" wählen →
Dialog „Wegpunkt auswählen" zeigt Dropdown „Tour: Standard" und
Hinweistext + Button „Neuen Wegpunkt aus Aufnahme erstellen". - Button drücken → Wegpunkt wird angelegt; Snackbar/Banner
bestätigt: „Wegpunkt … in Tour … angelegt." Liste enthält den
neuen Wegpunkt; Audio ist gesetzt. - Mehrere Touren anlegen, eine davon mit Wegpunkten füllen.
- Aufnahme zuweisen → Tour-Dropdown öffnen → Tour mit Wegpunkten
wählen → Liste erscheint → Wegpunkt antippen → Audio wird der
Wegpunkt zugewiesen; Bestätigung erscheint. - „Neuen Wegpunkt aus Aufnahme erstellen" auch in nicht-leerer
Tour → erzeugt zusätzlichen Wegpunkt (sekundärer Button).
Position
- Ohne GPS-Position (kein vorheriges
fetchCurrentLocation):
neuer Wegpunkt nutzt – sofern in der Aufnahme vorhanden – die
GPS-Metadaten der Aufnahme; sonst0.0/0.0(vom Nutzer
nachträglich editierbar). - Mit aktiver GPS-Position (z.B. nach „Neuen Wegpunkt"-Klick im
Hauptscreen): wird bevorzugt.
6. Regression-Checkliste (v2.1.0 → v2.1.1)
Bereich Erwartetes Verhalten Status Stream-Playlist (Service-owned Atmo-Player, Hintergrundwiedergabe) Unverändert; Atmo läuft im Foreground-Service weiter, Sperrbildschirm-Steuerung verfügbar ✅ keine Änderung am Service / AtmoPlaybackService/BackgroundMusicManagerPTT pausiert Waypoint und Atmo WaypointAudioInterruptionCoordinatorPfad unverändert; Preview-Player ist außerhalb dieses Pfads (rein UI-lokale Vorschau)✅ Drag-and-drop Waypoint-Sortierung Unverändert ✅ kein Eingriff in WaypointListScreen-SortierlogikKarteneditor / Drafts / Map Search Unverändert ✅ keine Änderung an MapScreen,TrackDraftEditorScreen,PlaceSearchDialog,NominatimClientBackup Export / Import Unverändert ✅ keine Änderung an BackupExportManager/BackupImportManagerAbout / PayPal / Versions-Dialog Unverändert. Versions-Dialog erscheint automatisch wieder bei versionCode 38, weildismissedVersionCode < 38.✅ Audio-Bibliothek (manuelle Auswahl von Sound-Dateien) Unverändert ✅ OSM Attribution Unverändert ✅ ScrollableTabRow Fix Unverändert ✅ Touren ordnen / umbenennen / löschen Unverändert ✅ moveTour,renameTour,deleteTournicht angefasstPost-Aufnahme-Dialog Identisches Verhalten zu v2.1.0 ✅ PTT-Aufnahme-Pfad (Recorder, Speicherung, Bibliothek-Persistenz) Identisch zu v2.1.0 ✅ PttRecorderundLivePttManagerunverändertManueller Waypoint-Player Identisch zu v2.1.0 ✅ ManualAudioPlayerunverändertRisikoanalyse: Sämtliche Änderungen sind additiv und auf zwei UI-
Dialoge sowie zwei neue, idempotente Setter im ViewModel
beschränkt. Der Preview-Player ist räumlich auf den Dialog
beschränkt und benutzt eine eigeneMediaPlayer-Instanz, die durch
DisposableEffectund mehrfache expliziterelease()-Aufrufe sicher
freigegeben wird. Es gibt keinen geteilten Zustand mit den
bestehenden Playern.
7. Sicherheit / Auslieferung
- Keystore-Datei (
GPS2Audio_release_keystore.jks) und
keystore.propertiesmit Passwörtern sind nicht im
GPS2Audio_v2_1_1_ptt_recorder_play_assign_source.zipenthalten.
Geprüft perunzip -l; im ZIP befindet sich ausschließlich die
Vorlagekeystore.properties.example. .gitignorezusätzlich abgesichert (keystore.properties,*.jks).- Der Build erwartet beim erneuten Erstellen entweder
keystore.propertiesim Projekt-Root oder die ENV-Variablen
GPS2AUDIO_RELEASE_STORE_FILE/…_STORE_PASSWORD/…_KEY_ALIAS/
…_KEY_PASSWORD(Details:keystore.properties.example).
8. Ergebnisartefakte
GPS2Audio_v2_1_1_ptt_recorder_play_assign_signed.apk– signierte
Release-APK, updatefähig (15,2 MB).GPS2Audio_v2_1_1_ptt_recorder_play_assign_source.zip– komplette
Quellen ohne Build-Artefakte, ohne Keystore, ohne Passwort-Datei.GPS2Audio_v2_1_1_ptt_recorder_play_assign_handoff.md– dieses
Dokument.
Downloads
-