diff --git a/JellyfinPlayer tvOS/Views/VideoPlayer/VLCPlayerViewController.swift b/JellyfinPlayer tvOS/Views/VideoPlayer/VLCPlayerViewController.swift index 85d6ffa7..50da72f6 100644 --- a/JellyfinPlayer tvOS/Views/VideoPlayer/VLCPlayerViewController.swift +++ b/JellyfinPlayer tvOS/Views/VideoPlayer/VLCPlayerViewController.swift @@ -46,7 +46,7 @@ class VLCPlayerViewController: UIViewController { private lazy var jumpBackwardOverlayView = makeJumpBackwardOverlayView() private lazy var jumpForwardOverlayView = makeJumpForwardOverlayView() private var currentOverlayHostingController: UIHostingController? - private var currentOverlayContentHostingController: UIHostingController? + private var currentOverlayContentHostingController: UIHostingController? // MARK: init @@ -195,12 +195,21 @@ class VLCPlayerViewController: UIViewController { case .select: didGenerallyTap() case .upArrow: + if displayingContentOverlay { + hideOverlayContent() + + showOverlay() + restartOverlayDismissTimer() + } + print("Up arrow") case .downArrow: - stopOverlayDismissTimer() + if !displayingContentOverlay { + stopOverlayDismissTimer() - hideOverlay() - showOverlayContent() + hideOverlay() + showOverlayContent() + } case .leftArrow: didSelectBackward() print("Left arrow") @@ -292,13 +301,14 @@ class VLCPlayerViewController: UIViewController { currentOverlayContentHostingController.removeFromParent() } -// let newSmallMenuOverlayView = SmallMediaStreamSelectionView(items: viewModel.subtitleStreams, -// selectedItem: viewModel.subtitleStreams.first(where: { $0.index == viewModel.selectedSubtitleStreamIndex })) { selectedMediaStream in -// self.didSelectSubtitleStream(index: selectedMediaStream.index ?? -1) -// } -// let newOverlayContentHostingController = UIHostingController(rootView: newSmallMenuOverlayView) - let newOverlayContentView = tvOSOverlayContentView(viewModel: viewModel) - let newOverlayContentHostingController = UIHostingController(rootView: newOverlayContentView) + let newSmallMenuOverlayView = SmallMediaStreamSelectionView(viewModel: viewModel, + title: "Subtitles", + items: viewModel.subtitleStreams) { selectedMediaStream in + self.didSelectSubtitleStream(index: selectedMediaStream.index ?? -1) + } + let newOverlayContentHostingController = UIHostingController(rootView: newSmallMenuOverlayView) +// let newOverlayContentView = tvOSOverlayContentView(viewModel: viewModel) +// let newOverlayContentHostingController = UIHostingController(rootView: newOverlayContentView) newOverlayContentHostingController.view.translatesAutoresizingMaskIntoConstraints = false newOverlayContentHostingController.view.backgroundColor = UIColor.clear diff --git a/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/SmallMenuOverlay.swift b/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/SmallMenuOverlay.swift index 4dd2f855..31c676cc 100644 --- a/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/SmallMenuOverlay.swift +++ b/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/SmallMenuOverlay.swift @@ -12,20 +12,14 @@ import SwiftUI struct SmallMediaStreamSelectionView: View { - @Binding var selectedItem: MediaStream? - private let title: String - private var items: [MediaStream] - private var selectedAction: (MediaStream) -> Void - -// init(items: [MediaStream], selectedItem: MediaStream?, selectedAction: @escaping (MediaStream) -> Void) { -// self.items = items -// self.selectedItem = selectedItem -// self.selectedAction = selectedAction -// } + @ObservedObject var viewModel: VideoPlayerViewModel + let title: String + var items: [MediaStream] + var selectedAction: (MediaStream) -> Void var body: some View { ZStack(alignment: .bottom) { - LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.7)]), + LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.9)]), startPoint: .top, endPoint: .bottom) .ignoresSafeArea() @@ -36,8 +30,8 @@ struct SmallMediaStreamSelectionView: View { Spacer() HStack { - Text(title) - .font(.title3) + Text("Subtitles") + Spacer() } @@ -45,9 +39,9 @@ struct SmallMediaStreamSelectionView: View { HStack { ForEach(items, id: \.self) { item in Button { - self.selectedAction(item) + viewModel.playerOverlayDelegate?.didSelectSubtitleStream(index: item.index ?? -1) } label: { - if item == selectedItem { + if item.index ?? -1 == viewModel.selectedSubtitleStreamIndex { Label(item.displayTitle ?? "No Title", systemImage: "checkmark") } else { Text(item.displayTitle ?? "No Title") diff --git a/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSOverlayContent.swift b/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSOverlayContent.swift index cda78ad1..851abf1b 100644 --- a/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSOverlayContent.swift +++ b/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSOverlayContent.swift @@ -27,24 +27,32 @@ struct tvOSOverlayContentView: View { } label: { Text("About") } + .buttonStyle(PlainButtonStyle()) + .background(Color.clear) Button { print("here") } label: { Text("Chapters") } + .buttonStyle(PlainButtonStyle()) + .background(Color.clear) Button { print("here") } label: { Text("Subtitles") } + .buttonStyle(PlainButtonStyle()) + .background(Color.clear) Button { print("here") } label: { Text("Audio") } + .buttonStyle(PlainButtonStyle()) + .background(Color.clear) } .frame(height: 50) diff --git a/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSVLCOverlay.swift b/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSVLCOverlay.swift index 67d1cec5..d3e56743 100644 --- a/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSVLCOverlay.swift +++ b/JellyfinPlayer tvOS/Views/VideoPlayer/tvOSOverlay/tvOSVLCOverlay.swift @@ -74,14 +74,16 @@ struct tvOSVLCOverlay: View { } if viewModel.shouldShowAutoPlay { - Button { - viewModel.autoplayEnabled.toggle() - } label: { - if viewModel.autoplayEnabled { - Image(systemName: "play.circle.fill") - } else { - Image(systemName: "stop.circle") + if viewModel.autoplayEnabled { + SFSymbolButton(systemName: "play.circle.fill") { + viewModel.autoplayEnabled.toggle() } + .frame(maxWidth: 30, maxHeight: 30) + } else { + SFSymbolButton(systemName: "stop.circle") { + viewModel.autoplayEnabled.toggle() + } + .frame(maxWidth: 30, maxHeight: 30) } }