diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart
index a2953d768..2b0294d0d 100644
--- a/lib/pages/chat/events/html_message.dart
+++ b/lib/pages/chat/events/html_message.dart
@@ -253,7 +253,8 @@ class HtmlMessage extends StatelessWidget {
? isSelected!.call(token)
: false;
- final shouldDo = token?.shouldDoActivity(
+ final shouldDo = pangeaMessageEvent?.shouldDoActivity(
+ token: token,
a: ActivityTypeEnum.wordMeaning,
feature: null,
tag: null,
diff --git a/lib/pangea/analytics_misc/message_analytics_controller.dart b/lib/pangea/analytics_misc/message_analytics_controller.dart
index ffb6f4e2f..24e3c2cb2 100644
--- a/lib/pangea/analytics_misc/message_analytics_controller.dart
+++ b/lib/pangea/analytics_misc/message_analytics_controller.dart
@@ -71,6 +71,8 @@ class MessageAnalyticsEntry {
late final bool _includeHiddenWordActivities;
+ late final PangeaMessageEvent _pangeaMessageEvent;
+
final List _activityQueue = [];
final int _maxQueueLength = 3;
@@ -78,9 +80,11 @@ class MessageAnalyticsEntry {
MessageAnalyticsEntry({
required List tokens,
required bool includeHiddenWordActivities,
+ required PangeaMessageEvent pangeaMessageEvent,
}) {
_tokens = tokens;
_includeHiddenWordActivities = includeHiddenWordActivities;
+ _pangeaMessageEvent = pangeaMessageEvent;
setActivityQueue();
}
@@ -171,7 +175,8 @@ class MessageAnalyticsEntry {
final List> sequences = [];
List currentSequence = [];
for (final token in _tokens) {
- if (token.shouldDoActivity(
+ if (_pangeaMessageEvent.shouldDoActivity(
+ token: token,
a: ActivityTypeEnum.hiddenWordListening,
feature: null,
tag: null,
@@ -257,6 +262,7 @@ class MessageAnalyticsController {
_cache[key] = MessageAnalyticsEntry(
tokens: tokens,
includeHiddenWordActivities: includeHiddenWordActivities,
+ pangeaMessageEvent: pangeaMessageEvent,
);
clean();
diff --git a/lib/pangea/events/event_wrappers/pangea_message_event.dart b/lib/pangea/events/event_wrappers/pangea_message_event.dart
index fbcbb5508..b0ddd2315 100644
--- a/lib/pangea/events/event_wrappers/pangea_message_event.dart
+++ b/lib/pangea/events/event_wrappers/pangea_message_event.dart
@@ -13,6 +13,7 @@ import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.
import 'package:fluffychat/pangea/common/constants/model_keys.dart';
import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_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/events/models/representation_content_model.dart';
import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart';
import 'package:fluffychat/pangea/spaces/models/space_model.dart';
@@ -578,7 +579,8 @@ class PangeaMessageEvent {
if (eligibleTokens.isEmpty) return 1;
final alreadyDid = eligibleTokens.where(
- (token) => !token.shouldDoActivity(
+ (token) => !shouldDoActivity(
+ token: token,
a: ActivityTypeEnum.wordMeaning,
feature: null,
tag: null,
@@ -697,4 +699,21 @@ class PangeaMessageEvent {
l2Code == null ? [] : practiceActivitiesByLangCode(l2Code!);
bool get shouldShowToolbar => !event.isActivityMessage;
+
+ bool shouldDoActivity({
+ required PangeaToken? token,
+ required ActivityTypeEnum a,
+ required String? feature,
+ required String? tag,
+ }) {
+ if (!messageDisplayLangIsL2 || token == null) {
+ return false;
+ }
+
+ return token.shouldDoActivity(
+ a: a,
+ feature: feature,
+ tag: tag,
+ );
+ }
}
diff --git a/lib/pangea/events/models/pangea_token_model.dart b/lib/pangea/events/models/pangea_token_model.dart
index bd41deb8e..1050573af 100644
--- a/lib/pangea/events/models/pangea_token_model.dart
+++ b/lib/pangea/events/models/pangea_token_model.dart
@@ -388,16 +388,6 @@ class PangeaToken {
}
}
- bool get shouldDoPosActivity => shouldDoMorphActivity("pos");
-
- bool shouldDoMorphActivity(String feature) {
- return shouldDoActivity(
- a: ActivityTypeEnum.morphId,
- feature: feature,
- tag: getMorphTag(feature),
- );
- }
-
/// Safely get morph tag for a given feature without regard for case
String? getMorphTag(String feature) {
if (morph.containsKey(feature)) return morph[feature];
@@ -463,22 +453,6 @@ class PangeaToken {
_isActivityProbablyLevelAppropriate(a, feature, tag);
}
- List get eligibleActivityTypes {
- final List eligibleActivityTypes = [];
-
- if (!lemma.saveVocab) {
- return eligibleActivityTypes;
- }
-
- for (final type in ActivityTypeEnum.values) {
- if (shouldDoActivity(a: type, feature: null, tag: null)) {
- eligibleActivityTypes.add(type);
- }
- }
-
- return eligibleActivityTypes;
- }
-
ConstructUses get vocabConstruct =>
MatrixState.pangeaController.getAnalytics.constructListModel
.getConstructUses(
@@ -577,14 +551,6 @@ class PangeaToken {
.cast()
.toList();
- Map toServerChoiceTokenWithXP() {
- return {
- 'token': toJson(),
- 'constructs_with_xp': constructs.map((e) => e.toJson()).toList(),
- 'target_types': eligibleActivityTypes.map((e) => e.string).toList(),
- };
- }
-
Future> getEmojiChoices() => LemmaInfoRepo.get(
LemmaInfoRequest(
lemma: lemma.text,
diff --git a/lib/pangea/toolbar/widgets/message_token_text.dart b/lib/pangea/toolbar/widgets/message_token_text.dart
index b4dcc1758..3439975dd 100644
--- a/lib/pangea/toolbar/widgets/message_token_text.dart
+++ b/lib/pangea/toolbar/widgets/message_token_text.dart
@@ -197,12 +197,12 @@ class MessageTextWidget extends StatelessWidget {
text: TextSpan(
children:
tokenPositions.mapIndexed((int i, TokenPosition tokenPosition) {
- final shouldDo = tokenPosition.token?.shouldDoActivity(
- a: ActivityTypeEnum.wordMeaning,
- feature: null,
- tag: null,
- ) ??
- false;
+ final shouldDo = pangeaMessageEvent.shouldDoActivity(
+ token: tokenPosition.token,
+ a: ActivityTypeEnum.wordMeaning,
+ feature: null,
+ tag: null,
+ );
final didMeaningActivity =
tokenPosition.token?.didActivitySuccessfully(
diff --git a/lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart b/lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart
index 2c956e25e..b1ef4c2e9 100644
--- a/lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart
+++ b/lib/pangea/toolbar/widgets/practice_activity/emoji_practice_button.dart
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:fluffychat/pangea/events/models/pangea_token_model.dart';
-import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart';
import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart';
class EmojiPracticeButton extends StatelessWidget {
@@ -16,22 +15,14 @@ class EmojiPracticeButton extends StatelessWidget {
super.key,
});
- bool get _shouldDoActivity => token.shouldDoActivity(
- a: ActivityTypeEnum.emoji,
- feature: null,
- tag: null,
- );
-
@override
Widget build(BuildContext context) {
final emoji = token.getEmoji();
- return _shouldDoActivity || emoji != null
+ return emoji != null
? SizedBox(
width: 40,
child: WordZoomActivityButton(
- icon: emoji == null
- ? const Icon(Icons.add_reaction_outlined)
- : Text(emoji),
+ icon: Text(emoji),
isSelected: isSelected,
onPressed: onPressed,
),
diff --git a/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart
index 8f809409a..64f8e9fc3 100644
--- a/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart
+++ b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_widget.dart
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
+import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart';
import 'package:fluffychat/pangea/events/models/pangea_token_model.dart';
+import 'package:fluffychat/pangea/toolbar/enums/activity_type_enum.dart';
import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart';
class ActivityMorph {
@@ -16,12 +18,14 @@ class ActivityMorph {
}
class MorphologicalListWidget extends StatelessWidget {
+ final PangeaMessageEvent pangeaMessageEvent;
final PangeaToken token;
final String? selectedMorphFeature;
final Function(String?) setMorphFeature;
const MorphologicalListWidget({
super.key,
+ required this.pangeaMessageEvent,
required this.selectedMorphFeature,
required this.token,
required this.setMorphFeature,
@@ -32,7 +36,12 @@ class MorphologicalListWidget extends StatelessWidget {
return ActivityMorph(
morphFeature: entry.key,
morphTag: entry.value,
- revealed: !token.shouldDoMorphActivity(entry.key),
+ revealed: !pangeaMessageEvent.shouldDoActivity(
+ token: token,
+ a: ActivityTypeEnum.morphId,
+ feature: entry.key,
+ tag: token.getMorphTag(entry.key),
+ ),
);
}).toList();
diff --git a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart
index e5e71ffaa..bc5609556 100644
--- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart
+++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart
@@ -176,7 +176,8 @@ class WordZoomWidgetState extends State {
}
bool _shouldShowActivity(WordZoomSelection selection) {
- final shouldDo = widget.token.shouldDoActivity(
+ final shouldDo = widget.messageEvent.shouldDoActivity(
+ token: widget.token,
a: selection.activityType,
feature: _selectedMorphFeature,
tag: _selectedMorphFeature == null
@@ -272,6 +273,7 @@ class WordZoomWidgetState extends State {
wordDetailsController: this,
),
MorphologicalListWidget(
+ pangeaMessageEvent: widget.messageEvent,
token: widget.token,
setMorphFeature: (feature) => _setSelectionType(
WordZoomSelection.morph,