From 772c0daa88a8883e6227909216bb3a1cca692cad Mon Sep 17 00:00:00 2001 From: wcjord <32568597+wcjord@users.noreply.github.com> Date: Tue, 3 Feb 2026 17:51:28 -0500 Subject: [PATCH 1/3] feat: add new parts of speech (idiom, phrasal verb, compound) and update localization (#5564) --- lib/l10n/intl_en.arb | 3 +++ lib/pangea/morphs/parts_of_speech_enum.dart | 24 +++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index f61e52653..a47f1a03e 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -3809,6 +3809,9 @@ "grammarCopyPOSpropn": "Proper Noun", "grammarCopyPOSnoun": "Noun", "grammarCopyPOSintj": "Interjection", + "grammarCopyPOSidiom": "Idiom", + "grammarCopyPOSphrasalv": "Phrasal Verb", + "grammarCopyPOScompn": "Compound", "grammarCopyPOSx": "Other", "grammarCopyGENDERfem": "Feminine", "grammarCopyPERSON2": "Second Person", diff --git a/lib/pangea/morphs/parts_of_speech_enum.dart b/lib/pangea/morphs/parts_of_speech_enum.dart index c9103781d..754024a71 100644 --- a/lib/pangea/morphs/parts_of_speech_enum.dart +++ b/lib/pangea/morphs/parts_of_speech_enum.dart @@ -1,13 +1,11 @@ import 'dart:developer'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; /// list ordered by priority enum PartOfSpeechEnum { @@ -16,6 +14,9 @@ enum PartOfSpeechEnum { verb, adj, adv, + idiom, + phrasalv, + compn, //Function tokens sconj, @@ -86,6 +87,12 @@ enum PartOfSpeechEnum { return L10n.of(context).grammarCopyPOSnoun; case PartOfSpeechEnum.intj: return L10n.of(context).grammarCopyPOSintj; + case PartOfSpeechEnum.idiom: + return L10n.of(context).grammarCopyPOSidiom; + case PartOfSpeechEnum.phrasalv: + return L10n.of(context).grammarCopyPOSphrasalv; + case PartOfSpeechEnum.compn: + return L10n.of(context).grammarCopyPOScompn; case PartOfSpeechEnum.x: return L10n.of(context).grammarCopyPOSx; } @@ -96,6 +103,9 @@ enum PartOfSpeechEnum { PartOfSpeechEnum.verb, PartOfSpeechEnum.adj, PartOfSpeechEnum.adv, + PartOfSpeechEnum.idiom, + PartOfSpeechEnum.phrasalv, + PartOfSpeechEnum.compn, ].contains(this); bool get canBeDefined => [ @@ -112,6 +122,9 @@ enum PartOfSpeechEnum { PartOfSpeechEnum.adp, PartOfSpeechEnum.aux, PartOfSpeechEnum.num, + PartOfSpeechEnum.idiom, + PartOfSpeechEnum.phrasalv, + PartOfSpeechEnum.compn, ].contains(this); bool get canBeHeard => [ @@ -128,6 +141,9 @@ enum PartOfSpeechEnum { PartOfSpeechEnum.adp, PartOfSpeechEnum.aux, PartOfSpeechEnum.num, + PartOfSpeechEnum.idiom, + PartOfSpeechEnum.phrasalv, + PartOfSpeechEnum.compn, ].contains(this); bool eligibleForPractice(ActivityTypeEnum activityType) { From ee223a94da4cb9293b0c43146605b4a45435e70e Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 4 Feb 2026 09:09:56 -0500 Subject: [PATCH 2/3] fix: include stt for audio messages in level summary request --- .../level_up_analytics_service.dart | 17 +++++++++++++---- lib/pangea/morphs/parts_of_speech_enum.dart | 6 ++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/pangea/analytics_data/level_up_analytics_service.dart b/lib/pangea/analytics_data/level_up_analytics_service.dart index 2004638d7..532a5252c 100644 --- a/lib/pangea/analytics_data/level_up_analytics_service.dart +++ b/lib/pangea/analytics_data/level_up_analytics_service.dart @@ -84,10 +84,19 @@ class LevelUpAnalyticsService { ownMessage: room.client.userID == event.senderId, ); - messages.add({ - 'sent': pangeaEvent.originalSent?.text ?? pangeaEvent.body, - 'written': pangeaEvent.originalWrittenContent, - }); + if (pangeaEvent.isAudioMessage) { + final stt = pangeaEvent.getSpeechToTextLocal(); + if (stt == null) continue; + messages.add({ + 'sent': stt.transcript.text, + 'written': stt.transcript.text, + }); + } else { + messages.add({ + 'sent': pangeaEvent.originalSent?.text ?? pangeaEvent.body, + 'written': pangeaEvent.originalWrittenContent, + }); + } } catch (e, s) { ErrorHandler.logError( e: e, diff --git a/lib/pangea/morphs/parts_of_speech_enum.dart b/lib/pangea/morphs/parts_of_speech_enum.dart index 754024a71..1aad8de71 100644 --- a/lib/pangea/morphs/parts_of_speech_enum.dart +++ b/lib/pangea/morphs/parts_of_speech_enum.dart @@ -1,11 +1,13 @@ import 'dart:developer'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + import 'package:collection/collection.dart'; + import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; /// list ordered by priority enum PartOfSpeechEnum { From 04cd8184064b5d11a609e7717c903c926783a81f Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 4 Feb 2026 13:58:28 -0500 Subject: [PATCH 3/3] fix: don't pop from language selection page when not possible --- lib/pangea/login/pages/language_selection_page.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/pangea/login/pages/language_selection_page.dart b/lib/pangea/login/pages/language_selection_page.dart index 772425fa9..f1f3f22e7 100644 --- a/lib/pangea/login/pages/language_selection_page.dart +++ b/lib/pangea/login/pages/language_selection_page.dart @@ -111,9 +111,11 @@ class LanguageSelectionPageState extends State { child: Row( spacing: 12.0, children: [ - BackButton( - onPressed: Navigator.of(context).pop, - ), + Navigator.of(context).canPop() + ? BackButton( + onPressed: Navigator.of(context).maybePop, + ) + : const SizedBox(width: 40.0), Expanded( child: LayoutBuilder( builder: (context, constraints) {