From 14b5d50028cc88bcbe91ac14b25d3705a47da46e Mon Sep 17 00:00:00 2001 From: Balamurugan Date: Thu, 12 Mar 2026 12:04:27 +0530 Subject: [PATCH 1/3] feat: Improve video quality labels in player UI - Video quality options previously displayed raw resolution values, which were not clear for users when adaptive streaming was used. - This happened because the UI directly showed available resolutions without indicating the maximum quality the stream could reach. - The UI now displays labels in the format "Up to {resolution}", making it clearer that the selected option represents the maximum possible playback quality. --- Source/Utils/VideoQualityUtils.swift | 7 +++++++ Source/Views/SwiftUI/PlayerSettingsButton.swift | 6 ++++-- Source/Views/UIKit/PlayerControlsUIView.swift | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Source/Utils/VideoQualityUtils.swift b/Source/Utils/VideoQualityUtils.swift index 5bde6fa..7839b9c 100644 --- a/Source/Utils/VideoQualityUtils.swift +++ b/Source/Utils/VideoQualityUtils.swift @@ -15,6 +15,13 @@ extension VideoQuality { } public class VideoQualityUtils { + public static func getDisplayLabel(for quality: VideoQuality) -> String { + if quality.resolution == "Auto" { + return "Auto" + } + return "Up to \(quality.resolution)" + } + public static func selectClosestQuality( in qualities: [VideoQuality], for resolution: String, diff --git a/Source/Views/SwiftUI/PlayerSettingsButton.swift b/Source/Views/SwiftUI/PlayerSettingsButton.swift index 8a3ce10..26d9ed2 100644 --- a/Source/Views/SwiftUI/PlayerSettingsButton.swift +++ b/Source/Views/SwiftUI/PlayerSettingsButton.swift @@ -95,7 +95,9 @@ struct PlayerSettingsButton: View { } private func videoQualityButton() -> ActionSheet.Button { - return .default(Text("Video Quality - \(player.currentVideoQuality?.resolution ?? "Auto")")) { + let currentLabel = player.currentVideoQuality.map { VideoQualityUtils.getDisplayLabel(for: $0) } ?? "Auto" + + return .default(Text("Video Quality - \(currentLabel)")) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.showOptions = true self.currentMenu = .videoQuality @@ -123,7 +125,7 @@ struct PlayerSettingsButton: View { private func videoQualityOptions() -> [ActionSheet.Button] { return player.availableVideoQualities.map { videoQuality in - .default(Text(videoQuality.resolution)) { + .default(Text(VideoQualityUtils.getDisplayLabel(for: videoQuality))) { player.changeVideoQuality(videoQuality) } } diff --git a/Source/Views/UIKit/PlayerControlsUIView.swift b/Source/Views/UIKit/PlayerControlsUIView.swift index 3ba29c9..9c9dca0 100644 --- a/Source/Views/UIKit/PlayerControlsUIView.swift +++ b/Source/Views/UIKit/PlayerControlsUIView.swift @@ -243,7 +243,8 @@ class PlayerControlsUIView: UIView { } func createActionForVideoQuality(_ quality: VideoQuality) -> UIAlertAction { - let action = UIAlertAction(title: quality.resolution, style: .default, handler: { (_) in + let label = VideoQualityUtils.getDisplayLabel(for: quality) + let action = UIAlertAction(title: label, style: .default, handler: { (_) in self.player.changeVideoQuality(quality) }) From 14fee2558fdf5cc792cd32737825b08d2d96d429 Mon Sep 17 00:00:00 2001 From: Balamurugan Date: Thu, 12 Mar 2026 12:13:18 +0530 Subject: [PATCH 2/3] fix: AI comment --- Source/Utils/VideoQualityUtils.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Utils/VideoQualityUtils.swift b/Source/Utils/VideoQualityUtils.swift index 7839b9c..193bb54 100644 --- a/Source/Utils/VideoQualityUtils.swift +++ b/Source/Utils/VideoQualityUtils.swift @@ -16,7 +16,7 @@ extension VideoQuality { public class VideoQualityUtils { public static func getDisplayLabel(for quality: VideoQuality) -> String { - if quality.resolution == "Auto" { + guard quality.resolution != "Auto" else { return "Auto" } return "Up to \(quality.resolution)" From 289dce16915ff62274e6f8b7a3370cb76cbbe514 Mon Sep 17 00:00:00 2001 From: Balamurugan Date: Fri, 13 Mar 2026 16:23:38 +0530 Subject: [PATCH 3/3] update quality selection helper text --- Source/Database/TPStreamsDownloadManager.swift | 2 +- Source/Views/SwiftUI/PlayerSettingsButton.swift | 4 ++-- Source/Views/UIKit/PlayerControlsUIView.swift | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Database/TPStreamsDownloadManager.swift b/Source/Database/TPStreamsDownloadManager.swift index 2ce1a7e..031a138 100644 --- a/Source/Database/TPStreamsDownloadManager.swift +++ b/Source/Database/TPStreamsDownloadManager.swift @@ -164,7 +164,7 @@ public final class TPStreamsDownloadManager { on viewController: UIViewController, completion: ((Result) -> Void)? ) { - let alert = UIAlertController(title: "Select Download Quality", message: nil, preferredStyle: .actionSheet) + let alert = UIAlertController(title: "Select Download Quality", message: "Video quality adjusts based on your internet speed. Your selection sets the highest possible quality.", preferredStyle: .actionSheet) for quality in qualities { alert.addAction(UIAlertAction(title: quality.resolution, style: .default) { _ in diff --git a/Source/Views/SwiftUI/PlayerSettingsButton.swift b/Source/Views/SwiftUI/PlayerSettingsButton.swift index 26d9ed2..5085637 100644 --- a/Source/Views/SwiftUI/PlayerSettingsButton.swift +++ b/Source/Views/SwiftUI/PlayerSettingsButton.swift @@ -47,13 +47,13 @@ struct PlayerSettingsButton: View { case .videoQuality: return ActionSheet( title: Text("Video Quality"), - message: nil, + message: Text("Video quality adjusts based on your internet speed. Your selection sets the highest possible quality."), buttons: videoQualityOptions() + [.cancel()] ) case .downloadQuality: return ActionSheet( title: Text("Download Quality"), - message: nil, + message: Text("Video quality adjusts based on your internet speed. Your selection sets the highest possible quality."), buttons: downloadQualityOptions() + [.cancel()] ) } diff --git a/Source/Views/UIKit/PlayerControlsUIView.swift b/Source/Views/UIKit/PlayerControlsUIView.swift index 9c9dca0..4820cca 100644 --- a/Source/Views/UIKit/PlayerControlsUIView.swift +++ b/Source/Views/UIKit/PlayerControlsUIView.swift @@ -209,7 +209,7 @@ class PlayerControlsUIView: UIView { } func createVideoQualityMenu() -> UIAlertController { - let qualityMenu = UIAlertController(title: "Available resolutions", message: nil, preferredStyle: ACTION_SHEET_PREFERRED_STYLE) + let qualityMenu = UIAlertController(title: "Available resolutions", message: "Video quality adjusts based on your internet speed. Your selection sets the highest possible quality.", preferredStyle: ACTION_SHEET_PREFERRED_STYLE) for quality in self.player.availableVideoQualities { let action = createActionForVideoQuality(quality) qualityMenu.addAction(action) @@ -219,7 +219,7 @@ class PlayerControlsUIView: UIView { } func createDownloadQualityMenu() -> UIAlertController { - let qualityMenu = UIAlertController(title: "Available resolutions", message: nil, preferredStyle: ACTION_SHEET_PREFERRED_STYLE) + let qualityMenu = UIAlertController(title: "Available resolutions", message: "Video quality adjusts based on your internet speed. Your selection sets the highest possible quality.", preferredStyle: ACTION_SHEET_PREFERRED_STYLE) var availableVideoQualities = player.availableVideoQualities // Remove Auto Quality from the Array availableVideoQualities.remove(at: 0)