chore: stop audio message playing on 1) navigate to different route, 2) play other message, 3) open toolbar (#1982)

pull/1688/head
ggurdin 9 months ago committed by GitHub
parent f839b79e81
commit 912efa7bb8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -612,6 +612,7 @@ class ChatController extends State<ChatPageWithRoom>
clearSelectedEvents(); clearSelectedEvents();
MatrixState.pAnyState.closeOverlay(); MatrixState.pAnyState.closeOverlay();
showToolbarStream.close(); showToolbarStream.close();
stopAudioStream.close();
hideTextController.dispose(); hideTextController.dispose();
_levelSubscription?.cancel(); _levelSubscription?.cancel();
//Pangea# //Pangea#
@ -1771,6 +1772,8 @@ class ChatController extends State<ChatPageWithRoom>
final StreamController<String> showToolbarStream = final StreamController<String> showToolbarStream =
StreamController.broadcast(); StreamController.broadcast();
final StreamController<void> stopAudioStream = StreamController.broadcast();
void showToolbar( void showToolbar(
Event event, { Event event, {
PangeaMessageEvent? pangeaMessageEvent, PangeaMessageEvent? pangeaMessageEvent,
@ -1827,6 +1830,8 @@ class ChatController extends State<ChatPageWithRoom>
HapticFeedback.mediumImpact(); HapticFeedback.mediumImpact();
} }
stopAudioStream.add(null);
Future.delayed( Future.delayed(
Duration(milliseconds: buttonEventID == event.eventId ? 200 : 0), () { Duration(milliseconds: buttonEventID == event.eventId ? 200 : 0), () {
OverlayUtil.showOverlay( OverlayUtil.showOverlay(

@ -131,6 +131,7 @@ class ChatView extends StatelessWidget {
icon: const Icon(Icons.search_outlined), icon: const Icon(Icons.search_outlined),
tooltip: L10n.of(context).search, tooltip: L10n.of(context).search,
onPressed: () { onPressed: () {
controller.stopAudioStream.add(null);
context.go('/rooms/${controller.room.id}/search'); context.go('/rooms/${controller.room.id}/search');
}, },
), ),
@ -139,6 +140,7 @@ class ChatView extends StatelessWidget {
icon: const Icon(Icons.settings_outlined), icon: const Icon(Icons.settings_outlined),
tooltip: L10n.of(context).chatDetails, tooltip: L10n.of(context).chatDetails,
onPressed: () { onPressed: () {
controller.stopAudioStream.add(null);
if (GoRouterState.of(context).uri.path.endsWith('/details')) { if (GoRouterState.of(context).uri.path.endsWith('/details')) {
context.go('/rooms/${controller.room.id}'); context.go('/rooms/${controller.room.id}');
} else { } else {

@ -171,6 +171,9 @@ class AudioPlayerState extends State<AudioPlayerWidget> {
void _playAction() async { void _playAction() async {
final audioPlayer = this.audioPlayer ??= AudioPlayer(); final audioPlayer = this.audioPlayer ??= AudioPlayer();
// #Pangea // #Pangea
// if there's another audio playing, stop it
widget.chatController.stopAudioStream.add(null);
// if (AudioPlayerWidget.currentId != widget.event.eventId) { // if (AudioPlayerWidget.currentId != widget.event.eventId) {
if (AudioPlayerWidget.currentId != widget.event?.eventId) { if (AudioPlayerWidget.currentId != widget.event?.eventId) {
// Pangea# // Pangea#
@ -361,7 +364,7 @@ class AudioPlayerState extends State<AudioPlayerWidget> {
} }
_onShowToolbar = _onShowToolbar =
widget.chatController.showToolbarStream.stream.listen((eventID) { widget.chatController.stopAudioStream.stream.listen((eventID) {
audioPlayer?.pause(); audioPlayer?.pause();
audioPlayer?.seek(Duration.zero); audioPlayer?.seek(Duration.zero);
}); });

@ -22,7 +22,10 @@ class ActivityPlanPageLaunchIconButton extends StatelessWidget {
return IconButton( return IconButton(
icon: const Icon(Icons.event_note_outlined), icon: const Icon(Icons.event_note_outlined),
tooltip: L10n.of(context).activityPlannerTitle, tooltip: L10n.of(context).activityPlannerTitle,
onPressed: () => context.go('/rooms/${controller.room.id}/planner'), onPressed: () {
controller.stopAudioStream.add(null);
context.go('/rooms/${controller.room.id}/planner');
},
); );
} }
} }

Loading…
Cancel
Save