Skip to content

Commit 82e7f80

Browse files
committed
1 parent d42c10c commit 82e7f80

14 files changed

+326
-44
lines changed

assets/l10n/app_en.arb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@
128128
"@actionSheetOptionMarkAsUnread": {
129129
"description": "Label for mark as unread button on action sheet."
130130
},
131+
"actionSheetOptionHideMutedMessage": "Hide muted message again",
132+
"@actionSheetOptionHideMutedMessage": {
133+
"description": "Label for hide muted message again button on action sheet."
134+
},
131135
"actionSheetOptionShare": "Share",
132136
"@actionSheetOptionShare": {
133137
"description": "Label for share button on action sheet."
@@ -872,6 +876,14 @@
872876
"@noEarlierMessages": {
873877
"description": "Text to show at the start of a message list if there are no earlier messages."
874878
},
879+
"mutedSender": "Muted sender",
880+
"@mutedSender": {
881+
"description": "Name for a muted user to display in message list."
882+
},
883+
"revealButtonLabel": "Reveal message for muted sender",
884+
"@revealButtonLabel": {
885+
"description": "Label for the button revealing hidden message from a muted sender in message list."
886+
},
875887
"scrollToBottomTooltip": "Scroll to bottom",
876888
"@scrollToBottomTooltip": {
877889
"description": "Tooltip for button to scroll to bottom."

lib/generated/l10n/zulip_localizations.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,12 @@ abstract class ZulipLocalizations {
299299
/// **'Mark as unread from here'**
300300
String get actionSheetOptionMarkAsUnread;
301301

302+
/// Label for hide muted message again button on action sheet.
303+
///
304+
/// In en, this message translates to:
305+
/// **'Hide muted message again'**
306+
String get actionSheetOptionHideMutedMessage;
307+
302308
/// Label for share button on action sheet.
303309
///
304310
/// In en, this message translates to:
@@ -1271,6 +1277,18 @@ abstract class ZulipLocalizations {
12711277
/// **'No earlier messages'**
12721278
String get noEarlierMessages;
12731279

1280+
/// Name for a muted user to display in message list.
1281+
///
1282+
/// In en, this message translates to:
1283+
/// **'Muted sender'**
1284+
String get mutedSender;
1285+
1286+
/// Label for the button revealing hidden message from a muted sender in message list.
1287+
///
1288+
/// In en, this message translates to:
1289+
/// **'Reveal message for muted sender'**
1290+
String get revealButtonLabel;
1291+
12741292
/// Tooltip for button to scroll to bottom.
12751293
///
12761294
/// In en, this message translates to:

lib/generated/l10n/zulip_localizations_ar.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Mark as unread from here';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Share';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'No earlier messages';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Scroll to bottom';
683692

lib/generated/l10n/zulip_localizations_en.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Mark as unread from here';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Share';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'No earlier messages';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Scroll to bottom';
683692

lib/generated/l10n/zulip_localizations_ja.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Mark as unread from here';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Share';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'No earlier messages';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Scroll to bottom';
683692

lib/generated/l10n/zulip_localizations_nb.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Mark as unread from here';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Share';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'No earlier messages';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Scroll to bottom';
683692

lib/generated/l10n/zulip_localizations_pl.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Odtąd oznacz jako nieprzeczytane';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Udostępnij';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'Brak historii';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Przewiń do dołu';
683692

lib/generated/l10n/zulip_localizations_ru.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Отметить как непрочитанные начиная отсюда';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Поделиться';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'Предшествующих сообщений нет';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Пролистать вниз';
683692

lib/generated/l10n/zulip_localizations_sk.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Označiť ako neprečítané od tejto správy';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Zdielať';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'No earlier messages';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Scroll to bottom';
683692

lib/generated/l10n/zulip_localizations_uk.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ class ZulipLocalizationsUk extends ZulipLocalizations {
106106
@override
107107
String get actionSheetOptionMarkAsUnread => 'Позначити як непрочитане звідси';
108108

109+
@override
110+
String get actionSheetOptionHideMutedMessage => 'Hide muted message again';
111+
109112
@override
110113
String get actionSheetOptionShare => 'Поширити';
111114

@@ -678,6 +681,12 @@ class ZulipLocalizationsUk extends ZulipLocalizations {
678681
@override
679682
String get noEarlierMessages => 'Немає попередніх повідомлень';
680683

684+
@override
685+
String get mutedSender => 'Muted sender';
686+
687+
@override
688+
String get revealButtonLabel => 'Reveal message for muted sender';
689+
681690
@override
682691
String get scrollToBottomTooltip => 'Прокрутити вниз';
683692

lib/widgets/action_sheet.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,13 +568,18 @@ void showMessageActionSheet({required BuildContext context, required Message mes
568568
final markAsUnreadSupported = store.zulipFeatureLevel >= 155; // TODO(server-6)
569569
final showMarkAsUnreadButton = markAsUnreadSupported && isMessageRead;
570570

571+
final isSenderMuted = store.isUserMuted(message.senderId);
572+
571573
final optionButtons = [
572574
ReactionButtons(message: message, pageContext: pageContext),
573575
StarButton(message: message, pageContext: pageContext),
574576
if (isComposeBoxOffered)
575577
QuoteAndReplyButton(message: message, pageContext: pageContext),
576578
if (showMarkAsUnreadButton)
577579
MarkAsUnreadButton(message: message, pageContext: pageContext),
580+
if (isSenderMuted)
581+
HideMutedMessageButton(message: message, pageContext: pageContext,
582+
messageContext: context),
578583
CopyMessageTextButton(message: message, pageContext: pageContext),
579584
CopyMessageLinkButton(message: message, pageContext: pageContext),
580585
ShareButton(message: message, pageContext: pageContext),
@@ -841,6 +846,31 @@ class MarkAsUnreadButton extends MessageActionSheetMenuItemButton {
841846
}
842847
}
843848

849+
class HideMutedMessageButton extends MessageActionSheetMenuItemButton {
850+
HideMutedMessageButton({
851+
super.key,
852+
required super.message,
853+
required super.pageContext,
854+
required this.messageContext,
855+
});
856+
857+
final BuildContext messageContext;
858+
859+
@override
860+
IconData get icon => ZulipIcons.eye_off;
861+
862+
@override
863+
String label(ZulipLocalizations zulipLocalizations) {
864+
return zulipLocalizations.actionSheetOptionHideMutedMessage;
865+
}
866+
867+
@override
868+
void onPressed() {
869+
if (!messageContext.mounted) return;
870+
PossibleMutedMessage.of(messageContext).changeMuteStatus(true);
871+
}
872+
}
873+
844874
class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
845875
CopyMessageTextButton({super.key, required super.message, required super.pageContext});
846876

lib/widgets/content.dart

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import '../model/internal_link.dart';
1717
import '../model/katex.dart';
1818
import 'actions.dart';
1919
import 'code_block.dart';
20+
import 'color.dart';
2021
import 'dialog.dart';
2122
import 'icons.dart';
2223
import 'inset_shadow.dart';
@@ -26,6 +27,7 @@ import 'poll.dart';
2627
import 'scrolling.dart';
2728
import 'store.dart';
2829
import 'text.dart';
30+
import 'theme.dart';
2931

3032
/// A central place for styles for Zulip content (rendered Zulip Markdown).
3133
///
@@ -1657,18 +1659,44 @@ class Avatar extends StatelessWidget {
16571659
required this.userId,
16581660
required this.size,
16591661
required this.borderRadius,
1662+
this.showAsMuted = false,
16601663
});
16611664

16621665
final int userId;
16631666
final double size;
16641667
final double borderRadius;
1668+
final bool showAsMuted;
16651669

16661670
@override
16671671
Widget build(BuildContext context) {
16681672
return AvatarShape(
16691673
size: size,
16701674
borderRadius: borderRadius,
1671-
child: AvatarImage(userId: userId, size: size));
1675+
child: showAsMuted
1676+
? AvatarPlaceholder(
1677+
// Scale the icon proportionally to match the Figma design.
1678+
iconSize: size * 20 / 32
1679+
)
1680+
: AvatarImage(userId: userId, size: size));
1681+
}
1682+
}
1683+
1684+
/// A placeholder avatar for muted users.
1685+
///
1686+
/// Wrap this with [AvatarShape].
1687+
class AvatarPlaceholder extends StatelessWidget {
1688+
const AvatarPlaceholder({super.key, this.iconSize});
1689+
1690+
final double? iconSize;
1691+
1692+
@override
1693+
Widget build(BuildContext context) {
1694+
final designVariables = DesignVariables.of(context);
1695+
return DecoratedBox(
1696+
decoration: BoxDecoration(
1697+
color: designVariables.grey250.withFadedAlpha(0.5)),
1698+
child: Icon(ZulipIcons.person, size: iconSize,
1699+
color: designVariables.grey550.withFadedAlpha(0.5)));
16721700
}
16731701
}
16741702

0 commit comments

Comments
 (0)