-
released this
2026-05-15 14:30:04 +02:00 | 7 commits to main since this releaseGPS2Audio v2.0.1 — Direct Reorder UI
Artifacts
- Signed APK:
/home/user/workspace/GPS2Audio_v2_0_1_direct_reorder_signed.apk - Source ZIP (no secrets):
/home/user/workspace/GPS2Audio_v2_0_1_direct_reorder_source.zip - This handoff:
/home/user/workspace/GPS2Audio_v2_0_1_direct_reorder_handoff.md
Version / signing
applicationId:de.waypointaudioversionName:2.0.1versionCode:29(was 28)- Signed with the existing release keystore
(GPS2Audio_release_keystore.jks, aliasgps2audio_release). - Signing certificate (verified with
apksigner verify --print-certs):- 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
- DN:
aapt dump badgingconfirmed:package: name='de.waypointaudio' versionCode='29' versionName='2.0.1'.gradle :app:assembleRelease→ BUILD SUCCESSFUL (only pre-existing
deprecation warnings —launchWhenStarted, OSMDroid setters,
Modifier.menuAnchor()).
UI changes (precise)
All changes are in
app/src/main/kotlin/de/waypointaudio/ui/WaypointListScreen.ktand
app/src/main/res/values/strings.xml.1. Prominent
Reihenfolge bearbeitenrow removed- The
SortModeBarcomposable and the associated full-width row that used
to sit between the tour tabs and the Tour-Zähler card are deleted. - The
sortMode/sortBlockedtoggle state was removed from the screen
state. Tab clicks no longer have to checkif (!sortMode). - The
TourReorderListpanel that expanded under that bar is replaced
by a compact dialog (see section 3).
2. Direct waypoint reordering on each card
WaypointCardnow exposes a small two-arrow column on the left edge of
every card. The arrows are always rendered, so the user can re-order
waypoints with one tap (no mode to enter first):- Up arrow →
viewModel.moveWaypoint(index, index - 1) - Down arrow →
viewModel.moveWaypoint(index, index + 1)
The arrows are disabled (greyed out) when:
- The waypoint is at the top/bottom of the current tour's list
(canMoveUp/canMoveDown). - The GPS service is running OR a track recording is active
(reorderBlocked = serviceRunning || isRecording). In that case both
arrows are non-interactive and the new short hint
Sortieren während GPS/Aufzeichnung deaktiviert(string
reorder_blocked_hint_short) is shown to the right of the
Wegpunkt-Tracksheading.
German accessibility labels are attached to both arrows via
contentDescription(updatedsort_move_up/sort_move_downto
Nach oben verschieben/Nach unten verschieben). Icons are
Icons.Filled.KeyboardArrowUp/KeyboardArrowDownfor a clean look.The
SwitchforisActiveno longer disables itself during reorder
(there is no reorder mode anymore); it stays freely tappable whenever
the card is visible.Persistence is unchanged:
WaypointViewModel.moveWaypointcontinues to
delegate toWaypointStore.moveWaypointInTourand persists immediately.3. Compact tour reordering —
Touren ordnendialog- New overflow-menu item
Touren ordnen(menu_tour_reorder) sits in
the existing ⋮ menu just aboveDisplay aktiv halten. It is disabled
whenever fewer than two tours exist or when GPS/recording is active. - Tapping it opens an
AlertDialogtitledTouren ordnenlisting every
tour with up/down arrows, callingviewModel.moveTour(from, to). The
dialog closes with the existingFertigbutton. - No large always-visible bar remains in the main screen — tour
reordering is reachable in two taps (overflow → Touren ordnen) and
consumes zero vertical space until invoked.
4. Start-screen vertical density
- Removed the full-width
SortModeBarrow (≈40 dp tall). - Removed the expandable
Touren-Reihenfolgepanel that grew under it. - The waypoint cards are now slightly more compact: padding tightened
fromstart=12 / vertical=10tostart=8 / vertical=8to compensate
for the always-on arrow column without making the card taller.
Section ordering on the start screen is preserved (top → bottom):
ScrollableTabRow (Touren) → Tour-Zähler-Karte → Live/PTT → Atmo
(Begleitmusik mini player) → Manual Player Bar → "Wegpunkt-Tracks"
heading (with optional GPS-blocked hint) → waypoint cards. The whole
content is still wrapped in averticalScrolland the dual FAB stack
is unchanged.How to reorder now (user-facing)
- Waypoints inside a tour: tap the small ▲ or ▼ button on the left
edge of any waypoint card. Order is saved immediately. - Tours (tab order): tap ⋮ →
Touren ordnen. In the dialog use the
▲▼ buttons next to each tour. Close withFertig. - While GPS service or track recording is active: both controls are
disabled. The card arrows render greyed-out; the overflow item is
disabled; a short hint
Sortieren während GPS/Aufzeichnung deaktiviertappears next to the
Wegpunkt-Tracksheading. Stop the service / recording to re-enable.
Preserved features (regression checklist)
applicationId = de.waypointaudio, signed with the v2.0.0 release
keystore → in-place upgrade over v2.0.0 works.- v2.0.0 features:
- Wake Lock settings dialog accessible via overflow.
- Atmo (
BegleitmusikMiniPlayer) is placed above the waypoint
list, with autostart / resume preserved (AtmoResumeManager,
BackgroundMusicManageruntouched). - Compact TopBar with launcher icon, app title, and Play/Map/
Track-Editor/⋮ actions — unchanged. - Map provider selection — untouched.
- Track-Editor / drafts (
TrackDraftListScreen,
TrackDraftEditorScreen) — unchanged, including thick route line,
marking handles and "Import marked points". - Backup export/import (
BackupDialog,BackupImportDialog) — wiring
unchanged. - Map search everywhere (
PlaceSearchDialogusage inMapScreen,
TrackDraftEditorScreen) — unchanged. - Audio-library playlist (
BegleitmusikDialog) — unchanged. - PTT pauses/resumes Atmo (
LivePttCard+LivePttManager+
BackgroundMusicPlayer.duck/pauseForPtt) — unchanged. - OSM attribution layout in
MapScreen— unchanged. - ScrollableTabRow identity-key fix (
key(tabs.joinToString("|"))) —
retained. - About dialog incl. PayPal link / version notice — unchanged.
viewModel.moveWaypoint/moveToursemantics — unchanged; this
patch only changes how the user reaches them.
Regression checklist (suggested manual test plan)
- Fresh install: tab bar shows existing tours; no "Reihenfolge
bearbeiten" row appears above Tour-Zähler. - With two or more waypoints, tap ▲▼ on a card: list re-orders
immediately and persists across app restart. - Tap ▲ on the first card and ▼ on the last: visually disabled, no
action. - Start GPS service: card arrows grey out, hint
Sortieren während GPS/Aufzeichnung deaktiviertshown next to
"Wegpunkt-Tracks". OverflowTouren ordnenis disabled. Stop
service → controls re-enabled. - Start track recording (same expectations).
- Open ⋮ →
Touren ordnen: dialog lists every tour; ▲▼ reorder, tabs
reflect new order after closing withFertig. - Verify ScrollableTabRow does not throw IndexOutOfBounds when tours
are reordered, renamed, or deleted (identity-key fix retained). - Verify Atmo, Live/PTT, Manual Player, Tour-Zähler still appear in
their v2.0.0 order and are scrollable. - Backup export/import still completes round-trip.
- Install over v2.0.0 (same keystore) — no signature conflict.
Build & verification commands used
gradle :app:assembleRelease # BUILD SUCCESSFUL apksigner verify --print-certs app-release.apk aapt dump badging app-release.apkBoth confirm the signing cert SHA-256
7B0EA4D5...B3BB46and package
de.waypointaudio versionCode='29' versionName='2.0.1'.Source-tree hygiene
- The signed build was produced with a local
keystore.propertiesat
the project root pointing to
/home/user/workspace/GPS2Audio_release_keystore.jksand using the
passwords from
/home/user/workspace/GPS2Audio_release_keystore_credentials.txt. GPS2Audio_v2_0_1_direct_reorder_source.zipdoes not contain
keystore.properties, the.jks, or the credentials file. Only the
unchangedkeystore.properties.exampleis shipped. The Gradle config
still reads eitherkeystore.propertiesor the
GPS2AUDIO_RELEASE_*env vars, so future builds work with the same
mechanism v2.0.0 used.
Downloads
- Signed APK: