@@ -228,53 +228,31 @@ void showTopicActionSheet(BuildContext context, {
228228 final pageContext = PageRoot .contextOf (context);
229229
230230 final store = PerAccountStoreWidget .of (pageContext);
231+ final channel = store.streams[channelId];
231232 final subscription = store.subscriptions[channelId];
232233
233234 final optionButtons = < ActionSheetMenuItemButton > [];
234235
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.
271249 switch (visibilityPolicy) {
272- case UserTopicVisibilityPolicy .none:
273250 case UserTopicVisibilityPolicy .muted:
274- visibilityOptions.add (UserTopicVisibilityPolicy .unmuted );
251+ visibilityOptions.add (UserTopicVisibilityPolicy .none );
275252 if (supportsFollowingTopics) {
276253 visibilityOptions.add (UserTopicVisibilityPolicy .followed);
277254 }
255+ case UserTopicVisibilityPolicy .none:
278256 case UserTopicVisibilityPolicy .unmuted:
279257 visibilityOptions.add (UserTopicVisibilityPolicy .muted);
280258 if (supportsFollowingTopics) {
@@ -290,20 +268,46 @@ void showTopicActionSheet(BuildContext context, {
290268 // our data structures.
291269 assert (false );
292270 }
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));
293310 }
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));
307311 }
308312
309313 final unreadCount = store.unreads.countInTopicNarrow (channelId, topic);
@@ -558,14 +562,19 @@ void showMessageActionSheet({required BuildContext context, required Message mes
558562 final messageListPage = MessageListPage .ancestorOf (pageContext);
559563 final isComposeBoxOffered = messageListPage.composeBoxController != null ;
560564
565+ bool isInArchivedChannel = false ;
566+ if (message is StreamMessage ) {
567+ final channel = store.streams[message.streamId];
568+ isInArchivedChannel = channel? .isArchived == true ;
569+ }
561570 final isMessageRead = message.flags.contains (MessageFlag .read);
562571 final markAsUnreadSupported = store.zulipFeatureLevel >= 155 ; // TODO(server-6)
563572 final showMarkAsUnreadButton = markAsUnreadSupported && isMessageRead;
564573
565574 final optionButtons = [
566575 ReactionButtons (message: message, pageContext: pageContext),
567576 StarButton (message: message, pageContext: pageContext),
568- if (isComposeBoxOffered)
577+ if (isComposeBoxOffered && ! isInArchivedChannel )
569578 QuoteAndReplyButton (message: message, pageContext: pageContext),
570579 if (showMarkAsUnreadButton)
571580 MarkAsUnreadButton (message: message, pageContext: pageContext),
0 commit comments