@@ -228,53 +228,31 @@ void showTopicActionSheet(BuildContext context, {
228
228
final pageContext = PageRoot .contextOf (context);
229
229
230
230
final store = PerAccountStoreWidget .of (pageContext);
231
+ final channel = store.streams[channelId];
231
232
final subscription = store.subscriptions[channelId];
232
233
233
234
final optionButtons = < ActionSheetMenuItemButton > [];
234
235
235
- // TODO(server-7): simplify this condition away
236
- final supportsUnmutingTopics = store.zulipFeatureLevel >= 170 ;
237
- // TODO(server-8): simplify this condition away
238
- final supportsFollowingTopics = store.zulipFeatureLevel >= 219 ;
239
-
240
- final visibilityOptions = < UserTopicVisibilityPolicy > [];
241
- final visibilityPolicy = store.topicVisibilityPolicy (channelId, topic);
242
- if (subscription == null ) {
243
- // Not subscribed to the channel; there is no user topic change to be made.
244
- } else if (! subscription.isMuted) {
245
- // Channel is subscribed and not muted.
246
- switch (visibilityPolicy) {
247
- case UserTopicVisibilityPolicy .muted:
248
- visibilityOptions.add (UserTopicVisibilityPolicy .none);
249
- if (supportsFollowingTopics) {
250
- visibilityOptions.add (UserTopicVisibilityPolicy .followed);
251
- }
252
- case UserTopicVisibilityPolicy .none:
253
- case UserTopicVisibilityPolicy .unmuted:
254
- visibilityOptions.add (UserTopicVisibilityPolicy .muted);
255
- if (supportsFollowingTopics) {
256
- visibilityOptions.add (UserTopicVisibilityPolicy .followed);
257
- }
258
- case UserTopicVisibilityPolicy .followed:
259
- visibilityOptions.add (UserTopicVisibilityPolicy .muted);
260
- if (supportsFollowingTopics) {
261
- visibilityOptions.add (UserTopicVisibilityPolicy .none);
262
- }
263
- case UserTopicVisibilityPolicy .unknown:
264
- // TODO(#1074): This should be unreachable as we keep `unknown` out of
265
- // our data structures.
266
- assert (false );
267
- }
268
- } else {
269
- // Channel is muted.
270
- if (supportsUnmutingTopics) {
236
+ final isChannelArchived = channel? .isArchived == true ;
237
+ if (! isChannelArchived) {
238
+ // TODO(server-7): simplify this condition away
239
+ final supportsUnmutingTopics = store.zulipFeatureLevel >= 170 ;
240
+ // TODO(server-8): simplify this condition away
241
+ final supportsFollowingTopics = store.zulipFeatureLevel >= 219 ;
242
+
243
+ final visibilityOptions = < UserTopicVisibilityPolicy > [];
244
+ final visibilityPolicy = store.topicVisibilityPolicy (channelId, topic);
245
+ if (subscription == null ) {
246
+ // Not subscribed to the channel; there is no user topic change to be made.
247
+ } else if (! subscription.isMuted) {
248
+ // Channel is subscribed and not muted.
271
249
switch (visibilityPolicy) {
272
- case UserTopicVisibilityPolicy .none:
273
250
case UserTopicVisibilityPolicy .muted:
274
- visibilityOptions.add (UserTopicVisibilityPolicy .unmuted );
251
+ visibilityOptions.add (UserTopicVisibilityPolicy .none );
275
252
if (supportsFollowingTopics) {
276
253
visibilityOptions.add (UserTopicVisibilityPolicy .followed);
277
254
}
255
+ case UserTopicVisibilityPolicy .none:
278
256
case UserTopicVisibilityPolicy .unmuted:
279
257
visibilityOptions.add (UserTopicVisibilityPolicy .muted);
280
258
if (supportsFollowingTopics) {
@@ -290,20 +268,46 @@ void showTopicActionSheet(BuildContext context, {
290
268
// our data structures.
291
269
assert (false );
292
270
}
271
+ } else {
272
+ // Channel is muted.
273
+ if (supportsUnmutingTopics) {
274
+ switch (visibilityPolicy) {
275
+ case UserTopicVisibilityPolicy .none:
276
+ case UserTopicVisibilityPolicy .muted:
277
+ visibilityOptions.add (UserTopicVisibilityPolicy .unmuted);
278
+ if (supportsFollowingTopics) {
279
+ visibilityOptions.add (UserTopicVisibilityPolicy .followed);
280
+ }
281
+ case UserTopicVisibilityPolicy .unmuted:
282
+ visibilityOptions.add (UserTopicVisibilityPolicy .muted);
283
+ if (supportsFollowingTopics) {
284
+ visibilityOptions.add (UserTopicVisibilityPolicy .followed);
285
+ }
286
+ case UserTopicVisibilityPolicy .followed:
287
+ visibilityOptions.add (UserTopicVisibilityPolicy .muted);
288
+ if (supportsFollowingTopics) {
289
+ visibilityOptions.add (UserTopicVisibilityPolicy .none);
290
+ }
291
+ case UserTopicVisibilityPolicy .unknown:
292
+ // TODO(#1074): This should be unreachable as we keep `unknown` out of
293
+ // our data structures.
294
+ assert (false );
295
+ }
296
+ }
297
+ }
298
+ optionButtons.addAll (visibilityOptions.map ((to) {
299
+ return UserTopicUpdateButton (
300
+ currentVisibilityPolicy: visibilityPolicy,
301
+ newVisibilityPolicy: to,
302
+ narrow: TopicNarrow (channelId, topic),
303
+ pageContext: pageContext);
304
+ }));
305
+
306
+ if (someMessageIdInTopic != null ) {
307
+ optionButtons.add (ResolveUnresolveButton (pageContext: pageContext,
308
+ topic: topic,
309
+ someMessageIdInTopic: someMessageIdInTopic));
293
310
}
294
- }
295
- optionButtons.addAll (visibilityOptions.map ((to) {
296
- return UserTopicUpdateButton (
297
- currentVisibilityPolicy: visibilityPolicy,
298
- newVisibilityPolicy: to,
299
- narrow: TopicNarrow (channelId, topic),
300
- pageContext: pageContext);
301
- }));
302
-
303
- if (someMessageIdInTopic != null ) {
304
- optionButtons.add (ResolveUnresolveButton (pageContext: pageContext,
305
- topic: topic,
306
- someMessageIdInTopic: someMessageIdInTopic));
307
311
}
308
312
309
313
final unreadCount = store.unreads.countInTopicNarrow (channelId, topic);
@@ -558,14 +562,19 @@ void showMessageActionSheet({required BuildContext context, required Message mes
558
562
final messageListPage = MessageListPage .ancestorOf (pageContext);
559
563
final isComposeBoxOffered = messageListPage.composeBoxController != null ;
560
564
565
+ bool isInArchivedChannel = false ;
566
+ if (message is StreamMessage ) {
567
+ final channel = store.streams[message.streamId];
568
+ isInArchivedChannel = channel? .isArchived == true ;
569
+ }
561
570
final isMessageRead = message.flags.contains (MessageFlag .read);
562
571
final markAsUnreadSupported = store.zulipFeatureLevel >= 155 ; // TODO(server-6)
563
572
final showMarkAsUnreadButton = markAsUnreadSupported && isMessageRead;
564
573
565
574
final optionButtons = [
566
575
ReactionButtons (message: message, pageContext: pageContext),
567
576
StarButton (message: message, pageContext: pageContext),
568
- if (isComposeBoxOffered)
577
+ if (isComposeBoxOffered && ! isInArchivedChannel )
569
578
QuoteAndReplyButton (message: message, pageContext: pageContext),
570
579
if (showMarkAsUnreadButton)
571
580
MarkAsUnreadButton (message: message, pageContext: pageContext),
0 commit comments