From 19b20efc530ad3673806865e691ab7fa25a078a4 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Tue, 6 Aug 2024 13:19:40 -0400 Subject: [PATCH] PR edits, minus positioning changes --- lib/pages/chat/chat_emoji_picker.dart | 3 ++ lib/pages/chat/chat_view.dart | 20 +------- lib/pages/chat/events/message_content.dart | 5 -- lib/pages/chat/reactions_picker.dart | 16 +++--- lib/pangea/utils/any_state_holder.dart | 2 +- .../chat/message_selection_overlay.dart | 51 +++++++++++++++++++ lib/pangea/widgets/chat/message_toolbar.dart | 35 +++---------- lib/pangea/widgets/chat/overlay_footer.dart | 2 - lib/pangea/widgets/chat/overlay_header.dart | 2 - lib/pangea/widgets/chat/overlay_message.dart | 1 + lib/pangea/widgets/igc/pangea_rich_text.dart | 3 -- 11 files changed, 72 insertions(+), 68 deletions(-) create mode 100644 lib/pangea/widgets/chat/message_selection_overlay.dart diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart index 818ad4285..fb11f01d6 100644 --- a/lib/pages/chat/chat_emoji_picker.dart +++ b/lib/pages/chat/chat_emoji_picker.dart @@ -16,6 +16,7 @@ class ChatEmojiPicker extends StatelessWidget { final ThemeData theme = Theme.of(context); return // #Pangea + // Emoji picker can't display without a material parent Material( child: // Pangea# @@ -41,6 +42,8 @@ class ChatEmojiPicker extends StatelessWidget { Expanded( child: // #Pangea + // Display the button to close the emoji picker + // over the emoji picker Stack( children: [ // Pangea# diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 6456ebace..4e29a31b4 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -34,21 +34,6 @@ class ChatView extends StatelessWidget { const ChatView(this.controller, {super.key}); - // #Pangea - List _editedAppBarActions(BuildContext context) { - if (!controller.selectMode) { - return [ - ChatSettingsPopupMenu( - controller.room, - (!controller.room.isDirectChat && !controller.room.isArchived), - ), - ]; - } else { - return []; - } - } - // Pangea# - List _appBarActions(BuildContext context) { if (controller.selectMode) { return [ @@ -234,10 +219,7 @@ class ChatView extends StatelessWidget { ), titleSpacing: 0, title: ChatAppBarTitle(controller), - // #Pangea - // actions: _appBarActions(context), - actions: _editedAppBarActions(context), - // Pangea# + actions: _appBarActions(context), bottom: PreferredSize( preferredSize: Size.fromHeight(appbarBottomHeight), child: Column( diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 5da553366..3fd28cd6c 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -317,11 +317,6 @@ class MessageContent extends StatelessWidget { pangeaMessageEvent != null && !(toolbarController!.highlighted) && !selected) { - // #Pangea - // toolbarController!.controller.onSelectMessage( - // pangeaMessageEvent!.event, - // ); - // Pangea# return; } toolbarController?.toolbar?.textSelection diff --git a/lib/pages/chat/reactions_picker.dart b/lib/pages/chat/reactions_picker.dart index 7256e00bc..333daa049 100644 --- a/lib/pages/chat/reactions_picker.dart +++ b/lib/pages/chat/reactions_picker.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:emoji_proposal/emoji_proposal.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/app_emojis.dart'; import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; class ReactionsPicker extends StatelessWidget { @@ -16,10 +15,13 @@ class ReactionsPicker extends StatelessWidget { @override Widget build(BuildContext context) { if (controller.showEmojiPicker) return const SizedBox.shrink(); - final display = controller.editEvent == null && - controller.replyEvent == null && + final display = + // #Pangea + // controller.editEvent == null && + // controller.replyEvent == null && + // Pangea# controller.room.canSendDefaultMessages && - controller.selectedEvents.isNotEmpty; + controller.selectedEvents.isNotEmpty; return AnimatedContainer( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, diff --git a/lib/pangea/utils/any_state_holder.dart b/lib/pangea/utils/any_state_holder.dart index 67517bf22..d7f0b073e 100644 --- a/lib/pangea/utils/any_state_holder.dart +++ b/lib/pangea/utils/any_state_holder.dart @@ -62,7 +62,7 @@ class PangeaAnyState { } void closeAllOverlays() { - while (entries.isNotEmpty) { + for (int i = 0; i < entries.length; i++) { try { entries.last.remove(); } catch (err, s) { diff --git a/lib/pangea/widgets/chat/message_selection_overlay.dart b/lib/pangea/widgets/chat/message_selection_overlay.dart new file mode 100644 index 000000000..250e394a1 --- /dev/null +++ b/lib/pangea/widgets/chat/message_selection_overlay.dart @@ -0,0 +1,51 @@ +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pangea/widgets/chat/overlay_footer.dart'; +import 'package:fluffychat/pangea/widgets/chat/overlay_header.dart'; +import 'package:flutter/material.dart'; + +class MessageSelectionOverlay extends StatelessWidget { + final ChatController controller; + final Function closeToolbar; + final Widget toolbar; + final Widget overlayMessage; + + const MessageSelectionOverlay({ + required this.controller, + required this.closeToolbar, + required this.toolbar, + required this.overlayMessage, + super.key, + }); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + OverlayHeader( + controller: controller, + closeToolbar: closeToolbar, + ), + const SizedBox( + height: 7, + ), + Flexible( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + toolbar, + const SizedBox(height: 9), + overlayMessage, + ], + ), + ), + const SizedBox( + height: 7, + ), + OverlayFooter(controller: controller), + ], + ); + } +} diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 7323f361c..4c1d18256 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -8,12 +8,11 @@ import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dar import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/overlay.dart'; import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; +import 'package:fluffychat/pangea/widgets/chat/message_selection_overlay.dart'; import 'package:fluffychat/pangea/widgets/chat/message_speech_to_text_card.dart'; import 'package:fluffychat/pangea/widgets/chat/message_text_selection.dart'; import 'package:fluffychat/pangea/widgets/chat/message_translation_card.dart'; import 'package:fluffychat/pangea/widgets/chat/message_unsubscribed_card.dart'; -import 'package:fluffychat/pangea/widgets/chat/overlay_footer.dart'; -import 'package:fluffychat/pangea/widgets/chat/overlay_header.dart'; import 'package:fluffychat/pangea/widgets/chat/overlay_message.dart'; import 'package:fluffychat/pangea/widgets/igc/word_data_card.dart'; import 'package:fluffychat/pangea/widgets/practice_activity/practice_activity_card.dart'; @@ -93,33 +92,11 @@ class ToolbarDisplayController { Widget overlayEntry; if (toolbar == null) return; try { - overlayEntry = Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - mainAxisSize: MainAxisSize.max, - children: [ - OverlayHeader( - controller: controller, - closeToolbar: closeToolbar, - ), - const SizedBox( - height: 7, - ), - Flexible( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - toolbar!, - const SizedBox(height: 9), - overlayMessage, - ], - ), - ), - const SizedBox( - height: 7, - ), - OverlayFooter(controller: controller), - ], + overlayEntry = MessageSelectionOverlay( + controller: controller, + closeToolbar: closeToolbar, + toolbar: toolbar!, + overlayMessage: overlayMessage, ); } catch (err) { debugger(when: kDebugMode); diff --git a/lib/pangea/widgets/chat/overlay_footer.dart b/lib/pangea/widgets/chat/overlay_footer.dart index df7ac2920..2fdb515a3 100644 --- a/lib/pangea/widgets/chat/overlay_footer.dart +++ b/lib/pangea/widgets/chat/overlay_footer.dart @@ -4,8 +4,6 @@ import 'package:fluffychat/pages/chat/chat_input_row.dart'; import 'package:fluffychat/pages/chat/reactions_picker.dart'; import 'package:flutter/material.dart'; -enum _EventContextAction { info, report } - class OverlayFooter extends StatelessWidget { ChatController controller; diff --git a/lib/pangea/widgets/chat/overlay_header.dart b/lib/pangea/widgets/chat/overlay_header.dart index f6da14281..b9a073125 100644 --- a/lib/pangea/widgets/chat/overlay_header.dart +++ b/lib/pangea/widgets/chat/overlay_header.dart @@ -5,8 +5,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; -enum _EventContextAction { info, report } - class OverlayHeader extends StatelessWidget { ChatController controller; Function closeToolbar; diff --git a/lib/pangea/widgets/chat/overlay_message.dart b/lib/pangea/widgets/chat/overlay_message.dart index 8d2764c7a..92f6252dd 100644 --- a/lib/pangea/widgets/chat/overlay_message.dart +++ b/lib/pangea/widgets/chat/overlay_message.dart @@ -90,6 +90,7 @@ class OverlayMessage extends StatelessWidget { ); return Flexible( + // Make overlay message scrollable so long messages don't run offscreen child: SingleChildScrollView( child: Material( color: noBubble ? Colors.transparent : color, diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index 7ab5ba61e..1ad2e6e08 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -143,9 +143,6 @@ class PangeaRichTextState extends State { (e) => e.eventId == widget.pangeaMessageEvent.eventId, ) ?? false)) { - // widget.toolbarController?.controller.onSelectMessage( - // widget.pangeaMessageEvent.event, - // ); return; } widget.toolbarController?.toolbar?.textSelection