diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 37c766b0..6f40aed7 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -44,7 +44,8 @@ class VideoPlayerScreen extends StatefulWidget { State createState() => VideoPlayerScreenState(); } -class VideoPlayerScreenState extends State { +class VideoPlayerScreenState extends State + with WidgetsBindingObserver { Player? player; VideoController? controller; bool _isPlayerInitialized = false; @@ -91,6 +92,9 @@ class VideoPlayerScreenState extends State { appLogger.d('Preferred subtitle track: $subtitleDesc'); } + // Register app lifecycle observer + WidgetsBinding.instance.addObserver(this); + // Initialize player asynchronously with buffer size from settings _initializePlayer(); } @@ -121,6 +125,33 @@ class VideoPlayerScreenState extends State { }); } + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + + switch (state) { + case AppLifecycleState.inactive: + case AppLifecycleState.paused: + // Clear media controls when app goes to background or screen locks + // (we don't support background playback) + OsMediaControls.clear(); + appLogger.d('Media controls cleared due to app lifecycle state: $state'); + break; + case AppLifecycleState.resumed: + // Restore media controls when app is resumed + if (_isPlayerInitialized && mounted) { + _updateMediaMetadata(); + _updateMediaControlsPlaybackState(); + appLogger.d('Media controls restored on app resume'); + } + break; + case AppLifecycleState.detached: + case AppLifecycleState.hidden: + // No action needed for these states + break; + } + } + Future _initializePlayer() async { try { // Load buffer size from settings @@ -650,6 +681,9 @@ class VideoPlayerScreenState extends State { @override void dispose() { + // Unregister app lifecycle observer + WidgetsBinding.instance.removeObserver(this); + // Stop progress tracking _progressTimer?.cancel(); diff --git a/pubspec.lock b/pubspec.lock index 328c7b93..106c8339 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -644,8 +644,8 @@ packages: dependency: "direct main" description: path: "." - ref: "53d803e1c228eb7eab9ca642119d404c21f4a52f" - resolved-ref: "53d803e1c228eb7eab9ca642119d404c21f4a52f" + ref: a196b022dcbcc3433bae9233be179f02062327e7 + resolved-ref: a196b022dcbcc3433bae9233be179f02062327e7 url: "https://github.com/edde746/os-media-controls" source: git version: "0.0.2" diff --git a/pubspec.yaml b/pubspec.yaml index 74002982..5e3b7f22 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: os_media_controls: git: url: https://github.com/edde746/os-media-controls - ref: 53d803e1c228eb7eab9ca642119d404c21f4a52f + ref: a196b022dcbcc3433bae9233be179f02062327e7 dependency_overrides: media_kit: