From dc6e7b0762bd1f365c0284d3675f59eaa2f9470c Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 18 Dec 2025 14:59:44 -0500 Subject: [PATCH] feat: play audio on token click and on construct click in vocab analytics --- lib/pages/chat/events/message_content.dart | 11 ----------- .../vocab_analytics_list_view.dart | 14 +++++++++++--- lib/pangea/toolbar/message_selection_overlay.dart | 8 ++++++++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 814a37e57..1255d28dd 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -10,7 +10,6 @@ import 'package:fluffychat/pages/chat/events/video_player.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; import 'package:fluffychat/utils/event_checkbox_extension.dart'; @@ -135,16 +134,6 @@ class MessageContent extends StatelessWidget { if (overlayController != null) { overlayController?.onClickOverlayMessageToken(token); return; - } else { - Future.delayed( - const Duration( - milliseconds: AppConfig.overlayAnimationDuration, - ), () { - TtsController.tryToSpeak( - token.text.content, - langCode: pangeaMessageEvent!.messageDisplayLangCode, - ); - }); } controller.showToolbar( diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart index 64b3087e9..d166c2b2d 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart @@ -14,6 +14,7 @@ import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Displays vocab analytics, sorted into categories @@ -174,9 +175,16 @@ class VocabAnalyticsListView extends StatelessWidget { (context, index) { final vocabItem = _filteredVocab[index]; return VocabAnalyticsListTile( - onTap: () => context.go( - "/rooms/analytics/${vocabItem.id.type.string}/${Uri.encodeComponent(vocabItem.id.string)}", - ), + onTap: () { + TtsController.tryToSpeak( + vocabItem.id.lemma, + langCode: MatrixState.pangeaController + .userController.userL2Code!, + ); + context.go( + "/rooms/analytics/${vocabItem.id.type.string}/${Uri.encodeComponent(vocabItem.id.string)}", + ); + }, constructId: vocabItem.id, textColor: Theme.of(context).brightness == Brightness.light diff --git a/lib/pangea/toolbar/message_selection_overlay.dart b/lib/pangea/toolbar/message_selection_overlay.dart index 4dacbbdb8..af3d5494d 100644 --- a/lib/pangea/toolbar/message_selection_overlay.dart +++ b/lib/pangea/toolbar/message_selection_overlay.dart @@ -19,6 +19,7 @@ import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_ev import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/pangea/toolbar/layout/message_selection_positioner.dart'; import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; @@ -202,6 +203,13 @@ class MessageOverlayController extends State selectedTokenNotifier.value = selectedToken; selectModeController.setPlayingToken(selectedToken?.text); + if (selectedToken != null) { + TtsController.tryToSpeak( + selectedToken!.text.content, + langCode: pangeaMessageEvent.messageDisplayLangCode, + ); + } + if (mounted) { setState(() {}); if (selectedToken != null && isNewToken(selectedToken!)) {