diff --git a/lib/widgets/video_controls/mobile_video_controls.dart b/lib/widgets/video_controls/mobile_video_controls.dart index 15b3e81a..8f4b3eb9 100644 --- a/lib/widgets/video_controls/mobile_video_controls.dart +++ b/lib/widgets/video_controls/mobile_video_controls.dart @@ -32,6 +32,8 @@ class MobileVideoControls extends StatelessWidget { final VoidCallback? onCancelAutoHide; final VoidCallback? onStartAutoHide; final VoidCallback? onBack; + final VoidCallback? onNext; + final VoidCallback? onPrevious; /// Whether the user can control playback (false in host-only mode for non-host). final bool canControl; @@ -51,6 +53,8 @@ class MobileVideoControls extends StatelessWidget { this.onCancelAutoHide, this.onStartAutoHide, this.onBack, + this.onNext, + this.onPrevious, this.canControl = true, }); @@ -102,6 +106,16 @@ class MobileVideoControls extends StatelessWidget { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ + // Previous episode button (hidden when unavailable) + if (onPrevious != null) ...[ + _buildCircularButton( + semanticLabel: t.videoControls.previousButton, + icon: Symbols.skip_previous_rounded, + iconSize: 48, + onPressed: onPrevious!, + ), + const SizedBox(width: 16), + ], _buildCircularButton( semanticLabel: t.videoControls.seekBackwardButton(seconds: seekTimeSmall), icon: getReplayIcon(seekTimeSmall), @@ -136,6 +150,16 @@ class MobileVideoControls extends StatelessWidget { onSeekCompleted?.call(newPosition); }, ), + // Next episode button (hidden when unavailable) + if (onNext != null) ...[ + const SizedBox(width: 16), + _buildCircularButton( + semanticLabel: t.videoControls.nextButton, + icon: Symbols.skip_next_rounded, + iconSize: 48, + onPressed: onNext!, + ), + ], ], ); }, diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index 9353f52e..d9bae706 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -1225,6 +1225,8 @@ class _PlexVideoControlsState extends State with WindowListen onCancelAutoHide: () => _hideTimer?.cancel(), onStartAutoHide: _startHideTimer, onBack: widget.onBack, + onNext: widget.onNext, + onPrevious: widget.onPrevious, canControl: widget.canControl, ), )