From c455d09e366c05e822c0c1dc571a8eb8c2e31200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Sat, 16 Nov 2024 15:17:37 +0100 Subject: [PATCH] Use ActivityParameters widgets from flutter_custom_toolbox --- .../metadata/android/en-US/changelogs/69.txt | 1 + .../metadata/android/fr-FR/changelogs/69.txt | 1 + lib/common/config/activity_page.dart | 37 ++- lib/common/ui/settings/settings_form.dart | 235 ++++++++---------- lib/config/application_config.dart | 103 +++++++- lib/config/default_activity_settings.dart | 28 --- lib/config/default_global_settings.dart | 60 ----- lib/cubit/activity/activity_cubit.dart | 14 +- .../activity/data_counts_by_day_cubit.dart | 8 +- .../activity/data_counts_by_hour_cubit.dart | 8 +- .../activity/data_discoveries_cubit.dart | 8 +- lib/cubit/activity/data_heatmap_cubit.dart | 8 +- .../activity/data_new_artists_cubit.dart | 7 +- lib/cubit/activity/data_new_tracks_cubit.dart | 7 +- .../data_statistics_recent_cubit.dart | 8 +- lib/cubit/activity/data_timeline_cubit.dart | 7 +- .../activity/data_top_artists_cubit.dart | 8 +- .../settings/settings_activity_cubit.dart | 62 ----- .../settings/settings_activity_state.dart | 15 -- lib/cubit/settings/settings_global_cubit.dart | 116 --------- lib/cubit/settings/settings_global_state.dart | 51 ---- lib/main.dart | 11 +- lib/models/activity/activity.dart | 17 +- lib/models/settings/settings_activity.dart | 42 ---- lib/models/settings/settings_global.dart | 42 ---- lib/ui/widgets/cards/counts_by_day.dart | 8 +- lib/ui/widgets/cards/counts_by_hour.dart | 8 +- lib/ui/widgets/cards/discoveries.dart | 8 +- lib/ui/widgets/cards/heatmap.dart | 8 +- lib/ui/widgets/cards/statistics_recent.dart | 8 +- lib/ui/widgets/cards/timeline.dart | 7 +- lib/ui/widgets/cards/top_artists.dart | 8 +- pubspec.lock | 6 +- pubspec.yaml | 4 +- 34 files changed, 336 insertions(+), 633 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/69.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/69.txt delete mode 100644 lib/config/default_activity_settings.dart delete mode 100644 lib/config/default_global_settings.dart delete mode 100644 lib/cubit/settings/settings_activity_cubit.dart delete mode 100644 lib/cubit/settings/settings_activity_state.dart delete mode 100644 lib/cubit/settings/settings_global_cubit.dart delete mode 100644 lib/cubit/settings/settings_global_state.dart delete mode 100644 lib/models/settings/settings_activity.dart delete mode 100644 lib/models/settings/settings_global.dart diff --git a/fastlane/metadata/android/en-US/changelogs/69.txt b/fastlane/metadata/android/en-US/changelogs/69.txt new file mode 100644 index 0000000..c20ed39 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/69.txt @@ -0,0 +1 @@ +Use ActivityParameters widgets from flutter_custom_toolbox. diff --git a/fastlane/metadata/android/fr-FR/changelogs/69.txt b/fastlane/metadata/android/fr-FR/changelogs/69.txt new file mode 100644 index 0000000..f732ebd --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/69.txt @@ -0,0 +1 @@ +Utilisation des widgets ActivityParameters de flutter_custom_toolbox. diff --git a/lib/common/config/activity_page.dart b/lib/common/config/activity_page.dart index 79141eb..7af76c4 100644 --- a/lib/common/config/activity_page.dart +++ b/lib/common/config/activity_page.dart @@ -1,19 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:ionicons/ionicons.dart'; import 'package:scrobbles/common/ui/pages/discoveries.dart'; import 'package:scrobbles/common/ui/pages/home.dart'; import 'package:scrobbles/common/ui/pages/statistics.dart'; +import 'package:scrobbles/cubit/activity/activity_cubit.dart'; +import 'package:scrobbles/models/activity/activity.dart'; class ActivityPageItem { final String code; final Icon icon; - final Widget page; + final Widget Function({required Activity currentActivity})? builder; const ActivityPageItem({ required this.code, required this.icon, - required this.page, + required this.builder, }); } @@ -21,24 +24,30 @@ class ActivityPage { static const bool displayBottomNavBar = false; static const indexHome = 0; - static const pageHome = ActivityPageItem( + static final ActivityPageItem pageHome = ActivityPageItem( code: 'page_home', icon: Icon(Ionicons.home_outline), - page: PageHome(), + builder: ({required Activity currentActivity}) { + return PageHome(); + }, ); static const indexDiscoveries = 1; - static const pageDiscoveries = ActivityPageItem( + static final ActivityPageItem pageDiscoveries = ActivityPageItem( code: 'page_discoveries', icon: Icon(Ionicons.star_outline), - page: PageDiscoveries(), + builder: ({required Activity currentActivity}) { + return PageDiscoveries(); + }, ); static const indexStatistics = 2; - static const pageStatistics = ActivityPageItem( + static final ActivityPageItem pageStatistics = ActivityPageItem( code: 'page_statistics', icon: Icon(Ionicons.bar_chart_outline), - page: PageStatistics(), + builder: ({required Activity currentActivity}) { + return PageStatistics(); + }, ); static Map<int, ActivityPageItem> items = { @@ -54,6 +63,16 @@ class ActivityPage { } static Widget getWidget(int pageIndex) { - return items[pageIndex]?.page ?? pageHome.page; + return BlocBuilder<ActivityCubit, ActivityState>( + builder: (BuildContext context, ActivityState activityState) { + final Activity currentActivity = activityState.currentActivity; + + if (items.keys.contains(pageIndex)) { + return items[pageIndex]?.builder!(currentActivity: currentActivity) ?? Text('oups'); + } else { + return getWidget(defaultPageIndex); + } + }, + ); } } diff --git a/lib/common/ui/settings/settings_form.dart b/lib/common/ui/settings/settings_form.dart index 40dca8d..83acf81 100644 --- a/lib/common/ui/settings/settings_form.dart +++ b/lib/common/ui/settings/settings_form.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/config/default_global_settings.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; class SettingsForm extends StatefulWidget { const SettingsForm({super.key}); @@ -12,84 +11,100 @@ class SettingsForm extends StatefulWidget { } class _SettingsFormState extends State<SettingsForm> { - final usernameController = TextEditingController(); - final securityTokenController = TextEditingController(); + String discoveriesDaysCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeDiscoveriesDaysCount) + .defaultValue; + String distributionDaysCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeDistributionDaysCount) + .defaultValue; + String statisticsRecentDaysCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeStatisticsRecentDaysCount) + .defaultValue; + String timelineDaysCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeTimelineDaysCount) + .defaultValue; + String topArtistsDaysCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeTopArtistsDaysCount) + .defaultValue; + String newArtistsCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeNewArtistsCount) + .defaultValue; + String newTracksCount = ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeNewTracksCount) + .defaultValue; - int discoveriesDaysCount = DefaultGlobalSettings.defaultDiscoveriesDaysCount; - int distributionDaysCount = DefaultGlobalSettings.defaultDistributionDaysCount; - int statisticsRecentDaysCount = DefaultGlobalSettings.defaultStatisticsRecentDaysCount; - int timelineDaysCount = DefaultGlobalSettings.defaultTimelineDaysCount; - int topArtistsDaysCount = DefaultGlobalSettings.defaultTopArtistsDaysCount; - int newArtistsCount = DefaultGlobalSettings.defaultNewArtistsCount; - int newTracksCount = DefaultGlobalSettings.defaultNewTracksCount; - - List<bool> _selectedDiscoveriesDaysCount = []; - List<bool> _selectedDistributionDaysCount = []; - List<bool> _selectedStatisticsRecentDaysCount = []; - List<bool> _selectedTimelineDaysCount = []; - List<bool> _selectedTopArtistsDaysCount = []; - List<bool> _selectedNewArtistsCount = []; - List<bool> _selectedNewTracksCount = []; + final List<bool> _selectedDiscoveriesDaysCount = []; + final List<bool> _selectedDistributionDaysCount = []; + final List<bool> _selectedStatisticsRecentDaysCount = []; + final List<bool> _selectedTimelineDaysCount = []; + final List<bool> _selectedTopArtistsDaysCount = []; + final List<bool> _selectedNewArtistsCount = []; + final List<bool> _selectedNewTracksCount = []; @override void didChangeDependencies() { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; - usernameController.text = settings.getUsername(); - securityTokenController.text = settings.getSecurityToken(); + discoveriesDaysCount = settings.get(ApplicationConfig.parameterCodeDiscoveriesDaysCount); + distributionDaysCount = settings.get(ApplicationConfig.parameterCodeDistributionDaysCount); + statisticsRecentDaysCount = + settings.get(ApplicationConfig.parameterCodeStatisticsRecentDaysCount); + timelineDaysCount = settings.get(ApplicationConfig.parameterCodeTimelineDaysCount); + topArtistsDaysCount = settings.get(ApplicationConfig.parameterCodeTopArtistsDaysCount); + newArtistsCount = settings.get(ApplicationConfig.parameterCodeNewArtistsCount); + newTracksCount = settings.get(ApplicationConfig.parameterCodeNewTracksCount); - discoveriesDaysCount = settings.getDiscoveriesDaysCount(); - distributionDaysCount = settings.getDistributionDaysCount(); - statisticsRecentDaysCount = settings.getStatisticsRecentDaysCount(); - timelineDaysCount = settings.getTimelineDaysCount(); - topArtistsDaysCount = settings.getTopArtistsDaysCount(); - newArtistsCount = settings.getNewArtistsCount(); - newTracksCount = settings.getNewTracksCount(); + _selectedDiscoveriesDaysCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) { + _selectedDiscoveriesDaysCount.add(parameterItemValue.value == discoveriesDaysCount); + } - _selectedDiscoveriesDaysCount = DefaultGlobalSettings.allowedDaysCountValues - .map((e) => (e == discoveriesDaysCount)) - .toList(); - _selectedDistributionDaysCount = DefaultGlobalSettings.allowedDaysCountValues - .map((e) => (e == distributionDaysCount)) - .toList(); - _selectedStatisticsRecentDaysCount = DefaultGlobalSettings.allowedDaysCountValues - .map((e) => (e == statisticsRecentDaysCount)) - .toList(); - _selectedTimelineDaysCount = DefaultGlobalSettings.allowedDaysCountValues - .map((e) => (e == timelineDaysCount)) - .toList(); - _selectedTopArtistsDaysCount = DefaultGlobalSettings.allowedDaysCountValues - .map((e) => (e == topArtistsDaysCount)) - .toList(); - _selectedNewArtistsCount = - DefaultGlobalSettings.allowedCountValues.map((e) => (e == newArtistsCount)).toList(); - _selectedNewTracksCount = - DefaultGlobalSettings.allowedCountValues.map((e) => (e == newTracksCount)).toList(); + _selectedDistributionDaysCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) { + _selectedDistributionDaysCount.add(parameterItemValue.value == distributionDaysCount); + } - super.didChangeDependencies(); - } + _selectedStatisticsRecentDaysCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) { + _selectedStatisticsRecentDaysCount + .add(parameterItemValue.value == statisticsRecentDaysCount); + } - @override - void dispose() { - usernameController.dispose(); - securityTokenController.dispose(); - super.dispose(); + _selectedTimelineDaysCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) { + _selectedTimelineDaysCount.add(parameterItemValue.value == timelineDaysCount); + } + + _selectedTopArtistsDaysCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) { + _selectedTopArtistsDaysCount.add(parameterItemValue.value == topArtistsDaysCount); + } + + _selectedNewArtistsCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedCountValues) { + _selectedNewArtistsCount.add(parameterItemValue.value == newArtistsCount); + } + + _selectedNewTracksCount.clear(); + for (var parameterItemValue in ApplicationConfig.allowedCountValues) { + _selectedNewTracksCount.add(parameterItemValue.value == newTracksCount); + } + + super.didChangeDependencies(); } @override Widget build(BuildContext context) { void saveSettings() { - BlocProvider.of<GlobalSettingsCubit>(context).setValues( - username: usernameController.text, - securityToken: securityTokenController.text, - discoveriesDaysCount: discoveriesDaysCount, - distributionDaysCount: distributionDaysCount, - statisticsRecentDaysCount: statisticsRecentDaysCount, - timelineDaysCount: timelineDaysCount, - topArtistsDaysCount: topArtistsDaysCount, - newArtistsCount: newArtistsCount, - newTracksCount: newTracksCount, - ); + BlocProvider.of<ActivitySettingsCubit>(context).setValues(values: { + ApplicationConfig.parameterCodeDiscoveriesDaysCount: discoveriesDaysCount, + ApplicationConfig.parameterCodeDistributionDaysCount: distributionDaysCount, + ApplicationConfig.parameterCodeStatisticsRecentDaysCount: statisticsRecentDaysCount, + ApplicationConfig.parameterCodeTimelineDaysCount: timelineDaysCount, + ApplicationConfig.parameterCodeTopArtistsDaysCount: topArtistsDaysCount, + ApplicationConfig.parameterCodeNewArtistsCount: newArtistsCount, + ApplicationConfig.parameterCodeNewTracksCount: newTracksCount, + }); } return Column( @@ -128,30 +143,6 @@ class _SettingsFormState extends State<SettingsForm> { const SizedBox(height: 16), - AppTitle(text: tr('settings_title_global')), - - // Username - const Text('settings_label_username').tr(), - TextFormField( - controller: usernameController, - decoration: InputDecoration( - border: const UnderlineInputBorder(), - suffixIcon: ElevatedButton( - style: ElevatedButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(6.0), - ), - ), - child: const Icon(UniconsLine.save), - onPressed: () { - saveSettings(); - }, - ), - ), - ), - - const SizedBox(height: 8), - AppTitle(text: tr('settings_title_days_count')), // Statistics (recent) @@ -164,7 +155,7 @@ class _SettingsFormState extends State<SettingsForm> { onPressed: (int index) { setState(() { statisticsRecentDaysCount = - DefaultGlobalSettings.allowedDaysCountValues[index]; + ApplicationConfig.allowedDaysCountValues[index].value; for (int i = 0; i < _selectedStatisticsRecentDaysCount.length; i++) { _selectedStatisticsRecentDaysCount[i] = i == index; } @@ -174,8 +165,9 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedStatisticsRecentDaysCount, - children: DefaultGlobalSettings.allowedDaysCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedDaysCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], @@ -190,7 +182,7 @@ class _SettingsFormState extends State<SettingsForm> { ToggleButtons( onPressed: (int index) { setState(() { - timelineDaysCount = DefaultGlobalSettings.allowedDaysCountValues[index]; + timelineDaysCount = ApplicationConfig.allowedDaysCountValues[index].value; for (int i = 0; i < _selectedTimelineDaysCount.length; i++) { _selectedTimelineDaysCount[i] = i == index; } @@ -200,8 +192,9 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedTimelineDaysCount, - children: DefaultGlobalSettings.allowedDaysCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedDaysCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], @@ -216,7 +209,7 @@ class _SettingsFormState extends State<SettingsForm> { ToggleButtons( onPressed: (int index) { setState(() { - topArtistsDaysCount = DefaultGlobalSettings.allowedDaysCountValues[index]; + topArtistsDaysCount = ApplicationConfig.allowedDaysCountValues[index].value; for (int i = 0; i < _selectedTopArtistsDaysCount.length; i++) { _selectedTopArtistsDaysCount[i] = i == index; } @@ -226,8 +219,9 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedTopArtistsDaysCount, - children: DefaultGlobalSettings.allowedDaysCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedDaysCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], @@ -242,7 +236,7 @@ class _SettingsFormState extends State<SettingsForm> { ToggleButtons( onPressed: (int index) { setState(() { - discoveriesDaysCount = DefaultGlobalSettings.allowedDaysCountValues[index]; + discoveriesDaysCount = ApplicationConfig.allowedDaysCountValues[index].value; for (int i = 0; i < _selectedDiscoveriesDaysCount.length; i++) { _selectedDiscoveriesDaysCount[i] = i == index; } @@ -252,8 +246,9 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedDiscoveriesDaysCount, - children: DefaultGlobalSettings.allowedDaysCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedDaysCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], @@ -268,7 +263,8 @@ class _SettingsFormState extends State<SettingsForm> { ToggleButtons( onPressed: (int index) { setState(() { - distributionDaysCount = DefaultGlobalSettings.allowedDaysCountValues[index]; + distributionDaysCount = + ApplicationConfig.allowedDaysCountValues[index].value; for (int i = 0; i < _selectedDistributionDaysCount.length; i++) { _selectedDistributionDaysCount[i] = i == index; } @@ -278,8 +274,9 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedDistributionDaysCount, - children: DefaultGlobalSettings.allowedDaysCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedDaysCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], @@ -297,7 +294,7 @@ class _SettingsFormState extends State<SettingsForm> { ToggleButtons( onPressed: (int index) { setState(() { - newArtistsCount = DefaultGlobalSettings.allowedCountValues[index]; + newArtistsCount = ApplicationConfig.allowedCountValues[index].value; for (int i = 0; i < _selectedNewArtistsCount.length; i++) { _selectedNewArtistsCount[i] = i == index; } @@ -307,8 +304,9 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedNewArtistsCount, - children: DefaultGlobalSettings.allowedCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], @@ -323,7 +321,7 @@ class _SettingsFormState extends State<SettingsForm> { ToggleButtons( onPressed: (int index) { setState(() { - newTracksCount = DefaultGlobalSettings.allowedCountValues[index]; + newTracksCount = ApplicationConfig.allowedCountValues[index].value; for (int i = 0; i < _selectedNewTracksCount.length; i++) { _selectedNewTracksCount[i] = i == index; } @@ -333,26 +331,13 @@ class _SettingsFormState extends State<SettingsForm> { borderRadius: const BorderRadius.all(Radius.circular(8)), constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0), isSelected: _selectedNewTracksCount, - children: DefaultGlobalSettings.allowedCountValues - .map((e) => Text(e.toString())) + children: ApplicationConfig.allowedCountValues + .map((ApplicationSettingsParameterItemValue parameterItemValue) => + Text(parameterItemValue.toString())) .toList(), ), ], ), - - // Save - // ElevatedButton( - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // crossAxisAlignment: CrossAxisAlignment.center, - // children: [ - // Icon(UniconsLine.save), - // SizedBox(width: 8), - // Text('settings_button_save').tr(), - // ], - // ), - // onPressed: () => saveSettings(), - // ), ], ); } diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart index 68335d6..f1f6704 100644 --- a/lib/config/application_config.dart +++ b/lib/config/application_config.dart @@ -1,3 +1,104 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart'; + +import 'package:scrobbles/cubit/activity/activity_cubit.dart'; + class ApplicationConfig { - static const String appTitle = 'Scrobbles'; + static const String parameterCodeDistributionDaysCount = 'distribution-days-count'; + static const String parameterCodeDiscoveriesDaysCount = 'discoveries-days-count'; + static const String parameterCodeNewArtistsCount = 'new-artists-count'; + static const String parameterCodeNewTracksCount = 'new-tracks-count'; + static const String parameterCodeTimelineDaysCount = 'timeline-days-count'; + static const String parameterCodeTopArtistsDaysCount = 'top-artists-days-count'; + static const String parameterCodeStatisticsRecentDaysCount = 'statistics-recent-days-count'; + + static const List<ApplicationSettingsParameterItemValue> allowedDaysCountValues = [ + ApplicationSettingsParameterItemValue( + value: '7', + ), + ApplicationSettingsParameterItemValue( + value: '14', + isDefault: true, + ), + ApplicationSettingsParameterItemValue( + value: '21', + ), + ApplicationSettingsParameterItemValue( + value: '30', + ), + ApplicationSettingsParameterItemValue( + value: '60', + ), + ApplicationSettingsParameterItemValue( + value: '90', + ), + ]; + + static const List<ApplicationSettingsParameterItemValue> allowedCountValues = [ + ApplicationSettingsParameterItemValue( + value: '5', + isDefault: true, + ), + ApplicationSettingsParameterItemValue( + value: '10', + ), + ApplicationSettingsParameterItemValue( + value: '20', + ), + ]; + + static final ApplicationConfigDefinition config = ApplicationConfigDefinition( + appTitle: 'Scrobbles', + activitySettings: [ + // DistributionDaysCount + ApplicationSettingsParameter( + code: parameterCodeDistributionDaysCount, + values: allowedDaysCountValues, + ), + + // DiscoveriesDaysCount + ApplicationSettingsParameter( + code: parameterCodeDiscoveriesDaysCount, + values: allowedDaysCountValues, + ), + + // NewArtistsCount + ApplicationSettingsParameter( + code: parameterCodeNewArtistsCount, + values: allowedCountValues, + ), + + // NewTracksCount + ApplicationSettingsParameter( + code: parameterCodeNewTracksCount, + values: allowedCountValues, + ), + + // TimelineDaysCount + ApplicationSettingsParameter( + code: parameterCodeTimelineDaysCount, + values: allowedDaysCountValues, + ), + + // TopArtistsDaysCount + ApplicationSettingsParameter( + code: parameterCodeTopArtistsDaysCount, + values: allowedDaysCountValues, + ), + + // StatisticsRecentDaysCount + ApplicationSettingsParameter( + code: parameterCodeStatisticsRecentDaysCount, + values: allowedDaysCountValues, + ), + ], + startNewActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).startNewActivity(context); + BlocProvider.of<NavCubitPage>(context).goToPageHome(); + }, + deleteCurrentActivity: (BuildContext context) {}, + resumeActivity: (BuildContext context) {}, + ); } diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart deleted file mode 100644 index 1f33c90..0000000 --- a/lib/config/default_activity_settings.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultActivitySettings { - // available game parameters codes - static const String parameterCodeDashboardType = 'dashboardType'; - static const List<String> availableParameters = [ - parameterCodeDashboardType, - ]; - - // dashboard type: available values - static const String dashboardTypeDefault = 'default'; - static const List<String> allowedDashboardTypeValues = [ - dashboardTypeDefault, - ]; - // dashboard type: default value - static const String defaultDashboardTypeValue = dashboardTypeDefault; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodeDashboardType: - return DefaultActivitySettings.allowedDashboardTypeValues; - } - - printlog('Did not find any available value for game parameter "$parameterCode".'); - return []; - } -} diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart deleted file mode 100644 index f64cb1f..0000000 --- a/lib/config/default_global_settings.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultGlobalSettings { - // available global parameters codes - static const String parameterCodeSkin = 'skin'; - static const List<String> availableParameters = [ - parameterCodeSkin, - ]; - - // skin: available values - static const String skinValueDefault = 'default'; - static const List<String> allowedSkinValues = [ - skinValueDefault, - ]; - // skin: default value - static const String defaultSkinValue = skinValueDefault; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodeSkin: - return DefaultGlobalSettings.allowedSkinValues; - } - - printlog('Did not find any available value for global parameter "$parameterCode".'); - return []; - } - - @Deprecated("Should be removed / normalized") - static const List<int> allowedDaysCountValues = [ - 7, - 14, - 21, - 30, - 60, - 90, - ]; - - @Deprecated("Should be removed / normalized") - static const List<int> allowedCountValues = [ - 5, - 10, - 20, - ]; - - @Deprecated("Should be removed / normalized") - static const int defaultDiscoveriesDaysCount = 14; - @Deprecated("Should be removed / normalized") - static const int defaultDistributionDaysCount = 21; - @Deprecated("Should be removed / normalized") - static const int defaultStatisticsRecentDaysCount = 21; - @Deprecated("Should be removed / normalized") - static const int defaultTimelineDaysCount = 14; - @Deprecated("Should be removed / normalized") - static const int defaultTopArtistsDaysCount = 14; - @Deprecated("Should be removed / normalized") - static const int defaultNewArtistsCount = 5; - @Deprecated("Should be removed / normalized") - static const int defaultNewTracksCount = 5; -} diff --git a/lib/cubit/activity/activity_cubit.dart b/lib/cubit/activity/activity_cubit.dart index 7a0b36c..5c9791e 100644 --- a/lib/cubit/activity/activity_cubit.dart +++ b/lib/cubit/activity/activity_cubit.dart @@ -2,8 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:scrobbles/models/activity/activity.dart'; -import 'package:scrobbles/models/settings/settings_activity.dart'; -import 'package:scrobbles/models/settings/settings_global.dart'; part 'activity_state.dart'; @@ -23,7 +21,6 @@ class ActivityCubit extends HydratedCubit<ActivityState> { final Activity activity = Activity( // Settings activitySettings: state.currentActivity.activitySettings, - globalSettings: state.currentActivity.globalSettings, // State isRunning: state.currentActivity.isRunning, ); @@ -31,14 +28,13 @@ class ActivityCubit extends HydratedCubit<ActivityState> { updateState(activity); } - void startNewActivity({ - required ActivitySettings activitySettings, - required GlobalSettings globalSettings, - }) { + void startNewActivity(BuildContext context) { + final ActivitySettingsCubit activitySettingsCubit = + BlocProvider.of<ActivitySettingsCubit>(context); + final Activity newActivity = Activity.createNew( // Settings - activitySettings: activitySettings, - globalSettings: globalSettings, + activitySettings: activitySettingsCubit.state.settings, ); newActivity.dump(); diff --git a/lib/cubit/activity/data_counts_by_day_cubit.dart b/lib/cubit/activity/data_counts_by_day_cubit.dart index 59c7482..f9d6fdf 100644 --- a/lib/cubit/activity/data_counts_by_day_cubit.dart +++ b/lib/cubit/activity/data_counts_by_day_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/counts_by_day.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,9 @@ class DataCountsByDayCubit extends HydratedCubit<DataCountsByDayState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDistributionDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDistributionDaysCount); final CountsByDayData? data = await ScrobblesApi.fetchCountsByDay(daysCount); if (data != null) { diff --git a/lib/cubit/activity/data_counts_by_hour_cubit.dart b/lib/cubit/activity/data_counts_by_hour_cubit.dart index 6d07f45..d9974e4 100644 --- a/lib/cubit/activity/data_counts_by_hour_cubit.dart +++ b/lib/cubit/activity/data_counts_by_hour_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/counts_by_hour.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,9 @@ class DataCountsByHourCubit extends HydratedCubit<DataCountsByHourState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDistributionDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDistributionDaysCount); final CountsByHourData? data = await ScrobblesApi.fetchCountsByHour(daysCount); if (data != null) { diff --git a/lib/cubit/activity/data_discoveries_cubit.dart b/lib/cubit/activity/data_discoveries_cubit.dart index 4ea5c57..ab12a4d 100644 --- a/lib/cubit/activity/data_discoveries_cubit.dart +++ b/lib/cubit/activity/data_discoveries_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/discoveries.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,9 @@ class DataDiscoveriesCubit extends HydratedCubit<DataDiscoveriesState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDiscoveriesDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDiscoveriesDaysCount); final DiscoveriesData? data = await ScrobblesApi.fetchDiscoveries(daysCount); if (data != null) { diff --git a/lib/cubit/activity/data_heatmap_cubit.dart b/lib/cubit/activity/data_heatmap_cubit.dart index 3d386c3..855ce25 100644 --- a/lib/cubit/activity/data_heatmap_cubit.dart +++ b/lib/cubit/activity/data_heatmap_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/heatmap.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,9 @@ class DataHeatmapCubit extends HydratedCubit<DataHeatmapState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDistributionDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDistributionDaysCount); final HeatmapData? data = await ScrobblesApi.fetchHeatmap(daysCount); if (data != null) { diff --git a/lib/cubit/activity/data_new_artists_cubit.dart b/lib/cubit/activity/data_new_artists_cubit.dart index c5ae1c9..1d6ba45 100644 --- a/lib/cubit/activity/data_new_artists_cubit.dart +++ b/lib/cubit/activity/data_new_artists_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/new_artists.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,8 @@ class DataNewArtistsCubit extends HydratedCubit<DataNewArtistsState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int count = settings.getNewArtistsCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int count = settings.getAsInt(ApplicationConfig.parameterCodeNewArtistsCount); final NewArtistsData? data = await ScrobblesApi.fetchNewArtists(count); if (data != null) { diff --git a/lib/cubit/activity/data_new_tracks_cubit.dart b/lib/cubit/activity/data_new_tracks_cubit.dart index 849ae75..fa13774 100644 --- a/lib/cubit/activity/data_new_tracks_cubit.dart +++ b/lib/cubit/activity/data_new_tracks_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/new_tracks.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,8 @@ class DataNewTracksCubit extends HydratedCubit<DataNewTracksState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int count = settings.getNewTracksCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int count = settings.getAsInt(ApplicationConfig.parameterCodeNewTracksCount); final NewTracksData? data = await ScrobblesApi.fetchNewTracks(count); if (data != null) { diff --git a/lib/cubit/activity/data_statistics_recent_cubit.dart b/lib/cubit/activity/data_statistics_recent_cubit.dart index 0b19c0a..51c2db4 100644 --- a/lib/cubit/activity/data_statistics_recent_cubit.dart +++ b/lib/cubit/activity/data_statistics_recent_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/statistics_recent.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -54,8 +55,9 @@ class DataStatisticsRecentCubit extends HydratedCubit<DataStatisticsRecentState> void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getStatisticsRecentDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeStatisticsRecentDaysCount); final StatisticsRecentData? data = await ScrobblesApi.fetchRecentStatistics(daysCount); if (data != null) { diff --git a/lib/cubit/activity/data_timeline_cubit.dart b/lib/cubit/activity/data_timeline_cubit.dart index 7242401..e417756 100644 --- a/lib/cubit/activity/data_timeline_cubit.dart +++ b/lib/cubit/activity/data_timeline_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/timeline.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,8 @@ class DataTimelineCubit extends HydratedCubit<DataTimelineState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getTimelineDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = settings.getAsInt(ApplicationConfig.parameterCodeTimelineDaysCount); final TimelineData? data = await ScrobblesApi.fetchTimeline(daysCount); if (data != null) { diff --git a/lib/cubit/activity/data_top_artists_cubit.dart b/lib/cubit/activity/data_top_artists_cubit.dart index 4692b8c..d59acf3 100644 --- a/lib/cubit/activity/data_top_artists_cubit.dart +++ b/lib/cubit/activity/data_top_artists_cubit.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/models/data/topartists.dart'; import 'package:scrobbles/network/scrobbles.dart'; @@ -53,8 +54,9 @@ class DataTopArtistsCubit extends HydratedCubit<DataTopArtistsState> { void refresh(BuildContext context) async { setLoading(); - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getTopArtistsDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeTopArtistsDaysCount); final TopArtistsData? data = await ScrobblesApi.fetchTopArtists(daysCount); if (data != null) { diff --git a/lib/cubit/settings/settings_activity_cubit.dart b/lib/cubit/settings/settings_activity_cubit.dart deleted file mode 100644 index e536492..0000000 --- a/lib/cubit/settings/settings_activity_cubit.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:scrobbles/config/default_activity_settings.dart'; -import 'package:scrobbles/models/settings/settings_activity.dart'; - -part 'settings_activity_state.dart'; - -class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> { - ActivitySettingsCubit() - : super(ActivitySettingsState(settings: ActivitySettings.createDefault())); - - void setValues({ - String? dashboardType, - }) { - emit( - ActivitySettingsState( - settings: ActivitySettings( - dashboardType: dashboardType ?? state.settings.dashboardType, - ), - ), - ); - } - - String getParameterValue(String code) { - switch (code) { - case DefaultActivitySettings.parameterCodeDashboardType: - return ActivitySettings.getDashboardTypeValueFromUnsafe(state.settings.dashboardType); - } - - return ''; - } - - void setParameterValue(String code, String value) { - final String dashboardType = code == DefaultActivitySettings.parameterCodeDashboardType - ? value - : getParameterValue(DefaultActivitySettings.parameterCodeDashboardType); - - setValues( - dashboardType: dashboardType, - ); - } - - @override - ActivitySettingsState? fromJson(Map<String, dynamic> json) { - final String dashboardType = - json[DefaultActivitySettings.parameterCodeDashboardType] as String; - - return ActivitySettingsState( - settings: ActivitySettings( - dashboardType: dashboardType, - ), - ); - } - - @override - Map<String, dynamic>? toJson(ActivitySettingsState state) { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodeDashboardType: state.settings.dashboardType, - }; - } -} diff --git a/lib/cubit/settings/settings_activity_state.dart b/lib/cubit/settings/settings_activity_state.dart deleted file mode 100644 index 2b2de42..0000000 --- a/lib/cubit/settings/settings_activity_state.dart +++ /dev/null @@ -1,15 +0,0 @@ -part of 'settings_activity_cubit.dart'; - -@immutable -class ActivitySettingsState extends Equatable { - const ActivitySettingsState({ - required this.settings, - }); - - final ActivitySettings settings; - - @override - List<dynamic> get props => <dynamic>[ - settings, - ]; -} diff --git a/lib/cubit/settings/settings_global_cubit.dart b/lib/cubit/settings/settings_global_cubit.dart deleted file mode 100644 index 75f9489..0000000 --- a/lib/cubit/settings/settings_global_cubit.dart +++ /dev/null @@ -1,116 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:scrobbles/config/default_global_settings.dart'; - -part 'settings_global_state.dart'; - -class GlobalSettingsCubit extends HydratedCubit<GlobalSettingsState> { - GlobalSettingsCubit() : super(const GlobalSettingsState()); - - void setValues({ - String? username, - String? securityToken, - int? discoveriesDaysCount, - int? distributionDaysCount, - int? statisticsRecentDaysCount, - int? timelineDaysCount, - int? topArtistsDaysCount, - int? newArtistsCount, - int? newTracksCount, - }) { - emit(GlobalSettingsState( - username: username ?? state.username, - securityToken: securityToken ?? state.securityToken, - discoveriesDaysCount: discoveriesDaysCount ?? state.discoveriesDaysCount, - distributionDaysCount: distributionDaysCount ?? state.distributionDaysCount, - statisticsRecentDaysCount: statisticsRecentDaysCount ?? state.statisticsRecentDaysCount, - timelineDaysCount: timelineDaysCount ?? state.timelineDaysCount, - topArtistsDaysCount: topArtistsDaysCount ?? state.topArtistsDaysCount, - newArtistsCount: newArtistsCount ?? state.newArtistsCount, - newTracksCount: newTracksCount ?? state.newTracksCount, - )); - } - - String getUsername() { - return state.username ?? ''; - } - - String getSecurityToken() { - return state.securityToken ?? ''; - } - - int getDiscoveriesDaysCount() { - return state.discoveriesDaysCount ?? DefaultGlobalSettings.defaultDiscoveriesDaysCount; - } - - int getDistributionDaysCount() { - return state.distributionDaysCount ?? DefaultGlobalSettings.defaultDistributionDaysCount; - } - - int getStatisticsRecentDaysCount() { - return state.statisticsRecentDaysCount ?? - DefaultGlobalSettings.defaultStatisticsRecentDaysCount; - } - - int getTimelineDaysCount() { - return state.timelineDaysCount ?? DefaultGlobalSettings.defaultTimelineDaysCount; - } - - int getTopArtistsDaysCount() { - return state.topArtistsDaysCount ?? DefaultGlobalSettings.defaultTopArtistsDaysCount; - } - - int getNewArtistsCount() { - return state.newArtistsCount ?? DefaultGlobalSettings.defaultNewArtistsCount; - } - - int getNewTracksCount() { - return state.newTracksCount ?? DefaultGlobalSettings.defaultNewTracksCount; - } - - @override - GlobalSettingsState? fromJson(Map<String, dynamic> json) { - String username = json['username'] as String; - String securityToken = json['securityToken'] as String; - int discoveriesDaysCount = json['discoveriesDaysCount'] as int; - int distributionDaysCount = json['distributionDaysCount'] as int; - int statisticsRecentDaysCount = json['statisticsRecentDaysCount'] as int; - int timelineDaysCount = json['timelineDaysCount'] as int; - int topArtistsDaysCount = json['topArtistsDaysCount'] as int; - int newArtistsCount = json['newArtistsCount'] as int; - int newTracksCount = json['newTracksCount'] as int; - - return GlobalSettingsState( - username: username, - securityToken: securityToken, - discoveriesDaysCount: discoveriesDaysCount, - distributionDaysCount: distributionDaysCount, - statisticsRecentDaysCount: statisticsRecentDaysCount, - timelineDaysCount: timelineDaysCount, - topArtistsDaysCount: topArtistsDaysCount, - newArtistsCount: newArtistsCount, - newTracksCount: newTracksCount, - ); - } - - @override - Map<String, dynamic>? toJson(GlobalSettingsState state) { - return <String, dynamic>{ - 'username': state.username ?? '', - 'securityToken': state.securityToken ?? '', - 'discoveriesDaysCount': - state.discoveriesDaysCount ?? DefaultGlobalSettings.defaultDiscoveriesDaysCount, - 'distributionDaysCount': - state.distributionDaysCount ?? DefaultGlobalSettings.defaultDistributionDaysCount, - 'statisticsRecentDaysCount': state.statisticsRecentDaysCount ?? - DefaultGlobalSettings.defaultStatisticsRecentDaysCount, - 'timelineDaysCount': - state.timelineDaysCount ?? DefaultGlobalSettings.defaultTimelineDaysCount, - 'topArtistsDaysCount': - state.topArtistsDaysCount ?? DefaultGlobalSettings.defaultTopArtistsDaysCount, - 'newArtistsCount': state.newArtistsCount ?? DefaultGlobalSettings.defaultNewArtistsCount, - 'newTracksCount': state.newTracksCount ?? DefaultGlobalSettings.defaultNewTracksCount, - }; - } -} diff --git a/lib/cubit/settings/settings_global_state.dart b/lib/cubit/settings/settings_global_state.dart deleted file mode 100644 index fb08d54..0000000 --- a/lib/cubit/settings/settings_global_state.dart +++ /dev/null @@ -1,51 +0,0 @@ -part of 'settings_global_cubit.dart'; - -@immutable -class GlobalSettingsState extends Equatable { - const GlobalSettingsState({ - this.username, - this.securityToken, - this.discoveriesDaysCount, - this.distributionDaysCount, - this.statisticsRecentDaysCount, - this.timelineDaysCount, - this.topArtistsDaysCount, - this.newArtistsCount, - this.newTracksCount, - }); - - final String? username; - final String? securityToken; - final int? discoveriesDaysCount; - final int? distributionDaysCount; - final int? statisticsRecentDaysCount; - final int? timelineDaysCount; - final int? topArtistsDaysCount; - final int? newArtistsCount; - final int? newTracksCount; - - @override - List<dynamic> get props => <dynamic>[ - username, - securityToken, - discoveriesDaysCount, - distributionDaysCount, - statisticsRecentDaysCount, - timelineDaysCount, - topArtistsDaysCount, - newArtistsCount, - newTracksCount, - ]; - - Map<String, dynamic> get values => <String, dynamic>{ - 'username': username, - 'securityToken': securityToken, - 'discoveriesDaysCount': discoveriesDaysCount, - 'distributionDaysCount': distributionDaysCount, - 'statisticsRecentDaysCount': statisticsRecentDaysCount, - 'timelineDaysCount': timelineDaysCount, - 'topArtistsDaysCount': topArtistsDaysCount, - 'newArtistsCount': newArtistsCount, - 'newTracksCount': newTracksCount, - }; -} diff --git a/lib/main.dart b/lib/main.dart index 02ce7f1..06168fd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,7 @@ import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart'; import 'package:scrobbles/common/cubit/nav/nav_cubit_screens.dart'; import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/activity_cubit.dart'; import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart'; import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart'; @@ -19,8 +20,7 @@ import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart'; import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart'; import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart'; import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_activity_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; + import 'package:scrobbles/ui/skeleton.dart'; void main() async { @@ -66,11 +66,8 @@ class MyApp extends StatelessWidget { BlocProvider<ActivityCubit>( create: (context) => ActivityCubit(), ), - BlocProvider<GlobalSettingsCubit>( - create: (context) => GlobalSettingsCubit(), - ), BlocProvider<ActivitySettingsCubit>( - create: (context) => ActivitySettingsCubit(), + create: (context) => ActivitySettingsCubit(appConfig: ApplicationConfig.config), ), // custom providers @@ -108,7 +105,7 @@ class MyApp extends StatelessWidget { child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>( builder: (BuildContext context, ApplicationThemeModeState state) { return MaterialApp( - title: ApplicationConfig.appTitle, + title: ApplicationConfig.config.appTitle, home: const SkeletonScreen(), // Theme stuff diff --git a/lib/models/activity/activity.dart b/lib/models/activity/activity.dart index 973cd03..900ce3d 100644 --- a/lib/models/activity/activity.dart +++ b/lib/models/activity/activity.dart @@ -1,13 +1,11 @@ import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:scrobbles/models/settings/settings_activity.dart'; -import 'package:scrobbles/models/settings/settings_global.dart'; +import 'package:scrobbles/config/application_config.dart'; class Activity { Activity({ // Settings required this.activitySettings, - required this.globalSettings, // State this.isRunning = false, @@ -15,7 +13,6 @@ class Activity { // Settings final ActivitySettings activitySettings; - final GlobalSettings globalSettings; // State bool isRunning; @@ -23,23 +20,19 @@ class Activity { factory Activity.createNull() { return Activity( // Settings - activitySettings: ActivitySettings.createDefault(), - globalSettings: GlobalSettings.createDefault(), + activitySettings: ActivitySettings.createDefault(appConfig: ApplicationConfig.config), ); } factory Activity.createNew({ ActivitySettings? activitySettings, - GlobalSettings? globalSettings, }) { - final ActivitySettings newActivitySettings = - activitySettings ?? ActivitySettings.createDefault(); - final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault(); + final ActivitySettings newActivitySettings = activitySettings ?? + ActivitySettings.createDefault(appConfig: ApplicationConfig.config); return Activity( // Settings activitySettings: newActivitySettings, - globalSettings: newGlobalSettings, // State isRunning: true, ); @@ -54,7 +47,6 @@ class Activity { printlog('$Activity:'); printlog(' Settings'); activitySettings.dump(); - globalSettings.dump(); printlog(' State'); printlog(' isRunning: $isRunning'); printlog(''); @@ -69,7 +61,6 @@ class Activity { return <String, dynamic>{ // Settings 'activitySettings': activitySettings.toJson(), - 'globalSettings': globalSettings.toJson(), // State 'isRunning': isRunning, }; diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart deleted file mode 100644 index c270607..0000000 --- a/lib/models/settings/settings_activity.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:scrobbles/config/default_activity_settings.dart'; - -class ActivitySettings { - final String dashboardType; - - ActivitySettings({ - required this.dashboardType, - }); - - factory ActivitySettings.createDefault() { - return ActivitySettings( - dashboardType: DefaultActivitySettings.defaultDashboardTypeValue, - ); - } - - static String getDashboardTypeValueFromUnsafe(String dashboardType) { - if (DefaultActivitySettings.allowedDashboardTypeValues.contains(dashboardType)) { - return dashboardType; - } - - return DefaultActivitySettings.defaultDashboardTypeValue; - } - - void dump() { - printlog('$ActivitySettings:'); - printlog(' ${DefaultActivitySettings.parameterCodeDashboardType}: $dashboardType'); - printlog(''); - } - - @override - String toString() { - return '$ActivitySettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodeDashboardType: dashboardType, - }; - } -} diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart deleted file mode 100644 index 666f87e..0000000 --- a/lib/models/settings/settings_global.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:scrobbles/config/default_global_settings.dart'; - -class GlobalSettings { - String skin; - - GlobalSettings({ - required this.skin, - }); - - static String getSkinValueFromUnsafe(String skin) { - if (DefaultGlobalSettings.allowedSkinValues.contains(skin)) { - return skin; - } - - return DefaultGlobalSettings.defaultSkinValue; - } - - factory GlobalSettings.createDefault() { - return GlobalSettings( - skin: DefaultGlobalSettings.defaultSkinValue, - ); - } - - void dump() { - printlog('$GlobalSettings:'); - printlog(' ${DefaultGlobalSettings.parameterCodeSkin}: $skin'); - printlog(''); - } - - @override - String toString() { - return '$GlobalSettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultGlobalSettings.parameterCodeSkin: skin, - }; - } -} diff --git a/lib/ui/widgets/cards/counts_by_day.dart b/lib/ui/widgets/cards/counts_by_day.dart index 672a873..fb6df53 100644 --- a/lib/ui/widgets/cards/counts_by_day.dart +++ b/lib/ui/widgets/cards/counts_by_day.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/counts_by_day.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/charts/counts_by_day.dart'; @@ -12,8 +13,9 @@ class CardCountsByDay extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDistributionDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDistributionDaysCount); return BlocBuilder<DataCountsByDayCubit, DataCountsByDayState>( builder: (BuildContext context, DataCountsByDayState data) { diff --git a/lib/ui/widgets/cards/counts_by_hour.dart b/lib/ui/widgets/cards/counts_by_hour.dart index d7d296a..f624241 100644 --- a/lib/ui/widgets/cards/counts_by_hour.dart +++ b/lib/ui/widgets/cards/counts_by_hour.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/counts_by_hour.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/charts/counts_by_hour.dart'; @@ -12,8 +13,9 @@ class CardCountsByHour extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDistributionDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDistributionDaysCount); return BlocBuilder<DataCountsByHourCubit, DataCountsByHourState>( builder: (BuildContext context, DataCountsByHourState data) { diff --git a/lib/ui/widgets/cards/discoveries.dart b/lib/ui/widgets/cards/discoveries.dart index 3937a50..b77bfa4 100644 --- a/lib/ui/widgets/cards/discoveries.dart +++ b/lib/ui/widgets/cards/discoveries.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/discoveries.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/charts/discoveries_artists.dart'; @@ -13,8 +14,9 @@ class CardDiscoveries extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDiscoveriesDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDiscoveriesDaysCount); return BlocBuilder<DataDiscoveriesCubit, DataDiscoveriesState>( builder: (BuildContext context, DataDiscoveriesState data) { diff --git a/lib/ui/widgets/cards/heatmap.dart b/lib/ui/widgets/cards/heatmap.dart index ffc40ff..744db54 100644 --- a/lib/ui/widgets/cards/heatmap.dart +++ b/lib/ui/widgets/cards/heatmap.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/heatmap.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/charts/heatmap.dart'; @@ -12,8 +13,9 @@ class CardHeatmap extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getDistributionDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeDistributionDaysCount); return BlocBuilder<DataHeatmapCubit, DataHeatmapState>( builder: (BuildContext context, DataHeatmapState data) { diff --git a/lib/ui/widgets/cards/statistics_recent.dart b/lib/ui/widgets/cards/statistics_recent.dart index 219063c..683bac5 100644 --- a/lib/ui/widgets/cards/statistics_recent.dart +++ b/lib/ui/widgets/cards/statistics_recent.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/statistics_recent.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/content/statistics_recent.dart'; @@ -12,8 +13,9 @@ class CardStatisticsRecent extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getStatisticsRecentDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeStatisticsRecentDaysCount); return BlocBuilder<DataStatisticsRecentCubit, DataStatisticsRecentState>( builder: (BuildContext context, DataStatisticsRecentState data) { diff --git a/lib/ui/widgets/cards/timeline.dart b/lib/ui/widgets/cards/timeline.dart index 9412817..6ce4597 100644 --- a/lib/ui/widgets/cards/timeline.dart +++ b/lib/ui/widgets/cards/timeline.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/timeline.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/charts/timeline_counts.dart'; @@ -13,8 +14,8 @@ class CardTimeline extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getTimelineDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = settings.getAsInt(ApplicationConfig.parameterCodeTimelineDaysCount); return BlocBuilder<DataTimelineCubit, DataTimelineState>( builder: (BuildContext context, DataTimelineState data) { diff --git a/lib/ui/widgets/cards/top_artists.dart b/lib/ui/widgets/cards/top_artists.dart index 87f7a49..da8a589 100644 --- a/lib/ui/widgets/cards/top_artists.dart +++ b/lib/ui/widgets/cards/top_artists.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:scrobbles/config/application_config.dart'; + import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart'; -import 'package:scrobbles/cubit/settings/settings_global_cubit.dart'; import 'package:scrobbles/models/data/topartists.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/charts/top_artists.dart'; @@ -13,8 +14,9 @@ class CardTopArtists extends StatelessWidget { @override Widget build(BuildContext context) { - GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context); - final int daysCount = settings.getTopArtistsDaysCount(); + ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + final int daysCount = + settings.getAsInt(ApplicationConfig.parameterCodeTopArtistsDaysCount); return BlocBuilder<DataTopArtistsCubit, DataTopArtistsState>( builder: (BuildContext context, DataTopArtistsState data) { diff --git a/pubspec.lock b/pubspec.lock index 561ff53..91a1880 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -130,11 +130,11 @@ packages: dependency: "direct main" description: path: "." - ref: "0.4.0" - resolved-ref: eb9c090bd00d73324eab8737f74b3339cc24c9e8 + ref: "0.5.0" + resolved-ref: b8164a50489ba981ea57d9f02e2334f09cb8c6a7 url: "https://git.harrault.fr/android/flutter-toolbox.git" source: git - version: "0.4.0" + version: "0.5.0" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 64319a2..9a265b5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Display scrobbles data and charts publish_to: "none" -version: 0.4.2+68 +version: 0.5.0+69 environment: sdk: "^3.0.0" @@ -16,7 +16,7 @@ dependencies: flutter_custom_toolbox: git: url: https://git.harrault.fr/android/flutter-toolbox.git - ref: 0.4.0 + ref: 0.5.0 # specific fl_chart: ^0.69.0 -- GitLab