From 73e59cbba2284983299323534ce5f74d1d88cd65 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 22 Aug 2022 18:23:24 +0200 Subject: [PATCH] UI: show timezone if different than local. Fixes #1296. --- .../opentracks/share/DescriptionGeneratorTest.java | 4 ++-- .../fragments/StatisticsRecordedFragment.java | 2 +- .../opentracks/share/DescriptionGenerator.java | 2 +- .../opentracks/ui/util/ListItemUtils.java | 6 +++++- .../de/dennisguse/opentracks/util/StringUtils.java | 14 +++++++------- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java b/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java index e8bdda71c..16a1a59a8 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java @@ -99,7 +99,7 @@ public class DescriptionGeneratorTest { + "Min elevation: -500 m (-1640 ft)
" + "Elevation gain: 6000 m (19685 ft)
" + "Elevation loss: 6000 m (19685 ft)
" - + "Recorded: " + StringUtils.formatDateTime(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "
"; + + "Recorded: " + StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "
"; assertEquals(expected, descriptionGenerator.generateTrackDescription(track, true)); } @@ -135,7 +135,7 @@ public class DescriptionGeneratorTest { + "Fastest pace: 0:10 min/km (0:16 min/mi)
" + "Elevation gain: 6000 m (19685 ft)
" + "Elevation loss: 6000 m (19685 ft)
" - + "Recorded: " + StringUtils.formatDateTime(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "
"; + + "Recorded: " + StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(START_TIME, ZoneId.systemDefault())) + "
"; assertEquals(expected, descriptionGenerator.generateTrackDescription(track, true)); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index e186f9e61..1258a128e 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -182,7 +182,7 @@ public class StatisticsRecordedFragment extends Fragment { private void loadTrackDescription(@NonNull Track track) { viewBinding.statsNameValue.setText(track.getName()); viewBinding.statsDescriptionValue.setText(track.getDescription()); - viewBinding.statsStartDatetimeValue.setText(StringUtils.formatDateTime(track.getStartTime())); + viewBinding.statsStartDatetimeValue.setText(StringUtils.formatDateTimeWithOffsetIfDifferent(track.getStartTime())); } private void updateUI() { diff --git a/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java b/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java index f2c80763a..9bb698f67 100644 --- a/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java +++ b/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java @@ -153,7 +153,7 @@ public class DescriptionGenerator { } // Recorded time - builder.append(context.getString(R.string.description_recorded_time, StringUtils.formatDateTime(OffsetDateTime.ofInstant(stats.getStartTime(), ZoneId.systemDefault())))); + builder.append(context.getString(R.string.description_recorded_time, StringUtils.formatDateTimeWithOffset(OffsetDateTime.ofInstant(stats.getStartTime(), ZoneId.systemDefault())))); builder.append(lineBreak); return builder.toString(); diff --git a/src/main/java/de/dennisguse/opentracks/ui/util/ListItemUtils.java b/src/main/java/de/dennisguse/opentracks/ui/util/ListItemUtils.java index b662ee158..40b2cffb9 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/util/ListItemUtils.java +++ b/src/main/java/de/dennisguse/opentracks/ui/util/ListItemUtils.java @@ -108,7 +108,11 @@ public class ListItemUtils { String timeValue = null; if (!isRecording) { dateValue = StringUtils.formatDateTodayRelative(context, offsetDateTime); - timeValue = offsetDateTime.format(DateTimeFormatter.ofPattern("HH:mm")); + String pattern = "HH:mm"; + if (!offsetDateTime.getOffset().equals(OffsetDateTime.now().getOffset())) { + pattern = "HH:mm x"; + } + timeValue = offsetDateTime.format(DateTimeFormatter.ofPattern(pattern)); } setTextView(context, dateTextView, dateValue, hasPhoto); setTextView(context, timeTextView, timeValue, hasPhoto); diff --git a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java index 97f202645..5c5e0e33f 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java @@ -61,13 +61,6 @@ public class StringUtils { private StringUtils() { } - /** - * Formats the date and time of the OffsetDateTime (using default Locale format) - */ - public static String formatDateTime(OffsetDateTime odt) { - return odt.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); - } - /** * Formats the date and time with the offset (using default Locale format). */ @@ -75,6 +68,13 @@ public class StringUtils { return odt.toZonedDateTime().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL)); } + public static String formatDateTimeWithOffsetIfDifferent(OffsetDateTime odt) { + if (!odt.getOffset().equals(OffsetDateTime.now().getOffset())) { + return odt.toZonedDateTime().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL)); + } + return odt.toZonedDateTime().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); + } + public static String formatLocalDateTime(LocalDateTime localDateTime) { return localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)); }