feat(train): a recording runs an interval plan, with cues and Lap (ADR 0030, D42)
The plan chosen on the Record sheet goes to the recording service spelled out: each step's end, its target (zones as the heart rates they span for the profile's highest rate) and its spoken line in the app's language. PlanRunner.kt moves through the steps on the moving time and distance, counts a timed step's last seconds down and cues off target from a 30 s window; PlanCues.kt gives a tone, a vibration and the voice, ducking music. The file's plan and step lines bring it back, and the recording screen shows the step, what is left of it, its target, the next step and Lap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
f406ddcc59
commit
d9f98449a8
1 changed files with 1886 additions and 26 deletions
|
|
@ -226,6 +226,48 @@ abstract class AppLocalizations {
|
|||
/// **'Start'**
|
||||
String get recordStart;
|
||||
|
||||
/// No description provided for @recordPlan.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Plan'**
|
||||
String get recordPlan;
|
||||
|
||||
/// No description provided for @recordNoPlan.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'None'**
|
||||
String get recordNoPlan;
|
||||
|
||||
/// No description provided for @recordingLap.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Lap'**
|
||||
String get recordingLap;
|
||||
|
||||
/// No description provided for @recordingPlanDone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Plan done'**
|
||||
String get recordingPlanDone;
|
||||
|
||||
/// No description provided for @recordingStepOf.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Step {index} of {count}'**
|
||||
String recordingStepOf(int index, int count);
|
||||
|
||||
/// No description provided for @recordingNextStep.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Next: {step}'**
|
||||
String recordingNextStep(String step);
|
||||
|
||||
/// No description provided for @recordingStepTapLap.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Until you tap Lap'**
|
||||
String get recordingStepTapLap;
|
||||
|
||||
/// No description provided for @recordLocationRefused.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -1660,6 +1702,102 @@ abstract class AppLocalizations {
|
|||
/// **'{count, plural, =1{1 step} other{{count} steps}}'**
|
||||
String planSteps(int count);
|
||||
|
||||
/// No description provided for @planSayRound.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{round} of {rounds}'**
|
||||
String planSayRound(int round, int rounds);
|
||||
|
||||
/// No description provided for @planSayMinutes.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count, plural, =1{1 minute} other{{count} minutes}}'**
|
||||
String planSayMinutes(int count);
|
||||
|
||||
/// No description provided for @planSaySeconds.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count, plural, =1{1 second} other{{count} seconds}}'**
|
||||
String planSaySeconds(int count);
|
||||
|
||||
/// No description provided for @planSayMetres.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count, plural, =1{1 metre} other{{count} metres}}'**
|
||||
String planSayMetres(int count);
|
||||
|
||||
/// No description provided for @planSayKilometres.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{km} kilometres'**
|
||||
String planSayKilometres(String km);
|
||||
|
||||
/// No description provided for @planSayUntilLap.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'until you tap Lap'**
|
||||
String get planSayUntilLap;
|
||||
|
||||
/// No description provided for @planSayPace.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from} to {to} a kilometre'**
|
||||
String planSayPace(String from, String to);
|
||||
|
||||
/// No description provided for @planSaySpeed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from} to {to} kilometres an hour'**
|
||||
String planSaySpeed(String from, String to);
|
||||
|
||||
/// No description provided for @planSayHeartRate.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from} to {to} beats a minute'**
|
||||
String planSayHeartRate(String from, String to);
|
||||
|
||||
/// No description provided for @planSayZone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'zone {zone}'**
|
||||
String planSayZone(int zone);
|
||||
|
||||
/// No description provided for @planSaySplit.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from} to {to} per 500 metres'**
|
||||
String planSaySplit(String from, String to);
|
||||
|
||||
/// No description provided for @planSayWatts.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from} to {to} watts'**
|
||||
String planSayWatts(String from, String to);
|
||||
|
||||
/// No description provided for @planSayStrokeRate.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{from} to {to} strokes a minute'**
|
||||
String planSayStrokeRate(String from, String to);
|
||||
|
||||
/// No description provided for @planSayHarder.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Push a little'**
|
||||
String get planSayHarder;
|
||||
|
||||
/// No description provided for @planSayEasier.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ease off a little'**
|
||||
String get planSayEasier;
|
||||
|
||||
/// No description provided for @planSayDone.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Plan done'**
|
||||
String get planSayDone;
|
||||
|
||||
/// No description provided for @stepTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Reference in a new issue