feat: show translation option for messages outside of user L2
This commit is contained in:
parent
895654b2b5
commit
b6d4db9d08
3 changed files with 35 additions and 57 deletions
|
|
@ -134,16 +134,9 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
|
|||
}
|
||||
}
|
||||
|
||||
/// Decides whether an _initialSelectedToken should be used
|
||||
/// for a first practice activity on the word meaning
|
||||
Future<void> _initializeSelectedToken() async {
|
||||
// if there is no initial selected token, then we don't need to do anything
|
||||
if (widget._initialSelectedToken == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
updateSelectedSpan(widget._initialSelectedToken!.text);
|
||||
}
|
||||
void _initializeSelectedToken() => widget._initialSelectedToken != null
|
||||
? updateSelectedSpan(widget._initialSelectedToken!.text)
|
||||
: null;
|
||||
|
||||
/////////////////////////////////////
|
||||
/// State setting
|
||||
|
|
@ -250,19 +243,6 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
|
|||
?.firstWhereOrNull(isTokenSelected);
|
||||
}
|
||||
|
||||
bool get showLanguageAssistance {
|
||||
if (!event.status.isSent || event.type != EventTypes.Message) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (event.messageType == MessageTypes.Text) {
|
||||
return pangeaMessageEvent.messageDisplayLangCode.split("-").first ==
|
||||
MatrixState.pangeaController.languageController.userL2!.langCodeShort;
|
||||
}
|
||||
|
||||
return event.messageType == MessageTypes.Audio;
|
||||
}
|
||||
|
||||
/// If sentence TTS is playing a word, highlight that word in message overlay
|
||||
void highlightCurrentText(int currentPosition, List<TTSToken> ttsTokens) {
|
||||
final List<TTSToken> textToSelect = [];
|
||||
|
|
@ -302,22 +282,8 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
|
|||
|
||||
void onClickOverlayMessageToken(
|
||||
PangeaToken token,
|
||||
) {
|
||||
// /// we don't want to associate the audio with the text in this mode
|
||||
// if (practiceSelection?.hasActiveActivityByToken(
|
||||
// ActivityTypeEnum.wordFocusListening,
|
||||
// token,
|
||||
// ) ==
|
||||
// false ||
|
||||
// !hideWordCardContent) {
|
||||
// TtsController.tryToSpeak(
|
||||
// token.text.content,
|
||||
// targetID: null,
|
||||
// langCode: pangeaMessageEvent.messageDisplayLangCode,
|
||||
// );
|
||||
// }
|
||||
updateSelectedSpan(token.text);
|
||||
}
|
||||
) =>
|
||||
updateSelectedSpan(token.text);
|
||||
|
||||
/// Whether the given token is currently selected or highlighted
|
||||
bool isTokenSelected(PangeaToken token) {
|
||||
|
|
|
|||
|
|
@ -146,17 +146,6 @@ class SelectModeButtonsState extends State<SelectModeButtons> {
|
|||
StreamSubscription? _playerStateSub;
|
||||
StreamSubscription? _audioSub;
|
||||
|
||||
static List<SelectMode> get textModes => [
|
||||
SelectMode.audio,
|
||||
SelectMode.translate,
|
||||
SelectMode.practice,
|
||||
SelectMode.emoji,
|
||||
];
|
||||
|
||||
static List<SelectMode> get audioModes => [
|
||||
SelectMode.speechTranslation,
|
||||
];
|
||||
|
||||
MatrixState? matrix;
|
||||
|
||||
@override
|
||||
|
|
@ -309,13 +298,7 @@ class SelectModeButtonsState extends State<SelectModeButtons> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
final List<SelectMode> modes =
|
||||
widget.overlayController.showLanguageAssistance
|
||||
? messageEvent.isAudioMessage == true
|
||||
? audioModes
|
||||
: textModes
|
||||
: [];
|
||||
|
||||
final modes = controller.readingAssistanceModes;
|
||||
return Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SizedBox(
|
||||
|
|
|
|||
|
|
@ -113,6 +113,17 @@ class SelectModeController {
|
|||
contentChangedStream.close();
|
||||
}
|
||||
|
||||
static List<SelectMode> get textModes => [
|
||||
SelectMode.audio,
|
||||
SelectMode.translate,
|
||||
SelectMode.practice,
|
||||
SelectMode.emoji,
|
||||
];
|
||||
|
||||
static List<SelectMode> get audioModes => [
|
||||
SelectMode.speechTranslation,
|
||||
];
|
||||
|
||||
ValueNotifier<AsyncState<String>> get translationState =>
|
||||
_translationLoader.state;
|
||||
|
||||
|
|
@ -124,6 +135,24 @@ class SelectModeController {
|
|||
|
||||
(PangeaAudioFile, File?)? get audioFile => _audioLoader.value;
|
||||
|
||||
List<SelectMode> get readingAssistanceModes {
|
||||
final validTypes = {MessageTypes.Text, MessageTypes.Audio};
|
||||
if (!messageEvent.event.status.isSent ||
|
||||
messageEvent.event.type != EventTypes.Message ||
|
||||
!validTypes.contains(messageEvent.event.messageType)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (messageEvent.event.messageType == MessageTypes.Text) {
|
||||
final matchesL2 = messageEvent.messageDisplayLangCode.split("-").first ==
|
||||
MatrixState.pangeaController.languageController.userL2!.langCodeShort;
|
||||
|
||||
return matchesL2 ? textModes : [SelectMode.translate];
|
||||
}
|
||||
|
||||
return audioModes;
|
||||
}
|
||||
|
||||
bool get isLoading => currentModeStateNotifier?.value is AsyncLoading;
|
||||
|
||||
bool get isShowingExtraContent =>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue