RecorderService, a foreground service of the types location and health started from the open app, takes fixes from LocationManager's GPS and steps from the step detector, pauses by itself (AutoPause, tested on the JVM) and appends each sample to the person's recording file, flushed every five seconds. MainActivity asks for location, notifications and, for auto-pause on foot, physical activity, never background location (D19), and bridges the service to the app. The app follows the file's lines with RecordingBloc and shows the moving time, the distance, the pace or speed and GPS's state; the notification shows the time and the distance with Pause or Resume. Stop is held down; a stopped recording is saved as a workout and its series, or discarded after asking, and one cut off or left unsaved is offered as the app opens. Home has the Record button where the device records. Three choices of the implementation's are recorded under D21 for review: rowing waits for 5f, auto-pause on foot without steps goes by GPS speed (below 2 km/h, on above 3 km/h), and Stop's hint shows above the button. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
69 lines
4.1 KiB
Text
69 lines
4.1 KiB
Text
{
|
|
"@@locale": "en",
|
|
|
|
"appTitle": "Halkyon Train",
|
|
"@appTitle": {"description": "The app's name: the window's title, and where halkyon_app's texts name the app."},
|
|
"launchProduct": "Train",
|
|
"@launchProduct": {"description": "The app's word in its wordmark, under \"Halkyon\"."},
|
|
|
|
"instanceFirstStartSubtitle": "Choose the instance to keep your workouts on. Someone runs each one; you can add others later.",
|
|
|
|
"homeEmptyTitle": "Nothing here yet",
|
|
"homeEmptyHint": "Workouts come with a later version of Halkyon Train.",
|
|
|
|
"accountTitle": "Account",
|
|
"accountDeleteMessage": "Your account is deleted on the server and on all your devices. This can't be undone.",
|
|
|
|
"aboutTitle": "About",
|
|
|
|
"homeRecordHint": "Record a workout with the button below. The list of your workouts comes with the next version of Halkyon Train.",
|
|
"recordAction": "Record",
|
|
"recordBack": "Back to the recording",
|
|
"recordSheetTitle": "Record a workout",
|
|
"activityRunning": "Running",
|
|
"activityWalking": "Walking",
|
|
"activityHiking": "Hiking",
|
|
"activityCycling": "Cycling",
|
|
"activityIndoorRowing": "Rowing indoors",
|
|
"recordAutoPause": "Pause by itself",
|
|
"@recordAutoPause": {"description": "The switch for auto-pause, as the recording starts."},
|
|
"recordAutoPauseHint": "When you stand still, and going on as you move again",
|
|
"recordStart": "Start",
|
|
"recordLocationRefused": "Train needs your location to record this. You can allow it in the system's settings.",
|
|
"recordingWaitingForGps": "Waiting for GPS",
|
|
"recordingWaitingForGpsAccuracy": "Waiting for GPS · ±{metres} m",
|
|
"@recordingWaitingForGpsAccuracy": {"description": "Before a fix precise enough: how far off the last one may be.", "placeholders": {"metres": {"type": "int"}}},
|
|
"recordingGpsAccuracy": "GPS ±{metres} m",
|
|
"@recordingGpsAccuracy": {"description": "How far off the last fix may be.", "placeholders": {"metres": {"type": "int"}}},
|
|
"recordingMovingTime": "moving time",
|
|
"@recordingMovingTime": {"description": "Under the time, lower case: the time moved, pauses left out."},
|
|
"recordingDistance": "distance",
|
|
"recordingPace": "pace",
|
|
"recordingSpeed": "speed",
|
|
"recordingDistanceValue": "{km} km",
|
|
"@recordingDistanceValue": {"placeholders": {"km": {"type": "String", "example": "5.12"}}},
|
|
"recordingPaceValue": "{pace} /km",
|
|
"@recordingPaceValue": {"description": "Minutes and seconds a kilometre takes.", "placeholders": {"pace": {"type": "String", "example": "6:18"}}},
|
|
"recordingSpeedValue": "{kmh} km/h",
|
|
"@recordingSpeedValue": {"placeholders": {"kmh": {"type": "String", "example": "24.3"}}},
|
|
"recordingPausedAuto": "Paused: not moving",
|
|
"@recordingPausedAuto": {"description": "Train paused the recording by itself (auto-pause)."},
|
|
"recordingPausedByHand": "Paused",
|
|
"recordingPause": "Pause",
|
|
"recordingResume": "Resume",
|
|
"recordingStop": "Stop",
|
|
"recordingHoldToStop": "Hold Stop to end the workout",
|
|
"recordingStoppedTitle": "Save this workout?",
|
|
"recordingSave": "Save",
|
|
"recordingDiscard": "Discard",
|
|
"recordingDiscardTitle": "Discard this workout?",
|
|
"recordingDiscardMessage": "Its time and track are deleted from this device. This can't be undone.",
|
|
"recordingSaveFailed": "It can't be saved on this device, which doesn't hold your account's keys. It stays here until it can be.",
|
|
"recordingCutOffTitle": "A recording was cut off",
|
|
"recordingCutOffMessage": "A recording from {start} was cut off. Save it up to {end}, or discard it?",
|
|
"@recordingCutOffMessage": {"description": "A recording found unfinished as the app opened: when it started and its last sample.", "placeholders": {"start": {"type": "String", "example": "07:30"}, "end": {"type": "String", "example": "08:02"}}},
|
|
"recordingNotificationChannel": "Recording",
|
|
"@recordingNotificationChannel": {"description": "The name of the recording's notification channel, in the system's settings."},
|
|
"recordingNotificationPaused": "{activity} · paused",
|
|
"@recordingNotificationPaused": {"description": "The notification's title while paused.", "placeholders": {"activity": {"type": "String", "example": "Running"}}}
|
|
}
|