From 2fa063737b188bb827735bac842c6098fd088721 Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 16:35:54 +0900 Subject: [PATCH 01/11] zulip_binding: testable current time --- lib/model/binding.dart | 9 +++++++++ test/model/binding.dart | 3 +++ 2 files changed, 12 insertions(+) diff --git a/lib/model/binding.dart b/lib/model/binding.dart index 50477ec01a..efffb07747 100644 --- a/lib/model/binding.dart +++ b/lib/model/binding.dart @@ -118,6 +118,12 @@ abstract class ZulipBinding { /// Outside tests, this just calls the [Stopwatch] constructor. Stopwatch stopwatch(); + /// Provides access to current time. + /// + /// Please refer to this issue: + /// https://github.com/dart-lang/sdk/issues/28985 + DateTime now(); + /// Provides device and operating system information, /// via package:device_info_plus. /// @@ -368,6 +374,9 @@ class LiveZulipBinding extends ZulipBinding { @override Stopwatch stopwatch() => Stopwatch(); + @override + DateTime now() => DateTime.now(); + @override Future get deviceInfo => _deviceInfo; late Future _deviceInfo; diff --git a/test/model/binding.dart b/test/model/binding.dart index 039d6c3787..3102173018 100644 --- a/test/model/binding.dart +++ b/test/model/binding.dart @@ -214,6 +214,9 @@ class TestZulipBinding extends ZulipBinding { @override Stopwatch stopwatch() => clock.stopwatch(); + @override + DateTime now() => clock.now(); + /// The value that `ZulipBinding.instance.deviceInfo` should return. BaseDeviceInfo deviceInfoResult = _defaultDeviceInfoResult; static const _defaultDeviceInfoResult = AndroidDeviceInfo(sdkInt: 33, release: '13'); From 5417460f171362fcf5d76f4cc2a2b08c7e18d436 Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 16:36:03 +0900 Subject: [PATCH 02/11] message_list: make current time testable --- lib/widgets/message_list.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/widgets/message_list.dart b/lib/widgets/message_list.dart index 06ecff110f..d70a605ae9 100644 --- a/lib/widgets/message_list.dart +++ b/lib/widgets/message_list.dart @@ -7,6 +7,7 @@ import 'package:intl/intl.dart' hide TextDirection; import '../api/model/model.dart'; import '../generated/l10n/zulip_localizations.dart'; +import '../model/binding.dart'; import '../model/message_list.dart'; import '../model/narrow.dart'; import '../model/store.dart'; @@ -1272,7 +1273,7 @@ class DateText extends StatelessWidget { formatHeaderDate( zulipLocalizations, DateTime.fromMillisecondsSinceEpoch(timestamp * 1000), - now: DateTime.now())); + now: ZulipBinding.instance.now())); } } From 83b0a91e0e99ea51dd0f825cd8bba4d080a3bca5 Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 16:39:25 +0900 Subject: [PATCH 03/11] compose_box: make current time testable --- lib/widgets/compose_box.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/widgets/compose_box.dart b/lib/widgets/compose_box.dart index 2b1756e4fe..41a14118e9 100644 --- a/lib/widgets/compose_box.dart +++ b/lib/widgets/compose_box.dart @@ -1411,7 +1411,7 @@ class _ComposeBoxState extends State with PerAccountStoreAwareStateM case TopicNarrow(:final streamId): final channel = store.streams[streamId]; if (channel == null || !store.hasPostingPermission(inChannel: channel, - user: selfUser, byDate: DateTime.now())) { + user: selfUser, byDate: ZulipBinding.instance.now())) { return _ErrorBanner(label: ZulipLocalizations.of(context).errorBannerCannotPostInChannelLabel); } From d2e73e92000c80baa9a92f324bc5e14ecdccd17c Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:43:48 +0900 Subject: [PATCH 04/11] per_account_store: reduce redundant arguments --- lib/model/store.dart | 9 ++++---- lib/widgets/compose_box.dart | 3 +-- test/model/store_test.dart | 42 ++++++++++++++++++++---------------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/lib/model/store.dart b/lib/model/store.dart index 7603c7f452..319a036635 100644 --- a/lib/model/store.dart +++ b/lib/model/store.dart @@ -20,6 +20,7 @@ import '../api/route/realm.dart'; import '../log.dart'; import '../notifications/receive.dart'; import 'autocomplete.dart'; +import 'binding.dart'; import 'database.dart'; import 'emoji.dart'; import 'localizations.dart'; @@ -447,7 +448,7 @@ class PerAccountStore extends ChangeNotifier with EmojiStore, ChannelStore, Mess /// /// To determine if a user is a full member, callers must also check that the /// user's role is at least [UserRole.member]. - bool hasPassedWaitingPeriod(User user, {required DateTime byDate}) { + bool hasPassedWaitingPeriod(User user) { // [User.dateJoined] is in UTC. For logged-in users, the format is: // YYYY-MM-DDTHH:mm+00:00, which includes the timezone offset for UTC. // For logged-out spectators, the format is: YYYY-MM-DD, which doesn't @@ -459,7 +460,8 @@ class PerAccountStore extends ChangeNotifier with EmojiStore, ChannelStore, Mess // See the related discussion: // https://chat.zulip.org/#narrow/channel/412-api-documentation/topic/provide.20an.20explicit.20format.20for.20.60realm_user.2Edate_joined.60/near/1980194 final dateJoined = DateTime.parse(user.dateJoined); - return byDate.difference(dateJoined).inDays >= realmWaitingPeriodThreshold; + final now = ZulipBinding.instance.now(); + return now.difference(dateJoined).inDays >= realmWaitingPeriodThreshold; } //////////////////////////////// @@ -483,7 +485,6 @@ class PerAccountStore extends ChangeNotifier with EmojiStore, ChannelStore, Mess bool hasPostingPermission({ required ZulipStream inChannel, required User user, - required DateTime byDate, }) { final role = user.role; // We let the users with [unknown] role to send the message, then the server @@ -495,7 +496,7 @@ class PerAccountStore extends ChangeNotifier with EmojiStore, ChannelStore, Mess case ChannelPostPolicy.fullMembers: { if (!role.isAtLeast(UserRole.member)) return false; return role == UserRole.member - ? hasPassedWaitingPeriod(user, byDate: byDate) + ? hasPassedWaitingPeriod(user) : true; } case ChannelPostPolicy.moderators: return role.isAtLeast(UserRole.moderator); diff --git a/lib/widgets/compose_box.dart b/lib/widgets/compose_box.dart index 41a14118e9..55c7894f73 100644 --- a/lib/widgets/compose_box.dart +++ b/lib/widgets/compose_box.dart @@ -1410,8 +1410,7 @@ class _ComposeBoxState extends State with PerAccountStoreAwareStateM case ChannelNarrow(:final streamId): case TopicNarrow(:final streamId): final channel = store.streams[streamId]; - if (channel == null || !store.hasPostingPermission(inChannel: channel, - user: selfUser, byDate: ZulipBinding.instance.now())) { + if (channel == null || !store.hasPostingPermission(inChannel: channel, user: selfUser)) { return _ErrorBanner(label: ZulipLocalizations.of(context).errorBannerCannotPostInChannelLabel); } diff --git a/test/model/store_test.dart b/test/model/store_test.dart index bc393d6d6f..7d3fb35f73 100644 --- a/test/model/store_test.dart +++ b/test/model/store_test.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'package:checks/checks.dart'; +import 'package:clock/clock.dart'; import 'package:fake_async/fake_async.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; @@ -260,9 +261,11 @@ void main() { for (final (String dateJoined, DateTime currentDate, bool hasPassedWaitingPeriod) in testCases) { test('user joined at $dateJoined ${hasPassedWaitingPeriod ? 'has' : "hasn't"} ' 'passed waiting period by $currentDate', () { - final user = eg.user(dateJoined: dateJoined); - check(store.hasPassedWaitingPeriod(user, byDate: currentDate)) - .equals(hasPassedWaitingPeriod); + withClock(Clock.fixed(currentDate), () { + final user = eg.user(dateJoined: dateJoined); + check(store.hasPassedWaitingPeriod(user)) + .equals(hasPassedWaitingPeriod); + }); }); } }); @@ -306,11 +309,10 @@ void main() { test('"${role.name}" user ${canPost ? 'can' : "can't"} post in channel ' 'with "${policy.name}" policy', () { final store = eg.store(); + // we don't use `withClock` because current time is not actually relevant for + // these test cases; for the ones which it is, they're practiced below. final actual = store.hasPostingPermission( - inChannel: eg.stream(channelPostPolicy: policy), user: eg.user(role: role), - // [byDate] is not actually relevant for these test cases; for the - // ones which it is, they're practiced below. - byDate: DateTime.now()); + inChannel: eg.stream(channelPostPolicy: policy), user: eg.user(role: role)); check(actual).equals(canPost); }); } @@ -324,21 +326,23 @@ void main() { role: UserRole.member, dateJoined: dateJoined); test('a "full" member -> can post in the channel', () { - final store = localStore(realmWaitingPeriodThreshold: 3); - final hasPermission = store.hasPostingPermission( - inChannel: eg.stream(channelPostPolicy: ChannelPostPolicy.fullMembers), - user: memberUser(dateJoined: '2024-11-25T10:00+00:00'), - byDate: DateTime.utc(2024, 11, 28, 10, 00)); - check(hasPermission).isTrue(); + withClock(Clock.fixed(DateTime.utc(2024, 11, 28, 10, 00)), () { + final store = localStore(realmWaitingPeriodThreshold: 3); + final hasPermission = store.hasPostingPermission( + inChannel: eg.stream(channelPostPolicy: ChannelPostPolicy.fullMembers), + user: memberUser(dateJoined: '2024-11-25T10:00+00:00')); + check(hasPermission).isTrue(); + }); }); test('not a "full" member -> cannot post in the channel', () { - final store = localStore(realmWaitingPeriodThreshold: 3); - final actual = store.hasPostingPermission( - inChannel: eg.stream(channelPostPolicy: ChannelPostPolicy.fullMembers), - user: memberUser(dateJoined: '2024-11-25T10:00+00:00'), - byDate: DateTime.utc(2024, 11, 28, 09, 59)); - check(actual).isFalse(); + withClock(Clock.fixed(DateTime.utc(2024, 11, 28, 09, 59)), () { + final store = localStore(realmWaitingPeriodThreshold: 3); + final actual = store.hasPostingPermission( + inChannel: eg.stream(channelPostPolicy: ChannelPostPolicy.fullMembers), + user: memberUser(dateJoined: '2024-11-25T10:00+00:00')); + check(actual).isFalse(); + }); }); }); }); From 85fff020457c1977833402ff0e7e03797dd8e1b3 Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:46:29 +0900 Subject: [PATCH 05/11] message_list: reduce redundant arguments --- lib/widgets/message_list.dart | 14 +++++++------- test/widgets/message_list_test.dart | 10 ++++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/widgets/message_list.dart b/lib/widgets/message_list.dart index d70a605ae9..51fb2812c5 100644 --- a/lib/widgets/message_list.dart +++ b/lib/widgets/message_list.dart @@ -1272,19 +1272,19 @@ class DateText extends StatelessWidget { ), formatHeaderDate( zulipLocalizations, - DateTime.fromMillisecondsSinceEpoch(timestamp * 1000), - now: ZulipBinding.instance.now())); + DateTime.fromMillisecondsSinceEpoch(timestamp * 1000))); } } @visibleForTesting String formatHeaderDate( ZulipLocalizations zulipLocalizations, - DateTime dateTime, { - required DateTime now, -}) { - assert(!dateTime.isUtc && !now.isUtc, - '`dateTime` and `now` need to be in local time.'); + DateTime dateTime, +) { + assert(!dateTime.isUtc, + '`dateTime` need to be in local time.'); + + final now = ZulipBinding.instance.now(); if (dateTime.year == now.year && dateTime.month == now.month && diff --git a/test/widgets/message_list_test.dart b/test/widgets/message_list_test.dart index 3f79f8cae6..06f871408f 100644 --- a/test/widgets/message_list_test.dart +++ b/test/widgets/message_list_test.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:checks/checks.dart'; +import 'package:clock/clock.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; @@ -1107,7 +1108,7 @@ void main() { .initNarrow.equals(DmNarrow.withUser(eg.otherUser.userId, selfUserId: eg.selfUser.userId)); await tester.pumpAndSettle(); }); - + testWidgets('does not navigate on tapping recipient header in DmNarrow', (tester) async { final pushedRoutes = >[]; final navObserver = TestNavigatorObserver() @@ -1129,7 +1130,6 @@ void main() { group('formatHeaderDate', () { final zulipLocalizations = GlobalLocalizations.zulipLocalizations; - final now = DateTime.parse("2023-01-10 12:00"); final testCases = [ ("2023-01-10 12:00", zulipLocalizations.today), ("2023-01-10 00:00", zulipLocalizations.today), @@ -1144,8 +1144,10 @@ void main() { ]; for (final (dateTime, expected) in testCases) { test('$dateTime returns $expected', () { - check(formatHeaderDate(zulipLocalizations, DateTime.parse(dateTime), now: now)) - .equals(expected); + withClock(Clock.fixed(DateTime.parse("2023-01-10 12:00")), () { + check(formatHeaderDate(zulipLocalizations, DateTime.parse(dateTime))) + .equals(expected); + }); }); } }); From 852d21dbd16930bfae2117e6d4322ecdaa9edd7e Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:49:53 +0900 Subject: [PATCH 06/11] dependencies: add timezone --- pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + 2 files changed, 9 insertions(+) diff --git a/pubspec.lock b/pubspec.lock index 4ee3317f8d..e709f0ef39 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1104,6 +1104,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.8" + timezone: + dependency: "direct main" + description: + name: timezone + sha256: ffc9d5f4d1193534ef051f9254063fa53d588609418c84299956c3db9383587d + url: "https://pub.dev" + source: hosted + version: "0.10.0" timing: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index cc1d93cca8..cc24f7af26 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,6 +58,7 @@ dependencies: share_plus_platform_interface: ^5.0.2 sqlite3: ^2.4.0 sqlite3_flutter_libs: ^0.5.13 + timezone: ^0.10.0 url_launcher: ^6.1.11 url_launcher_android: ">=6.1.0" video_player: ^2.8.3 From 1124474d769060f43f549a67e8d01eeed6e4f54f Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:51:03 +0900 Subject: [PATCH 07/11] assets: add timezone database file --- assets/timezone/latest_all.tzf | Bin 0 -> 443376 bytes pubspec.yaml | 1 + 2 files changed, 1 insertion(+) create mode 100644 assets/timezone/latest_all.tzf diff --git a/assets/timezone/latest_all.tzf b/assets/timezone/latest_all.tzf new file mode 100644 index 0000000000000000000000000000000000000000..e6b113f1611cac6212da63ec9cb242cb3154251a GIT binary patch literal 443376 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

3g#pEDks*U@0!V2 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 Qa_b-dQkoO9 Date: Mon, 17 Feb 2025 19:53:55 +0900 Subject: [PATCH 08/11] tests: ensure timezone file is up-to-date --- test/widgets/profile_test.dart | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/widgets/profile_test.dart b/test/widgets/profile_test.dart index 38f6c223e3..d27fc3e897 100644 --- a/test/widgets/profile_test.dart +++ b/test/widgets/profile_test.dart @@ -1,6 +1,12 @@ import 'package:checks/checks.dart'; +import 'package:clock/clock.dart'; +import 'package:fake_async/fake_async.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:timezone/data/latest_all.dart' as tz; +import 'package:timezone/timezone.dart' as tz; +import 'package:timezone/src/tzdb.dart' as tz; import 'package:url_launcher/url_launcher.dart'; import 'package:zulip/api/model/initial_snapshot.dart'; import 'package:zulip/api/model/model.dart'; @@ -66,6 +72,14 @@ CustomProfileField mkCustomProfileField( ); } +void resetTimezones() { + tz.initializeDatabase([]); +} + +Subject checkUserLocalTimeText(WidgetTester tester) => + check( + tester.widget(find.descendant(of: find.byType(UserLocalTimeText), matching: find.byType(Text))).data).isNotNull(); + void main() { TestZulipBinding.ensureInitialized(); @@ -317,5 +331,19 @@ void main() { check(find.textContaining(longString).evaluate()).length.equals(7); }); + + test('assets; ensure the timezone database used to display users\' local time is up-to-date', () async { + tz.initializeTimeZones(); + final latestTimezones = tz.tzdbSerialize(tz.timeZoneDatabase); + + await UserLocalTimeText.initializeTimezonesUsingAssets(); + final currentTimezones = tz.tzdbSerialize(tz.timeZoneDatabase); + + check( + listEquals(currentTimezones, latestTimezones), + because: + 'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`', + ).isTrue(); + }); }); } From 264ccb818810dcad38e3142211db63363449ca02 Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:56:34 +0900 Subject: [PATCH 09/11] l10n: add transcriptions for local time --- assets/l10n/app_ar.arb | 9 ++++++++- assets/l10n/app_en.arb | 7 +++++++ assets/l10n/app_ja.arb | 9 ++++++++- assets/l10n/app_pl.arb | 7 +++++++ assets/l10n/app_ru.arb | 7 +++++++ lib/generated/l10n/zulip_localizations.dart | 6 ++++++ lib/generated/l10n/zulip_localizations_ar.dart | 8 ++++++++ lib/generated/l10n/zulip_localizations_en.dart | 8 ++++++++ lib/generated/l10n/zulip_localizations_ja.dart | 8 ++++++++ lib/generated/l10n/zulip_localizations_nb.dart | 8 ++++++++ lib/generated/l10n/zulip_localizations_pl.dart | 8 ++++++++ lib/generated/l10n/zulip_localizations_ru.dart | 8 ++++++++ lib/generated/l10n/zulip_localizations_sk.dart | 8 ++++++++ 13 files changed, 99 insertions(+), 2 deletions(-) diff --git a/assets/l10n/app_ar.arb b/assets/l10n/app_ar.arb index 5ca1208723..0c22e6f63c 100644 --- a/assets/l10n/app_ar.arb +++ b/assets/l10n/app_ar.arb @@ -7,5 +7,12 @@ "wildcardMentionChannelDescription": "إخطار القناة", "wildcardMentionStreamDescription": "إخطار الدفق", "wildcardMentionAllDmDescription": "إخطار المستلمين", - "wildcardMentionTopicDescription": "إخطار الموضوع" + "wildcardMentionTopicDescription": "إخطار الموضوع", + "userLocalTime": "{userTime} الوقت المحلي", + "@userLocalTime": { + "description": "Current time in the user's timezone", + "placeholders": { + "userTime": {"type": "DateTime", "format": "jm"} + } + } } diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index 319c9e9dbc..4e5e433582 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -824,5 +824,12 @@ "zulipAppTitle": "Zulip", "@zulipAppTitle": { "description": "The name of Zulip. This should be either 'Zulip' or a transliteration." + }, + "userLocalTime": "{userTime} local time", + "@userLocalTime": { + "description": "Current time in the user's timezone", + "placeholders": { + "userTime": {"type": "DateTime", "format": "jm"} + } } } diff --git a/assets/l10n/app_ja.arb b/assets/l10n/app_ja.arb index a66aede69e..80e0c8ac2a 100644 --- a/assets/l10n/app_ja.arb +++ b/assets/l10n/app_ja.arb @@ -16,5 +16,12 @@ "userRoleGuest": "ゲスト", "@userRoleGuest": {}, "userRoleUnknown": "不明", - "@userRoleUnknown": {} + "@userRoleUnknown": {}, + "userLocalTime": "現地時間 {userTime}", + "@userLocalTime": { + "description": "Current time in the user's timezone", + "placeholders": { + "userTime": {"type": "DateTime", "format": "jm"} + } + } } diff --git a/assets/l10n/app_pl.arb b/assets/l10n/app_pl.arb index 770a670212..80e4a9b092 100644 --- a/assets/l10n/app_pl.arb +++ b/assets/l10n/app_pl.arb @@ -900,5 +900,12 @@ "unpinnedSubscriptionsLabel": "Odpięte", "@unpinnedSubscriptionsLabel": { "description": "Label for the list of unpinned subscribed channels." + }, + "userLocalTime": "{userTime} czas lokalny", + "@userLocalTime": { + "description": "Current time in the user's timezone", + "placeholders": { + "userTime": {"type": "DateTime", "format": "jm"} + } } } diff --git a/assets/l10n/app_ru.arb b/assets/l10n/app_ru.arb index ef38533bb2..fcf17eb969 100644 --- a/assets/l10n/app_ru.arb +++ b/assets/l10n/app_ru.arb @@ -772,5 +772,12 @@ "errorMessageNotSent": "Сообщение не отправлено", "@errorMessageNotSent": { "description": "Error message for compose box when a message could not be sent." + }, + "userLocalTime": "{userTime} местное время", + "@userLocalTime": { + "description": "Current time in the user's timezone", + "placeholders": { + "userTime": {"type": "DateTime", "format": "jm"} + } } } diff --git a/lib/generated/l10n/zulip_localizations.dart b/lib/generated/l10n/zulip_localizations.dart index b3a8752ba1..e4239f9109 100644 --- a/lib/generated/l10n/zulip_localizations.dart +++ b/lib/generated/l10n/zulip_localizations.dart @@ -1208,6 +1208,12 @@ abstract class ZulipLocalizations { /// In en, this message translates to: /// **'Zulip'** String get zulipAppTitle; + + /// Current time in the user's timezone + /// + /// In en, this message translates to: + /// **'{userTime} local time'** + String userLocalTime(DateTime userTime); } class _ZulipLocalizationsDelegate extends LocalizationsDelegate { diff --git a/lib/generated/l10n/zulip_localizations_ar.dart b/lib/generated/l10n/zulip_localizations_ar.dart index 967c7fb33c..57575501b7 100644 --- a/lib/generated/l10n/zulip_localizations_ar.dart +++ b/lib/generated/l10n/zulip_localizations_ar.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsAr extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '$userTimeString الوقت المحلي'; + } } diff --git a/lib/generated/l10n/zulip_localizations_en.dart b/lib/generated/l10n/zulip_localizations_en.dart index 83d2af10b6..a4995b3ec6 100644 --- a/lib/generated/l10n/zulip_localizations_en.dart +++ b/lib/generated/l10n/zulip_localizations_en.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsEn extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '$userTimeString local time'; + } } diff --git a/lib/generated/l10n/zulip_localizations_ja.dart b/lib/generated/l10n/zulip_localizations_ja.dart index 034bcd17d0..7448ae81f5 100644 --- a/lib/generated/l10n/zulip_localizations_ja.dart +++ b/lib/generated/l10n/zulip_localizations_ja.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsJa extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '現地時間 $userTimeString'; + } } diff --git a/lib/generated/l10n/zulip_localizations_nb.dart b/lib/generated/l10n/zulip_localizations_nb.dart index 6416f59b08..79f0895f1f 100644 --- a/lib/generated/l10n/zulip_localizations_nb.dart +++ b/lib/generated/l10n/zulip_localizations_nb.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsNb extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '$userTimeString local time'; + } } diff --git a/lib/generated/l10n/zulip_localizations_pl.dart b/lib/generated/l10n/zulip_localizations_pl.dart index cab571c163..39e803ef51 100644 --- a/lib/generated/l10n/zulip_localizations_pl.dart +++ b/lib/generated/l10n/zulip_localizations_pl.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsPl extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '$userTimeString czas lokalny'; + } } diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart index babbc976fd..abef5433d5 100644 --- a/lib/generated/l10n/zulip_localizations_ru.dart +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '$userTimeString местное время'; + } } diff --git a/lib/generated/l10n/zulip_localizations_sk.dart b/lib/generated/l10n/zulip_localizations_sk.dart index ac3b93b024..cdeae69b66 100644 --- a/lib/generated/l10n/zulip_localizations_sk.dart +++ b/lib/generated/l10n/zulip_localizations_sk.dart @@ -643,4 +643,12 @@ class ZulipLocalizationsSk extends ZulipLocalizations { @override String get zulipAppTitle => 'Zulip'; + + @override + String userLocalTime(DateTime userTime) { + final intl.DateFormat userTimeDateFormat = intl.DateFormat.jm(localeName); + final String userTimeString = userTimeDateFormat.format(userTime); + + return '$userTimeString local time'; + } } From 41d01f3c7fb193a42e051b8279705618954b9922 Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:57:25 +0900 Subject: [PATCH 10/11] profile: display user's local time --- lib/widgets/profile.dart | 73 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/lib/widgets/profile.dart b/lib/widgets/profile.dart index 327910f6c0..e741354c0d 100644 --- a/lib/widgets/profile.dart +++ b/lib/widgets/profile.dart @@ -1,10 +1,14 @@ +import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:timezone/timezone.dart' as tz; import '../api/model/initial_snapshot.dart'; import '../api/model/model.dart'; import '../generated/l10n/zulip_localizations.dart'; +import '../model/binding.dart'; import '../model/content.dart'; import '../model/narrow.dart'; import '../model/store.dart'; @@ -90,7 +94,11 @@ class ProfilePage extends StatelessWidget { style: _TextStyles.primaryFieldText), // TODO(#197) render user status // TODO(#196) render active status - // TODO(#292) render user local time + DefaultTextStyle.merge( + textAlign: TextAlign.center, + style: _TextStyles.primaryFieldText, + child: UserLocalTimeText(user: user) + ), _ProfileDataTable(profileData: user.profileData), const SizedBox(height: 16), @@ -307,3 +315,66 @@ class _UserWidget extends StatelessWidget { ]))); } } + +/// The text of current time in [user]'s timezone. +class UserLocalTimeText extends StatefulWidget { + const UserLocalTimeText({ + super.key, + required this.user, + }); + + final User user; + + /// Initialize the timezone database used to know time difference from a timezone string. + /// + /// Usually, database initialization is done using `initializeTimeZones`, but it takes >100ms and not asynchronous. + /// So, we initialize database from the assets file copied from timezone library. + /// This file is checked up-to-date in `test/widgets/profile_test.dart`. + static Future initializeTimezonesUsingAssets() async { + final blob = Uint8List.sublistView(await rootBundle.load('assets/timezone/latest_all.tzf')); + tz.initializeDatabase(blob); + } + + @override + State createState() => _UserLocalTimeTextState(); +} + +class _UserLocalTimeTextState extends State { + late final Timer _timer; + final StreamController _streamController = StreamController(); + Stream get _stream => _streamController.stream; + + @override + void initState() { + _streamController.add(ZulipBinding.instance.now()); + _timer = Timer.periodic(const Duration(seconds: 1), (_) { _streamController.add(ZulipBinding.instance.now()); }); + super.initState(); + } + + @override + void dispose() { + _timer.cancel(); + super.dispose(); + } + + Stream _getDisplayLocalTimeFor(User user, ZulipLocalizations zulipLocalizations) async* { + if (!tz.timeZoneDatabase.isInitialized) await UserLocalTimeText.initializeTimezonesUsingAssets(); + + await for (final DateTime time in _stream) { + final location = tz.getLocation(user.timezone); + final localTime = tz.TZDateTime.from(time, location); + yield zulipLocalizations.userLocalTime(localTime); + } + } + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: _getDisplayLocalTimeFor(widget.user, ZulipLocalizations.of(context)), + builder: (context, snapshot) { + if (snapshot.hasError) Error.throwWithStackTrace(snapshot.error!, snapshot.stackTrace!); + return Text(snapshot.data ?? ''); + } + ); + } +} From 99866436207c56de489dc834fb82b9001eb8ee5d Mon Sep 17 00:00:00 2001 From: Komyyy Date: Mon, 17 Feb 2025 19:57:55 +0900 Subject: [PATCH 11/11] tests: display user's local time --- test/example_data.dart | 3 +- test/widgets/profile_test.dart | 101 +++++++++++++++++++++++++++++---- 2 files changed, 91 insertions(+), 13 deletions(-) diff --git a/test/example_data.dart b/test/example_data.dart index 6b84bf185c..8071d4727a 100644 --- a/test/example_data.dart +++ b/test/example_data.dart @@ -117,6 +117,7 @@ User user({ bool? isActive, bool? isBot, UserRole? role, + String? timezone, String? avatarUrl, Map? profileData, }) { @@ -134,7 +135,7 @@ User user({ botType: null, botOwnerId: null, role: role ?? UserRole.member, - timezone: 'UTC', + timezone: timezone ?? 'UTC', avatarUrl: avatarUrl, avatarVersion: 0, profileData: profileData, diff --git a/test/widgets/profile_test.dart b/test/widgets/profile_test.dart index d27fc3e897..0483319412 100644 --- a/test/widgets/profile_test.dart +++ b/test/widgets/profile_test.dart @@ -332,18 +332,95 @@ void main() { check(find.textContaining(longString).evaluate()).length.equals(7); }); - test('assets; ensure the timezone database used to display users\' local time is up-to-date', () async { - tz.initializeTimeZones(); - final latestTimezones = tz.tzdbSerialize(tz.timeZoneDatabase); - - await UserLocalTimeText.initializeTimezonesUsingAssets(); - final currentTimezones = tz.tzdbSerialize(tz.timeZoneDatabase); - - check( - listEquals(currentTimezones, latestTimezones), - because: - 'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`', - ).isTrue(); + group('UserLocalTimeText', () { + setUp(() async { + await UserLocalTimeText.initializeTimezonesUsingAssets(); + }); + + test('assets; ensure the timezone database used to display users\' local time is up-to-date', () async { + tz.initializeTimeZones(); + final latestTimezones = tz.tzdbSerialize(tz.timeZoneDatabase); + + await UserLocalTimeText.initializeTimezonesUsingAssets(); + final currentTimezones = tz.tzdbSerialize(tz.timeZoneDatabase); + + check( + listEquals(currentTimezones, latestTimezones), + because: + 'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`', + ).isTrue(); + }); + + final testCases = [( + description: 'simple usecase', + currentTimezone: 'America/Los_Angeles', + currentYear: 2025, currentMonth: 02, currentDay: 01, currentHour: 12, currentMinute: 00, + userTimezone: 'America/New_York', + equalsTo: '3:00 PM local time' + ), ( + description: 'abbreviation usecase', + currentTimezone: 'Europe/Brussels', + currentYear: 2025, currentMonth: 02, currentDay: 01, currentHour: 12, currentMinute: 00, + userTimezone: 'CET', + equalsTo: '12:00 PM local time' + ), ( + description: 'DST usecase', + currentTimezone: 'Europe/London', + currentYear: 2025, currentMonth: 08, currentDay: 01, currentHour: 12, currentMinute: 00, + userTimezone: 'UTC', + equalsTo: '11:00 AM local time' + ) + ]; + + for ( + final ( + :description, + :currentTimezone, + :currentYear, + :currentMonth, + :currentDay, + :currentHour, + :currentMinute, :userTimezone, :equalsTo) in testCases) { + testWidgets('page builds; $description', (tester) async { + final currentTime = tz.TZDateTime( + tz.getLocation(currentTimezone), + currentYear, + currentMonth, + currentDay, + currentHour, + currentMinute + ); + resetTimezones(); + + await withClock(Clock.fixed(currentTime), () async { + final user = eg.user(userId: 1, timezone: userTimezone); + await setupPage(tester, pageUserId: user.userId, users: [user]); + + checkUserLocalTimeText(tester).equals(equalsTo); + }); + }); + } + + testWidgets('page builds; keep "current" local time current', (tester) async { + withClock(Clock.fixed(tz.TZDateTime(tz.getLocation('Europe/London'), 2025, 02, 01, 12, 00)), () { + FakeAsync().run((async) { + final user = eg.user(userId: 1, timezone: 'Europe/London'); + setupPage(tester, pageUserId: user.userId, users: [user]); + async.flushMicrotasks(); + checkUserLocalTimeText(tester).equals('12:00 PM local time'); + + async.elapse(Duration(minutes: 1)); + tester.pumpAndSettle(); + async.flushMicrotasks(); + checkUserLocalTimeText(tester).equals('12:01 PM local time'); + + async.elapse(Duration(minutes: 1)); + tester.pumpAndSettle(); + async.flushMicrotasks(); + checkUserLocalTimeText(tester).equals('12:02 PM local time'); + }); + }); + }); }); }); }