From 547f34f2a8efa985fc3cf815cc8cea1041976ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Thu, 25 Sep 2025 15:04:17 +0200 Subject: [PATCH] chore: Move encryption button to input row --- lib/pages/chat/chat_input_row.dart | 7 +++++- lib/pages/chat/chat_view.dart | 2 -- lib/pages/chat/encryption_button.dart | 33 +++++++++++++++++++-------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index 6f79b4110..cc971e80e 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -5,6 +5,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat/encryption_button.dart'; import 'package:fluffychat/utils/other_party_can_receive.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -227,7 +228,6 @@ class ChatInputRow extends StatelessWidget { ), Container( height: height, - width: height, alignment: Alignment.center, child: IconButton( tooltip: L10n.of(context).emojis, @@ -256,6 +256,11 @@ class ChatInputRow extends StatelessWidget { onPressed: controller.emojiPickerAction, ), ), + Container( + height: height, + alignment: Alignment.center, + child: EncryptionButton(controller.room), + ), if (Matrix.of(context).isMultiAccount && Matrix.of(context).hasComplexBundles && Matrix.of(context).currentBundle!.length > 1) diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index eb9b0e234..d62cb4bd6 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -13,7 +13,6 @@ import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_title.dart'; import 'package:fluffychat/pages/chat/chat_event_list.dart'; -import 'package:fluffychat/pages/chat/encryption_button.dart'; import 'package:fluffychat/pages/chat/pinned_events.dart'; import 'package:fluffychat/pages/chat/reply_display.dart'; import 'package:fluffychat/utils/account_config.dart'; @@ -127,7 +126,6 @@ class ChatView extends StatelessWidget { icon: const Icon(Icons.call_outlined), tooltip: L10n.of(context).placeCall, ), - EncryptionButton(controller.room), ChatSettingsPopupMenu(controller.room, true), ]; } diff --git a/lib/pages/chat/encryption_button.dart b/lib/pages/chat/encryption_button.dart index 652d9f1cc..3bc556b4a 100644 --- a/lib/pages/chat/encryption_button.dart +++ b/lib/pages/chat/encryption_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:badges/badges.dart' as b; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; @@ -12,6 +13,7 @@ class EncryptionButton extends StatelessWidget { @override Widget build(BuildContext context) { + final theme = Theme.of(context); return StreamBuilder( stream: Matrix.of(context) .client @@ -27,16 +29,27 @@ class EncryptionButton extends StatelessWidget { tooltip: room.encrypted ? L10n.of(context).encrypted : L10n.of(context).encryptionNotEnabled, - icon: Icon( - room.encrypted ? Icons.lock_outlined : Icons.lock_open_outlined, - size: 20, - color: room.joinRules != JoinRules.public && !room.encrypted - ? Colors.red - : room.joinRules != JoinRules.public && - snapshot.data == - EncryptionHealthState.unverifiedDevices - ? Colors.orange - : null, + icon: b.Badge( + badgeAnimation: const b.BadgeAnimation.fade(), + showBadge: + snapshot.data == EncryptionHealthState.unverifiedDevices, + badgeStyle: b.BadgeStyle( + badgeColor: theme.colorScheme.error, + elevation: 4, + ), + badgeContent: Text( + '!', + style: TextStyle( + fontSize: 9, + color: theme.colorScheme.onError, + fontWeight: FontWeight.bold, + ), + ), + child: Icon( + room.encrypted ? Icons.lock_outlined : Icons.lock_open_outlined, + size: 20, + color: theme.colorScheme.onSurface, + ), ), onPressed: () => context.go('/rooms/${room.id}/encryption'), ),