diff --git a/android/gradle.properties b/android/gradle.properties index d6af5de7dd3b01541eb540fa8dfd4d0caed97461..7d3ad5fb1ba80989d0c88e55ec415fdc9f5d25f7 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 f56407bb0e040ae843bd5078573116c48885a23e..39f43601fb669841ab7db6ae1e9445dedd33d60b 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 f9d2d14591516b4a112a53284bf1864eb5345744..a6958bd9756fabc8972be9d3899b09d901b17b42 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 0000000000000000000000000000000000000000..2e1b5ca65ce7a1a53b8b92dfe5994807d83e7b05 --- /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 0000000000000000000000000000000000000000..6ae7d0cf7efea56008ff064109499000ec8b1309 --- /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 2dc9cec7f67713bf5f6f966eca30dbc60dc7442d..f9eb4d62a48c4f589ddd6072e6f86978798489aa 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 6db981e1ee2ba1a0c98cb52e6f5605586a6ff371..1d9618a0ce950fe41c4e10a74f8ddc8ac1b62f54 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 0000000000000000000000000000000000000000..93541243613b0f20e76485520a275d1527a6fcc9 --- /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 46d69709f7ad1d383c129caf709fae1b800e1ebd..b69b7e891fe6b278cdb3fad8da187b79b1486123 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 77b015bc6cb8712734f5383ca58cd818e0a51f0f..0000000000000000000000000000000000000000 --- 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 1046f865b4a878a013c381f2edf7fb9b0d3be187..4c981f2a865ced49e465e2227bb5572e7aae3575 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 2c08e0d227690f4817b8b00f3e465e59e4c8eaf2..52dd8059a04abbbe1d820cc4c745106bb79c0740 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'