From 0d4f7a9e9fc2eba5e265f4841d0ae083395eb13f Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sat, 8 Nov 2025 08:35:52 +0100 Subject: [PATCH] refactor: remove duplicate audio sessions --- lib/screens/video_player_screen.dart | 50 ++----------------------- lib/services/media_service_manager.dart | 2 + pubspec.lock | 11 +++--- pubspec.yaml | 6 ++- 4 files changed, 16 insertions(+), 53 deletions(-) diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index e65609d8..c480c1db 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -4,7 +4,6 @@ import 'package:flutter/services.dart'; import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; import 'package:provider/provider.dart'; -import 'package:audio_session/audio_session.dart'; import '../models/plex_metadata.dart'; import '../models/plex_user_profile.dart'; import '../providers/plex_client_provider.dart'; @@ -167,9 +166,6 @@ class VideoPlayerScreenState extends State { final savedVolume = settingsService.getVolume(); player!.setVolume(savedVolume); - // Initialize audio session for proper OS integration - await _initializeAudioSession(); - // Update media service manager with new player await _updateMediaService(); @@ -237,48 +233,6 @@ class VideoPlayerScreenState extends State { } } - Future _initializeAudioSession() async { - try { - final session = await AudioSession.instance; - await session.configure(const AudioSessionConfiguration( - avAudioSessionCategory: AVAudioSessionCategory.playback, - avAudioSessionMode: AVAudioSessionMode.moviePlayback, - androidAudioAttributes: AndroidAudioAttributes( - contentType: AndroidAudioContentType.movie, - usage: AndroidAudioUsage.media, - ), - androidAudioFocusGainType: AndroidAudioFocusGainType.gain, - )); - - // Handle interruptions (phone calls, other apps, etc.) - session.interruptionEventStream.listen((event) { - if (event.begin) { - // Pause on interruption - player?.pause(); - appLogger.i('Playback paused due to interruption'); - } else { - // Resume after interruption if needed (user can manually play) - switch (event.type) { - case AudioInterruptionType.pause: - case AudioInterruptionType.duck: - // Don't auto-resume for these types - break; - case AudioInterruptionType.unknown: - break; - } - } - }); - - // Handle audio becoming noisy (headphones unplugged) - session.becomingNoisyEventStream.listen((_) { - player?.pause(); - appLogger.i('Playback paused due to audio becoming noisy (headphones unplugged?)'); - }); - } catch (e) { - appLogger.w('Failed to configure audio session', error: e); - } - } - Future _updateMediaService() async { if (!mounted) return; @@ -341,7 +295,9 @@ class VideoPlayerScreenState extends State { widget.metadata.ratingKey, loopQueue: loopQueue, ); - previous = playbackState.getPreviousEpisode(widget.metadata.ratingKey); + previous = playbackState.getPreviousEpisode( + widget.metadata.ratingKey, + ); } else { // Use chronological order even in shuffle mode next = await client.findAdjacentEpisode(widget.metadata, 1); diff --git a/lib/services/media_service_manager.dart b/lib/services/media_service_manager.dart index 9a3b383f..15c1e259 100644 --- a/lib/services/media_service_manager.dart +++ b/lib/services/media_service_manager.dart @@ -40,6 +40,8 @@ class MediaServiceManager { androidNotificationOngoing: false, androidStopForegroundOnPause: true, androidNotificationIcon: 'drawable/ic_stat_notification', + // Configure audio session for proper media playback + preloadArtwork: true, ), ); diff --git a/pubspec.lock b/pubspec.lock index 6ee9026e..3dbbbdf2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -44,10 +44,11 @@ packages: audio_service: dependency: "direct main" description: - name: audio_service - sha256: cb122c7c2639d2a992421ef96b67948ad88c5221da3365ccef1031393a76e044 - url: "https://pub.dev" - source: hosted + path: audio_service + ref: "4ca42f391183854095188a5a10fa6b59cd641e68" + resolved-ref: "4ca42f391183854095188a5a10fa6b59cd641e68" + url: "https://github.com/marckornberger/audio_service.git" + source: git version: "0.18.18" audio_service_platform_interface: dependency: transitive @@ -66,7 +67,7 @@ packages: source: hosted version: "0.1.4" audio_session: - dependency: "direct main" + dependency: transitive description: name: audio_session sha256: "8f96a7fecbb718cb093070f868b4cdcb8a9b1053dce342ff8ab2fde10eb9afb7" diff --git a/pubspec.yaml b/pubspec.yaml index 09dde9e5..9712efb5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,7 +26,6 @@ dependencies: hotkey_manager: ^0.2.3 flex_color_picker: ^3.6.0 audio_service: ^0.18.18 - audio_session: ^0.2.1 qr_flutter: ^4.1.0 dependency_overrides: @@ -40,6 +39,11 @@ dependency_overrides: url: https://github.com/edde746/media-kit ref: b6de7e44148043bd26f2569e8062dc8bce4f11b9 path: libs/universal/media_kit_libs_video + audio_service: + git: + url: https://github.com/marckornberger/audio_service.git + ref: 4ca42f391183854095188a5a10fa6b59cd641e68 + path: audio_service dev_dependencies: flutter_test: