Skip to content

Commit abec662

Browse files
lakshya1goelgnprice
authored andcommitted
msglist: In single-conversation view, make recipient headers not tappable.
Fixes: #1171
1 parent f4b0b80 commit abec662

File tree

2 files changed

+104
-6
lines changed

2 files changed

+104
-6
lines changed

Diff for: lib/widgets/message_list.dart

+16-6
Original file line numberDiff line numberDiff line change
@@ -1108,9 +1108,14 @@ class StreamMessageRecipientHeader extends StatelessWidget {
11081108
]));
11091109

11101110
return GestureDetector(
1111-
onTap: () => Navigator.push(context,
1112-
MessageListPage.buildRoute(context: context,
1113-
narrow: TopicNarrow.ofMessage(message))),
1111+
// When already in a topic narrow, disable tap interaction that would just
1112+
// push a MessageListPage for the same topic narrow.
1113+
// TODO(#1039) simplify by removing topic-narrow condition if we remove
1114+
// recipient headers in topic narrows
1115+
onTap: narrow is TopicNarrow ? null
1116+
: () => Navigator.push(context,
1117+
MessageListPage.buildRoute(context: context,
1118+
narrow: TopicNarrow.ofMessage(message))),
11141119
onLongPress: () => showTopicActionSheet(context,
11151120
channelId: message.streamId, topic: topic),
11161121
child: ColoredBox(
@@ -1157,9 +1162,14 @@ class DmRecipientHeader extends StatelessWidget {
11571162
final messageListTheme = MessageListTheme.of(context);
11581163

11591164
return GestureDetector(
1160-
onTap: () => Navigator.push(context,
1161-
MessageListPage.buildRoute(context: context,
1162-
narrow: DmNarrow.ofMessage(message, selfUserId: store.selfUserId))),
1165+
// When already in a DM narrow, disable tap interaction that would just
1166+
// push a MessageListPage for the same DM narrow.
1167+
// TODO(#1244) simplify by removing DM-narrow condition if we remove
1168+
// recipient headers in DM narrows
1169+
onTap: narrow is DmNarrow ? null
1170+
: () => Navigator.push(context,
1171+
MessageListPage.buildRoute(context: context,
1172+
narrow: DmNarrow.ofMessage(message, selfUserId: store.selfUserId))),
11631173
child: ColoredBox(
11641174
color: messageListTheme.dmRecipientHeaderBg,
11651175
child: Padding(

Diff for: test/widgets/message_list_test.dart

+88
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,54 @@ void main() {
927927
await tester.pump();
928928
tester.widget(find.text('new stream name'));
929929
});
930+
931+
testWidgets('navigates to TopicNarrow on tapping topic in ChannelNarrow', (tester) async {
932+
final pushedRoutes = <Route<void>>[];
933+
final navObserver = TestNavigatorObserver()
934+
..onPushed = (route, prevRoute) => pushedRoutes.add(route);
935+
final channel = eg.stream();
936+
final message = eg.streamMessage(stream: channel, topic: 'topic name');
937+
await setupMessageListPage(tester,
938+
narrow: ChannelNarrow(channel.streamId),
939+
streams: [channel],
940+
messages: [message],
941+
navObservers: [navObserver]);
942+
943+
assert(pushedRoutes.length == 1);
944+
pushedRoutes.clear();
945+
946+
connection.prepare(json: eg.newestGetMessagesResult(
947+
foundOldest: true, messages: [message]).toJson());
948+
await tester.tap(find.descendant(
949+
of: find.byType(StreamMessageRecipientHeader),
950+
matching: find.text('topic name')));
951+
await tester.pump();
952+
check(pushedRoutes).single.isA<WidgetRoute>().page.isA<MessageListPage>()
953+
.initNarrow.equals(TopicNarrow.ofMessage(message));
954+
await tester.pumpAndSettle();
955+
});
956+
957+
testWidgets('does not navigate on tapping topic in TopicNarrow', (tester) async {
958+
final pushedRoutes = <Route<void>>[];
959+
final navObserver = TestNavigatorObserver()
960+
..onPushed = (route, prevRoute) => pushedRoutes.add(route);
961+
final channel = eg.stream();
962+
final message = eg.streamMessage(stream: channel, topic: 'topic name');
963+
await setupMessageListPage(tester,
964+
narrow: TopicNarrow.ofMessage(message),
965+
streams: [channel],
966+
messages: [message],
967+
navObservers: [navObserver]);
968+
969+
assert(pushedRoutes.length == 1);
970+
pushedRoutes.clear();
971+
972+
await tester.tap(find.descendant(
973+
of: find.byType(StreamMessageRecipientHeader),
974+
matching: find.text('topic name')));
975+
await tester.pump();
976+
check(pushedRoutes).isEmpty();
977+
});
930978
});
931979

932980
group('DmRecipientHeader', () {
@@ -992,6 +1040,46 @@ void main() {
9921040
tester.widget(find.textContaining(RegExp("Dec 1[89], 2022")));
9931041
tester.widget(find.textContaining(RegExp("Aug 2[23], 2022")));
9941042
});
1043+
1044+
testWidgets('navigates to DmNarrow on tapping recipient header in CombinedFeedNarrow', (tester) async {
1045+
final pushedRoutes = <Route<void>>[];
1046+
final navObserver = TestNavigatorObserver()
1047+
..onPushed = (route, prevRoute) => pushedRoutes.add(route);
1048+
final dmMessage = eg.dmMessage(from: eg.selfUser, to: [eg.otherUser]);
1049+
await setupMessageListPage(tester,
1050+
narrow: const CombinedFeedNarrow(),
1051+
messages: [dmMessage],
1052+
navObservers: [navObserver]);
1053+
1054+
assert(pushedRoutes.length == 1);
1055+
pushedRoutes.clear();
1056+
1057+
connection.prepare(json: eg.newestGetMessagesResult(
1058+
foundOldest: true, messages: [dmMessage]).toJson());
1059+
await tester.tap(find.byType(DmRecipientHeader));
1060+
await tester.pump();
1061+
check(pushedRoutes).single.isA<WidgetRoute>().page.isA<MessageListPage>()
1062+
.initNarrow.equals(DmNarrow.withUser(eg.otherUser.userId, selfUserId: eg.selfUser.userId));
1063+
await tester.pumpAndSettle();
1064+
});
1065+
1066+
testWidgets('does not navigate on tapping recipient header in DmNarrow', (tester) async {
1067+
final pushedRoutes = <Route<void>>[];
1068+
final navObserver = TestNavigatorObserver()
1069+
..onPushed = (route, prevRoute) => pushedRoutes.add(route);
1070+
final dmMessage = eg.dmMessage(from: eg.selfUser, to: [eg.otherUser]);
1071+
await setupMessageListPage(tester,
1072+
narrow: DmNarrow.withUser(eg.otherUser.userId, selfUserId: eg.selfUser.userId),
1073+
messages: [dmMessage],
1074+
navObservers: [navObserver]);
1075+
1076+
assert(pushedRoutes.length == 1);
1077+
pushedRoutes.clear();
1078+
1079+
await tester.tap(find.byType(DmRecipientHeader));
1080+
await tester.pump();
1081+
check(pushedRoutes).isEmpty();
1082+
});
9951083
});
9961084

9971085
group('formatHeaderDate', () {

0 commit comments

Comments
 (0)