diff --git a/android/gradle.properties b/android/gradle.properties index f0fcf6cdd8fc72bc76b35e7be0dc622b20c03b0f..408253ceb04c0c7c49b3b9daf597f35b66ce16c1 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.26 -app.versionCode=26 +app.versionName=0.0.27 +app.versionCode=27 diff --git a/assets/translations/en.json b/assets/translations/en.json index 449c95d379af3bf15d6faa1cd504e748f3df24c0..a2823ebf4473cf48e61d66216dc8b759dee922ed 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -17,7 +17,8 @@ "counts_by_day": "Counts by day ({daysCount} days)", "counts_by_hour": "Counts by hour ({daysCount} days)", - "discoveries_title": "Discoveries ({daysCount} days)", + "discoveries_artists_title": "Artists discoveries ({daysCount} days)", + "discoveries_tracks_title": "Tracks discoveries ({daysCount} days)", "top_artists_title": "Top artists ({daysCount} days)", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 1b19c8a7d1b7905c8d72531914b57e00d49604bc..67d019d1490f2a0f5793ee643a021a717b6a1a08 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -17,7 +17,8 @@ "counts_by_day": "Écoutes par jour ({daysCount} jours)", "counts_by_hour": "Écoutes par heure ({daysCount} jours)", - "discoveries_title": "Découvertes ({daysCount} jours)", + "discoveries_artists_title": "Artistes découverts ({daysCount} jours)", + "discoveries_tracks_title": "Morceaux découverts ({daysCount} jours)", "top_artists_title": "Top artistes ({daysCount} jours)", diff --git a/fastlane/metadata/android/en-US/changelogs/27.txt b/fastlane/metadata/android/en-US/changelogs/27.txt new file mode 100644 index 0000000000000000000000000000000000000000..eeb190dd71a45fad9807f33944949d2f83dc4b57 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/27.txt @@ -0,0 +1 @@ +Improve "discoveries" chart. diff --git a/fastlane/metadata/android/fr-FR/changelogs/27.txt b/fastlane/metadata/android/fr-FR/changelogs/27.txt new file mode 100644 index 0000000000000000000000000000000000000000..cb3be4c1849d6d6aa69a680b85f1b97d536b4e44 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/27.txt @@ -0,0 +1 @@ +Amélioration du graphique des découvertes. diff --git a/lib/ui/widgets/main_screen/discoveries_card.dart b/lib/ui/widgets/main_screen/discoveries_card.dart index 838d379d0c3ec7ed3beb1962c4499df164c93066..57f0d046398e94079a882f691c8edc3c9b0a27c7 100644 --- a/lib/ui/widgets/main_screen/discoveries_card.dart +++ b/lib/ui/widgets/main_screen/discoveries_card.dart @@ -5,7 +5,8 @@ import 'package:flutter/material.dart'; import '../../../models/discoveries.dart'; import '../../../network/scrobbles_api.dart'; import '../../../ui/widgets/error.dart'; -import '../../../ui/widgets/main_screen/discoveries_content.dart'; +import 'discoveries_content_artists.dart'; +import 'discoveries_content_tracks.dart'; class ChartDiscoveriesCard extends StatelessWidget { const ChartDiscoveriesCard({super.key}); @@ -33,12 +34,24 @@ class ChartDiscoveriesCard extends StatelessWidget { ), child: Padding( padding: const EdgeInsets.all(8.0), - child: ChartDiscoveriesCardContent( - daysCount: daysCount, - chartData: snapshot.hasData - ? DiscoveriesData.fromJson(jsonDecode(snapshot.data.toString())) - : DiscoveriesData.createEmpty(), - isLoading: !snapshot.hasData, + child: Column( + children: [ + ChartDiscoveriesArtistsCardContent( + daysCount: daysCount, + chartData: snapshot.hasData + ? DiscoveriesData.fromJson(jsonDecode(snapshot.data.toString())) + : DiscoveriesData.createEmpty(), + isLoading: !snapshot.hasData, + ), + const SizedBox(height: 8), + ChartDiscoveriesTracksCardContent( + daysCount: daysCount, + chartData: snapshot.hasData + ? DiscoveriesData.fromJson(jsonDecode(snapshot.data.toString())) + : DiscoveriesData.createEmpty(), + isLoading: !snapshot.hasData, + ), + ], ), ), ); diff --git a/lib/ui/widgets/main_screen/discoveries_chart.dart b/lib/ui/widgets/main_screen/discoveries_chart_artists.dart similarity index 79% rename from lib/ui/widgets/main_screen/discoveries_chart.dart rename to lib/ui/widgets/main_screen/discoveries_chart_artists.dart index 4e5ed7d2bddf8ac374efc4adb2fd7fe4f9612d76..eb76c31397de32750c029a150efef7cb24e36e30 100644 --- a/lib/ui/widgets/main_screen/discoveries_chart.dart +++ b/lib/ui/widgets/main_screen/discoveries_chart_artists.dart @@ -6,10 +6,10 @@ import '../../../models/discoveries.dart'; import '../../../utils/color_extensions.dart'; import '../../../ui/widgets/charts/custom_bar_chart.dart'; -class ChartDiscoveries extends CustomBarChart { +class ChartDiscoveriesArtists extends CustomBarChart { final DiscoveriesData chartData; - ChartDiscoveries({super.key, required this.chartData}); + ChartDiscoveriesArtists({super.key, required this.chartData}); @override Widget build(BuildContext context) { @@ -31,14 +31,10 @@ class ChartDiscoveries extends CustomBarChart { DiscoveriesDataValue? value = this.chartData.data[key]; if (value != null) { double newArtistsCount = value.newArtistsCount.toDouble(); - double newTracksCount = value.newTracksCount.toDouble(); if (newArtistsCount > maxValue) { maxValue = newArtistsCount; } - if (newTracksCount > maxValue) { - maxValue = newTracksCount; - } } }); @@ -49,7 +45,6 @@ class ChartDiscoveries extends CustomBarChart { List<BarChartGroupData> data = []; final newArtistsBarColor = AppColors.contentColorGreen.darken(20); - final newTracksBarColor = AppColors.contentColorBlue.darken(20); this.chartData.data.keys.forEach((key) { DiscoveriesDataValue? value = this.chartData.data[key]; @@ -60,13 +55,11 @@ class ChartDiscoveries extends CustomBarChart { x: date, values: [ value.newArtistsCount.toDouble(), - value.newTracksCount.toDouble(), ], barColors: [ newArtistsBarColor, - newTracksBarColor, ], - barWidth: barWidth / 2.5, + barWidth: barWidth, )); } }); diff --git a/lib/ui/widgets/main_screen/discoveries_chart_tracks.dart b/lib/ui/widgets/main_screen/discoveries_chart_tracks.dart new file mode 100644 index 0000000000000000000000000000000000000000..622911d660fb4632236f1e096bee45a111cdf898 --- /dev/null +++ b/lib/ui/widgets/main_screen/discoveries_chart_tracks.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:fl_chart/fl_chart.dart'; + +import '../../../config/app_colors.dart'; +import '../../../models/discoveries.dart'; +import '../../../utils/color_extensions.dart'; +import '../../../ui/widgets/charts/custom_bar_chart.dart'; + +class ChartDiscoveriesTracks extends CustomBarChart { + final DiscoveriesData chartData; + + ChartDiscoveriesTracks({super.key, required this.chartData}); + + @override + Widget build(BuildContext context) { + return Container( + height: this.chartHeight, + child: LayoutBuilder(builder: (context, constraints) { + return getBarChart( + barWidth: this.getBarWidth(constraints.maxWidth, this.chartData.data.keys.length), + backgroundColor: Theme.of(context).colorScheme.onSurface, + ); + }), + ); + } + + double getMaxCountsValue() { + double maxValue = 0; + + this.chartData.data.keys.forEach((key) { + DiscoveriesDataValue? value = this.chartData.data[key]; + if (value != null) { + double newTracksCount = value.newTracksCount.toDouble(); + + if (newTracksCount > maxValue) { + maxValue = newTracksCount; + } + } + }); + + return maxValue; + } + + List<BarChartGroupData> getDataCounts(double barWidth) { + List<BarChartGroupData> data = []; + + final newTracksBarColor = AppColors.contentColorBlue.darken(20); + + this.chartData.data.keys.forEach((key) { + DiscoveriesDataValue? value = this.chartData.data[key]; + if (value != null) { + final int date = DateTime.parse(key).millisecondsSinceEpoch; + + data.add(this.getBarItem( + x: date, + values: [ + value.newTracksCount.toDouble(), + ], + barColors: [ + newTracksBarColor, + ], + barWidth: barWidth, + )); + } + }); + + return data; + } +} diff --git a/lib/ui/widgets/main_screen/discoveries_content_artists.dart b/lib/ui/widgets/main_screen/discoveries_content_artists.dart new file mode 100644 index 0000000000000000000000000000000000000000..b608e9dd2dffc1ecf6693f5803d164d40b20f2d9 --- /dev/null +++ b/lib/ui/widgets/main_screen/discoveries_content_artists.dart @@ -0,0 +1,43 @@ +import 'dart:convert'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; + +import '../../../models/discoveries.dart'; +import 'discoveries_chart_artists.dart'; + +class ChartDiscoveriesArtistsCardContent extends StatelessWidget { + final int daysCount; + final DiscoveriesData chartData; + final bool isLoading; + + const ChartDiscoveriesArtistsCardContent( + {super.key, required this.daysCount, required this.chartData, required this.isLoading}); + + @override + Widget build(BuildContext context) { + final TextTheme textTheme = Theme.of(context).primaryTextTheme; + final String placeholder = 'â³'; + + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + Text( + 'discoveries_artists_title', + style: textTheme.titleLarge!.apply(fontWeightDelta: 2), + ).tr( + namedArgs: { + 'daysCount': this.daysCount.toString(), + }, + ), + const SizedBox(height: 8), + this.isLoading + ? Text(placeholder) + : ChartDiscoveriesArtists( + chartData: DiscoveriesData.fromJson(jsonDecode(this.chartData.toString())), + ), + ], + ); + } +} diff --git a/lib/ui/widgets/main_screen/discoveries_content.dart b/lib/ui/widgets/main_screen/discoveries_content_tracks.dart similarity index 82% rename from lib/ui/widgets/main_screen/discoveries_content.dart rename to lib/ui/widgets/main_screen/discoveries_content_tracks.dart index 5dccaf0d4ebb393ce01ead1e19c80a79513e4931..9ca8ff1f5137065662141cd8f479271eba929330 100644 --- a/lib/ui/widgets/main_screen/discoveries_content.dart +++ b/lib/ui/widgets/main_screen/discoveries_content_tracks.dart @@ -4,14 +4,14 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import '../../../models/discoveries.dart'; -import '../../../ui/widgets/main_screen/discoveries_chart.dart'; +import 'discoveries_chart_tracks.dart'; -class ChartDiscoveriesCardContent extends StatelessWidget { +class ChartDiscoveriesTracksCardContent extends StatelessWidget { final int daysCount; final DiscoveriesData chartData; final bool isLoading; - const ChartDiscoveriesCardContent( + const ChartDiscoveriesTracksCardContent( {super.key, required this.daysCount, required this.chartData, required this.isLoading}); @override @@ -24,7 +24,7 @@ class ChartDiscoveriesCardContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text( - 'discoveries_title', + 'discoveries_tracks_title', style: textTheme.titleLarge!.apply(fontWeightDelta: 2), ).tr( namedArgs: { @@ -34,7 +34,7 @@ class ChartDiscoveriesCardContent extends StatelessWidget { const SizedBox(height: 8), this.isLoading ? Text(placeholder) - : ChartDiscoveries( + : ChartDiscoveriesTracks( chartData: DiscoveriesData.fromJson(jsonDecode(this.chartData.toString())), ), ], diff --git a/pubspec.yaml b/pubspec.yaml index c6d571c0e88084b66cd5d4a18acc2ea030ef9fb7..ad3eda281acecdf67b7bb555ab1604836e9c0f78 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Display scrobbles data and charts publish_to: 'none' -version: 0.0.26+26 +version: 0.0.27+27 environment: sdk: '^3.0.0'