feat(learn): pick up learning on Home, the studysets studied latest first, and Progress closer to Vaia's

Home gets a widget of its own, Pick up learning, below the goal: the
studysets at the top of the library that were studied, the one rated last
first, so one studied long ago sinks. Three show, the others behind Show
more. Each shows its name, which opens it, how much is learnt, when it was
last studied, and today's task (cards to review, new cards to learn), which
starts studying it, outlined while reviews wait. The progress is the
library's, worked out once for every screen; when each was last studied
comes from the reviews Home reads anyway. With nothing studied it takes no
room.

A dashboard arranged before it gets the widget below the goal, wherever
the goal is: a widget a layout misses now goes after the one before it in
a new dashboard, no longer at the end.

On a studyset's Progress, the tiles are filled without an outline, To
review has a history icon (amber while cards are due), the learnt bar is
thicker, and the exam follows the figures, as Vaia asks for its date
there: an invitation to choose it, opening the study plan's sheet, or,
once chosen, how ready the person is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-02 09:03:05 +01:00
commit a0bb75f1ad
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
5 changed files with 976 additions and 40 deletions

View file

@ -1380,6 +1380,16 @@
"readerCaptureFailed": "Die Seite konnte nicht dargestellt werden. Versuche es erneut, sobald sie geladen ist.",
"readerScreenshotSaved": "Bildschirmfoto gespeichert",
"imageOpenPdfPage": "PDF auf dieser Seite öffnen",
"homeWidgetPickUp": "Weiterlernen",
"homePickUpPlaceholder": "Die Lernsets, die du lernst, das zuletzt gelernte zuerst",
"homePickUpStudied": "{days, plural, =0{Heute gelernt} =1{Gestern gelernt} other{Vor {days} Tagen gelernt}}",
"homePickUpLearned": "{percent} % gelernt",
"homePickUpReview": "{count, plural, =1{1 Karte wiederholen} other{{count} Karten wiederholen}}",
"homePickUpLearn": "{count, plural, =1{1 neue Karte lernen} other{{count} neue Karten lernen}}",
"homePickUpReviewAndLearn": "{reviews} wiederholen, {fresh} neue lernen",
"homePickUpDone": "Heute nichts fällig",
"homePickUpMore": "{count} weitere zeigen",
"homePickUpFewer": "Weniger zeigen",
"homeWidgetDeadlines": "PDF-Lesefristen",
"deadlinesTitle": "Lesefristen",
"deadlinesCurrent": "Aktuell",
@ -1953,6 +1963,9 @@
"progressToReview": "Zu wiederholen",
"progressToReviewInfo": "Schon gelernte Karten, die heute wieder fällig sind.",
"progressDueToday": "{count, plural, =1{Karte heute fällig} other{Karten heute fällig}}",
"progressExamTitle": "Bereitest du dich auf eine Prüfung vor?",
"progressExamHint": "Wähle sie und ihr Datum, um zu sehen, wie bereit du bist.",
"progressExamChoose": "Prüfung wählen",
"progressStudyTime": "Lernzeit",
"progressStudyTimeInfo": "Wie lange du die Karteikarten dieses Lernsets in den letzten sieben Tagen gelernt hast, jede Karte höchstens eine Minute gezählt.",
"progressThisWeek": "diese Woche",

View file

@ -1577,6 +1577,22 @@
"readerCaptureFailed": "The page couldn't be drawn. Try again once it has loaded.",
"readerScreenshotSaved": "Screenshot saved",
"imageOpenPdfPage": "Open the PDF at this page",
"homeWidgetPickUp": "Pick up learning",
"homePickUpPlaceholder": "The studysets you study, the latest first",
"homePickUpStudied": "{days, plural, =0{Studied today} =1{Studied yesterday} other{Studied {days} days ago}}",
"@homePickUpStudied": {"placeholders": {"days": {"type": "int"}}},
"homePickUpLearned": "{percent} % learned",
"@homePickUpLearned": {"placeholders": {"percent": {"type": "int"}}},
"homePickUpReview": "{count, plural, =1{Review 1 card} other{Review {count} cards}}",
"@homePickUpReview": {"placeholders": {"count": {"type": "int"}}},
"homePickUpLearn": "{count, plural, =1{Learn 1 new card} other{Learn {count} new cards}}",
"@homePickUpLearn": {"placeholders": {"count": {"type": "int"}}},
"homePickUpReviewAndLearn": "Review {reviews}, learn {fresh} new",
"@homePickUpReviewAndLearn": {"placeholders": {"reviews": {"type": "int"}, "fresh": {"type": "int"}}},
"homePickUpDone": "Nothing due today",
"homePickUpMore": "Show {count} more",
"@homePickUpMore": {"placeholders": {"count": {"type": "int"}}},
"homePickUpFewer": "Show fewer",
"homeWidgetDeadlines": "PDF reading deadlines",
"deadlinesTitle": "Reading deadlines",
"deadlinesCurrent": "Current",
@ -2329,6 +2345,9 @@
"progressToReviewInfo": "Cards studied before that are due again today.",
"progressDueToday": "{count, plural, =1{card due today} other{cards due today}}",
"@progressDueToday": {"placeholders": {"count": {"type": "int"}}},
"progressExamTitle": "Preparing for an exam?",
"progressExamHint": "Choose it and its date to see how ready you are.",
"progressExamChoose": "Choose the exam",
"progressStudyTime": "Study time",
"progressStudyTimeInfo": "How long you studied this studyset's flashcards in the last seven days, each card counted for at most a minute.",
"progressThisWeek": "this week",

View file

@ -8140,6 +8140,66 @@ abstract class AppLocalizations {
/// **'Open the PDF at this page'**
String get imageOpenPdfPage;
/// No description provided for @homeWidgetPickUp.
///
/// In en, this message translates to:
/// **'Pick up learning'**
String get homeWidgetPickUp;
/// No description provided for @homePickUpPlaceholder.
///
/// In en, this message translates to:
/// **'The studysets you study, the latest first'**
String get homePickUpPlaceholder;
/// No description provided for @homePickUpStudied.
///
/// In en, this message translates to:
/// **'{days, plural, =0{Studied today} =1{Studied yesterday} other{Studied {days} days ago}}'**
String homePickUpStudied(int days);
/// No description provided for @homePickUpLearned.
///
/// In en, this message translates to:
/// **'{percent} % learned'**
String homePickUpLearned(int percent);
/// No description provided for @homePickUpReview.
///
/// In en, this message translates to:
/// **'{count, plural, =1{Review 1 card} other{Review {count} cards}}'**
String homePickUpReview(int count);
/// No description provided for @homePickUpLearn.
///
/// In en, this message translates to:
/// **'{count, plural, =1{Learn 1 new card} other{Learn {count} new cards}}'**
String homePickUpLearn(int count);
/// No description provided for @homePickUpReviewAndLearn.
///
/// In en, this message translates to:
/// **'Review {reviews}, learn {fresh} new'**
String homePickUpReviewAndLearn(int reviews, int fresh);
/// No description provided for @homePickUpDone.
///
/// In en, this message translates to:
/// **'Nothing due today'**
String get homePickUpDone;
/// No description provided for @homePickUpMore.
///
/// In en, this message translates to:
/// **'Show {count} more'**
String homePickUpMore(int count);
/// No description provided for @homePickUpFewer.
///
/// In en, this message translates to:
/// **'Show fewer'**
String get homePickUpFewer;
/// No description provided for @homeWidgetDeadlines.
///
/// In en, this message translates to:
@ -11534,6 +11594,24 @@ abstract class AppLocalizations {
/// **'{count, plural, =1{card due today} other{cards due today}}'**
String progressDueToday(int count);
/// No description provided for @progressExamTitle.
///
/// In en, this message translates to:
/// **'Preparing for an exam?'**
String get progressExamTitle;
/// No description provided for @progressExamHint.
///
/// In en, this message translates to:
/// **'Choose it and its date to see how ready you are.'**
String get progressExamHint;
/// No description provided for @progressExamChoose.
///
/// In en, this message translates to:
/// **'Choose the exam'**
String get progressExamChoose;
/// No description provided for @progressStudyTime.
///
/// In en, this message translates to:

View file

@ -5006,6 +5006,68 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get imageOpenPdfPage => 'PDF auf dieser Seite öffnen';
@override
String get homeWidgetPickUp => 'Weiterlernen';
@override
String get homePickUpPlaceholder =>
'Die Lernsets, die du lernst, das zuletzt gelernte zuerst';
@override
String homePickUpStudied(int days) {
String _temp0 = intl.Intl.pluralLogic(
days,
locale: localeName,
other: 'Vor $days Tagen gelernt',
one: 'Gestern gelernt',
zero: 'Heute gelernt',
);
return '$_temp0';
}
@override
String homePickUpLearned(int percent) {
return '$percent % gelernt';
}
@override
String homePickUpReview(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Karten wiederholen',
one: '1 Karte wiederholen',
);
return '$_temp0';
}
@override
String homePickUpLearn(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count neue Karten lernen',
one: '1 neue Karte lernen',
);
return '$_temp0';
}
@override
String homePickUpReviewAndLearn(int reviews, int fresh) {
return '$reviews wiederholen, $fresh neue lernen';
}
@override
String get homePickUpDone => 'Heute nichts fällig';
@override
String homePickUpMore(int count) {
return '$count weitere zeigen';
}
@override
String get homePickUpFewer => 'Weniger zeigen';
@override
String get homeWidgetDeadlines => 'PDF-Lesefristen';
@ -7301,6 +7363,16 @@ class AppLocalizationsDe extends AppLocalizations {
return '$_temp0';
}
@override
String get progressExamTitle => 'Bereitest du dich auf eine Prüfung vor?';
@override
String get progressExamHint =>
'Wähle sie und ihr Datum, um zu sehen, wie bereit du bist.';
@override
String get progressExamChoose => 'Prüfung wählen';
@override
String get progressStudyTime => 'Lernzeit';

View file

@ -4959,6 +4959,68 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get imageOpenPdfPage => 'Open the PDF at this page';
@override
String get homeWidgetPickUp => 'Pick up learning';
@override
String get homePickUpPlaceholder =>
'The studysets you study, the latest first';
@override
String homePickUpStudied(int days) {
String _temp0 = intl.Intl.pluralLogic(
days,
locale: localeName,
other: 'Studied $days days ago',
one: 'Studied yesterday',
zero: 'Studied today',
);
return '$_temp0';
}
@override
String homePickUpLearned(int percent) {
return '$percent % learned';
}
@override
String homePickUpReview(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Review $count cards',
one: 'Review 1 card',
);
return '$_temp0';
}
@override
String homePickUpLearn(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Learn $count new cards',
one: 'Learn 1 new card',
);
return '$_temp0';
}
@override
String homePickUpReviewAndLearn(int reviews, int fresh) {
return 'Review $reviews, learn $fresh new';
}
@override
String get homePickUpDone => 'Nothing due today';
@override
String homePickUpMore(int count) {
return 'Show $count more';
}
@override
String get homePickUpFewer => 'Show fewer';
@override
String get homeWidgetDeadlines => 'PDF reading deadlines';
@ -7233,6 +7295,16 @@ class AppLocalizationsEn extends AppLocalizations {
return '$_temp0';
}
@override
String get progressExamTitle => 'Preparing for an exam?';
@override
String get progressExamHint =>
'Choose it and its date to see how ready you are.';
@override
String get progressExamChoose => 'Choose the exam';
@override
String get progressStudyTime => 'Study time';