Skip to content

Commit 3590d82

Browse files
committed
msglist: Show user status emoji
1 parent 1530819 commit 3590d82

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

lib/widgets/message_list.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1815,6 +1815,12 @@ class _SenderRow extends StatelessWidget {
18151815
: designVariables.title,
18161816
).merge(weightVariableTextStyle(context, wght: 600)),
18171817
overflow: TextOverflow.ellipsis)),
1818+
if (sender != null)
1819+
Padding(
1820+
padding: const EdgeInsetsDirectional.only(start: 5.0),
1821+
child: UserStatusEmoji(userId: sender.userId,
1822+
size: 18, notoColorEmojiTextSize: 15),
1823+
),
18181824
if (sender?.isBot ?? false) ...[
18191825
const SizedBox(width: 5),
18201826
Icon(

test/widgets/message_list_test.dart

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:zulip/api/model/model.dart';
1414
import 'package:zulip/api/model/narrow.dart';
1515
import 'package:zulip/api/route/channels.dart';
1616
import 'package:zulip/api/route/messages.dart';
17+
import 'package:zulip/basic.dart';
1718
import 'package:zulip/model/actions.dart';
1819
import 'package:zulip/model/localizations.dart';
1920
import 'package:zulip/model/message.dart';
@@ -26,6 +27,7 @@ import 'package:zulip/widgets/autocomplete.dart';
2627
import 'package:zulip/widgets/color.dart';
2728
import 'package:zulip/widgets/compose_box.dart';
2829
import 'package:zulip/widgets/content.dart';
30+
import 'package:zulip/widgets/emoji.dart';
2931
import 'package:zulip/widgets/icons.dart';
3032
import 'package:zulip/widgets/message_list.dart';
3133
import 'package:zulip/widgets/page.dart';
@@ -66,6 +68,7 @@ void main() {
6668
List<ZulipStream>? streams,
6769
List<User>? users,
6870
List<int>? mutedUserIds,
71+
List<(int userId, UserStatusChange change)>? userStatuses,
6972
List<Subscription>? subscriptions,
7073
UnreadMessagesSnapshot? unreadMsgs,
7174
int? zulipFeatureLevel,
@@ -91,6 +94,7 @@ void main() {
9194
if (mutedUserIds != null) {
9295
await store.setMutedUsers(mutedUserIds);
9396
}
97+
await store.changeUserStatuses(userStatuses ?? []);
9498
if (fetchResult != null) {
9599
assert(foundOldest && messageCount == null && messages == null);
96100
} else {
@@ -1722,6 +1726,57 @@ void main() {
17221726
debugNetworkImageHttpClientProvider = null;
17231727
});
17241728

1729+
group('User status emoji', () {
1730+
void checkStatusEmoji(User user, {required bool isPresent}) {
1731+
final nameFinder = find.text(user.fullName);
1732+
final statusEmojiFinder = find.ancestor(of: find.byType(UnicodeEmojiWidget),
1733+
matching: find.byType(UserStatusEmoji));
1734+
1735+
check(nameFinder).findsOne();
1736+
check(statusEmojiFinder).findsExactly(isPresent ? 1 : 0);
1737+
1738+
final senderRowFinder = find.ancestor(
1739+
of: nameFinder,
1740+
matching: find.ancestor(
1741+
of: statusEmojiFinder,
1742+
matching: find.byType(Row),
1743+
),
1744+
);
1745+
isPresent
1746+
? check(senderRowFinder).findsAny()
1747+
: check(senderRowFinder).findsNothing();
1748+
}
1749+
1750+
final user = eg.user(userId: 1,
1751+
fullName: 'User with a very very very long name to check if emoji is still visible');
1752+
1753+
testWidgets('status emoji is set -> emoji is displayed', (tester) async {
1754+
await setupMessageListPage(tester,
1755+
users: [user],
1756+
messages: [eg.streamMessage(sender: user)],
1757+
userStatuses: [
1758+
(
1759+
user.userId,
1760+
UserStatusChange(
1761+
text: OptionSome('Busy'),
1762+
emoji: OptionSome(StatusEmoji(emojiName: 'working_on_it',
1763+
emojiCode: '1f6e0', reactionType: ReactionType.unicodeEmoji)))
1764+
),
1765+
],
1766+
);
1767+
checkStatusEmoji(user, isPresent: true);
1768+
});
1769+
1770+
testWidgets('status emoji is not set -> emoji is not displayed', (tester) async {
1771+
await setupMessageListPage(tester,
1772+
users: [user],
1773+
messages: [eg.streamMessage(sender: user)],
1774+
userStatuses: [],
1775+
);
1776+
checkStatusEmoji(user, isPresent: false);
1777+
});
1778+
});
1779+
17251780
group('Muted sender', () {
17261781
void checkMessage(Message message, {required bool expectIsMuted}) {
17271782
final mutedLabel = 'Muted user';

0 commit comments

Comments
 (0)