From f9ab6434103893867996a8f50a84ac874128d275 Mon Sep 17 00:00:00 2001 From: Diogo Simao Marques <dogo@videolabs.io> Date: Thu, 7 Nov 2024 14:28:29 +0100 Subject: [PATCH] PlayerViewController: Add notifications when adding or removing medias to the queue Appending a media to the queue or removing one from it can now impact the display of the player controls. If the play queue contains a single media after such an action, the player controls will display the seek buttons, if not the skip buttons will be displayed allowing the user to select different medias from the queue. --- .../Player/AudioPlayer/AudioPlayerView.swift | 12 ++++++++++++ .../AudioPlayer/AudioPlayerViewController.swift | 5 +++++ Sources/Playback/Player/PlayerViewController.swift | 9 ++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift index 5ebbc0978..aff0feda7 100644 --- a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift +++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift @@ -376,6 +376,18 @@ class AudioPlayerView: UIView, UIGestureRecognizerDelegate { playbackSpeedButton.alpha = enabled ? 1.0 : 0.5 } + func shouldEnableSeekButtons(_ enabled: Bool) { + backwardButton.isEnabled = enabled + backwardButton.isHidden = !enabled + forwardButton.isEnabled = enabled + forwardButton.isHidden = !enabled + + previousButton.isEnabled = !enabled + previousButton.isHidden = enabled + nextButton.isEnabled = !enabled + nextButton.isHidden = enabled + } + func updateConstraints(for orientation: UIDeviceOrientation) { let isPad: Bool = UIDevice.current.userInterfaceIdiom == .pad diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift index 6d5ea2b38..c25138e25 100644 --- a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift +++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift @@ -320,6 +320,10 @@ class AudioPlayerViewController: PlayerViewController { return orientation } + + @objc override func updatePlayerControls() { + audioPlayerView.shouldEnableSeekButtons(playbackService.mediaList.count == 1) + } } // MARK: - AudioPlayerViewDelegate @@ -439,6 +443,7 @@ extension AudioPlayerViewController { for: playbackService) audioPlayerView.updatePlayButton(isPlaying: isPlaying) + audioPlayerView.shouldEnableSeekButtons(playbackService.mediaList.count == 1) let image: UIImage? = isPlaying ? UIImage(named: "minimize") : UIImage(named: "close") let accessibilityLabel: String = isPlaying ? NSLocalizedString("MINIMIZE_BUTTON", comment: "") : NSLocalizedString("STOP_BUTTON", comment: "") diff --git a/Sources/Playback/Player/PlayerViewController.swift b/Sources/Playback/Player/PlayerViewController.swift index efc39d4a4..661961fa1 100644 --- a/Sources/Playback/Player/PlayerViewController.swift +++ b/Sources/Playback/Player/PlayerViewController.swift @@ -630,10 +630,13 @@ class PlayerViewController: UIViewController { volumeView.alpha = 0.00001 view.addSubview(volumeView) } - + private func setupObservers() { try? AVAudioSession.sharedInstance().setActive(true) AVAudioSession.sharedInstance().addObserver(self, forKeyPath: "outputVolume", options: NSKeyValueObservingOptions.new, context: nil) + + NotificationCenter.default.addObserver(self, selector: #selector(updatePlayerControls), name: .VLCDidAppendMediaToQueue, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(updatePlayerControls), name: .VLCDidRemoveMediaFromQueue, object: nil) } private func setupSeekDurations() { @@ -901,6 +904,10 @@ class PlayerViewController: UIViewController { executeSeekFromGesture(.tap) } + + @objc func updatePlayerControls() { + // UPDATE THE PLAYER CONTROLS + } } // MARK: - VLCPlaybackServiceDelegate -- GitLab