work on tvos subtitle overlay

This commit is contained in:
Ethan Pippin 2022-01-03 11:48:35 -07:00
parent a9d37033e6
commit 40b6e5c680
4 changed files with 47 additions and 33 deletions

View File

@ -46,7 +46,7 @@ class VLCPlayerViewController: UIViewController {
private lazy var jumpBackwardOverlayView = makeJumpBackwardOverlayView()
private lazy var jumpForwardOverlayView = makeJumpForwardOverlayView()
private var currentOverlayHostingController: UIHostingController<tvOSVLCOverlay>?
private var currentOverlayContentHostingController: UIHostingController<tvOSOverlayContentView>?
private var currentOverlayContentHostingController: UIHostingController<SmallMediaStreamSelectionView>?
// 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

View File

@ -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")

View File

@ -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)

View File

@ -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)
}
}