diff --git a/firka/assets/majesticons/wrenchSolid.svg b/firka/assets/majesticons/wrenchSolid.svg new file mode 100644 index 00000000..d0776b38 --- /dev/null +++ b/firka/assets/majesticons/wrenchSolid.svg @@ -0,0 +1,3 @@ + + + diff --git a/firka/lib/helpers/extensions.dart b/firka/lib/helpers/extensions.dart index 038f23d7..a7d6a388 100644 --- a/firka/lib/helpers/extensions.dart +++ b/firka/lib/helpers/extensions.dart @@ -42,7 +42,8 @@ enum FormatMode { da, dd, yyyymmddwedd, - yyyymmmm + yyyymmmm, + yyyymmddhhmmss } enum Cycle { morning, day, afternoon, night } @@ -56,7 +57,7 @@ extension DateExtension on DateTime { var yesterday = today.subtract(Duration(days: 1)); var yesterdayLim = today.subtract(Duration(days: 2)); - var weekStart = today.subtract(Duration(days: today.weekday - 1)); + var weekStart = subtract(Duration(days: weekday - 1)); var weekEnd = weekStart.add(Duration(days: 6)); switch (mode) { @@ -91,6 +92,8 @@ extension DateExtension on DateTime { return "${DateFormat('yyyy MMM. dd').format(weekStart).toLowerCase()}-${DateFormat('dd').format(weekEnd)}"; case FormatMode.yyyymmmm: return DateFormat('yyyy MMMM').format(this); + case FormatMode.yyyymmddhhmmss: + return DateFormat('yyyy-MM-dd hh:mm:ss').format(this); } } diff --git a/firka/lib/helpers/settings/setting.dart b/firka/lib/helpers/settings/setting.dart index 5072b9df..488382a6 100644 --- a/firka/lib/helpers/settings/setting.dart +++ b/firka/lib/helpers/settings/setting.dart @@ -31,6 +31,8 @@ const ttToastLessonNo = 1012; const ttToastTestsAndHw = 1013; const ttToastBreaks = 1014; +const statsForNerds = 1015; + bool always() { return true; } @@ -226,6 +228,13 @@ class SettingsStore { isAndroid), }), always), + "stats_for_nerds": SettingsBoolean( + statsForNerds, + FirkaIconType.majesticonsLocal, + "wrenchSolid", + l10n.s_stats_for_nerds, + false, + always), "notifications": SettingsSubGroup(0, FirkaIconType.majesticons, Majesticon.bellSolid, "Értesítések", LinkedHashMap.of({}), never), "extras": SettingsSubGroup( diff --git a/firka/lib/l10n b/firka/lib/l10n index e69d8c37..45576403 160000 --- a/firka/lib/l10n +++ b/firka/lib/l10n @@ -1 +1 @@ -Subproject commit e69d8c372301fa7a68f5017747658095b02aec2a +Subproject commit 45576403397d46c575e0aaff88ecf0d510b069ab diff --git a/firka/lib/ui/phone/widgets/lesson.dart b/firka/lib/ui/phone/widgets/lesson.dart index 3efd0b61..8f87e38c 100644 --- a/firka/lib/ui/phone/widgets/lesson.dart +++ b/firka/lib/ui/phone/widgets/lesson.dart @@ -1,7 +1,6 @@ import 'package:firka/helpers/extensions.dart'; import 'package:firka/helpers/settings/setting.dart'; import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/l10n/app_localizations.dart'; import 'package:firka/main.dart'; import 'package:firka/ui/model/style.dart'; import 'package:flutter/material.dart'; @@ -48,7 +47,7 @@ class LessonWidget extends StatelessWidget { elements.add(GestureDetector( onTap: () { showLessonBottomSheet( - context, data.l10n, lesson, lessonNo, accent, secondary, bgColor); + context, data, lesson, lessonNo, accent, secondary, bgColor); }, child: FirkaCard( left: [ @@ -179,12 +178,14 @@ class LessonWidget extends StatelessWidget { void showLessonBottomSheet( BuildContext context, - AppLocalizations l10n, + AppInitialization data, Lesson lesson, int? lessonNo, Color accent, Color secondary, Color bgColor) { + final statsForNerdsEnabled = + data.settings.group("settings").boolean("stats_for_nerds"); showModalBottomSheet( context: context, elevation: 100, @@ -193,9 +194,22 @@ void showLessonBottomSheet( backgroundColor: Colors.transparent, barrierColor: appStyle.colors.a15p, constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.3, + maxHeight: MediaQuery.of(context).size.height * + (statsForNerdsEnabled ? 0.35 : 0.3), ), builder: (BuildContext context) { + Widget statsForNerds = SizedBox(); + + final y2k = DateTime(2000, 1); + + if (statsForNerdsEnabled) { + final stats = + "${data.l10n.stats_date}: ${lesson.start.isAfter(y2k) ? lesson.start.format(data.l10n, FormatMode.yyyymmddhhmmss) : "N/A"}\n" + "${data.l10n.stats_created_at}: ${lesson.createdAt.isAfter(y2k) ? lesson.createdAt.format(data.l10n, FormatMode.yyyymmddhhmmss) : "N/A"}\n" + "${data.l10n.stats_last_mod}: ${lesson.lastModifiedAt.isAfter(y2k) ? lesson.lastModifiedAt.format(data.l10n, FormatMode.yyyymmddhhmmss) : "N/A"}"; + statsForNerds = Text(stats, style: appStyle.fonts.B_16R); + } + return Stack( children: [ Positioned.fill( @@ -262,7 +276,7 @@ void showLessonBottomSheet( .apply(color: appStyle.colors.textPrimary), ), Text( - '${lesson.start.format(l10n, FormatMode.hmm)} - ${lesson.end.format(l10n, FormatMode.hmm)}', + '${lesson.start.format(data.l10n, FormatMode.hmm)} - ${lesson.end.format(data.l10n, FormatMode.hmm)}', style: appStyle.fonts.B_14R .apply(color: appStyle.colors.textPrimary), ), @@ -275,14 +289,16 @@ void showLessonBottomSheet( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - l10n.lesson_subject, + data.l10n.lesson_subject, style: appStyle.fonts.H_14px, ), SizedBox(height: 4), Text( lesson.theme ?? 'N/A', style: appStyle.fonts.B_16R, - ) + ), + SizedBox(height: 4), + statsForNerds ], ) ])