feat(train): a recording follows a route, its turns told (ADR 0030, D45)

The Record sheet offers the routes with a way planned; the recorder's
service follows the one chosen offline (RouteGuide.kt): turns told 50 m
before them (100 m on a bike) after a tone, off the route past 40 m for
10 s a cue with the way back, told again on rejoining, the end told.
The recording file keeps the route and the guidance; the recording
screen shows the next turn or the way back, and swipes to a map of the
route, the track and the position, north or the heading up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-29 08:27:27 +01:00
commit b0c0eeb3d5
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -898,6 +898,31 @@ Strava. What was found, 27 Oct:
(to CoMaps or anything, with waypoints and turn hints) and come in as GPX shared to
Train or opened in it, snapped to a profile or kept as drawn (over out alone, and
over neither yet).
Built: following in a recording (9c). The Record sheet offers the routes with a
way planned, for an activity with GPS, and a route for an activity chooses it, as a
plan does. The app hands the service the route's points, its turns each with its
line in the app's language ("In 50 metres: Turn left"; BRouter's beelines and
off-route marks aren't turns, and are left out), and the words off the route with
places for the figures, through a file beside the app's (`route.json`), since an
intent carries less than a route's thousands of points. `RouteGuide.kt` places each
fix precise enough on the route (among its next 500 m and last 100 m first, the
whole route where none is near, so that a shortcut or a figure eight finds its
place), none while paused; a turn is told once, 50 m (100 m on a bike) along the
route before it, a tone first and the line 0.4 s after; one passed unseen is
skipped. Off the route: past 40 m for 10 s, a double vibration and the way back
("It lies 80 metres to the north-east", to 10 m, to the nearest point), again
every minute while still off (a runner off for long would otherwise hear it once),
told again once back within 30 m (so that a fix wavering about 40 m doesn't cue
over and over); no turn is told while off. The end is told once within 30 m of it.
The file keeps the route (`route`, its payload) and what following it gave
(`guide … next|turn|off|on|arrived`), so a recording the app comes back to shows it
again. The recording screen shows the next turn with how far it is as the crow
flies (the service places the person, the app only reads its lines), or the way
back; it swipes to a map of the route, the track so far (the fixes precise enough
to count) and the position, which the map follows, zoomed with two fingers alone
so that a swipe goes back to the figures, north up by default and the heading up
(of the last 5 m or more) as tapped. A saved workout doesn't keep which route it
followed yet.
- **D46 Train's server on the instance** (recommended, the developer's; 28 Oct): it
joins learn.halkyon.eu's server, as BRouter needs a server of Train's to ask it
(D11, D22), at **train.halkyon.eu** (over a path on learn.halkyon.eu, which would