From a7cd51d784cc781124998898228817cfb9887bfc Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 2 Dec 2025 11:30:05 -0500 Subject: [PATCH 1/3] fix: don't show the activity menu tutorial overlay if user has finished activity or if user has opened it before --- lib/config/app_config.dart | 1 + lib/config/setting_keys.dart | 2 + lib/pages/chat/chat.dart | 7 ++++ .../activity_stats_button.dart | 42 +++++++++---------- lib/widgets/matrix.dart | 4 ++ 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 4b263af4a..9f052678f 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -196,6 +196,7 @@ abstract class AppConfig { static String errorSubscriptionId = "pangea_subscription_error"; static double volume = 1.0; + static bool showedActivityMenu = false; // Pangea# static void loadFromJson(Map json) { diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index cae910913..c37e79f13 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -36,6 +36,8 @@ abstract class SettingKeys { 'chat.fluffy.display_navigation_rail'; // #Pangea static const String volume = 'pangea.volume'; + static const String showedActivityMenu = + 'pangea.showed_activity_menu_tutorial'; // Pangea# } diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index f71339c17..149a36e20 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -2246,6 +2246,13 @@ class ChatController extends State bool showActivityDropdown = false; void setShowDropdown(bool show) async { + if (show && !AppConfig.showedActivityMenu) { + AppConfig.showedActivityMenu = true; + Matrix.of(context).store.setBool( + SettingKeys.showedActivityMenu, + AppConfig.showedActivityMenu, + ); + } setState(() => showActivityDropdown = show); } diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart index 512ba8242..43375b10b 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart @@ -67,37 +67,33 @@ class _ActivityStatsButtonState extends State { Client get _client => widget.controller.room.client; bool get _shouldShowInstructions { - if (InstructionsEnum.activityStatsMenu.isToggledOff || - MatrixState.pAnyState.isOverlayOpen( - RegExp(r"^word-zoom-card-.*$"), - ) || + if (AppConfig.showedActivityMenu || + InstructionsEnum.activityStatsMenu.isToggledOff || + MatrixState.pAnyState.isOverlayOpen(RegExp(r"^word-zoom-card-.*$")) || widget.controller.timeline == null) { return false; } - // if someone has finished the activity, enable the tooltip + final userID = Matrix.of(context).client.userID!; final activityRoles = - widget.controller.room.activityRoles?.roles.values.toList() ?? []; - if (activityRoles.any((r) => r.isFinished)) { - return true; + widget.controller.room.activityRoles?.roles.values ?? []; + final finishedRoles = activityRoles.where((r) => r.isFinished); + + if (finishedRoles.isNotEmpty) { + return !finishedRoles.any((r) => r.userId == userID); } - // otherwise, if no one has finished, only show if the user has sent >= 3 messages - int count = 0; - for (final event in widget.controller.timeline!.events) { - if (event.senderId == _client.userID && - event.type == EventTypes.Message && - [ - MessageTypes.Text, - MessageTypes.Audio, - ].contains(event.messageType)) { - count++; - } + final count = widget.controller.timeline!.events + .where( + (event) => + event.senderId == userID && + event.type == EventTypes.Message && + {MessageTypes.Text, MessageTypes.Audio} + .contains(event.messageType), + ) + .length; - if (count >= 3) return true; - } - - return false; + return count >= 3; } int get _xpCount => diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 678ee8991..a6d1384af 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -541,6 +541,10 @@ class MatrixState extends State with WidgetsBindingObserver { // #Pangea AppConfig.volume = store.getDouble(SettingKeys.volume) ?? AppConfig.volume; + + AppConfig.showedActivityMenu = + store.getBool(SettingKeys.showedActivityMenu) ?? + AppConfig.showedActivityMenu; // Pangea# } From ddec81efe7118f0be12a02ab7695ab655c7e171a Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 2 Dec 2025 11:30:27 -0500 Subject: [PATCH 2/3] build: bump version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index f22f587ea..c05c2fa93 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ description: Learn a language while texting your friends. # Pangea# publish_to: none # On version bump also increase the build number for F-Droid -version: 4.1.15+7 +version: 4.1.15+8 environment: sdk: ">=3.0.0 <4.0.0" From ff9e31d33a017b167bba005b7a7fe86230e81d6f Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 2 Dec 2025 13:56:29 -0500 Subject: [PATCH 3/3] build: bump version number --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index c05c2fa93..2d61d5620 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ description: Learn a language while texting your friends. # Pangea# publish_to: none # On version bump also increase the build number for F-Droid -version: 4.1.15+8 +version: 4.1.15+9 environment: sdk: ">=3.0.0 <4.0.0"