feat(train): other apps' workouts read from Health Connect (ADR 0030, D31)
Read from other apps, off until turned on, asks for reading with the history; the apps that wrote sessions are listed, each off. One turned on brings its sessions, earlier ones at once and later ones through the changes token as the app opens and comes to the front: each a workout of Train's own store, sealed and synced, its origin in its payload, its heart rate, pauses and a row's power as series, named by its app in the list and on its page. A double of a workout Train has brings at most its heart rate; one deleted in Train stays out; a track comes only when asked for on the page, Health Connect asking for consent. What came from Health Connect is never written back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
09f61c3b0a
commit
8fb2dbf35e
5 changed files with 1304 additions and 111 deletions
|
|
@ -137,12 +137,21 @@
|
|||
"healthNeedsUpdate": "Aktualisiere die App Health Connect, um sie mit Train zu nutzen.",
|
||||
"healthWrite": "Meine Trainings schreiben",
|
||||
"healthWriteHint": "Jedes Training auf diesem Telefon, auf dem neuesten Stand, wenn du es bearbeitest oder löschst",
|
||||
"healthWriteRefused": "Health Connect hat das zurückgenommen. Erlaube es dort, um es wieder einzuschalten.",
|
||||
"healthTakenBack": "Health Connect hat das zurückgenommen. Erlaube es dort, um es wieder einzuschalten.",
|
||||
"healthRefused": "Health Connect hat es nicht erlaubt. Du kannst es in seinen Einstellungen erlauben.",
|
||||
"healthOpenSettings": "Health Connect öffnen",
|
||||
"healthWhy": "Warum Train fragt",
|
||||
"healthRationaleTitle": "Train und Health Connect",
|
||||
"healthRationaleWrite": "Train schreibt deine Trainings erst in Health Connect, wenn du es einschaltest: jedes mit Strecke, Herzfrequenz, Tempo, Leistung, Distanz und Anstieg, damit andere Apps auf diesem Telefon sie nutzen können. Bearbeitest oder löschst du ein Training in Train, geschieht das dort auch.",
|
||||
"healthRationaleRead": "Train liest die Trainings anderer Apps erst, wenn du es einschaltest, und nur von den Apps, die du wählst: Ihre Herzfrequenz, Distanz und Leistung kommen als Trainings in Train, mit deinem Schlüssel versiegelt, bevor sie mit deiner Instanz abgeglichen werden, die sie nicht lesen kann.",
|
||||
"healthRationaleNothingElse": "Was Train dort liest, wird dir gezeigt und niemandem sonst, und für nichts anderes genutzt. Schaltest du einen Schalter aus oder nimmst eine Erlaubnis in Health Connect zurück, hört es auf."
|
||||
"healthRationaleNothingElse": "Was Train dort liest, wird dir gezeigt und niemandem sonst, und für nichts anderes genutzt. Schaltest du einen Schalter aus oder nimmst eine Erlaubnis in Health Connect zurück, hört es auf.",
|
||||
|
||||
"healthRead": "Von anderen Apps lesen",
|
||||
"healthReadHint": "Ihre Trainings kommen in Train, von den Apps, die du unten wählst",
|
||||
"healthApps": "Apps",
|
||||
"healthAppsEmpty": "Noch keine App hat Trainings in Health Connect geschrieben.",
|
||||
"workoutFromList": "von {app}",
|
||||
"workoutFrom": "Von {app}, über Health Connect",
|
||||
"workoutBringTrack": "Strecke holen",
|
||||
"workoutNoTrack": "Health Connect hat keine Strecke dazu gegeben."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -183,12 +183,25 @@
|
|||
"healthNeedsUpdate": "Update the Health Connect app to use it with Train.",
|
||||
"healthWrite": "Write my workouts",
|
||||
"healthWriteHint": "Every workout on this phone, kept up to date as you edit or delete it",
|
||||
"healthWriteRefused": "Health Connect took this back. Allow it there to turn it on again.",
|
||||
"healthTakenBack": "Health Connect took this back. Allow it there to turn it on again.",
|
||||
"healthRefused": "Health Connect didn't allow it. You can allow it in its settings.",
|
||||
"healthOpenSettings": "Open Health Connect",
|
||||
"healthWhy": "Why Train asks",
|
||||
"healthRationaleTitle": "Train and Health Connect",
|
||||
"healthRationaleWrite": "Train writes your workouts to Health Connect only once you turn it on: each one with its route, heart rate, speed, power, distance and climb, so that other apps on this phone can use them. A workout edited or deleted in Train is edited or deleted there too.",
|
||||
"healthRationaleRead": "Train reads other apps' workouts only once you turn it on, and only from the apps you choose: their heart rate, distance and power come into Train as workouts, sealed with your key before they're synced to your instance, which can't read them.",
|
||||
"healthRationaleNothingElse": "What Train reads there is shown to you and nobody else, and isn't used for anything else. Turning a switch off, or taking a permission back in Health Connect, stops it."
|
||||
"healthRationaleNothingElse": "What Train reads there is shown to you and nobody else, and isn't used for anything else. Turning a switch off, or taking a permission back in Health Connect, stops it.",
|
||||
|
||||
"healthRead": "Read from other apps",
|
||||
"healthReadHint": "Their workouts come into Train, from the apps you choose below",
|
||||
"healthApps": "Apps",
|
||||
"@healthApps": {"description": "Over the apps that wrote workouts to Health Connect, each with its switch."},
|
||||
"healthAppsEmpty": "No app has written workouts to Health Connect yet.",
|
||||
"workoutFromList": "from {app}",
|
||||
"@workoutFromList": {"description": "In the list, after when an imported workout was: the app it came from.", "placeholders": {"app": {"type": "String", "example": "Gadgetbridge"}}},
|
||||
"workoutFrom": "From {app}, through Health Connect",
|
||||
"@workoutFrom": {"description": "On an imported workout's page.", "placeholders": {"app": {"type": "String", "example": "Gadgetbridge"}}},
|
||||
"workoutBringTrack": "Bring in the track",
|
||||
"@workoutBringTrack": {"description": "On an imported workout's page: asks Health Connect for its route."},
|
||||
"workoutNoTrack": "Health Connect gave no track for it."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -862,11 +862,11 @@ abstract class AppLocalizations {
|
|||
/// **'Every workout on this phone, kept up to date as you edit or delete it'**
|
||||
String get healthWriteHint;
|
||||
|
||||
/// No description provided for @healthWriteRefused.
|
||||
/// No description provided for @healthTakenBack.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Health Connect took this back. Allow it there to turn it on again.'**
|
||||
String get healthWriteRefused;
|
||||
String get healthTakenBack;
|
||||
|
||||
/// No description provided for @healthRefused.
|
||||
///
|
||||
|
|
@ -909,6 +909,54 @@ abstract class AppLocalizations {
|
|||
/// In en, this message translates to:
|
||||
/// **'What Train reads there is shown to you and nobody else, and isn\'t used for anything else. Turning a switch off, or taking a permission back in Health Connect, stops it.'**
|
||||
String get healthRationaleNothingElse;
|
||||
|
||||
/// No description provided for @healthRead.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Read from other apps'**
|
||||
String get healthRead;
|
||||
|
||||
/// No description provided for @healthReadHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Their workouts come into Train, from the apps you choose below'**
|
||||
String get healthReadHint;
|
||||
|
||||
/// Over the apps that wrote workouts to Health Connect, each with its switch.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Apps'**
|
||||
String get healthApps;
|
||||
|
||||
/// No description provided for @healthAppsEmpty.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No app has written workouts to Health Connect yet.'**
|
||||
String get healthAppsEmpty;
|
||||
|
||||
/// In the list, after when an imported workout was: the app it came from.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'from {app}'**
|
||||
String workoutFromList(String app);
|
||||
|
||||
/// On an imported workout's page.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'From {app}, through Health Connect'**
|
||||
String workoutFrom(String app);
|
||||
|
||||
/// On an imported workout's page: asks Health Connect for its route.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Bring in the track'**
|
||||
String get workoutBringTrack;
|
||||
|
||||
/// No description provided for @workoutNoTrack.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Health Connect gave no track for it.'**
|
||||
String get workoutNoTrack;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
|
|
|||
|
|
@ -474,7 +474,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
'Jedes Training auf diesem Telefon, auf dem neuesten Stand, wenn du es bearbeitest oder löschst';
|
||||
|
||||
@override
|
||||
String get healthWriteRefused =>
|
||||
String get healthTakenBack =>
|
||||
'Health Connect hat das zurückgenommen. Erlaube es dort, um es wieder einzuschalten.';
|
||||
|
||||
@override
|
||||
|
|
@ -501,4 +501,34 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get healthRationaleNothingElse =>
|
||||
'Was Train dort liest, wird dir gezeigt und niemandem sonst, und für nichts anderes genutzt. Schaltest du einen Schalter aus oder nimmst eine Erlaubnis in Health Connect zurück, hört es auf.';
|
||||
|
||||
@override
|
||||
String get healthRead => 'Von anderen Apps lesen';
|
||||
|
||||
@override
|
||||
String get healthReadHint =>
|
||||
'Ihre Trainings kommen in Train, von den Apps, die du unten wählst';
|
||||
|
||||
@override
|
||||
String get healthApps => 'Apps';
|
||||
|
||||
@override
|
||||
String get healthAppsEmpty =>
|
||||
'Noch keine App hat Trainings in Health Connect geschrieben.';
|
||||
|
||||
@override
|
||||
String workoutFromList(String app) {
|
||||
return 'von $app';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutFrom(String app) {
|
||||
return 'Von $app, über Health Connect';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutBringTrack => 'Strecke holen';
|
||||
|
||||
@override
|
||||
String get workoutNoTrack => 'Health Connect hat keine Strecke dazu gegeben.';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -470,7 +470,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
'Every workout on this phone, kept up to date as you edit or delete it';
|
||||
|
||||
@override
|
||||
String get healthWriteRefused =>
|
||||
String get healthTakenBack =>
|
||||
'Health Connect took this back. Allow it there to turn it on again.';
|
||||
|
||||
@override
|
||||
|
|
@ -497,6 +497,36 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get healthRationaleNothingElse =>
|
||||
'What Train reads there is shown to you and nobody else, and isn\'t used for anything else. Turning a switch off, or taking a permission back in Health Connect, stops it.';
|
||||
|
||||
@override
|
||||
String get healthRead => 'Read from other apps';
|
||||
|
||||
@override
|
||||
String get healthReadHint =>
|
||||
'Their workouts come into Train, from the apps you choose below';
|
||||
|
||||
@override
|
||||
String get healthApps => 'Apps';
|
||||
|
||||
@override
|
||||
String get healthAppsEmpty =>
|
||||
'No app has written workouts to Health Connect yet.';
|
||||
|
||||
@override
|
||||
String workoutFromList(String app) {
|
||||
return 'from $app';
|
||||
}
|
||||
|
||||
@override
|
||||
String workoutFrom(String app) {
|
||||
return 'From $app, through Health Connect';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutBringTrack => 'Bring in the track';
|
||||
|
||||
@override
|
||||
String get workoutNoTrack => 'Health Connect gave no track for it.';
|
||||
}
|
||||
|
||||
/// The translations for English, as used in the United Kingdom (`en_GB`).
|
||||
|
|
|
|||
Loading…
Reference in a new issue