Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
aadb0c0
feat(blocked-users): complete block/unblock UX
mubarakcoded May 18, 2026
bb9f935
docs(changelog): link block/unblock UX entry to PR #676
mubarakcoded May 18, 2026
74b160e
fix(l10n): reuse profile key instead of duplicate blockedUserProfileT…
mubarakcoded May 18, 2026
9956e6e
fix(blocked-user): disable unblock button while action is in flight
mubarakcoded May 18, 2026
039d88a
fix(blocked-users): address pepina review
mubarakcoded May 19, 2026
2ae2356
Merge remote-tracking branch 'origin/master' into feat/block-user-com…
mubarakcoded May 19, 2026
b6d5fe2
refactor(blocked-users): morph in place on unblock and polish notice …
mubarakcoded May 20, 2026
cb83aa9
fix(blocked-users): restore bottom padding only when unblocked panel …
mubarakcoded May 20, 2026
cf3b0fb
style(blocked-users): apply dart format
mubarakcoded May 20, 2026
27f6a2d
Cover unblocked action panel buttons in BlockedUserScreen tests
mubarakcoded May 20, 2026
3c9c70e
Consolidate blocked-user and start-chat screens into UserProfileScreen
mubarakcoded May 20, 2026
7b502d2
Merge remote-tracking branch 'origin/master' into feat/block-user-com…
mubarakcoded May 20, 2026
1765431
Cover topAligned mode, blocked notice transitions, and UserProfileScr…
mubarakcoded May 20, 2026
4c67f62
Merge remote-tracking branch 'origin/master' into feat/block-user-com…
mubarakcoded May 20, 2026
12c2e98
Cover topAligned invite share tap and failure paths
mubarakcoded May 20, 2026
eb3e2a1
Fall back to bech32 npub for the blocked user tile display name and d…
mubarakcoded May 21, 2026
e860b0a
Drop the WnSystemNotice elevatedCard variant and use fillSecondary on…
mubarakcoded May 21, 2026
85275b4
Merge remote-tracking branch 'origin/master' into feat/block-user-com…
mubarakcoded May 21, 2026
53fec18
Address pepi's review on the blocked notice and open user profiles to…
mubarakcoded May 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ and this project adheres to Calendar Versioning (CalVer).
- Add markdown rendering for chat messages [PR #665](https://github.com/marmot-protocol/whitenoise/pull/665)
- Push notifications [PR #673](https://github.com/marmot-protocol/whitenoise/pull/673)
- Enable leave group [PR #675](https://github.com/marmot-protocol/whitenoise/pull/675)
- Hide chat composer when peer is blocked and add Blocked users management under Settings → Privacy & Security [PR #676](https://github.com/marmot-protocol/whitenoise/pull/676)
- Add members from group info screen [PR #679](https://github.com/marmot-protocol/whitenoise/pull/679)
- Add key package developer controls [PR #685](https://github.com/marmot-protocol/whitenoise/pull/685)
- Show notifications settings screen on iOS [PR #688](https://github.com/marmot-protocol/whitenoise/pull/688)
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_de.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "Blockierung konnte nicht aufgehoben werden. Bitte erneut versuchen.",
"userIsBlocked": "Du hast diesen Benutzer blockiert",
"userIsBlockedDescription": "Du erhältst keine neuen Nachrichten, bis du die Blockierung aufhebst.",
"blockedUsers": "Blockierte Nutzer",
"viewBlockedUsers": "Blockierte Nutzer anzeigen",
"blockedUsersDescription": "Personen, die du blockiert hast, ansehen und verwalten.",
"blockedUsersEmpty": "Du hast noch niemanden blockiert.",
"failedToFetchBlockedUsers": "Blockierte Nutzer konnten nicht geladen werden. Bitte erneut versuchen.",
"blockedUserDetailDescription": "Du hast diesen Nutzer blockiert. Du kannst keine Nachrichten senden, bis die Blockierung aufgehoben ist.",
"relayResolutionTitle": "Relay-Einrichtung",
"relayResolutionDescription": "Wir konnten Ihre Relay-Listen nicht im Netzwerk finden. Sie können ein Relay angeben, auf dem Ihre Listen veröffentlicht sind, oder unsere Standard-Relays verwenden, um loszulegen.",
"relayResolutionUseDefaults": "Standard-Relays verwenden",
Expand Down
24 changes: 24 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1329,6 +1329,30 @@
"@userIsBlockedDescription": {
"description": "Notice description shown in chat header when the peer is blocked"
},
"blockedUsers": "Blocked users",
"@blockedUsers": {
"description": "Section label and screen title for the list of users the account has blocked"
},
"viewBlockedUsers": "View blocked users",
"@viewBlockedUsers": {
"description": "Button label that opens the blocked users management screen"
},
"blockedUsersDescription": "View and manage people you've blocked.",
"@blockedUsersDescription": {
"description": "Helper text under the View blocked users button on the privacy & security screen"
},
"blockedUsersEmpty": "You haven't blocked anyone yet.",
"@blockedUsersEmpty": {
"description": "Empty state message shown when the blocked users list is empty"
},
"failedToFetchBlockedUsers": "Failed to load blocked users. Please try again.",
"@failedToFetchBlockedUsers": {
"description": "Error message shown when the blocked users list cannot be loaded"
},
"blockedUserDetailDescription": "You've blocked this user. You won't be able to send messages until you unblock them.",
"@blockedUserDetailDescription": {
"description": "Description shown in the blocked user profile screen banner"
},
"addToAnotherGroup": "Add to another group",
"@addToAnotherGroup": {
"description": "Action label to add this user to another group"
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_es.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "No se pudo desbloquear al usuario. Por favor, inténtalo de nuevo.",
"userIsBlocked": "Has bloqueado a este usuario",
"userIsBlockedDescription": "No recibirás nuevos mensajes hasta que lo desbloquees.",
"blockedUsers": "Usuarios bloqueados",
"viewBlockedUsers": "Ver usuarios bloqueados",
"blockedUsersDescription": "Ver y gestionar las personas que has bloqueado.",
"blockedUsersEmpty": "Aún no has bloqueado a nadie.",
"failedToFetchBlockedUsers": "No se pudieron cargar los usuarios bloqueados. Inténtalo de nuevo.",
"blockedUserDetailDescription": "Has bloqueado a este usuario. No podrás enviar mensajes hasta que lo desbloquees.",
"relayResolutionTitle": "Configuración de relé",
"relayResolutionDescription": "No pudimos encontrar tus listas de relés en la red. Puedes proporcionar un relé donde estén publicadas tus listas o usar nuestros relés predeterminados para comenzar.",
"relayResolutionUseDefaults": "Usar relés predeterminados",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_fr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "Impossible de débloquer l'utilisateur. Veuillez réessayer.",
"userIsBlocked": "Vous avez bloqué cet utilisateur",
"userIsBlockedDescription": "Vous ne recevrez pas de nouveaux messages tant que vous ne le débloquez pas.",
"blockedUsers": "Utilisateurs bloqués",
"viewBlockedUsers": "Voir les utilisateurs bloqués",
"blockedUsersDescription": "Voir et gérer les personnes que vous avez bloquées.",
"blockedUsersEmpty": "Vous n’avez bloqué personne pour l’instant.",
"failedToFetchBlockedUsers": "Impossible de charger les utilisateurs bloqués. Veuillez réessayer.",
"blockedUserDetailDescription": "Vous avez bloqué cet utilisateur. Vous ne pourrez pas envoyer de messages avant de le débloquer.",
"relayResolutionTitle": "Configuration du relais",
"relayResolutionDescription": "Nous n'avons pas trouvé vos listes de relais sur le réseau. Vous pouvez fournir un relais où vos listes sont publiées ou utiliser nos relais par défaut pour commencer.",
"relayResolutionUseDefaults": "Utiliser les relais par défaut",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_it.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "Impossibile sbloccare l'utente. Riprova.",
"userIsBlocked": "Hai bloccato questo utente",
"userIsBlockedDescription": "Non riceverai nuovi messaggi finché non lo sblocchi.",
"blockedUsers": "Utenti bloccati",
"viewBlockedUsers": "Vedi utenti bloccati",
"blockedUsersDescription": "Visualizza e gestisci le persone che hai bloccato.",
"blockedUsersEmpty": "Non hai ancora bloccato nessuno.",
"failedToFetchBlockedUsers": "Impossibile caricare gli utenti bloccati. Riprova.",
"blockedUserDetailDescription": "Hai bloccato questo utente. Non potrai inviare messaggi finché non lo sblocchi.",
"relayResolutionTitle": "Configurazione relay",
"relayResolutionDescription": "Non abbiamo trovato le tue liste di relay sulla rete. Puoi fornire un relay dove sono pubblicate le tue liste oppure utilizzare i nostri relay predefiniti per iniziare.",
"relayResolutionUseDefaults": "Usa relay predefiniti",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_pt.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "Não foi possível desbloquear o usuário. Por favor, tente novamente.",
"userIsBlocked": "Você bloqueou este usuário",
"userIsBlockedDescription": "Você não receberá novas mensagens até desbloquear este usuário.",
"blockedUsers": "Usuários bloqueados",
"viewBlockedUsers": "Ver usuários bloqueados",
"blockedUsersDescription": "Veja e gerencie as pessoas que você bloqueou.",
"blockedUsersEmpty": "Você ainda não bloqueou ninguém.",
"failedToFetchBlockedUsers": "Não foi possível carregar os usuários bloqueados. Tente novamente.",
"blockedUserDetailDescription": "Você bloqueou este usuário. Você não poderá enviar mensagens até desbloqueá-lo.",
"relayResolutionTitle": "Configuração de relay",
"relayResolutionDescription": "Não conseguimos encontrar as suas listas de relays na rede. Pode fornecer um relay onde as suas listas estejam publicadas ou utilizar os nossos relays predefinidos para começar.",
"relayResolutionUseDefaults": "Usar relays predefinidos",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_ru.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "Не удалось разблокировать пользователя. Пожалуйста, попробуйте ещё раз.",
"userIsBlocked": "Вы заблокировали этого пользователя",
"userIsBlockedDescription": "Вы не будете получать новые сообщения, пока не разблокируете пользователя.",
"blockedUsers": "Заблокированные пользователи",
"viewBlockedUsers": "Просмотреть заблокированных пользователей",
"blockedUsersDescription": "Просматривайте и управляйте людьми, которых вы заблокировали.",
"blockedUsersEmpty": "Вы пока никого не заблокировали.",
"failedToFetchBlockedUsers": "Не удалось загрузить заблокированных пользователей. Попробуйте снова.",
"blockedUserDetailDescription": "Вы заблокировали этого пользователя. Вы не сможете отправлять сообщения, пока не разблокируете его.",
"relayResolutionTitle": "Настройка реле",
"relayResolutionDescription": "Мы не нашли ваши списки реле в сети. Вы можете указать реле, где опубликованы ваши списки, или использовать наши стандартные реле для начала работы.",
"relayResolutionUseDefaults": "Использовать стандартные реле",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_tr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@
"failedToUnblockUser": "Engel kaldırılamadı. Lütfen tekrar deneyin.",
"userIsBlocked": "Bu kullanıcıyı engellediniz",
"userIsBlockedDescription": "Engeli kaldırana kadar yeni mesaj almayacaksınız.",
"blockedUsers": "Engellenen kullanıcılar",
"viewBlockedUsers": "Engellenen kullanıcıları görüntüle",
"blockedUsersDescription": "Engellediğiniz kişileri görüntüleyin ve yönetin.",
"blockedUsersEmpty": "Henüz kimseyi engellemediniz.",
"failedToFetchBlockedUsers": "Engellenen kullanıcılar yüklenemedi. Lütfen tekrar deneyin.",
"blockedUserDetailDescription": "Bu kullanıcıyı engellediniz. Engeli kaldırana kadar mesaj gönderemezsiniz.",
"relayResolutionTitle": "Röle Ayarları",
"relayResolutionDescription": "Röle listelerinizi ağda bulamadık. Listelerinizin yayınlandığı bir röle sağlayabilir veya başlamak için varsayılan rölelerimizi kullanabilirsiniz.",
"relayResolutionUseDefaults": "Varsayılan röleleri kullan",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_zh.arb
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,12 @@
"failedToUnblockUser": "取消屏蔽失败。请重试。",
"userIsBlocked": "您已屏蔽此用户",
"userIsBlockedDescription": "在您取消屏蔽之前,您将不会收到新消息。",
"blockedUsers": "已屏蔽的用户",
"viewBlockedUsers": "查看已屏蔽的用户",
"blockedUsersDescription": "查看并管理您屏蔽的用户。",
"blockedUsersEmpty": "您还没有屏蔽任何人。",
"failedToFetchBlockedUsers": "无法加载已屏蔽的用户。请重试。",
"blockedUserDetailDescription": "您已屏蔽此用户。在取消屏蔽之前,您无法发送消息。",
"addToAnotherGroup": "添加到另一个群组",
"relayResolutionTitle": "中继器设置",
"relayResolutionDescription": "我们无法在网络上找到您的中继器列表。您可以提供一个已发布这些列表的中继器地址,或者使用我们的默认中继器开始使用。",
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_zh_Hant.arb
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,12 @@
"failedToUnblockUser": "解除封鎖失敗。請再試一次。",
"userIsBlocked": "您已封鎖此使用者",
"userIsBlockedDescription": "解除封鎖前,您不會收到對方的新訊息。",
"blockedUsers": "已封鎖的使用者",
"viewBlockedUsers": "查看已封鎖的使用者",
"blockedUsersDescription": "查看並管理您封鎖的對象。",
"blockedUsersEmpty": "您尚未封鎖任何人。",
"failedToFetchBlockedUsers": "無法載入已封鎖的使用者。請再試一次。",
"blockedUserDetailDescription": "您已封鎖此使用者。在解除封鎖之前,您將無法傳送訊息。",
"addToAnotherGroup": "加入另一個群組",
"relayResolutionTitle": "中繼站設定",
"relayResolutionDescription": "我們無法在網路上找到您的中繼站清單。您可以提供已發布這些清單的中繼站地址,或使用我們的預設中繼站開始使用。",
Expand Down
36 changes: 36 additions & 0 deletions lib/l10n/generated/app_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1929,6 +1929,42 @@ abstract class AppLocalizations {
/// **'You won\'t receive new messages until you unblock them.'**
String get userIsBlockedDescription;

/// Section label and screen title for the list of users the account has blocked
///
/// In en, this message translates to:
/// **'Blocked users'**
String get blockedUsers;

/// Button label that opens the blocked users management screen
///
/// In en, this message translates to:
/// **'View blocked users'**
String get viewBlockedUsers;

/// Helper text under the View blocked users button on the privacy & security screen
///
/// In en, this message translates to:
/// **'View and manage people you\'ve blocked.'**
String get blockedUsersDescription;

/// Empty state message shown when the blocked users list is empty
///
/// In en, this message translates to:
/// **'You haven\'t blocked anyone yet.'**
String get blockedUsersEmpty;

/// Error message shown when the blocked users list cannot be loaded
///
/// In en, this message translates to:
/// **'Failed to load blocked users. Please try again.'**
String get failedToFetchBlockedUsers;

/// Description shown in the blocked user profile screen banner
///
/// In en, this message translates to:
/// **'You\'ve blocked this user. You won\'t be able to send messages until you unblock them.'**
String get blockedUserDetailDescription;

/// Action label to add this user to another group
///
/// In en, this message translates to:
Expand Down
20 changes: 20 additions & 0 deletions lib/l10n/generated/app_localizations_de.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,26 @@ class AppLocalizationsDe extends AppLocalizations {
String get userIsBlockedDescription =>
'Du erhältst keine neuen Nachrichten, bis du die Blockierung aufhebst.';

@override
String get blockedUsers => 'Blockierte Nutzer';

@override
String get viewBlockedUsers => 'Blockierte Nutzer anzeigen';

@override
String get blockedUsersDescription => 'Personen, die du blockiert hast, ansehen und verwalten.';

@override
String get blockedUsersEmpty => 'Du hast noch niemanden blockiert.';

@override
String get failedToFetchBlockedUsers =>
'Blockierte Nutzer konnten nicht geladen werden. Bitte erneut versuchen.';

@override
String get blockedUserDetailDescription =>
'Du hast diesen Nutzer blockiert. Du kannst keine Nachrichten senden, bis die Blockierung aufgehoben ist.';

@override
String get addToAnotherGroup => 'Zu einer anderen Gruppe hinzufügen';

Expand Down
19 changes: 19 additions & 0 deletions lib/l10n/generated/app_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1044,6 +1044,25 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get userIsBlockedDescription => 'You won\'t receive new messages until you unblock them.';

@override
String get blockedUsers => 'Blocked users';

@override
String get viewBlockedUsers => 'View blocked users';

@override
String get blockedUsersDescription => 'View and manage people you\'ve blocked.';

@override
String get blockedUsersEmpty => 'You haven\'t blocked anyone yet.';

@override
String get failedToFetchBlockedUsers => 'Failed to load blocked users. Please try again.';

@override
String get blockedUserDetailDescription =>
'You\'ve blocked this user. You won\'t be able to send messages until you unblock them.';

@override
String get addToAnotherGroup => 'Add to another group';

Expand Down
20 changes: 20 additions & 0 deletions lib/l10n/generated/app_localizations_es.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1060,6 +1060,26 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get userIsBlockedDescription => 'No recibirás nuevos mensajes hasta que lo desbloquees.';

@override
String get blockedUsers => 'Usuarios bloqueados';

@override
String get viewBlockedUsers => 'Ver usuarios bloqueados';

@override
String get blockedUsersDescription => 'Ver y gestionar las personas que has bloqueado.';

@override
String get blockedUsersEmpty => 'Aún no has bloqueado a nadie.';

@override
String get failedToFetchBlockedUsers =>
'No se pudieron cargar los usuarios bloqueados. Inténtalo de nuevo.';

@override
String get blockedUserDetailDescription =>
'Has bloqueado a este usuario. No podrás enviar mensajes hasta que lo desbloquees.';

@override
String get addToAnotherGroup => 'Añadir a otro grupo';

Expand Down
20 changes: 20 additions & 0 deletions lib/l10n/generated/app_localizations_fr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1059,6 +1059,26 @@ class AppLocalizationsFr extends AppLocalizations {
String get userIsBlockedDescription =>
'Vous ne recevrez pas de nouveaux messages tant que vous ne le débloquez pas.';

@override
String get blockedUsers => 'Utilisateurs bloqués';

@override
String get viewBlockedUsers => 'Voir les utilisateurs bloqués';

@override
String get blockedUsersDescription => 'Voir et gérer les personnes que vous avez bloquées.';

@override
String get blockedUsersEmpty => 'Vous n’avez bloqué personne pour l’instant.';

@override
String get failedToFetchBlockedUsers =>
'Impossible de charger les utilisateurs bloqués. Veuillez réessayer.';

@override
String get blockedUserDetailDescription =>
'Vous avez bloqué cet utilisateur. Vous ne pourrez pas envoyer de messages avant de le débloquer.';

@override
String get addToAnotherGroup => 'Ajouter à un autre groupe';

Expand Down
19 changes: 19 additions & 0 deletions lib/l10n/generated/app_localizations_it.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1049,6 +1049,25 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get userIsBlockedDescription => 'Non riceverai nuovi messaggi finché non lo sblocchi.';

@override
String get blockedUsers => 'Utenti bloccati';

@override
String get viewBlockedUsers => 'Vedi utenti bloccati';

@override
String get blockedUsersDescription => 'Visualizza e gestisci le persone che hai bloccato.';

@override
String get blockedUsersEmpty => 'Non hai ancora bloccato nessuno.';

@override
String get failedToFetchBlockedUsers => 'Impossibile caricare gli utenti bloccati. Riprova.';

@override
String get blockedUserDetailDescription =>
'Hai bloccato questo utente. Non potrai inviare messaggi finché non lo sblocchi.';

@override
String get addToAnotherGroup => 'Aggiungi a un altro gruppo';

Expand Down
20 changes: 20 additions & 0 deletions lib/l10n/generated/app_localizations_pt.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1057,6 +1057,26 @@ class AppLocalizationsPt extends AppLocalizations {
String get userIsBlockedDescription =>
'Você não receberá novas mensagens até desbloquear este usuário.';

@override
String get blockedUsers => 'Usuários bloqueados';

@override
String get viewBlockedUsers => 'Ver usuários bloqueados';

@override
String get blockedUsersDescription => 'Veja e gerencie as pessoas que você bloqueou.';

@override
String get blockedUsersEmpty => 'Você ainda não bloqueou ninguém.';

@override
String get failedToFetchBlockedUsers =>
'Não foi possível carregar os usuários bloqueados. Tente novamente.';

@override
String get blockedUserDetailDescription =>
'Você bloqueou este usuário. Você não poderá enviar mensagens até desbloqueá-lo.';

@override
String get addToAnotherGroup => 'Adicionar a outro grupo';

Expand Down
Loading
Loading