Track editor
|
iOS |
Android |
| Status |
⏳ |
⏳ |
| Code |
— |
— |
Source: click dummies docs/companion_app/sailever-ios.html, docs/companion_app/sailever-android.html (Edit track).
Verified against code: 2026-10-11 (no code yet; checked against the click dummies)
Purpose
Fix one track: trim the harbour drift at the start or end, name the departure and destination, move the track to another trip, or delete it. Same rules as the website's track editor (/my/tracks/:id/edit). Trimming is non-destructive: the recorded points stay.
Server API
| Need |
Status |
Points with time, SOG and vessel state: GET /api/v1/tracks/:id/points |
⏳ missing (website: GET /my/tracks/:id/points.json, which has an engine flag but no vessel state) |
Save trim, names, auto flags, trip: PATCH /api/v1/tracks/:id |
⏳ missing (website: PATCH /my/tracks/:id) |
Delete: DELETE /api/v1/tracks/:id |
⏳ missing (website: DELETE /my/tracks/:id) |
Layout / behaviour
Pushed screen from a track row on the trip detail.
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Bar |
Back, title "Edit track", Save. |
Save: writes trim, names and trip, goes back. Toast/snackbar "Track saved. The numbers are being recalculated…" when the trim changed, otherwise "Track saved." (as on the website). |
iOS: route as a large display title below the bar, tinted "Save" capsule. Android: route as a subtitle under "Edit track", filled "Save" button. |
| Badges |
Device; "{day label} · {HH:MM}" of the kept start; the sync badge as on the trip detail. |
— |
— |
Trim
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Section head |
"Trim start and end". |
— |
iOS: group header. Android: card title with the lede inside the card. |
| Lede |
"Cut off what doesn't belong to the track, like the walk to the marina or the drive home. The recorded points stay, so you can undo it at any time." |
— |
iOS: shown as footnote under the card. |
| Map |
180–190 px. Whole track as a grey line, the kept part coloured by vessel state, small pins at IN (ink) and OUT (signal). |
Not interactive. Updates while trimming. |
— |
| SOG chart |
72 px. Speed over ground; scale top = highest SOG, at least 8 kn and at most 25 kn, as on the website. Line coloured by vessel state. Cut-off parts shaded. |
Updates while trimming. |
— |
| Range slider |
Two thumbs, IN and OUT, over the track's points. The kept part of the rail is in the action colour. |
IN and OUT can't cross; they stay at least one point apart. |
— |
| Start |
Label "Start", time HH:MM. Buttons "One point earlier" / "One point later" (chevrons). |
Steps IN by one point. |
— |
| End |
Label "End", time HH:MM. Same buttons for OUT. |
Steps OUT by one point. |
— |
| Kept |
"Kept" · "{x} NM" (big) · "{h} h {mm} min" · "Sailed {x} NM · Engine {x.x} h", computed on the phone like the website preview. |
Updates while trimming. |
— |
| Preview note |
"Preview from the GPS points. The saved numbers are recalculated from the watch's distance." |
— |
— |
| Reset trim |
Button. |
Sets IN and OUT back to the first and last point. Saved only with Save. |
— |
Names
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Section head |
"Departure and destination". |
— |
— |
| Departure |
Text field, placeholder "Marina Split". |
A typed name is stored and kept by later recomputes. |
iOS: inline label; Android: outlined field with floating label. |
| Auto (departure) |
Switch "Named automatically from the position". |
On: the server names it from the position again, right away (naming rules). |
iOS: own row below the field. Android: below the field. |
| Destination |
Text field, placeholder "Hvar". |
— |
— |
| Auto (destination) |
Same switch. |
— |
— |
Trip
| Element |
Content & format |
Behaviour |
iOS vs Android |
| This track belongs to |
Picker: all trips, then "No trip". Hint "Pick another trip to move the track there." |
On save the track moves and both trips are recomputed. If the old trip is empty then, it's deleted and the app goes back to the trip list. |
— |
Delete
| Element |
Content & format |
Behaviour |
iOS vs Android |
| Delete track |
Destructive button. Android: danger zone "Deletes this recording and its points. Its trip stays and is recalculated. This can't be undone." |
Confirmation "Delete this track? This can't be undone." On confirm: deleted, toast/snackbar "Track deleted." The trip stays and is recomputed, even when it is now empty. |
— |
States and edge cases
- Track still syncing from the watch: OUT is locked (lock icon, no step buttons, thumb disabled) at the last point received. Note: "The watch is still sending this track. You can trim the end once the last part has arrived." Moving and deleting work as for any track.
- Trimmed track: the track row on the trip detail shows "Trimmed".
Known deviations
- The dummies step IN / OUT by 3 points per tap and keep them 3 points apart; the website steps by one point and keeps them one point apart. This spec follows the website.
- Dummy behaviour this spec replaces with the website's: SOG scale fixed at 0–7 kn; empty name keeps the old name; destination placeholder "Named when the track ends" while receiving; move and delete refused while receiving ("Stop the track on the watch before deleting it"); deleting the last track also deletes the trip ("Track and its empty trip deleted"); "Track moved to {trip}" (Android); delete confirmation "{route} on {day label} will be removed from “{trip}”."; "Synced" badge; engine time as
{h:mm} h in the preview.
- Copy aligned with the website (
logbook.editor.*, app.tracks.*): section heads, lede, "No trip" (dummies: "Standalone track"), "Syncing from watch" (dummies: "Receiving"), the receiving note (dummies: "This track is still receiving data. You can trim the end once the watch stops the track."), and the save message (iOS dummy: "Track saved", Android: "Track saved. Trip totals are recalculated.").
- The dummies lack the preview note. This spec adds it, as the website shows it.