From efa189ea883c3d1a9d3b0d2d63e6904291c35a68 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Tue, 9 Dec 2025 11:01:03 -0500 Subject: [PATCH] Show all toolbar buttons, snackbar on click disabled button --- lib/l10n/intl_en.arb | 3 +- .../select_mode_buttons.dart | 66 +++++++++++-------- .../select_mode_controller.dart | 13 ++++ 3 files changed, 55 insertions(+), 27 deletions(-) diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index bdf2c092a..b1ead258e 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -4996,5 +4996,6 @@ "man": "Man", "otherGender": "Other", "unselectedGender": "Select a gender option", - "gender": "Gender" + "gender": "Gender", + "modeDisabled": "Learning tools are disabled for messages that aren't in your target language." } diff --git a/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart b/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart index 4bc0117b8..c5b59393b 100644 --- a/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart +++ b/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart @@ -210,6 +210,14 @@ class SelectModeButtonsState extends State { } } + Future modeDisabled() async { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(L10n.of(context).modeDisabled), + ), + ); + } + Future playAudio() async { final playerID = "${messageEvent.eventId}_button"; @@ -299,15 +307,17 @@ class SelectModeButtonsState extends State { Widget build(BuildContext context) { final theme = Theme.of(context); final modes = controller.readingAssistanceModes; + final allModes = controller.allModes; return Material( type: MaterialType.transparency, child: SizedBox( height: AppConfig.toolbarMenuHeight, child: Row( mainAxisSize: MainAxisSize.min, - children: List.generate(modes.length + 1, (index) { - if (index < modes.length) { - final mode = modes[index]; + children: List.generate(allModes.length + 1, (index) { + if (index < allModes.length) { + final mode = allModes[index]; + final enabled = modes.contains(mode); return Container( width: 45.0, alignment: Alignment.center, @@ -322,29 +332,33 @@ class SelectModeButtonsState extends State { ), builder: (context, _) { final selectedMode = controller.selectedMode.value; - return PressableButton( - borderRadius: BorderRadius.circular(20), - depressed: mode == selectedMode, - color: theme.colorScheme.primaryContainer, - onPressed: () => updateMode(mode), - playSound: mode != SelectMode.audio, - colorFactor: - theme.brightness == Brightness.light ? 0.55 : 0.3, - child: AnimatedContainer( - duration: FluffyThemes.animationDuration, - height: buttonSize, - width: buttonSize, - decoration: BoxDecoration( - color: theme.colorScheme.primaryContainer, - shape: BoxShape.circle, - ), - child: _SelectModeButtonIcon( - mode: mode, - loading: - controller.isLoading && mode == selectedMode, - playing: mode == SelectMode.audio && - matrix?.audioPlayer?.playerState.playing == - true, + return Opacity( + opacity: enabled ? 1.0 : 0.5, + child: PressableButton( + borderRadius: BorderRadius.circular(20), + depressed: mode == selectedMode, + color: theme.colorScheme.primaryContainer, + onPressed: + enabled ? () => updateMode(mode) : modeDisabled, + playSound: enabled && mode != SelectMode.audio, + colorFactor: + theme.brightness == Brightness.light ? 0.55 : 0.3, + child: AnimatedContainer( + duration: FluffyThemes.animationDuration, + height: buttonSize, + width: buttonSize, + decoration: BoxDecoration( + color: theme.colorScheme.primaryContainer, + shape: BoxShape.circle, + ), + child: _SelectModeButtonIcon( + mode: mode, + loading: + controller.isLoading && mode == selectedMode, + playing: mode == SelectMode.audio && + matrix?.audioPlayer?.playerState.playing == + true, + ), ), ), ); diff --git a/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart b/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart index 7fd425d53..184844e8d 100644 --- a/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart +++ b/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart @@ -119,6 +119,19 @@ class SelectModeController { (PangeaAudioFile, File?)? get audioFile => _audioLoader.value; + List get allModes { + final validTypes = {MessageTypes.Text, MessageTypes.Audio}; + if (!messageEvent.event.status.isSent || + messageEvent.event.type != EventTypes.Message || + !validTypes.contains(messageEvent.event.messageType)) { + return []; + } + + return messageEvent.event.messageType == MessageTypes.Text + ? _textModes + : _audioModes; + } + List get readingAssistanceModes { final validTypes = {MessageTypes.Text, MessageTypes.Audio}; if (!messageEvent.event.status.isSent ||