From 069621380256c5529bb7a68f00a530f7afc3c15f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Tue, 5 Dec 2023 17:02:09 +0100 Subject: [PATCH] Improve settings page --- android/gradle.properties | 4 +- assets/translations/en.json | 7 +- assets/translations/fr.json | 7 +- .../metadata/android/en-US/changelogs/46.txt | 1 + .../metadata/android/fr-FR/changelogs/46.txt | 1 + lib/ui/screens/settings.dart | 6 +- lib/ui/widgets/app_bar.dart | 4 +- lib/ui/widgets/app_titles.dart | 47 +++++++++++++ lib/ui/widgets/card_content.dart | 7 +- lib/ui/widgets/header_app.dart | 17 ----- lib/ui/widgets/settings_form.dart | 70 +++++++++---------- pubspec.yaml | 2 +- 12 files changed, 103 insertions(+), 70 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/46.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/46.txt create mode 100644 lib/ui/widgets/app_titles.dart delete mode 100644 lib/ui/widgets/header_app.dart diff --git a/android/gradle.properties b/android/gradle.properties index d6af5de..7d3ad5f 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.45 -app.versionCode=45 +app.versionName=0.0.46 +app.versionCode=46 diff --git a/assets/translations/en.json b/assets/translations/en.json index f56407b..39f4360 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -28,10 +28,11 @@ "settings_title": "Settings", "settings_label_username": "Username: ", "settings_label_security_token": "Security token: ", + "settings_title_days_count": "Days counts: ", "settings_label_discoveries_days_count": "Discoveries: ", - "settings_label_distribution_days_count": "Distributions : ", - "settings_label_statistics_recent_days_count": "Recent statistics: ", - "settings_label_timeline_days_count": "Timeline: ", + "settings_label_distribution_days_count": "Distributions (by day/hour) : ", + "settings_label_statistics_recent_days_count": "Statistics: ", + "settings_label_timeline_days_count": "Global timeline: ", "settings_label_top_artists_days_count": "Top Artists: ", "settings_button_save": "Save", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index f9d2d14..a6958bd 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -28,10 +28,11 @@ "settings_title": "Paramètres", "settings_label_username": "Utilisateur : ", "settings_label_security_token": "Jeton de sécurité : ", + "settings_title_days_count": "Nombre de jours : ", "settings_label_discoveries_days_count": "Découvertes : ", - "settings_label_distribution_days_count": "Répartitions : ", - "settings_label_statistics_recent_days_count": "Statistiques récentes : ", - "settings_label_timeline_days_count": "Timeline : ", + "settings_label_distribution_days_count": "Répartitions (par jour/heure) : ", + "settings_label_statistics_recent_days_count": "Statistiques : ", + "settings_label_timeline_days_count": "Timeline globale : ", "settings_label_top_artists_days_count": "Top Artistes : ", "settings_button_save": "Enregistrer", diff --git a/fastlane/metadata/android/en-US/changelogs/46.txt b/fastlane/metadata/android/en-US/changelogs/46.txt new file mode 100644 index 0000000..2e1b5ca --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/46.txt @@ -0,0 +1 @@ +Improve settings page. diff --git a/fastlane/metadata/android/fr-FR/changelogs/46.txt b/fastlane/metadata/android/fr-FR/changelogs/46.txt new file mode 100644 index 0000000..6ae7d0c --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/46.txt @@ -0,0 +1 @@ +Améliorations sur la page des paramètres. diff --git a/lib/ui/screens/settings.dart b/lib/ui/screens/settings.dart index 2dc9cec..f9eb4d6 100644 --- a/lib/ui/screens/settings.dart +++ b/lib/ui/screens/settings.dart @@ -1,6 +1,7 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; -import 'package:scrobbles/ui/widgets/header_app.dart'; +import 'package:scrobbles/ui/widgets/app_titles.dart'; import 'package:scrobbles/ui/widgets/settings_form.dart'; class ScreenSettings extends StatelessWidget { @@ -14,8 +15,9 @@ class ScreenSettings extends StatelessWidget { mainAxisSize: MainAxisSize.max, children: <Widget>[ SizedBox(height: 8), - AppHeader(text: 'settings_title'), + AppTitle1(text: tr('settings_title')), SizedBox(height: 8), + AppTitle2(text: tr('settings_title_days_count')), SettingsForm(), ], ); diff --git a/lib/ui/widgets/app_bar.dart b/lib/ui/widgets/app_bar.dart index 6db981e..1d9618a 100644 --- a/lib/ui/widgets/app_bar.dart +++ b/lib/ui/widgets/app_bar.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:unicons/unicons.dart'; -import 'package:scrobbles/ui/widgets/header_app.dart'; +import 'package:scrobbles/ui/widgets/app_titles.dart'; class StandardAppBar extends StatelessWidget implements PreferredSizeWidget { final Function() notifyParent; @@ -11,7 +11,7 @@ class StandardAppBar extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { return AppBar( - title: const AppHeader(text: 'app_name'), + title: const AppTitle(text: 'app_name'), actions: [ IconButton( onPressed: () { diff --git a/lib/ui/widgets/app_titles.dart b/lib/ui/widgets/app_titles.dart new file mode 100644 index 0000000..9354124 --- /dev/null +++ b/lib/ui/widgets/app_titles.dart @@ -0,0 +1,47 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; + +class AppTitle extends StatelessWidget { + const AppTitle({super.key, required this.text}); + + final String text; + + @override + Widget build(BuildContext context) { + return Text( + tr(text), + textAlign: TextAlign.start, + style: Theme.of(context).textTheme.headlineLarge!.apply(fontWeightDelta: 2), + ); + } +} + +class AppTitle1 extends StatelessWidget { + const AppTitle1({super.key, required this.text}); + + final String text; + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.start, + style: Theme.of(context).textTheme.titleLarge!.apply(fontWeightDelta: 2), + ); + } +} + +class AppTitle2 extends StatelessWidget { + const AppTitle2({super.key, required this.text}); + + final String text; + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.start, + style: Theme.of(context).textTheme.titleMedium!.apply(fontWeightDelta: 2), + ); + } +} diff --git a/lib/ui/widgets/card_content.dart b/lib/ui/widgets/card_content.dart index 46d6970..b69b7e8 100644 --- a/lib/ui/widgets/card_content.dart +++ b/lib/ui/widgets/card_content.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:scrobbles/ui/widgets/app_titles.dart'; class CardContent extends StatelessWidget { const CardContent({ @@ -35,11 +36,7 @@ class CardContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - Text( - this.title, - style: - Theme.of(context).primaryTextTheme.titleLarge!.apply(fontWeightDelta: 2), - ), + AppTitle1(text: this.title), this.loader, ], ), diff --git a/lib/ui/widgets/header_app.dart b/lib/ui/widgets/header_app.dart deleted file mode 100644 index 77b015b..0000000 --- a/lib/ui/widgets/header_app.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; - -class AppHeader extends StatelessWidget { - const AppHeader({super.key, required this.text}); - - final String text; - - @override - Widget build(BuildContext context) { - return Text( - tr(text), - textAlign: TextAlign.start, - style: Theme.of(context).textTheme.headlineMedium!.apply(fontWeightDelta: 2), - ); - } -} diff --git a/lib/ui/widgets/settings_form.dart b/lib/ui/widgets/settings_form.dart index 1046f86..4c981f2 100644 --- a/lib/ui/widgets/settings_form.dart +++ b/lib/ui/widgets/settings_form.dart @@ -101,121 +101,121 @@ class _SettingsFormState extends State<SettingsForm> { // ), // SizedBox(height: 20), - // Discoveries + // Statistics (recent) Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_discoveries_days_count').tr(), + Text('settings_label_statistics_recent_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { - discoveriesDaysCount = DefaultSettings.allowedValues[index]; - for (int i = 0; i < _selectedDiscoveriesDaysCount.length; i++) { - _selectedDiscoveriesDaysCount[i] = i == index; + statisticsRecentDaysCount = DefaultSettings.allowedValues[index]; + for (int i = 0; i < _selectedStatisticsRecentDaysCount.length; i++) { + _selectedStatisticsRecentDaysCount[i] = i == index; } }); saveSettings(); }, borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), - isSelected: _selectedDiscoveriesDaysCount, + isSelected: _selectedStatisticsRecentDaysCount, children: DefaultSettings.allowedValues.map((e) => Text(e.toString())).toList(), ), ], ), - // Distribution by day/hour + heatmap + // Timeline Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_distribution_days_count').tr(), + Text('settings_label_timeline_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { - distributionDaysCount = DefaultSettings.allowedValues[index]; - for (int i = 0; i < _selectedDistributionDaysCount.length; i++) { - _selectedDistributionDaysCount[i] = i == index; + timelineDaysCount = DefaultSettings.allowedValues[index]; + for (int i = 0; i < _selectedTimelineDaysCount.length; i++) { + _selectedTimelineDaysCount[i] = i == index; } }); saveSettings(); }, borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), - isSelected: _selectedDistributionDaysCount, + isSelected: _selectedTimelineDaysCount, children: DefaultSettings.allowedValues.map((e) => Text(e.toString())).toList(), ), ], ), - // Statistics (recent) + // Top Artists Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_statistics_recent_days_count').tr(), + Text('settings_label_top_artists_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { - statisticsRecentDaysCount = DefaultSettings.allowedValues[index]; - for (int i = 0; i < _selectedStatisticsRecentDaysCount.length; i++) { - _selectedStatisticsRecentDaysCount[i] = i == index; + topArtistsDaysCount = DefaultSettings.allowedValues[index]; + for (int i = 0; i < _selectedTopArtistsDaysCount.length; i++) { + _selectedTopArtistsDaysCount[i] = i == index; } }); saveSettings(); }, borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), - isSelected: _selectedStatisticsRecentDaysCount, + isSelected: _selectedTopArtistsDaysCount, children: DefaultSettings.allowedValues.map((e) => Text(e.toString())).toList(), ), ], ), - // Timeline + // Discoveries Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_timeline_days_count').tr(), + Text('settings_label_discoveries_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { - timelineDaysCount = DefaultSettings.allowedValues[index]; - for (int i = 0; i < _selectedTimelineDaysCount.length; i++) { - _selectedTimelineDaysCount[i] = i == index; + discoveriesDaysCount = DefaultSettings.allowedValues[index]; + for (int i = 0; i < _selectedDiscoveriesDaysCount.length; i++) { + _selectedDiscoveriesDaysCount[i] = i == index; } }); saveSettings(); }, borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), - isSelected: _selectedTimelineDaysCount, + isSelected: _selectedDiscoveriesDaysCount, children: DefaultSettings.allowedValues.map((e) => Text(e.toString())).toList(), ), ], ), - // Top Artists + // Distribution by day/hour + heatmap Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_top_artists_days_count').tr(), + Text('settings_label_distribution_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { - topArtistsDaysCount = DefaultSettings.allowedValues[index]; - for (int i = 0; i < _selectedTopArtistsDaysCount.length; i++) { - _selectedTopArtistsDaysCount[i] = i == index; + distributionDaysCount = DefaultSettings.allowedValues[index]; + for (int i = 0; i < _selectedDistributionDaysCount.length; i++) { + _selectedDistributionDaysCount[i] = i == index; } }); saveSettings(); }, borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), - isSelected: _selectedTopArtistsDaysCount, + isSelected: _selectedDistributionDaysCount, children: DefaultSettings.allowedValues.map((e) => Text(e.toString())).toList(), ), ], diff --git a/pubspec.yaml b/pubspec.yaml index 2c08e0d..52dd805 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Display scrobbles data and charts publish_to: 'none' -version: 0.0.45+45 +version: 0.0.46+46 environment: sdk: '^3.0.0' -- GitLab