diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index e2cd8b515..3b2a0dedf 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1856,7 +1856,10 @@ class ChatController extends State } } - void pinEvent() { + // #Pangea + // void pinEvent() { + Future pinEvent() async { + // Pangea# final pinnedEventIds = room.pinnedEventIds; final selectedEventIds = selectedEvents.map((e) => e.eventId).toSet(); final unpin = selectedEventIds.length == 1 && @@ -1866,10 +1869,16 @@ class ChatController extends State } else { pinnedEventIds.addAll(selectedEventIds); } - showFutureLoadingDialog( + // #Pangea + // showFutureLoadingDialog( + // context: context, + // future: () => room.setPinnedEvents(pinnedEventIds), + // ); + await showFutureLoadingDialog( context: context, future: () => room.setPinnedEvents(pinnedEventIds), ); + // Pangea# } Timer? _storeInputTimeoutTimer; diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index 11bbfba52..6728e69c0 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -77,6 +77,8 @@ class AudioPlayerState extends State { // #Pangea StreamSubscription? _onAudioPositionChanged; StreamSubscription? _onAudioStateChanged; + + double playbackSpeed = 1.0; // Pangea# @override @@ -175,6 +177,9 @@ class AudioPlayerState extends State { : matrix.audioPlayer; if (currentPlayer != null) { + // #Pangea + currentPlayer.setSpeed(playbackSpeed); + // Pangea# if (currentPlayer.isAtEndPosition) { currentPlayer.seek(Duration.zero); } else if (currentPlayer.playing) { @@ -250,6 +255,7 @@ class AudioPlayerState extends State { final audioPlayer = matrix.audioPlayer = AudioPlayer(); // #Pangea + audioPlayer.setSpeed(playbackSpeed); _onAudioPositionChanged?.cancel(); _onAudioPositionChanged = matrix.audioPlayer!.positionStream.listen((state) { @@ -306,7 +312,25 @@ class AudioPlayerState extends State { void _toggleSpeed() async { final audioPlayer = matrix.audioPlayer; - if (audioPlayer == null) return; + // #Pangea + // if (audioPlayer == null) return; + if (audioPlayer == null || + matrix.voiceMessageEventId.value != widget.eventId) { + switch (playbackSpeed) { + case 1.0: + setState(() => playbackSpeed = 0.75); + case 0.75: + setState(() => playbackSpeed = 0.5); + case 0.5: + setState(() => playbackSpeed = 1.25); + case 1.25: + setState(() => playbackSpeed = 1.5); + default: + setState(() => playbackSpeed = 1.0); + } + return; + } + // Pangea# switch (audioPlayer.speed) { // #Pangea // case 1.0: @@ -599,7 +623,7 @@ class AudioPlayerState extends State { height: 20, child: Center( child: Text( - '${audioPlayer?.speed.toString() ?? 1}x', + '${audioPlayer?.speed.toString() ?? playbackSpeed}x', style: TextStyle( color: widget.color, fontSize: 9, diff --git a/lib/pangea/toolbar/widgets/overlay_header.dart b/lib/pangea/toolbar/widgets/overlay_header.dart index a13e1c2a4..81bb4aba4 100644 --- a/lib/pangea/toolbar/widgets/overlay_header.dart +++ b/lib/pangea/toolbar/widgets/overlay_header.dart @@ -109,10 +109,15 @@ class OverlayHeaderState extends State { icon: pinned ? const Icon(Icons.push_pin) : const Icon(Icons.push_pin_outlined), - onPressed: controller.pinEvent, + onPressed: () { + controller + .pinEvent() + .then((_) => setState(() {})); + }, tooltip: pinned ? l10n.unpin : l10n.pinMessage, color: theme.colorScheme.primary, ), + if (controller.canEditSelectedEvents && !controller.selectedEvents.first.isActivityMessage) IconButton( 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 a3e9481cb..dcb86b6eb 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart @@ -73,15 +73,18 @@ class WordZoomWidget extends StatelessWidget { ), ), ), - Text( - token.text.content, - style: TextStyle( - fontSize: 32.0, - fontWeight: FontWeight.w600, - height: 1.2, - color: Theme.of(context).brightness == Brightness.light - ? AppConfig.yellowDark - : AppConfig.yellowLight, + Flexible( + child: Text( + token.text.content, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 32.0, + fontWeight: FontWeight.w600, + height: 1.2, + color: Theme.of(context).brightness == Brightness.light + ? AppConfig.yellowDark + : AppConfig.yellowLight, + ), ), ), ConstructXpWidget(