From 99127873af02d198934e496d5ffc53152a01fcab Mon Sep 17 00:00:00 2001 From: Jozys Date: Tue, 15 Apr 2025 20:13:37 +0200 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=90=9B=20Fix=20distance=20calculation?= =?UTF-8?q?=20for=20workout=20data=20submission?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/data/repositories/base_local_health_impl.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/data/repositories/base_local_health_impl.dart b/lib/data/repositories/base_local_health_impl.dart index f4622fa..fb7bb89 100644 --- a/lib/data/repositories/base_local_health_impl.dart +++ b/lib/data/repositories/base_local_health_impl.dart @@ -160,12 +160,13 @@ interface class BaseLocalHealthRepoImpl extends BaseLocalHealthRepository { preview.activityType == ActivityType.running) { return null; } + double distance = (((preview.distance ?? 0) * 100).round() / 100) * 1000; success = await Health().writeWorkoutData( activityType: HealthWorkoutActivityType.values.firstWhere( (element) => element.name == preview.activityType?.name), start: startTime, end: endTime, - totalDistance: (preview.distance ?? 0).toInt() * 1000, + totalDistance: distance.toInt(), totalDistanceUnit: HealthDataUnit.METER); } catch (e) { log.info(e); From cd24236b94fa281be0b928b9a07b42d5acf0d26b Mon Sep 17 00:00:00 2001 From: Jozys Date: Tue, 15 Apr 2025 20:27:40 +0200 Subject: [PATCH 2/5] =?UTF-8?q?=E2=9C=A8=20Add=20long=20press=20functional?= =?UTF-8?q?ity=20to=20copy=20app=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/l10n/app_de.arb | 1 + lib/l10n/app_en.arb | 1 + .../profile/screen/widgets/about_section.dart | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index e8b9e66..9174819 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -50,6 +50,7 @@ "common_theme_dark": "Dunkler Modus", "common_about": "Über", "common_version": "Version", + "common_version_copied": "Version in die Zwischenablage kopiert", "common_error_version": "Fehler beim Laden der Version", "common_error": "Fehler {error}", "common_unknown": "Unbekannt", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index f6a76df..9c4ec29 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -52,6 +52,7 @@ "common_theme_dark": "Dark Mode", "common_about": "About", "common_version": "Version", + "common_version_copied": "Successfully copied version", "common_error_version": "Error loading version", "common_error": "Error {error}", "common_unknown": "Unknown", diff --git a/lib/presentation/profile/screen/widgets/about_section.dart b/lib/presentation/profile/screen/widgets/about_section.dart index 09e34b1..abb2a05 100644 --- a/lib/presentation/profile/screen/widgets/about_section.dart +++ b/lib/presentation/profile/screen/widgets/about_section.dart @@ -249,6 +249,14 @@ class VersionInfoTile extends StatelessWidget { context.go('$profilePath/$profileLoggingPath'); } }, + onLongPress: () { + Clipboard.setData( + ClipboardData(text: packageInfo.version), + ); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(l10n.common_version_copied)), + ); + }, child: Container( width: double.infinity, padding: const EdgeInsets.symmetric(vertical: 8.0), From f3a8926010715a3271c0887286050a5053bcf2d3 Mon Sep 17 00:00:00 2001 From: Jozys Date: Tue, 15 Apr 2025 21:19:41 +0200 Subject: [PATCH 3/5] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20copy=20snac?= =?UTF-8?q?kbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../profile/screen/widgets/about_section.dart | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/presentation/profile/screen/widgets/about_section.dart b/lib/presentation/profile/screen/widgets/about_section.dart index abb2a05..ccc6dda 100644 --- a/lib/presentation/profile/screen/widgets/about_section.dart +++ b/lib/presentation/profile/screen/widgets/about_section.dart @@ -1,3 +1,6 @@ +import 'dart:io'; + +import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -240,6 +243,31 @@ class VersionInfoTile extends StatelessWidget { Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; + Future copyVersionToClipboard() async { + final data = ClipboardData(text: packageInfo.version); + await Clipboard.setData(data); + if (context.mounted) { + // Only show snackbar if Android API Level is higher than 31 + final deviceInfo = DeviceInfoPlugin(); + var showSnackbar = true; + if (Platform.isAndroid) { + final androidInfo = await deviceInfo.androidInfo; + // Only show snackbar if Android API Level is higher than 31 meaning Android 12 + showSnackbar = androidInfo.version.sdkInt < 32; + } + if (showSnackbar) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(l10n.common_version_copied)), + ); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(l10n.common_version_copied), + ), + ); + } + } + } + return InkWell( onTap: () { hiddenLogAccessNotifier.incrementClickCount(); @@ -250,12 +278,7 @@ class VersionInfoTile extends StatelessWidget { } }, onLongPress: () { - Clipboard.setData( - ClipboardData(text: packageInfo.version), - ); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(l10n.common_version_copied)), - ); + copyVersionToClipboard(); }, child: Container( width: double.infinity, From a7a9b2c2c1f978d76125aa2ca49e825d9a5bc648 Mon Sep 17 00:00:00 2001 From: Joshua Slaar Date: Tue, 15 Apr 2025 23:34:46 +0200 Subject: [PATCH 4/5] Update lib/presentation/profile/screen/widgets/about_section.dart Co-authored-by: Niklas Buse <63686539+ScreepCode@users.noreply.github.com> --- .../profile/screen/widgets/about_section.dart | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/lib/presentation/profile/screen/widgets/about_section.dart b/lib/presentation/profile/screen/widgets/about_section.dart index ccc6dda..dd6f7e3 100644 --- a/lib/presentation/profile/screen/widgets/about_section.dart +++ b/lib/presentation/profile/screen/widgets/about_section.dart @@ -246,26 +246,22 @@ class VersionInfoTile extends StatelessWidget { Future copyVersionToClipboard() async { final data = ClipboardData(text: packageInfo.version); await Clipboard.setData(data); - if (context.mounted) { - // Only show snackbar if Android API Level is higher than 31 + if (!context.mounted) return; + + // Determine if we should show a snackbar based on platform + // Don't show on Android 12+ (API 32+) as it has its own clipboard notification + if (Platform.isAndroid) { final deviceInfo = DeviceInfoPlugin(); - var showSnackbar = true; - if (Platform.isAndroid) { - final androidInfo = await deviceInfo.androidInfo; - // Only show snackbar if Android API Level is higher than 31 meaning Android 12 - showSnackbar = androidInfo.version.sdkInt < 32; - } - if (showSnackbar) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(l10n.common_version_copied)), - ); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(l10n.common_version_copied), - ), - ); + final androidInfo = await deviceInfo.androidInfo; + if (androidInfo.version.sdkInt >= 32) { + return; // Android 12+ has native clipboard notifications } } + + // Show snackbar on all other platforms and older Android versions + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(l10n.common_version_copied)), + ); } return InkWell( From a6e17a369280884a5985eae1fa1b7caa59b19668 Mon Sep 17 00:00:00 2001 From: Jozys Date: Wed, 16 Apr 2025 08:32:46 +0200 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=93=9D=20Add=20documentation=20of=20d?= =?UTF-8?q?istance=20calculation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/data/repositories/base_local_health_impl.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/data/repositories/base_local_health_impl.dart b/lib/data/repositories/base_local_health_impl.dart index fb7bb89..8153113 100644 --- a/lib/data/repositories/base_local_health_impl.dart +++ b/lib/data/repositories/base_local_health_impl.dart @@ -160,6 +160,10 @@ interface class BaseLocalHealthRepoImpl extends BaseLocalHealthRepository { preview.activityType == ActivityType.running) { return null; } + // The distance is in km, so we need to convert it to m + // We multiply by 100 and round it to 2 decimal places and then divide it back to kilometers + // This step is need as dart does not provide a way to round to decimal places + // After that we multiply it by 1000 to convert it to meters double distance = (((preview.distance ?? 0) * 100).round() / 100) * 1000; success = await Health().writeWorkoutData( activityType: HealthWorkoutActivityType.values.firstWhere(