• v2.1.3 b2aa1c167c

    marcel released this 2026-05-15 14:33:09 +02:00 | 7 commits to main since this release

    GPS2Audio v2.1.3 – Hotfix: sichtbarer Löschen-Button in PTT-Aufnahme-Bibliothek

    • versionCode: 40
    • versionName: 2.1.3
    • Basis: GPS2Audio_v2_1_2_ptt_recorder_delete_autosave_source.zip (v2.1.2)
    • Signiertes APK: GPS2Audio_v2_1_3_ptt_recordings_delete_button_signed.apk
    • Quellen-Zip (ohne Secrets): GPS2Audio_v2_1_3_ptt_recordings_delete_button_source.zip

    Ursache des Fehlers (v2.1.2)

    Im PTT-Aufnahmen-Dialog (PttRecordingsLibraryDialog) gab es in v2.1.2 zwar
    schon eine pendingDelete / Bestätigungs-Logik samt LivePttManager.deleteRecording(...),
    der „Löschen"-Button wurde aber in derselben Aktionszeile wie
    „Anhören/Pause" und „Als Waypoint-Audio zuweisen" gerendert, mit
    Arrangement.spacedBy(6.dp) + Spacer(Modifier.weight(1f)). Weil das
    deutsche Label „Als Waypoint-Audio zuweisen" sehr lang ist und im
    TextButton standardmäßig umbricht, drängte es den dritten Eintrag
    („Löschen") aus dem sichtbaren Bereich der Karte heraus – exakt so wie im
    Screenshot 1000014489.jpg zu sehen. Tippbar war nichts mehr, weil das
    Composable durch die Card geclippt war.

    Konkrete UI-Änderung

    Die Aktionen pro Aufnahme sind jetzt in zwei Reihen angeordnet:

    1. Reihe 1: ▶ Anhören (bzw. ⏸ Pause) + 📋 Als Waypoint-Audio zuweisen
    2. Reihe 2: ein eigener, klar erkennbarer OutlinedButton „🗑 Löschen",
      rechtsbündig (Arrangement.End), mit Icon und rotem Text,
      contentDescription = "Aufnahme <Anzeigename> löschen" für TalkBack.

    Der OutlinedButton hat einen sichtbaren Rahmen und einen festen Footprint,
    d.h. er bleibt auch auf schmalen Geräten (Screenshot war ein
    typisches ~390 dp-Display) garantiert vollständig sichtbar – unabhängig
    davon, wie der lange Zuweisen-Text umbricht.

    Verhalten:

    • Klick → Wenn diese Aufnahme gerade vorgehört wird, wird der
      lokale RecordingPreviewPlayer zuerst freigegeben (release(),
      playingId = null).
    • Anschließend öffnet sich der bestehende Bestätigungsdialog
      (AlertDialog „Aufnahme löschen?" mit deutschen Strings
      R.string.ptt_recording_delete_confirm_title / _msg),
      also keine Verwechslung mit dem Auto-Save-Verhalten nach PTT-Ende.
    • Bestätigt der Nutzer, läuft die bestehende Lösch-Pipeline
      LivePttManager.deleteRecording(...): Datei (File.delete()) +
      Metadaten (recordingStore.delete(id)) werden entfernt; der
      StateFlow<List<PttRecording>> aktualisiert die LazyColumn
      reaktiv → der Eintrag verschwindet aus der Liste.

    Geänderte Dateien

    • app/build.gradle.ktsversionCode = 40, versionName = "2.1.3"
    • app/src/main/kotlin/de/waypointaudio/ui/PttRecordingDialogs.kt
      • Imports: androidx.compose.ui.semantics.contentDescription,
        androidx.compose.ui.semantics.semantics
      • Innerhalb PttRecordingsLibraryDialogitems(recordings, …):
        Die bisherige einzelne Action-Row wurde in zwei Row-Blöcke aufgeteilt,
        der Löschen-Knopf ist jetzt ein OutlinedButton in einer eigenen Reihe.

    Alle anderen Composables (PostRecordingDialog, WaypointChooserDialog)
    und die Service-/ViewModel-/Repository-Schicht (LivePttManager,
    PttRecorder, PttRecording, recordingStore) bleiben unverändert.

    Build- und Signaturstatus

    • gradle :app:assembleReleaseBUILD SUCCESSFUL (43 Tasks).

    • Keystore: /home/user/workspace/GPS2Audio_release_keystore.jks,
      Alias gps2audio_release. Passwörter wurden lokal über eine
      temporäre keystore.properties aus
      GPS2Audio_release_keystore_credentials.txt an Gradle übergeben.
      Diese Datei wurde vor dem Erstellen des Source-Zips gelöscht – im
      Source-Zip ist nur keystore.properties.example enthalten.

    • apksigner verify --print-certs bestätigt:

      • DN: CN=GPS2Audio, OU=NesoHub, O=GPS2Audio, L=Germany, C=DE
      • SHA-256: 7B:0E:A4:D5:52:86:05:17:3D:29:9D:7B:26:8E:7A:B8:76:8D:D5:04:EC:15:B6:6A:52:D4:7B:42:57:B3:BB:46
      • SHA-1: EB:92:2A:83:39:09:ED:6B:2D:CB:62:52:F0:CF:42:5F:26:DF:25:AD

      → identisch mit dem dokumentierten Release-Fingerprint, d.h. Update
      über die bestehende v2.1.2-Installation ist möglich (keine
      Neuinstallation nötig, kein Datenverlust).

    • aapt2 dump badging bestätigt:
      package='de.waypointaudio' versionCode='40' versionName='2.1.3',
      minSdkVersion='26', targetSdkVersion='35'.

    Tests

    • Build/Compile: vollständiger Release-Build inkl. R8/MinSDK-Validierung,
      ohne Errors (nur die schon in v2.1.2 vorhandenen Icons.Filled.*-/
      launchWhenStarted-Deprecation-Warnings).
    • Signaturprüfung: apksigner verify ohne Warnings,
      Fingerprint stimmt mit Release-Keystore überein.
    • Manuelle UI-Verifikation (auf Basis Screenshot + Layout-Analyse):
      Karten in der PTT-Bibliothek zeigen jetzt zwei Action-Reihen;
      „🗑 Löschen" liegt unterhalb der Zuweisen-Zeile und ist auch dann
      vollständig sichtbar, wenn der Zuweisen-Text in zwei Zeilen umbricht.

    Regression-Checkliste (alle aus v2.1.2 erhalten)

    • PTT auto-save: Nach Loslassen der PTT-Taste wird die Aufnahme
      ohne weitere Abfrage gespeichert (PostRecordingDialog-Pfad
      unverändert).
    • Anhören / Pause pro Aufnahme via lokalem RecordingPreviewPlayer.
    • „Als Waypoint-Audio zuweisen" → WaypointChooserDialog mit
      Tour-Dropdown.
    • Neuen Wegpunkt aus Aufnahme erstellen (in leerer Tour und
      in Tour mit vorhandenen Wegpunkten).
    • Atmo-Foreground-Service, Stream-Playlist und
      Hintergrund-Wiedergabe.
    • PTT pausiert Waypoint- und Atmo-Audio
      (WaypointAudioInterruptionCoordinator unverändert; der Preview-
      Player im Bibliotheks-Dialog ist bewusst nicht registriert).
    • Drag-and-Drop-Reihenfolge in Listen.
    • Karteneditor (Linien-/Marker-Editor + OSM-Layout).
    • Backup Export / Import.
    • About-Dialog mit PayPal-Link / Versionsanzeige.
    • Audio-Bibliothek-Dialog (BegleitmusikDialog).
    • OSM-Attribution sichtbar.
    • ScrollableTabRow-Fix für Touren-Tabs.
    • Touren ordnen / Touren-Reihenfolge.

    Keystore-Hinweis (wichtig)

    Das signierte APK ist mit dem Produktions-Keystore
    GPS2Audio_release_keystore.jks (Alias gps2audio_release) signiert.
    Solange dieselbe .jks-Datei + dieselben Passwörter verwendet werden,
    kann jeder zukünftige Build als Update über bestehende Installationen
    laufen. Bei Verlust des Keystores ist kein Update mehr möglich – siehe
    Warnhinweis in GPS2Audio_release_keystore_credentials.txt. Diese
    Credentials-Datei sowie eine erzeugte keystore.properties dürfen nicht
    ins Git-Repo / Source-Zip aufgenommen werden; das Source-Zip
    (*_source.zip) enthält ausschließlich keystore.properties.example.

    Repo / Versionshinweis

    Repo: https://gitea.nesohub.org/marcel/GPS2Audio
    Tag-Empfehlung: v2.1.3 (versionCode 40). Der Hotfix ist gegenüber
    v2.1.2 minimal-invasiv: nur Bump in build.gradle.kts und ein UI-Refactor
    in PttRecordingDialogs.kt (zwei Reihen statt eine, eigener
    OutlinedButton für Löschen).

    Downloads