From aabb97bc15de40898800803de40679afd4bababf Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Tue, 5 Aug 2025 10:59:30 -0400 Subject: [PATCH] chore: hide activity chat UI elements for older activity chats (#3627) --- lib/pages/chat/chat_event_list.dart | 48 +++++-------------- lib/pages/chat/chat_view.dart | 10 ++-- .../activity_pinned_message.dart | 44 ++++++++--------- .../activity_room_extension.dart | 17 +++++-- .../activity_status_message.dart | 6 ++- 5 files changed, 58 insertions(+), 67 deletions(-) diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index 63736b214..949652707 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/message.dart'; @@ -94,53 +93,30 @@ class ChatEventList extends StatelessWidget { // Request history button or progress indicator: if (i == events.length + 1) { if (timeline.isRequestingHistory) { - // #Pangea - // return const Center( - // child: CircularProgressIndicator.adaptive(strokeWidth: 2), - // ); - return const Column( - children: [ - SizedBox(height: AppConfig.toolbarMaxHeight), - Center( - child: CircularProgressIndicator.adaptive(strokeWidth: 2), - ), - ], + return const Center( + child: CircularProgressIndicator.adaptive(strokeWidth: 2), ); - // Pangea# } if (timeline.canRequestHistory) { return Builder( builder: (context) { // #Pangea - WidgetsBinding.instance - .addPostFrameCallback((_) => controller.requestHistory); - return Column( - children: [ - const SizedBox(height: AppConfig.toolbarMaxHeight), - Center( - child: IconButton( - onPressed: controller.requestHistory, - icon: const Icon(Icons.refresh_outlined), - ), - ), - ], - ); // WidgetsBinding.instance // .addPostFrameCallback(controller.requestHistory); - // return Center( - // child: IconButton( - // onPressed: controller.requestHistory, - // icon: const Icon(Icons.refresh_outlined), - // ), - // ); + WidgetsBinding.instance.addPostFrameCallback( + (_) => controller.requestHistory(), + ); // Pangea# + return Center( + child: IconButton( + onPressed: controller.requestHistory, + icon: const Icon(Icons.refresh_outlined), + ), + ); }, ); } - // #Pangea - // return const SizedBox.shrink(); - return const SizedBox(height: AppConfig.toolbarMaxHeight); - // Pangea# + return const SizedBox.shrink(); } i--; diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 1113b2b27..aeabaf585 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -424,8 +424,9 @@ class ChatView extends StatelessWidget { if (!controller.room.isAbandonedDMRoom && controller.room.canSendDefaultMessages && controller.room.membership == Membership.join && - controller.room.hasJoinedActivity && - !controller.room.hasFinishedActivity) + (controller.room.activityPlan == null || + !controller.room.showActivityChatUI || + controller.room.isActiveInActivity)) AnimatedSize( duration: const Duration(milliseconds: 200), child: SizedBox( @@ -441,8 +442,9 @@ class ChatView extends StatelessWidget { if (!controller.room.isAbandonedDMRoom && controller.room.canSendDefaultMessages && controller.room.membership == Membership.join && - controller.room.hasJoinedActivity && - !controller.room.hasFinishedActivity) + (controller.room.activityPlan == null || + !controller.room.showActivityChatUI || + controller.room.isActiveInActivity)) Positioned( left: 0, right: 0, diff --git a/lib/pangea/activity_planner/activity_pinned_message.dart b/lib/pangea/activity_planner/activity_pinned_message.dart index 5623f8d9d..24fbb2d50 100644 --- a/lib/pangea/activity_planner/activity_pinned_message.dart +++ b/lib/pangea/activity_planner/activity_pinned_message.dart @@ -64,7 +64,9 @@ class ActivityPinnedMessageState extends State { @override Widget build(BuildContext context) { - if (!room.hasJoinedActivity || room.activityPlan == null) { + // if the room has no activity, or if it doesn't have the permission + // levels for sending the required events, don't show the pinned message + if (!room.showActivityChatUI) { return const SizedBox.shrink(); } @@ -91,27 +93,25 @@ class ActivityPinnedMessageState extends State { leading: const SizedBox(width: 18.0), trailing: Padding( padding: const EdgeInsets.only(right: 12.0), - child: room.hasFinishedActivity - ? null - : ElevatedButton( - onPressed: - _showDropdown ? null : () => _setShowDropdown(true), - style: ElevatedButton.styleFrom( - minimumSize: Size.zero, - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 4.0, - ), - backgroundColor: theme.colorScheme.onSurface, - foregroundColor: theme.colorScheme.surface, - ), - child: Text( - L10n.of(context).done, - style: const TextStyle( - fontSize: 12.0, - ), - ), - ), + child: ElevatedButton( + onPressed: + _showDropdown ? null : () => _setShowDropdown(true), + style: ElevatedButton.styleFrom( + minimumSize: Size.zero, + padding: const EdgeInsets.symmetric( + horizontal: 12.0, + vertical: 4.0, + ), + backgroundColor: theme.colorScheme.onSurface, + foregroundColor: theme.colorScheme.surface, + ), + child: Text( + L10n.of(context).done, + style: const TextStyle( + fontSize: 12.0, + ), + ), + ), ), onTap: _scrollToActivity, ), diff --git a/lib/pangea/activity_planner/activity_room_extension.dart b/lib/pangea/activity_planner/activity_room_extension.dart index dcfad1a46..30c2a5ecd 100644 --- a/lib/pangea/activity_planner/activity_room_extension.dart +++ b/lib/pangea/activity_planner/activity_room_extension.dart @@ -196,13 +196,22 @@ extension ActivityRoomExtension on Room { .toList(); } - bool get hasJoinedActivity { - return activityPlan == null || activityRole(client.userID!) != null; + bool get showActivityChatUI { + return activityPlan != null && + powerForChangingStateEvent(PangeaEventTypes.activityRole) == 0 && + powerForChangingStateEvent(PangeaEventTypes.activitySummary) == 0; } - bool get hasFinishedActivity { + bool get isActiveInActivity { + if (!showActivityChatUI) return false; final role = activityRole(client.userID!); - return role != null && role.isFinished; + return role != null && !role.isFinished; + } + + bool get isInactiveInActivity { + if (!showActivityChatUI) return false; + final role = activityRole(client.userID!); + return role == null || role.isFinished; } bool get activityIsFinished { diff --git a/lib/pangea/activity_planner/activity_status_message.dart b/lib/pangea/activity_planner/activity_status_message.dart index d3e208583..392ceece8 100644 --- a/lib/pangea/activity_planner/activity_status_message.dart +++ b/lib/pangea/activity_planner/activity_status_message.dart @@ -33,10 +33,14 @@ class ActivityStatusMessageState extends State { @override Widget build(BuildContext context) { + if (!widget.room.showActivityChatUI) { + return const SizedBox.shrink(); + } + return Material( child: AnimatedSize( duration: FluffyThemes.animationDuration, - child: !widget.room.hasJoinedActivity || widget.room.activityIsFinished + child: widget.room.isInactiveInActivity ? Padding( padding: EdgeInsets.only( bottom: FluffyThemes.isColumnMode(context) ? 32.0 : 16.0,