From 19ce496a44f11c2fcef86edd02ea0a0a29dfa473 Mon Sep 17 00:00:00 2001
From: Craig Reyenga <craig.reyenga@gmail.com>
Date: Sat, 22 Feb 2025 09:43:23 -0500
Subject: [PATCH 1/3] Remove unused code found using 'periphery'.

---
 Resources/en.lproj/Localizable.strings        |   5 -
 .../NSObject+SettingsReader.swift             |   4 +-
 .../MediaCategories/MediaCategory.swift       |   8 -
 .../MediaCategoryViewController.swift         |   3 -
 .../MediaGridCollectionCell.swift             |   1 -
 .../MediaLibraryModel/ShowEpisodeModel.swift  |  73 ---------
 .../Control/CustomDialogRendererHandler.swift |  43 ------
 .../VLCRendererDiscovererManager.swift        |   7 -
 .../Player/AudioPlayer/AudioPlayerView.swift  |   4 -
 .../AudioPlayerViewController.swift           |  13 --
 .../Player/PlayerViewController.swift         |   5 +-
 .../VideoPlayer-iOS/PlayerController.swift    |   8 -
 .../Subviews/BookmarksView.swift              |   5 -
 .../VideoPlayerViewController.swift           | 146 ++----------------
 .../Playback/Queue/QueueViewController.swift  |   6 +-
 Sources/Settings/Model/SettingsSection.swift  |   4 -
 .../Settings/Model/SettingsSpecifier.swift    |   2 -
 .../ActionSheetSectionHeader.swift            |   7 -
 .../ActionSheetSortSectionHeader.swift        |   7 +-
 Sources/UI Elements/PopupView.swift           |  11 --
 .../PagerStripViewController.swift            |  11 --
 VLC.xcodeproj/project.pbxproj                 |   6 -
 22 files changed, 20 insertions(+), 359 deletions(-)
 delete mode 100644 Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift

diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings
index 628ff8bea..7acb9bef8 100644
--- a/Resources/en.lproj/Localizable.strings
+++ b/Resources/en.lproj/Localizable.strings
@@ -345,7 +345,6 @@
 // MARK: - MediaViewController Swipable Header
 "ALBUMS" = "Albums";
 "ARTISTS" = "Artists";
-"EPISODES" = "Episodes";
 "GENRES" = "Genres";
 "ALL_VIDEOS" = "All videos";
 "SONGS" = "Songs";
@@ -563,10 +562,6 @@
 
 // MARK: - Local Network
 
-"SMBV1_WARN_TITLE" = "SMBv1 Connection Warning";
-"SMBV1_WARN_DESCRIPTION" = "We detected an old protocol (SMBv1).\nAre you really sure to continue with SMBv1?\nWe advise upgrading or changing your server settings.";
-"SMBV1_CONTINUE" = "Continue with SMBv1";
-"SMBV1_NEXT_PROTOCOL" = "Try SMBv2/v3";
 
 // MARK: - Preview labels
 
diff --git a/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift b/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift
index fd03d7c37..82b16f7c0 100644
--- a/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift	
+++ b/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift	
@@ -39,7 +39,9 @@ extension NSObject {
                             specifier.append(newSpecifier)
                         }
                     }
-                    let newSpecifierObject = SettingSpecifier(title: title, preferenceKey: preferenceKey, infobuttonvalue: infobuttonvalue, defaultValue: defaultValue, specifier: specifier)
+                    let newSpecifierObject = SettingSpecifier(title: title,
+                                                              infobuttonvalue: infobuttonvalue,
+                                                              specifier: specifier)
                     settingsSpecifierDict = newSpecifierObject
                 }
                 else {
diff --git a/Sources/Media Library/MediaCategories/MediaCategory.swift b/Sources/Media Library/MediaCategories/MediaCategory.swift
index 50f247889..67f17822f 100644
--- a/Sources/Media Library/MediaCategories/MediaCategory.swift	
+++ b/Sources/Media Library/MediaCategories/MediaCategory.swift	
@@ -18,14 +18,6 @@ class MovieCategoryViewController: MediaCategoryViewController {
     }
 }
 
-class ShowEpisodeCategoryViewController: MediaCategoryViewController {
-    init(_ mediaLibraryService: MediaLibraryService) {
-        let model = ShowEpisodeModel(medialibrary: mediaLibraryService)
-        super.init(mediaLibraryService: mediaLibraryService, model: model)
-        model.observable.addObserver(self)
-    }
-}
-
 class PlaylistCategoryViewController: MediaCategoryViewController {
     init(_ mediaLibraryService: MediaLibraryService) {
         let model = PlaylistModel(medialibrary: mediaLibraryService)
diff --git a/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift b/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift
index c221da347..43f3eb326 100644
--- a/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift	
+++ b/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift	
@@ -86,7 +86,6 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega
         var header: ActionSheetSortSectionHeader
         var isVideoModel: Bool = false
         var collectionModelName: String = ""
-        var secondSortModel: SortModel? = nil
 
         if let model = model as? CollectionModel {
             if model.mediaCollection is VLCMLMediaGroup || model.mediaCollection is VideoModel {
@@ -99,13 +98,11 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega
         } else if let model = model as? VideoModel {
             isVideoModel = true
             collectionModelName = secondModel.name
-            secondSortModel = model.sortModel
         } else {
             collectionModelName = model.name
         }
 
         header = ActionSheetSortSectionHeader(model: model.sortModel,
-                                              secondModel: secondSortModel,
                                               isVideoModel: isVideoModel,
                                               currentModelType: collectionModelName)
 
diff --git a/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift b/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift
index b77ae39e5..889a081c2 100644
--- a/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift	
+++ b/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift	
@@ -16,7 +16,6 @@ class MediaGridCollectionCell: BaseCollectionViewCell {
 
     private let notificationCenter = NotificationCenter.default
     private let userDefaults = UserDefaults.standard
-    private let selectionOverlayColor = UIColor.orange.withAlphaComponent(0.4)
 
     private let checkboxImageView: UIImageView = {
         let imageView = UIImageView()
diff --git a/Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift b/Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift
deleted file mode 100644
index debed46d1..000000000
--- a/Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift	
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************
- * ShowEpisodeModel.swift
- *
- * Copyright © 2018 VLC authors and VideoLAN
- * Copyright © 2018 Videolabs
- *
- * Authors: Soomin Lee <bubu@mikan.io>
- *
- * Refer to the COPYING file of the official project for license.
- *****************************************************************************/
-
-class ShowEpisodeModel: MediaModel {
-    typealias MLType = VLCMLMedia
-
-    var sortModel = SortModel([.alpha, .duration, .insertionDate, .releaseDate, .fileSize])
-
-    var observable = Observable<MediaLibraryBaseModelObserver>()
-
-    var files = [VLCMLMedia]()
-    var fileArrayLock = NSRecursiveLock()
-
-    var cellType: BaseCollectionViewCell.Type { return MovieCollectionViewCell.self }
-
-    var medialibrary: MediaLibraryService
-
-    var name: String = "EPISODES"
-
-    var indicatorName: String = NSLocalizedString("EPISODES", comment: "")
-
-    required init(medialibrary: MediaLibraryService) {
-        self.medialibrary = medialibrary
-        medialibrary.observable.addObserver(self)
-    }
-
-    func append(_ item: VLCMLMedia) {
-        defer {
-            fileArrayLock.unlock()
-        }
-        fileArrayLock.lock()
-        files.append(item)
-    }
-
-    func delete(_ items: [VLCMLMedia]) {
-        preconditionFailure("ShowEpisodeModel: Cannot delete showEpisode")
-    }
-}
-
-// MARK: - Sort
-
-extension ShowEpisodeModel {
-    func sort(by criteria: VLCMLSortingCriteria, desc: Bool) {
-        // Currently no show specific getter on medialibrary.
-    }
-}
-
-// MARK: - MediaLibraryObserver
-
-extension ShowEpisodeModel: MediaLibraryObserver {
-    func medialibrary(_ medialibrary: MediaLibraryService, didAddShowEpisodes showEpisodes: [VLCMLMedia]) {
-        showEpisodes.forEach({ append($0) })
-        observable.notifyObservers {
-            $0.mediaLibraryBaseModelReloadView()
-        }
-    }
-
-    func medialibraryDidStartRescan() {
-        defer {
-            fileArrayLock.unlock()
-        }
-        fileArrayLock.lock()
-        files.removeAll()
-    }
-}
diff --git a/Sources/Playback/Control/CustomDialogRendererHandler.swift b/Sources/Playback/Control/CustomDialogRendererHandler.swift
index 15ff8a15c..cc730947c 100644
--- a/Sources/Playback/Control/CustomDialogRendererHandler.swift
+++ b/Sources/Playback/Control/CustomDialogRendererHandler.swift
@@ -37,29 +37,6 @@ class CustomDialogRendererHandler: NSObject {
 // MARK: - Private helpers
 
 private extension CustomDialogRendererHandler {
-    private func handleSMBv1(completionHandler: @escaping (Bool) -> Void) {
-        let alertController = UIAlertController(title: NSLocalizedString("SMBV1_WARN_TITLE", comment: ""),
-                                                message: NSLocalizedString("SMBV1_WARN_DESCRIPTION", comment: ""),
-                                                preferredStyle: .alert)
-
-        alertController.addAction(UIAlertAction(title: NSLocalizedString("SMBV1_CONTINUE", comment:""),
-                                                style: .destructive, handler: {
-                                                    action in
-                                                    completionHandler(true)
-        }))
-
-        alertController.addAction(UIAlertAction(title: NSLocalizedString("SMBV1_NEXT_PROTOCOL", comment:""),
-                                                style: .default, handler: {
-                                                    action in
-                                                    completionHandler(false)
-        }))
-
-        if let rootViewController = UIApplication.shared.delegate?.window??.rootViewController {
-            let presentingController = rootViewController.presentedViewController ?? rootViewController
-            presentingController.present(alertController, animated: true, completion: nil)
-        }
-    }
-
     private func handleLoginAlert(with title: String, message: String,
                                   username: String?, askingForStorage: Bool,
                                   withReference reference: NSValue) {
@@ -156,26 +133,6 @@ extension CustomDialogRendererHandler: VLCCustomDialogRendererProtocol {
                          askingForStorage: false,
                          withReference: reference)
 
-        //  if !title.contains("SMBv1") || selectedSMBv1 {
-        //      handleLoginAlert(with: title, message: message,
-        //                       username: username,
-        //                       askingForStorage: askingForStorage,
-        //                       withReference: reference)
-        //      return
-        //  }
-
-        //  handleSMBv1() {
-        //      [weak self] isSMBv1 in
-        //      if isSMBv1 {
-        //          self?.selectedSMBv1 = true
-        //          self?.handleLoginAlert(with: title, message: message,
-        //                                 username: username,
-        //                                 askingForStorage: askingForStorage,
-        //                                 withReference: reference)
-        //      } else {
-        //          self?.dialogProvider.dismissDialog(withReference: reference)
-        //      }
-        //  }
 }
 
     func showQuestion(withTitle title: String, message: String,
diff --git a/Sources/Playback/Control/VLCRendererDiscovererManager.swift b/Sources/Playback/Control/VLCRendererDiscovererManager.swift
index 7d1582e19..4ba7d17e3 100644
--- a/Sources/Playback/Control/VLCRendererDiscovererManager.swift
+++ b/Sources/Playback/Control/VLCRendererDiscovererManager.swift
@@ -48,13 +48,6 @@ class VLCRendererDiscovererManager: NSObject {
         return discoverers.flatMap { $0.renderers }
     }
 
-    fileprivate func isDuplicateDiscoverer(with description: VLCRendererDiscovererDescription) -> Bool {
-        for discoverer in discoverers where discoverer.name == description.name {
-            return true
-        }
-        return false
-    }
-
     @objc func start() {
         // Gather potential renderer discoverers
         guard let tmpDiscoverersDescription: [VLCRendererDiscovererDescription] = VLCRendererDiscoverer.list() else {
diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
index 1b94c4be2..f9ac9b76e 100644
--- a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
+++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
@@ -23,10 +23,6 @@ protocol AudioPlayerViewDelegate: AnyObject {
     func audioPlayerViewDelegateDidTapRepeatButton(_ audioPlayerView: AudioPlayerView)
     func audioPlayerViewDelegateDidTapPlaybackSpeedButton(_ audioPlayerView: AudioPlayerView)
     func audioPlayerViewDelegateDidLongPressPlaybackSpeedButton(_ audioPlayerView: AudioPlayerView)
-    #if os(iOS)
-    func audioPlayerViewDelegateGetVolumeSlider(_ audioPlayerView: AudioPlayerView) -> VolumeControlView
-    func audioPlayerViewDelegateGetBrightnessSlider(_ audioPlayerView: AudioPlayerView) -> BrightnessControlView
-    #endif
 }
 
 class AudioPlayerView: UIView, UIGestureRecognizerDelegate {
diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
index 189fcee32..2648f99be 100644
--- a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
+++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
@@ -435,15 +435,6 @@ extension AudioPlayerViewController: AudioPlayerViewDelegate {
         }
     }
 
-#if os(iOS)
-    func audioPlayerViewDelegateGetBrightnessSlider(_ audioPlayerView: AudioPlayerView) -> BrightnessControlView {
-        return brightnessControlView
-    }
-
-    func audioPlayerViewDelegateGetVolumeSlider(_ audioPlayerView: AudioPlayerView) -> VolumeControlView {
-        return volumeControlView
-    }
-#endif
 }
 
 // MARK: - VLCPlaybackServiceDelegate
@@ -501,10 +492,6 @@ extension AudioPlayerViewController {
                                                             comment: ""))
         }
 
-        if currentState == .buffering {
-            mediaDuration = playbackService.mediaDuration
-        }
-
         if currentState == .opening || currentState == .stopped {
             resetABRepeat()
         }
diff --git a/Sources/Playback/Player/PlayerViewController.swift b/Sources/Playback/Player/PlayerViewController.swift
index c9fa9d1ac..977d076bd 100644
--- a/Sources/Playback/Player/PlayerViewController.swift
+++ b/Sources/Playback/Player/PlayerViewController.swift
@@ -90,7 +90,6 @@ class PlayerViewController: UIViewController {
     var seekBackwardBySwipe: Int = 0
     var forwardBackwardEqual: Bool = true
     var tapSwipeEqual: Bool = true
-    var numberOfTapSeek: Int = 0
     var previousSeekState: PlayerSeekState = .default
 
     // MARK: UI Elements
@@ -280,8 +279,6 @@ class PlayerViewController: UIViewController {
 
     var addBookmarksView: AddBookmarksView? = nil
 
-    var mediaDuration: Int = 0
-
     private var isGestureActive: Bool = false
 
     private var currentPanType: PlayerPanType = .none
@@ -656,7 +653,7 @@ class PlayerViewController: UIViewController {
             resetABRepeatMarks(true)
             break
         default:
-            assertionFailure("VideoPlayerViewController: Unvalid button.")
+            assertionFailure("PlayerViewController: Invalid button.")
         }
     }
 
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
index 07217a3b4..2d88941c7 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
@@ -26,14 +26,10 @@ protocol PlayerControllerDelegate: AnyObject {
 class PlayerController: NSObject {
     weak var delegate: PlayerControllerDelegate?
 
-    private var playbackService: PlaybackService = PlaybackService.sharedInstance()
-
     // MARK: - States
 
     var isControlsHidden: Bool = false
 
-    var lockedOrientation: UIInterfaceOrientation = .unknown
-
     var isInterfaceLocked: Bool = false
 
     var isTapSeeking: Bool = false
@@ -91,10 +87,6 @@ class PlayerController: NSObject {
         setupObservers()
     }
 
-    func updateUserDefaults() {
-
-    }
-
     private func setupObservers() {
         let notificationCenter = NotificationCenter.default
 
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift
index bf35ecc10..5a42bc5a0 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift
@@ -168,11 +168,6 @@ class BookmarksView: UIView {
         return ""
     }
 
-    func restoreTable() {
-        bookmarksTableView.delegate = self
-        bookmarksTableView.dataSource = self
-    }
-
     func getAddBookmarksView() -> AddBookmarksView {
         return addBookmarksView
     }
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
index 33dde55a8..0aca568b9 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
@@ -26,8 +26,6 @@ protocol VideoPlayerViewControllerDelegate: AnyObject {
 class VideoPlayerViewController: PlayerViewController {
     @objc weak var delegate: VideoPlayerViewControllerDelegate?
 
-    var playAsAudio: Bool = false
-
     // MARK: - Constants
 
     private let ZOOM_SENSITIVITY: CGFloat = 5
@@ -145,8 +143,6 @@ class VideoPlayerViewController: PlayerViewController {
         return aspectRatioActionSheet
     }()
 
-    let notificationCenter = NotificationCenter.default
-
     private(set) lazy var titleSelectionView: TitleSelectionView = {
 #if os(iOS)
         let isLandscape = UIDevice.current.orientation.isLandscape
@@ -160,8 +156,6 @@ class VideoPlayerViewController: PlayerViewController {
         return titleSelectionView
     }()
 
-    private var projectionLocation: CGPoint = .zero
-
     private lazy var longPressPlaybackSpeedView: LongPressPlaybackSpeedView = {
         let view = LongPressPlaybackSpeedView()
         view.translatesAutoresizingMaskIntoConstraints = false
@@ -279,8 +273,6 @@ class VideoPlayerViewController: PlayerViewController {
 
     private var isGestureActive: Bool = false
 
-    private var minimizationInitialCenter: CGPoint?
-
     // MARK: - Popup Views
 
     lazy var trackSelectorPopupView: PopupView = {
@@ -349,7 +341,6 @@ class VideoPlayerViewController: PlayerViewController {
         super.viewWillAppear(animated)
         playbackService.delegate = self
         playbackService.recoverPlaybackState()
-        playerController.lockedOrientation = .portrait
         navigationController?.navigationBar.isHidden = true
         mediaScrubProgressBar.updateInterfacePosition()
 
@@ -1065,31 +1056,6 @@ class VideoPlayerViewController: PlayerViewController {
         executeSeekFromGesture(.tap)
     }
 
-    private func applyYaw(yaw: CGFloat, pitch: CGFloat) {
-        //Add and limit new pitch and yaw
-        deviceMotion.yaw += yaw
-        deviceMotion.pitch += pitch
-
-        playbackService.updateViewpoint(deviceMotion.yaw,
-                                        pitch: deviceMotion.pitch,
-                                        roll: 0,
-                                        fov: fov, absolute: true)
-    }
-
-    private func updateProjection(with recognizer: UIPanGestureRecognizer) {
-        let newLocationInView: CGPoint = recognizer.location(in: view)
-
-        let diffX = newLocationInView.x - projectionLocation.x
-        let diffY = newLocationInView.y - projectionLocation.y
-        projectionLocation = newLocationInView
-
-        // ScreenSizePixel width is used twice to get a constant speed on the movement.
-        let diffYaw = fov * -diffX / screenPixelSize.width
-        let diffPitch = fov * -diffY / screenPixelSize.width
-
-        applyYaw(yaw: diffYaw, pitch: diffPitch)
-    }
-
     @objc private func handleLongPressGesture(_ gestureRecognizer: UILongPressGestureRecognizer) {
         guard playerController.isSpeedUpGestureEnabled,
               playbackService.isPlaying else {
@@ -1384,29 +1350,6 @@ class VideoPlayerViewController: PlayerViewController {
         displayAndApplySeekDuration(currentSeek)
     }
 
-    private func applyCustomEqualizerProfileIfNeeded() {
-        let userDefaults = UserDefaults.standard
-        guard userDefaults.bool(forKey: kVLCCustomProfileEnabled) else {
-            return
-        }
-
-        let profileIndex = userDefaults.integer(forKey: kVLCSettingEqualizerProfile)
-        let encodedData = userDefaults.data(forKey: kVLCCustomEqualizerProfiles)
-
-        guard let encodedData = encodedData,
-              let customProfiles = NSKeyedUnarchiver(forReadingWith: encodedData).decodeObject(forKey: "root") as? CustomEqualizerProfiles,
-              profileIndex < customProfiles.profiles.count else {
-            return
-        }
-
-        let selectedProfile = customProfiles.profiles[profileIndex]
-        playbackService.preAmplification = CGFloat(selectedProfile.preAmpLevel)
-
-        for (index, frequency) in selectedProfile.frequencies.enumerated() {
-            playbackService.setAmplification(CGFloat(frequency), forBand: UInt32(index))
-        }
-    }
-
     private func hideSystemVolumeInfo() {
 #if os(iOS)
         volumeView.alpha = 0.00001
@@ -1477,6 +1420,18 @@ class VideoPlayerViewController: PlayerViewController {
 
         playerController.isInterfaceLocked = !enabled
     }
+
+    private func showIcon(button: UIButton) {
+        UIView.animate(withDuration: 0.5, animations: {
+            button.isHidden = false
+        }, completion: nil)
+    }
+
+    private func hideIcon(button: UIButton) {
+        UIView.animate(withDuration: 0.5, animations: {
+            button.isHidden = true
+        }, completion: nil)
+    }
 }
 
 // MARK: - Delegation
@@ -1806,83 +1761,6 @@ extension VideoPlayerViewController {
     }
 }
 
-// MARK: - OptionsNavigationBarDelegate
-
-extension VideoPlayerViewController {
-    private func resetVideoFilters() {
-        hideIcon(button: optionsNavigationBar.videoFiltersButton)
-        moreOptionsActionSheet.resetVideoFilters()
-    }
-
-    private func resetPlaybackSpeed() {
-        hideIcon(button: optionsNavigationBar.playbackSpeedButton)
-        moreOptionsActionSheet.resetPlaybackSpeed()
-    }
-
-    private func resetEqualizer() {
-        moreOptionsActionSheet.resetEqualizer()
-        hideIcon(button: optionsNavigationBar.equalizerButton)
-    }
-
-    private func resetSleepTimer() {
-        hideIcon(button: optionsNavigationBar.sleepTimerButton)
-        moreOptionsActionSheet.resetSleepTimer()
-    }
-
-    private func resetABRepeatMarks(_ shouldDisplayView: Bool = false) {
-        hideIcon(button: optionsNavigationBar.abRepeatMarksButton)
-        aMark.removeFromSuperview()
-        aMark.isEnabled = false
-
-        bMark.removeFromSuperview()
-        bMark.isEnabled = false
-
-        guard let abRepeatView = abRepeatView,
-              shouldDisplayView else {
-            return
-        }
-
-        mediaMoreOptionsActionSheetPresentABRepeatView(with: abRepeatView)
-    }
-
-    private func showIcon(button: UIButton) {
-        UIView.animate(withDuration: 0.5, animations: {
-            button.isHidden = false
-        }, completion: nil)
-    }
-
-    private func hideIcon(button: UIButton) {
-        UIView.animate(withDuration: 0.5, animations: {
-            button.isHidden = true
-        }, completion: nil)
-    }
-
-    private func handleReset(button: UIButton) {
-        switch button {
-        case optionsNavigationBar.videoFiltersButton:
-            resetVideoFilters()
-            return
-        case optionsNavigationBar.playbackSpeedButton:
-            resetPlaybackSpeed()
-            return
-        case optionsNavigationBar.equalizerButton:
-            resetEqualizer()
-            return
-        case optionsNavigationBar.sleepTimerButton:
-            resetSleepTimer()
-            return
-        case optionsNavigationBar.abRepeatButton:
-            resetABRepeat()
-            return
-        case optionsNavigationBar.abRepeatMarksButton:
-            resetABRepeatMarks(true)
-            return
-        default:
-            assertionFailure("VideoPlayerViewController: Invalid button.")
-        }
-    }
-}
-
 // MARK: - Download More SPU
 
 extension VideoPlayerViewController {
diff --git a/Sources/Playback/Queue/QueueViewController.swift b/Sources/Playback/Queue/QueueViewController.swift
index 7383aaea4..50441268b 100644
--- a/Sources/Playback/Queue/QueueViewController.swift
+++ b/Sources/Playback/Queue/QueueViewController.swift
@@ -50,16 +50,12 @@ class QueueViewController: UIViewController {
     private var scrolledCellIndex: IndexPath = IndexPath()
     private var grabbedCellIndex: IndexPath?
 
-    private let cellHeight: CGFloat = 56
-
     private let sidePadding: CGFloat = 10
     private let topPadding: CGFloat = 8
     private let bottomPadding: CGFloat = 8
 
     private let darkOverlayAlpha: CGFloat = 0.6
 
-    private var originY: CGFloat = 0
-
     private var playbackService: PlaybackService {
         get {
             PlaybackService.sharedInstance()
@@ -300,7 +296,7 @@ class QueueViewController: UIViewController {
     }
 
     func dragDidBegin(_ sender: UIPanGestureRecognizer) {
-        originY = view.frame.origin.y
+        // nothing to do
     }
 
     func dragStateDidChange(_ sender: UIPanGestureRecognizer) {
diff --git a/Sources/Settings/Model/SettingsSection.swift b/Sources/Settings/Model/SettingsSection.swift
index 0522ca902..2f34e6208 100644
--- a/Sources/Settings/Model/SettingsSection.swift
+++ b/Sources/Settings/Model/SettingsSection.swift
@@ -131,10 +131,6 @@ struct SettingsSection: Equatable {
     let title: String?
     let items: [SettingsItem]
 
-    var isEmpty: Bool {
-        items.isEmpty
-    }
-
     init(title: String? = nil, items: [SettingsItem]) {
         self.title = title.flatMap(Localizer.localizedTitle(key:))
         self.items = items
diff --git a/Sources/Settings/Model/SettingsSpecifier.swift b/Sources/Settings/Model/SettingsSpecifier.swift
index baf088a73..1a18152c9 100644
--- a/Sources/Settings/Model/SettingsSpecifier.swift
+++ b/Sources/Settings/Model/SettingsSpecifier.swift
@@ -13,9 +13,7 @@ import Foundation
 
 struct SettingSpecifier {
     let title: String
-    let preferenceKey: String
     let infobuttonvalue: String
-    let defaultValue: Any?
     let specifier: [Specifier]
 }
 
diff --git a/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift b/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift
index 90cd8c757..8e86f759d 100644
--- a/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift	
+++ b/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift	
@@ -119,13 +119,6 @@ class ActionSheetSectionHeader: UIView {
             separator.topAnchor.constraint(equalTo: bottomAnchor, constant: -1)
         ])
     }
-
-    fileprivate func setupTitle() {
-        addSubview(title)
-        NSLayoutConstraint.activate([
-            title.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 20),
-        ])
-    }
 }
 
 protocol ActionSheetAccessoryViewsDelegate {
diff --git a/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift b/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift
index 0e277e786..e8a6809e1 100644
--- a/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift	
+++ b/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift	
@@ -29,7 +29,6 @@ class ActionSheetSortSectionHeader: ActionSheetSectionHeader {
     }
 
     private var sortModel: SortModel
-    private var secondSortModel: SortModel?
     private let userDefaults = UserDefaults.standard
     private var isAdditionalOptionShown: Bool = false
 
@@ -187,11 +186,11 @@ class ActionSheetSortSectionHeader: ActionSheetSectionHeader {
 
     private var isVideoModel: Bool
 
-    init(model: SortModel, secondModel: SortModel?,
-         isVideoModel: Bool, currentModelType: String) {
+    init(model: SortModel,
+         isVideoModel: Bool,
+         currentModelType: String) {
         modelType = currentModelType
         sortModel = model
-        secondSortModel = secondModel
         self.isVideoModel = isVideoModel
         super.init(frame: .zero)
         actionSwitch.isOn = sortModel.desc
diff --git a/Sources/UI Elements/PopupView.swift b/Sources/UI Elements/PopupView.swift
index a73e328e3..09e309f56 100644
--- a/Sources/UI Elements/PopupView.swift	
+++ b/Sources/UI Elements/PopupView.swift	
@@ -176,17 +176,6 @@ extension PopupView {
         ])
         NSLayoutConstraint.activate(newConstraints)
     }
-
-    func updateAccessoryViews() {
-        while titleStackView.arrangedSubviews.count > 2 {
-            if let subview = titleStackView.arrangedSubviews.last {
-                titleStackView.removeArrangedSubview(subview)
-                subview.removeFromSuperview()
-            }
-        }
-        addAccessoryViews()
-        titleStackView.layoutSubviews()
-    }
 }
 
 // MARK: - PopupViewDelegate
diff --git a/Sources/UI Elements/View Controller/PagerStripViewController.swift b/Sources/UI Elements/View Controller/PagerStripViewController.swift
index 54da32c42..d099ae598 100644
--- a/Sources/UI Elements/View Controller/PagerStripViewController.swift	
+++ b/Sources/UI Elements/View Controller/PagerStripViewController.swift	
@@ -167,17 +167,6 @@ class PagerTabStripViewController: UIViewController, UIScrollViewDelegate {
         return (CGFloat(index) * containerView.bounds.width) + ((containerView.bounds.width - view.bounds.width) * 0.5)
     }
 
-    enum PagerTabStripError: Error {
-        case viewControllerOutOfBounds
-    }
-
-    func offsetForChild(viewController: UIViewController) throws -> CGFloat {
-        guard let index = viewControllers.firstIndex(of: viewController) else {
-            throw PagerTabStripError.viewControllerOutOfBounds
-        }
-        return offsetForChild(at: index)
-    }
-
     func pageFor(contentOffset: CGFloat) -> Int {
         let result = virtualPageFor(contentOffset: contentOffset)
         return pageFor(virtualPage: result)
diff --git a/VLC.xcodeproj/project.pbxproj b/VLC.xcodeproj/project.pbxproj
index 4f743280f..c58720618 100644
--- a/VLC.xcodeproj/project.pbxproj
+++ b/VLC.xcodeproj/project.pbxproj
@@ -322,7 +322,6 @@
 		7D50C6492BBD20DF00B9F1A0 /* SirikitIntentCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9108342A67AC76007EB0D5 /* SirikitIntentCoordinator.swift */; };
 		7D50C64A2BBD20DF00B9F1A0 /* MediaLibraryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D66A47220AC61B900FA5B92 /* MediaLibraryService.swift */; };
 		7D50C64B2BBD20DF00B9F1A0 /* VLCExternalDisplayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D378491183A98BF009EE944 /* VLCExternalDisplayController.m */; };
-		7D50C64C2BBD20DF00B9F1A0 /* ShowEpisodeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */; };
 		7D50C64D2BBD20DF00B9F1A0 /* MediaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4170152B209A1D3600802E44 /* MediaViewController.swift */; };
 		7D50C64E2BBD20DF00B9F1A0 /* VLCPlaybackService+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackService+MediaLibrary.m */; };
 		7D50C64F2BBD20DF00B9F1A0 /* MediaCategoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418B144620179C00000447AA /* MediaCategoryViewController.swift */; };
@@ -707,7 +706,6 @@
 		8DE1879A21060DBE00A091D2 /* MediaCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1879921060DBE00A091D2 /* MediaCategory.swift */; };
 		8DE1887421089B3A00A091D2 /* MediaLibraryBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1887321089B3A00A091D2 /* MediaLibraryBaseModel.swift */; };
 		8DE1887621089BB100A091D2 /* VideoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1887521089BB100A091D2 /* VideoModel.swift */; };
-		8DE1888C210B459000A091D2 /* ShowEpisodeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */; };
 		8DE18890210B53E000A091D2 /* TrackModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1888F210B53E000A091D2 /* TrackModel.swift */; };
 		8DE18892210B5BAD00A091D2 /* ArtistModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE18891210B5BAD00A091D2 /* ArtistModel.swift */; };
 		8DE18894210B5F8200A091D2 /* AlbumModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE18893210B5F8200A091D2 /* AlbumModel.swift */; };
@@ -1453,7 +1451,6 @@
 		8DE1879921060DBE00A091D2 /* MediaCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaCategory.swift; sourceTree = "<group>"; };
 		8DE1887321089B3A00A091D2 /* MediaLibraryBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaLibraryBaseModel.swift; sourceTree = "<group>"; };
 		8DE1887521089BB100A091D2 /* VideoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoModel.swift; sourceTree = "<group>"; };
-		8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowEpisodeModel.swift; sourceTree = "<group>"; };
 		8DE1888F210B53E000A091D2 /* TrackModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackModel.swift; sourceTree = "<group>"; };
 		8DE18891210B5BAD00A091D2 /* ArtistModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArtistModel.swift; sourceTree = "<group>"; };
 		8DE18893210B5F8200A091D2 /* AlbumModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumModel.swift; sourceTree = "<group>"; };
@@ -3291,7 +3288,6 @@
 				6D8E6429234CBF2200EBC8FC /* AudioCollectionModel.swift */,
 				8DE1887321089B3A00A091D2 /* MediaLibraryBaseModel.swift */,
 				8DE1887521089BB100A091D2 /* VideoModel.swift */,
-				8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */,
 				8DE1888F210B53E000A091D2 /* TrackModel.swift */,
 				8DE18891210B5BAD00A091D2 /* ArtistModel.swift */,
 				8DE18893210B5F8200A091D2 /* AlbumModel.swift */,
@@ -4377,7 +4373,6 @@
 				7D50C6492BBD20DF00B9F1A0 /* SirikitIntentCoordinator.swift in Sources */,
 				7D50C64A2BBD20DF00B9F1A0 /* MediaLibraryService.swift in Sources */,
 				7D50C64B2BBD20DF00B9F1A0 /* VLCExternalDisplayController.m in Sources */,
-				7D50C64C2BBD20DF00B9F1A0 /* ShowEpisodeModel.swift in Sources */,
 				7D50C64D2BBD20DF00B9F1A0 /* MediaViewController.swift in Sources */,
 				7D65F2222D2C4D4B0042A6C2 /* VLCMLMedia+isWatched.m in Sources */,
 				7D50C64E2BBD20DF00B9F1A0 /* VLCPlaybackService+MediaLibrary.m in Sources */,
@@ -4631,7 +4626,6 @@
 				8D66A47320AC61B900FA5B92 /* MediaLibraryService.swift in Sources */,
 				91562F5A2CAEBC1500D42986 /* PlayMediaIntent.swift in Sources */,
 				7D378492183A98BF009EE944 /* VLCExternalDisplayController.m in Sources */,
-				8DE1888C210B459000A091D2 /* ShowEpisodeModel.swift in Sources */,
 				4170152C209A1D3600802E44 /* MediaViewController.swift in Sources */,
 				DD8F84311B00EB3B0009138A /* VLCPlaybackService+MediaLibrary.m in Sources */,
 				418B144720179C00000447AA /* MediaCategoryViewController.swift in Sources */,
-- 
GitLab


From 752eafd07f0627f7276fce5a1dcf1ec2de68ae57 Mon Sep 17 00:00:00 2001
From: Craig Reyenga <craig.reyenga@gmail.com>
Date: Sat, 22 Feb 2025 10:52:38 -0500
Subject: [PATCH 2/3] Remove duplicate brightness code in player

---
 .../AudioPlayerViewController.swift           |  4 +-
 .../Player/PlayerViewController.swift         | 20 ++++-
 .../VideoPlayerViewController.swift           | 81 ++-----------------
 3 files changed, 26 insertions(+), 79 deletions(-)

diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
index 2648f99be..2016594e3 100644
--- a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
+++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
@@ -60,8 +60,8 @@ class AudioPlayerViewController: PlayerViewController {
     // MARK: - Init
 
 #if os(iOS)
-    @objc override init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
-        super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController)
+    @objc init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
+        super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController, isBrightnessControlEnabled: false)
         NotificationCenter.default.addObserver(self, selector: #selector(playbackSpeedHasChanged(_:)), name: Notification.Name("ChangePlaybackSpeed"), object: nil)
 
         self.playerController.delegate = self
diff --git a/Sources/Playback/Player/PlayerViewController.swift b/Sources/Playback/Player/PlayerViewController.swift
index 977d076bd..7839579ad 100644
--- a/Sources/Playback/Player/PlayerViewController.swift
+++ b/Sources/Playback/Player/PlayerViewController.swift
@@ -279,6 +279,8 @@ class PlayerViewController: UIViewController {
 
     var addBookmarksView: AddBookmarksView? = nil
 
+    private let isBrightnessControlEnabled: Bool
+
     private var isGestureActive: Bool = false
 
     private var currentPanType: PlayerPanType = .none
@@ -365,20 +367,30 @@ class PlayerViewController: UIViewController {
     // MARK: - Init
 
 #if os(iOS)
-    @objc init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
+    @objc init(mediaLibraryService: MediaLibraryService,
+               rendererDiscovererManager: VLCRendererDiscovererManager,
+               playerController: PlayerController,
+               isBrightnessControlEnabled: Bool) {
         self.mediaLibraryService = mediaLibraryService
         self.rendererDiscovererManager = rendererDiscovererManager
         self.playerController = playerController
+        self.isBrightnessControlEnabled = isBrightnessControlEnabled
+
         super.init(nibName: nil, bundle: nil)
+
         mediaNavigationBar.chromeCastButton = rendererButton
         mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
         systemBrightness = UIScreen.main.brightness
     }
 #else
-    @objc init(mediaLibraryService: MediaLibraryService, playerController: PlayerController) {
+    @objc init(mediaLibraryService: MediaLibraryService,
+               playerController: PlayerController) {
         self.mediaLibraryService = mediaLibraryService
         self.playerController = playerController
+        self.isBrightnessControlEnabled = false
+
         super.init(nibName: nil, bundle: nil)
+
         mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
     }
 #endif
@@ -422,7 +434,7 @@ class PlayerViewController: UIViewController {
 
         //update the value of brightness control view
         //In case of remember brightness option is disabled, this will update the brightness bar with current brightness.
-        if !playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController {
+        if !playerController.isRememberBrightnessEnabled && self.isBrightnessControlEnabled {
             brightnessControlView.updateIcon(level: brightnessControl.fetchAndGetDeviceValue())
         }
 #endif
@@ -432,7 +444,7 @@ class PlayerViewController: UIViewController {
     override func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
 
-        if playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController {
+        if playerController.isRememberBrightnessEnabled && self.isBrightnessControlEnabled {
             if let brightness = userDefaults.value(forKey: KVLCPlayerBrightness) as? CGFloat {
                 animateBrightness(to: brightness)
                 self.brightnessControl.value = Float(brightness)
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
index 0aca568b9..4b92d25a8 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
@@ -311,8 +311,13 @@ class VideoPlayerViewController: PlayerViewController {
     // MARK: - Init methods
 
 #if os(iOS)
-    @objc override init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
-        super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController)
+    @objc init(mediaLibraryService: MediaLibraryService,
+               rendererDiscovererManager: VLCRendererDiscovererManager,
+               playerController: PlayerController) {
+        super.init(mediaLibraryService: mediaLibraryService,
+                   rendererDiscovererManager: rendererDiscovererManager,
+                   playerController: playerController,
+                   isBrightnessControlEnabled: true)
 
         self.playerController.delegate = self
         self.mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
@@ -391,16 +396,6 @@ class VideoPlayerViewController: PlayerViewController {
     override func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
 
-#if os(iOS)
-        let defaults = UserDefaults.standard
-        if defaults.bool(forKey: kVLCPlayerShouldRememberBrightness) {
-            if let brightness = defaults.value(forKey: KVLCPlayerBrightness) as? CGFloat {
-                animateBrightness(to: brightness)
-                self.brightnessControl.value = Float(brightness)
-            }
-        }
-#endif
-
         playbackService.recoverDisplayedMetadata()
 
         // The video output view is not initialized when the play as audio option was chosen
@@ -457,23 +452,8 @@ class VideoPlayerViewController: PlayerViewController {
 
     override func viewDidDisappear(_ animated: Bool) {
         super.viewDidDisappear(animated)
-        deviceMotion.stopDeviceMotion()
-#if os(iOS)
-        let defaults = UserDefaults.standard
-        if defaults.bool(forKey: kVLCPlayerShouldRememberBrightness) {
-            let currentBrightness = UIScreen.main.brightness
-            self.brightnessControl.value = Float(currentBrightness) // helper in indicating change in the system brightness
-            defaults.set(currentBrightness, forKey: KVLCPlayerBrightness)
-        }
-
-        //set the value of system brightness after closing the app x
-        //even if the Player Should Remember Brightness option is disabled
-        animateBrightness(to: systemBrightness!, duration: 0.35)
 
-        // remove the observer when the view disappears to avoid breaking the brightness view value
-        // when the video player is not shown to save the persisted values
-        removePlayerBrightnessObservers()
-#endif
+        deviceMotion.stopDeviceMotion()
     }
 
     override func viewDidLoad() {
@@ -707,51 +687,6 @@ class VideoPlayerViewController: PlayerViewController {
         titleSelectionView.mainStackView.distribution = isLandscape ? .fillEqually : .fill
     }
 
-#if os(iOS)
-    private func addPlayerBrightnessObservers() {
-        NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(systemBrightnessChanged),
-            name: UIApplication.didBecomeActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(playerWillResignActive),
-            name: UIApplication.willResignActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(playerWillEnterForeground),
-            name: UIApplication.willEnterForegroundNotification,
-            object: nil
-        )
-    }
-
-    private func removePlayerBrightnessObservers() {
-        NotificationCenter.default.removeObserver(
-            self,
-            name: UIApplication.didBecomeActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.removeObserver(
-            self,
-            name: UIApplication.willResignActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.removeObserver(
-            self,
-            name: UIApplication.willEnterForegroundNotification,
-            object: nil
-        )
-    }
-#endif
-
     // MARK: - Private helpers
 
 #if os(iOS)
-- 
GitLab


From 5dd93509d999ae001b7ec49ab8a01bccfa797559 Mon Sep 17 00:00:00 2001
From: Craig Reyenga <craig.reyenga@gmail.com>
Date: Sat, 22 Feb 2025 12:13:07 -0500
Subject: [PATCH 3/3] Further removal of unused code.

---
 Buildsystem/Testing/UI/VLCTestMenu.swift      |  1 -
 .../Media Library/Editing/EditActions.swift   | 21 -------
 .../Editing/EditController.swift              | 57 +------------------
 .../Media Library/Editing/EditToolbar.swift   |  1 -
 .../MediaCategories/AlbumHeader.swift         |  2 -
 .../MediaCategoryViewController.swift         | 44 --------------
 .../MediaGroupViewModel.swift                 | 22 -------
 .../MediaLibraryBaseModel.swift               | 10 ----
 .../MediaLibraryModel/PlaylistModel.swift     | 28 ---------
 .../MediaLibraryModel/VideoModel.swift        |  2 -
 .../Media Library/MediaLibraryService.swift   | 19 -------
 .../Control/VLCPlayerDisplayController.m      |  3 +-
 .../Player/AudioPlayer/AudioPlayerView.swift  | 13 -----
 .../MiniPlayer-iOS/AudioMiniPlayer.swift      |  4 +-
 .../VideoPlayer-iOS/PlayerController.swift    |  6 --
 .../Subviews/AddBookmarksView.swift           |  2 +-
 .../Subviews/BookmarksView.swift              |  1 -
 .../Controller/PasscodeLockController.swift   |  1 -
 .../ActionSheetSectionHeader.swift            |  3 -
 .../ActionSheetSortSectionHeader.swift        |  1 -
 .../PagerStripViewController.swift            |  3 +-
 .../VLCPagingViewController.swift             |  5 --
 VLC.xcodeproj/project.pbxproj                 |  6 +-
 23 files changed, 9 insertions(+), 246 deletions(-)

diff --git a/Buildsystem/Testing/UI/VLCTestMenu.swift b/Buildsystem/Testing/UI/VLCTestMenu.swift
index 86caa920f..168d9e730 100644
--- a/Buildsystem/Testing/UI/VLCTestMenu.swift
+++ b/Buildsystem/Testing/UI/VLCTestMenu.swift
@@ -78,6 +78,5 @@ class VLCTestMenu: XCTestCase {
         helper.tapTabBarItem(VLCAccessibilityIdentifier.settings)
         app.navigationBars.buttons[VLCAccessibilityIdentifier.about].tap()
         XCTAssertNotNil(app.navigationBars.buttons[VLCAccessibilityIdentifier.done])
-        XCTAssertNotNil(app.navigationBars.buttons[VLCAccessibilityIdentifier.contribute])
     }
 }
diff --git a/Sources/Media Library/Editing/EditActions.swift b/Sources/Media Library/Editing/EditActions.swift
index 5fd1b8e53..8224a39c0 100644
--- a/Sources/Media Library/Editing/EditActions.swift	
+++ b/Sources/Media Library/Editing/EditActions.swift	
@@ -53,27 +53,6 @@ extension EditActions {
         rootViewController.present(navigationController, animated: true, completion: nil)
     }
 
-    private func createMediaGroup(from mediaGroupIds: [VLCMLIdentifier],
-                                  _ completion: ((completionState) -> Void)? = nil) {
-        let alertInfo = TextFieldAlertInfo(alertTitle: NSLocalizedString("MEDIA_GROUPS", comment: ""),
-                                           placeHolder: NSLocalizedString("MEDIA_GROUPS_PLACEHOLDER",
-                                                                          comment: ""))
-
-        presentTextFieldAlert(with: alertInfo) {
-            [unowned self] text -> Void in
-            guard text != "" else {
-                DispatchQueue.main.async {
-                    VLCAlertViewController.alertViewManager(title: NSLocalizedString("ERROR_EMPTY_NAME",
-                                                                                     comment: ""),
-                                                            viewController: self.rootViewController)
-                    completion?(.fail)
-                }
-                return
-            }
-            self.createMediaGroup(with: text)
-        }
-    }
-
     func addToPlaylist(_ completion: ((completionState) -> Void)? = nil) {
         self.completion = completion
         if !mediaLibraryService.playlists().isEmpty {
diff --git a/Sources/Media Library/Editing/EditController.swift b/Sources/Media Library/Editing/EditController.swift
index 1d832e54a..541fa9180 100644
--- a/Sources/Media Library/Editing/EditController.swift	
+++ b/Sources/Media Library/Editing/EditController.swift	
@@ -10,14 +10,11 @@
  *****************************************************************************/
 
 protocol EditControllerDelegate: AnyObject {
-    func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> BaseCollectionViewCell?
-    func editController(editController: EditController, present viewController: UIViewController)
     func editControllerDidSelectMultipleItem(editContrller: EditController)
     func editControllerDidDeSelectMultipleItem()
     func editControllerDidFinishEditing(editController: EditController?)
     func editControllerGetCurrentThumbnail() -> UIImage?
     func editControllerGetAlbumHeaderSize(with width: CGFloat) -> CGSize
-    func editControllerUpdateNavigationBar(offset: CGFloat)
     func editControllerSetNavigationItemTitle(with title: String?)
     func editControllerUpdateIsAllSelected(with allSelected: Bool)
 }
@@ -26,7 +23,6 @@ class EditController: UIViewController {
     // Cache selectedIndexPath separately to indexPathsForSelectedItems in order to have persistance
     private var selectedCellIndexPaths = Set<IndexPath>()
     private let model: MediaLibraryBaseModel
-    private let mediaLibraryService: MediaLibraryService
     private let presentingView: UICollectionView
     private let searchDataSource: LibrarySearchDataSource
     private(set) var editActions: EditActions
@@ -39,8 +35,8 @@ class EditController: UIViewController {
 
     init(mediaLibraryService: MediaLibraryService,
          model: MediaLibraryBaseModel,
-         presentingView: UICollectionView, searchDataSource: LibrarySearchDataSource) {
-        self.mediaLibraryService = mediaLibraryService
+         presentingView: UICollectionView,
+         searchDataSource: LibrarySearchDataSource) {
         self.model = model
         self.presentingView = presentingView
         self.editActions = EditActions(model: model, mediaLibraryService: mediaLibraryService)
@@ -102,55 +98,6 @@ class EditController: UIViewController {
 // MARK: - Helpers
 
 private extension EditController {
-    private struct TextFieldAlertInfo {
-        var alertTitle: String
-        var alertDescription: String
-        var placeHolder: String
-        var textfieldText: String
-        var confirmActionTitle: String
-
-        init(alertTitle: String = "",
-             alertDescription: String = "",
-             placeHolder: String = "",
-             textfieldText: String = "",
-             confirmActionTitle: String = NSLocalizedString("BUTTON_DONE", comment: "")) {
-            self.alertTitle = alertTitle
-            self.alertDescription = alertDescription
-            self.placeHolder = placeHolder
-            self.textfieldText = textfieldText
-            self.confirmActionTitle = confirmActionTitle
-        }
-    }
-
-    private func presentTextFieldAlert(with info: TextFieldAlertInfo,
-                                       completionHandler: @escaping (String) -> Void) {
-        let alertController = UIAlertController(title: info.alertTitle,
-                                                message: info.alertDescription,
-                                                preferredStyle: .alert)
-
-        alertController.addTextField(configurationHandler: {
-            textField in
-            textField.text = info.textfieldText
-            textField.placeholder = info.placeHolder
-        })
-
-        let cancelButton = UIAlertAction(title: NSLocalizedString("BUTTON_CANCEL", comment: ""),
-                                         style: .cancel)
-
-
-        let confirmAction = UIAlertAction(title: info.confirmActionTitle, style: .default) {
-            [weak alertController] _ in
-            guard let alertController = alertController,
-                let textField = alertController.textFields?.first else { return }
-            completionHandler(textField.text ?? "")
-        }
-
-        alertController.addAction(cancelButton)
-        alertController.addAction(confirmAction)
-
-        present(alertController, animated: true, completion: nil)
-    }
-
     private func getTitle(for count: Int) -> String {
         var title = "\(count) "
         if count == 1 {
diff --git a/Sources/Media Library/Editing/EditToolbar.swift b/Sources/Media Library/Editing/EditToolbar.swift
index d97d91e78..b9b641344 100644
--- a/Sources/Media Library/Editing/EditToolbar.swift	
+++ b/Sources/Media Library/Editing/EditToolbar.swift	
@@ -20,7 +20,6 @@ protocol EditToolbarDelegate: AnyObject {
 }
 
 class EditToolbar: UIView {
-    static let height: CGFloat = 60
     weak var delegate: EditToolbarDelegate?
 
     private var stackView: UIStackView = {
diff --git a/Sources/Media Library/MediaCategories/AlbumHeader.swift b/Sources/Media Library/MediaCategories/AlbumHeader.swift
index 11c8366d6..37b38a402 100644
--- a/Sources/Media Library/MediaCategories/AlbumHeader.swift	
+++ b/Sources/Media Library/MediaCategories/AlbumHeader.swift	
@@ -25,8 +25,6 @@ class AlbumHeader: UICollectionReusableView {
 
     private var playShuffleButton = UIButton(type: .custom)
 
-    private var layoutGuide: UILayoutGuide?
-
     // MARK: - Initializers
 
     override init(frame: CGRect) {
diff --git a/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift b/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift
index 43f3eb326..5aa006dbd 100644
--- a/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift	
+++ b/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift	
@@ -228,7 +228,6 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega
         self.mediaLibraryService = mediaLibraryService
 
         let videoModel = VideoModel(medialibrary: mediaLibraryService)
-        videoModel.secondName = model.name
 
         if model is MediaGroupViewModel {
             self.model = userDefaults.bool(forKey: kVLCSettingsDisableGrouping) ? videoModel : model
@@ -1581,16 +1580,6 @@ extension MediaCategoryViewController: ActionSheetSortSectionHeaderDelegate {
 // MARK: - EditControllerDelegate
 
 extension MediaCategoryViewController: EditControllerDelegate {
-    func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> BaseCollectionViewCell? {
-        return collectionView.cellForItem(at: indexPath) as? BaseCollectionViewCell
-    }
-
-    func editController(editController: EditController,
-                        present viewController: UIViewController) {
-        let newNavigationController = UINavigationController(rootViewController: viewController)
-        navigationController?.present(newNavigationController, animated: true, completion: nil)
-    }
-
     func editControllerDidSelectMultipleItem(editContrller: EditController) {
         searchBar.isUserInteractionEnabled = false
         searchBar.alpha = 0.5
@@ -1634,39 +1623,6 @@ extension MediaCategoryViewController: EditControllerDelegate {
         return albumFlowLayout.getHeaderSize(with: width)
     }
 
-    func editControllerUpdateNavigationBar(offset: CGFloat) {
-        if let model = model as? CollectionModel,
-           model.mediaCollection is VLCMLAlbum {
-
-            let backgroundColor: UIColor
-            if offset >= 50 {
-                backgroundColor = PresentationTheme.current.colors.background.withAlphaComponent(0.4 * (offset / 100))
-            } else {
-                backgroundColor = .clear
-            }
-
-            if #available(iOS 13.0, *) {
-                let standardAppearance = navigationItem.standardAppearance
-                let scrollEdgeAppearance = navigationItem.scrollEdgeAppearance
-                standardAppearance?.backgroundColor = backgroundColor
-                scrollEdgeAppearance?.backgroundColor = backgroundColor
-            }
-
-            if let albumHeader = albumHeader,
-               let navBar = navigationController?.navigationBar {
-                let padding = statusBarView.frame.maxY + navBar.frame.maxY
-                let hideNavigationBarTitle: Bool
-                if offset >= albumHeader.frame.maxY - padding {
-                    hideNavigationBarTitle = false
-                } else {
-                    hideNavigationBarTitle = true
-                }
-
-                navigationItem.titleView?.isHidden = hideNavigationBarTitle
-            }
-        }
-    }
-
     func editControllerSetNavigationItemTitle(with title: String?) {
         var newTitle = title
 
diff --git a/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift b/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift
index 43bdd193d..2bf3660ea 100644
--- a/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift	
+++ b/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift	
@@ -115,28 +115,6 @@ class MediaGroupViewModel: MLBaseModel {
         }
         return true
     }
-
-    func create(with name: String, from mediaContent: [VLCMLMedia]) -> Bool {
-        let originIds = originMediaGroupsIds(from: mediaContent)
-        return create(with: name, from: originIds, content: mediaContent)
-    }
-
-    func unGroupMedia(_ media: [VLCMLMedia], from originMediaGroup: VLCMLMediaGroup) -> Bool {
-        for medium in media {
-            medium.removeFromGroup()
-            guard let newGroup = medialibrary.medialib.createMediaGroup(withName: medium.title) else {
-                return false
-            }
-            newGroup.add(medium)
-        }
-        if originMediaGroup.nbTotalMedia() == 0 {
-            fileArrayQueue.sync {
-                filterFilesFromDeletion(of: [originMediaGroup])
-            }
-            medialibrary.medialib.deleteMediaGroup(withIdentifier: originMediaGroup.identifier())
-        }
-        return true
-    }
 }
 
 extension VLCMLMediaGroup {
diff --git a/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift b/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift
index 34360210d..e8a969265 100644
--- a/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift	
+++ b/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift	
@@ -28,7 +28,6 @@ protocol MediaLibraryBaseModel {
     var indicatorName: String { get }
     var cellType: BaseCollectionViewCell.Type { get }
 
-    func anyAppend(_ item: VLCMLObject)
     func anyDelete(_ items: [VLCMLObject])
     func sort(by criteria: VLCMLSortingCriteria, desc: Bool)
 
@@ -46,8 +45,6 @@ protocol MLBaseModel: AnyObject, MediaLibraryBaseModel {
 
     var medialibrary: MediaLibraryService { get }
 
-    var observable: Observable<MediaLibraryBaseModelObserver> { get }
-
     var indicatorName: String { get }
 
     func append(_ item: MLType)
@@ -60,13 +57,6 @@ extension MLBaseModel {
         return files
     }
 
-    func anyAppend(_ item: VLCMLObject) {
-        guard let item = item as? MLType else {
-            preconditionFailure("MLBaseModel: Wrong underlying ML type.")
-        }
-        append(item)
-    }
-
     func anyDelete(_ items: [VLCMLObject]) {
         guard let items = items as? [MLType] else {
             preconditionFailure("MLBaseModel: Wrong underlying ML type.")
diff --git a/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift b/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift
index 25c1e9732..51cca785d 100644
--- a/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift	
+++ b/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift	
@@ -81,34 +81,6 @@ class PlaylistModel: MLBaseModel {
             $0.mediaLibraryBaseModelReloadView()
         }
     }
-
-    // Creates a VLCMLPlaylist appending it and updates linked view
-    func create(name: String) {
-        guard let playlist = medialibrary.createPlaylist(with: name) else {
-            assertionFailure("PlaylistModel: create: Failed to create a playlist.")
-            return
-        }
-        append(playlist)
-        observable.notifyObservers {
-            $0.mediaLibraryBaseModelReloadView()
-        }
-    }
-}
-
-// MARK: - Sort
-extension PlaylistModel {
-    func sort(by criteria: VLCMLSortingCriteria, desc: Bool) {
-        defer {
-            fileArrayLock.unlock()
-        }
-        fileArrayLock.lock()
-        files = medialibrary.playlists(sortingCriteria: criteria, desc: desc)
-        sortModel.currentSort = criteria
-        sortModel.desc = desc
-        observable.notifyObservers {
-            $0.mediaLibraryBaseModelReloadView()
-        }
-    }
 }
 
 // MARK: - Search
diff --git a/Sources/Media Library/MediaLibraryModel/VideoModel.swift b/Sources/Media Library/MediaLibraryModel/VideoModel.swift
index d438d50f4..85f21c914 100644
--- a/Sources/Media Library/MediaLibraryModel/VideoModel.swift	
+++ b/Sources/Media Library/MediaLibraryModel/VideoModel.swift	
@@ -27,8 +27,6 @@ class VideoModel: MediaModel {
 
     var name: String = "ALL_VIDEOS"
 
-    var secondName: String = ""
-
     var indicatorName: String = NSLocalizedString("ALL_VIDEOS", comment: "")
 
     required init(medialibrary: MediaLibraryService) {
diff --git a/Sources/Media Library/MediaLibraryService.swift b/Sources/Media Library/MediaLibraryService.swift
index 4a218f2e7..d920c1f1b 100644
--- a/Sources/Media Library/MediaLibraryService.swift	
+++ b/Sources/Media Library/MediaLibraryService.swift	
@@ -139,8 +139,6 @@ class MediaLibraryService: NSObject {
     private static let didForceRescan: String = "MediaLibraryDidForceRescan"
     private var triedToRecoverFromInitializationErrorOnce = false
 
-    private var didFinishDiscovery = false
-
     private var desiredThumbnailWidth = UInt(320)
     private var desiredThumbnailHeight = UInt(200)
 
@@ -678,23 +676,6 @@ extension MediaLibraryService {
     }
 }
 
-// MARK: - VLCMediaLibraryDelegate - Discovery
-
-extension MediaLibraryService {
-    func medialibrary(_ medialibrary: VLCMediaLibrary, didStartDiscovery entryPoint: String) {
-    }
-
-    func medialibrary(_ medialibrary: VLCMediaLibrary, didCompleteDiscovery entryPoint: String) {
-        didFinishDiscovery = true
-    }
-
-    func medialibrary(_ medialibrary: VLCMediaLibrary, didProgressDiscovery entryPoint: String) {
-    }
-
-    func medialibrary(_ medialibrary: VLCMediaLibrary, didUpdateParsingStatsWithPercent percent: UInt32) {
-    }
-}
-
 // MARK: - VLCMediaLibraryDelegate - Exception handling
 
 extension MediaLibraryService {
diff --git a/Sources/Playback/Control/VLCPlayerDisplayController.m b/Sources/Playback/Control/VLCPlayerDisplayController.m
index 0ce8275dc..fc92640cb 100644
--- a/Sources/Playback/Control/VLCPlayerDisplayController.m
+++ b/Sources/Playback/Control/VLCPlayerDisplayController.m
@@ -449,8 +449,7 @@ NSString *const VLCPlayerDisplayControllerHideMiniPlayer = @"VLCPlayerDisplayCon
             UIViewController *rootViewController = [[[UIApplication sharedApplication] delegate] window].rootViewController;
 
             // Until VideoMiniPlayer is integrated, only AudioMiniPlayer is used.
-            self.miniPlaybackView = miniPlaybackView = [[VLCAudioMiniPlayer alloc] initWithService:[VLCAppCoordinator sharedInstance].mediaLibraryService
-                                                                                  draggingDelegate:self];
+            self.miniPlaybackView = miniPlaybackView = [[VLCAudioMiniPlayer alloc] initWithDraggingDelegate:self];
             if (!_queueViewController) {
                 [self initQueueViewController];
             }
diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
index f9ac9b76e..bd67bee38 100644
--- a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
+++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
@@ -166,8 +166,6 @@ class AudioPlayerView: UIView, UIGestureRecognizerDelegate {
 
     lazy var progressionView: UIView = UIView()
 
-    private var thumbnailImageViewWidthConstant: CGFloat = 270.0
-
     private lazy var progressionViewBottomConstant: CGFloat = {
 #if os(iOS)
         let isSmallerScreen: Bool = UIScreen.main.bounds.width <= DeviceDimensions.iPhone4sPortrait.rawValue
@@ -244,17 +242,6 @@ class AudioPlayerView: UIView, UIGestureRecognizerDelegate {
         artistLabel.textColor = .white
     }
 
-    func setupPlayqueueView(with qvc: UIView) {
-        playqueueView.addSubview(qvc)
-        playqueueView.bringSubviewToFront(qvc)
-        NSLayoutConstraint.activate([
-            qvc.topAnchor.constraint(equalTo: playqueueView.topAnchor),
-            qvc.leadingAnchor.constraint(equalTo: playqueueView.leadingAnchor),
-            qvc.trailingAnchor.constraint(equalTo: playqueueView.trailingAnchor),
-            qvc.bottomAnchor.constraint(equalTo: playqueueView.bottomAnchor)
-        ])
-    }
-
     func setupProgressView(with view: MediaScrubProgressBar) {
         view.translatesAutoresizingMaskIntoConstraints = false
         progressionView.addSubview(view)
diff --git a/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift b/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift
index 961431cc9..41c96f2a1 100644
--- a/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift
+++ b/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift
@@ -61,7 +61,6 @@ class AudioMiniPlayer: UIView, MiniPlayer, QueueViewControllerDelegate {
 
     private let animationDuration = 0.2
 
-    private var mediaService: MediaLibraryService
     private lazy var playbackService = PlaybackService.sharedInstance()
 
     private var queueViewController: QueueViewController?
@@ -79,8 +78,7 @@ class AudioMiniPlayer: UIView, MiniPlayer, QueueViewControllerDelegate {
         }
     }
 
-    @objc init(service: MediaLibraryService, draggingDelegate: MiniPlayerDraggingDelegate) {
-        self.mediaService = service
+    @objc init(draggingDelegate: MiniPlayerDraggingDelegate) {
         self.draggingDelegate = draggingDelegate
         super.init(frame: .zero)
         initView()
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
index 2d88941c7..261fc9c25 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
@@ -32,14 +32,8 @@ class PlayerController: NSObject {
 
     var isInterfaceLocked: Bool = false
 
-    var isTapSeeking: Bool = false
-
     // MARK: - UserDefaults computed properties getters
 
-    var displayRemainingTime: Bool {
-        return UserDefaults.standard.bool(forKey: kVLCShowRemainingTime)
-    }
-
     var isVolumeGestureEnabled: Bool {
         return UserDefaults.standard.bool(forKey: kVLCSettingVolumeGesture)
     }
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift
index 0a1a6dab0..13aca341a 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift
@@ -25,7 +25,7 @@ class AddBookmarksView: UIView {
 
     private var bookmarksTableView: UITableView = UITableView()
 
-    weak var delegate: BookmarksView?
+    weak var delegate: AddBookmarksViewDelegate?
 
     init(frame: CGRect, tableView: UITableView) {
         super.init(frame: frame)
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift
index 5a42bc5a0..3d8baefd9 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift
@@ -16,7 +16,6 @@ protocol BookmarksViewDelegate: AnyObject {
     func bookmarksViewDidSelectBookmark(value: Float)
     func bookmarksViewShouldDisableGestures(_ disable: Bool)
     func bookmarksViewDisplayAlert(action: BookmarkActionIdentifier, index: Int, isEditing: Bool)
-    func bookmarksViewOpenBookmarksView()
     func bookmarksViewOpenAddBookmarksView()
     func bookmarksViewCloseAddBookmarksView()
 }
diff --git a/Sources/Settings/Controller/PasscodeLockController.swift b/Sources/Settings/Controller/PasscodeLockController.swift
index 6bfedb1a3..dc76f7855 100644
--- a/Sources/Settings/Controller/PasscodeLockController.swift
+++ b/Sources/Settings/Controller/PasscodeLockController.swift
@@ -24,7 +24,6 @@ enum PasscodeAction {
 
 class PasscodeLockController: UIViewController {
     // - MARK: Properties
-    private let userDefaults = UserDefaults.standard
     private let notificationCenter = NotificationCenter.default
 
     let action: PasscodeAction
diff --git a/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift b/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift
index 8e86f759d..ed4adfc66 100644
--- a/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift	
+++ b/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift	
@@ -10,9 +10,6 @@
  *****************************************************************************/
 
 class ActionSheetSectionHeader: UIView {
-
-    static let identifier = "VLCActionSheetSectionHeader"
-
     public var accessoryViewsDelegate: ActionSheetAccessoryViewsDelegate? {
         didSet {
             addAccessoryViews()
diff --git a/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift b/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift
index e8a6809e1..5ae442846 100644
--- a/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift	
+++ b/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift	
@@ -29,7 +29,6 @@ class ActionSheetSortSectionHeader: ActionSheetSectionHeader {
     }
 
     private var sortModel: SortModel
-    private let userDefaults = UserDefaults.standard
     private var isAdditionalOptionShown: Bool = false
 
     private let descendingStackView: UIStackView = {
diff --git a/Sources/UI Elements/View Controller/PagerStripViewController.swift b/Sources/UI Elements/View Controller/PagerStripViewController.swift
index d099ae598..6f2a8310a 100644
--- a/Sources/UI Elements/View Controller/PagerStripViewController.swift	
+++ b/Sources/UI Elements/View Controller/PagerStripViewController.swift	
@@ -229,8 +229,7 @@ class PagerTabStripViewController: UIViewController, UIScrollViewDelegate {
         preCurrentIndex = currentIndex
         let changeCurrentIndex = newCurrentIndex != oldCurrentIndex
 
-        if let progressiveDelegate = self as? PagerTabStripIsProgressiveDelegate {
-
+        if let progressiveDelegate = delegate {
             let (fromIndex, toIndex, scrollPercentage) = progressiveIndicatorData(virtualPage)
             progressiveDelegate.updateIndicator(for: self, fromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: scrollPercentage, indexWasChanged: changeCurrentIndex)
         }
diff --git a/Sources/UI Elements/View Controller/VLCPagingViewController.swift b/Sources/UI Elements/View Controller/VLCPagingViewController.swift
index f55e99dc4..3e06f50f3 100644
--- a/Sources/UI Elements/View Controller/VLCPagingViewController.swift	
+++ b/Sources/UI Elements/View Controller/VLCPagingViewController.swift	
@@ -176,11 +176,6 @@ class VLCPagingViewController<ButtonBarCellType: UICollectionViewCell>: PagerTab
         return calculateStretchedCellWidths(minimumCellWidths, suggestedStretchedCellWidth: newSuggestedStretchedCellWidth, previousNumberOfLargeCells: numberOfLargeCells)
     }
 
-    func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int) {
-        guard shouldUpdateButtonBarView else { return }
-        buttonBarView.moveTo(index: toIndex, animated: true, swipeDirection: toIndex < fromIndex ? .right : .left, pagerScroll: .yes)
-    }
-
     func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool) {
         guard shouldUpdateButtonBarView else { return }
         buttonBarView.move(fromIndex: fromIndex, toIndex: toIndex, progressPercentage: progressPercentage, pagerScroll: .yes)
diff --git a/VLC.xcodeproj/project.pbxproj b/VLC.xcodeproj/project.pbxproj
index c58720618..8b9e6c63f 100644
--- a/VLC.xcodeproj/project.pbxproj
+++ b/VLC.xcodeproj/project.pbxproj
@@ -5117,7 +5117,7 @@
 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				INFOPLIST_FILE = Buildsystem/Testing/Unit/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 11.4;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -5160,7 +5160,7 @@
 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				INFOPLIST_FILE = Buildsystem/Testing/Unit/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 11.4;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -5202,7 +5202,7 @@
 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				INFOPLIST_FILE = Buildsystem/Testing/Unit/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 11.4;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
-- 
GitLab