Replace swipe gestures for jump with doubleTapGesture
run Swiftformat .
This commit is contained in:
parent
bf3ee321c0
commit
615e71c334
|
@ -28,13 +28,13 @@ struct CinematicNextUpCardView: View {
|
||||||
item.getSeriesThumbImage(maxWidth: 350),
|
item.getSeriesThumbImage(maxWidth: 350),
|
||||||
item.getSeriesBackdropImage(maxWidth: 350),
|
item.getSeriesBackdropImage(maxWidth: 350),
|
||||||
])
|
])
|
||||||
.frame(width: 350, height: 210)
|
.frame(width: 350, height: 210)
|
||||||
} else {
|
} else {
|
||||||
ImageView([
|
ImageView([
|
||||||
.init(url: item.getThumbImage(maxWidth: 350)),
|
.init(url: item.getThumbImage(maxWidth: 350)),
|
||||||
.init(url: item.getBackdropImage(maxWidth: 350), blurHash: item.getBackdropImageBlurHash()),
|
.init(url: item.getBackdropImage(maxWidth: 350), blurHash: item.getBackdropImageBlurHash()),
|
||||||
])
|
])
|
||||||
.frame(width: 350, height: 210)
|
.frame(width: 350, height: 210)
|
||||||
}
|
}
|
||||||
|
|
||||||
LinearGradient(colors: [.clear, .black],
|
LinearGradient(colors: [.clear, .black],
|
||||||
|
|
|
@ -29,13 +29,13 @@ struct CinematicResumeCardView: View {
|
||||||
item.getSeriesThumbImage(maxWidth: 350),
|
item.getSeriesThumbImage(maxWidth: 350),
|
||||||
item.getSeriesBackdropImage(maxWidth: 350),
|
item.getSeriesBackdropImage(maxWidth: 350),
|
||||||
])
|
])
|
||||||
.frame(width: 350, height: 210)
|
.frame(width: 350, height: 210)
|
||||||
} else {
|
} else {
|
||||||
ImageView([
|
ImageView([
|
||||||
.init(url: item.getThumbImage(maxWidth: 350)),
|
.init(url: item.getThumbImage(maxWidth: 350)),
|
||||||
.init(url: item.getBackdropImage(maxWidth: 350), blurHash: item.getBackdropImageBlurHash()),
|
.init(url: item.getBackdropImage(maxWidth: 350), blurHash: item.getBackdropImageBlurHash()),
|
||||||
])
|
])
|
||||||
.frame(width: 350, height: 210)
|
.frame(width: 350, height: 210)
|
||||||
}
|
}
|
||||||
|
|
||||||
LinearGradient(colors: [.clear, .black],
|
LinearGradient(colors: [.clear, .black],
|
||||||
|
|
|
@ -62,18 +62,18 @@ struct tvOSLiveTVOverlay: View {
|
||||||
SFSymbolButton(systemName: "chevron.left.circle", action: {
|
SFSymbolButton(systemName: "chevron.left.circle", action: {
|
||||||
viewModel.playerOverlayDelegate?.didSelectPlayPreviousItem()
|
viewModel.playerOverlayDelegate?.didSelectPlayPreviousItem()
|
||||||
})
|
})
|
||||||
.frame(maxWidth: 30, maxHeight: 30)
|
.frame(maxWidth: 30, maxHeight: 30)
|
||||||
.disabled(viewModel.previousItemVideoPlayerViewModel == nil)
|
.disabled(viewModel.previousItemVideoPlayerViewModel == nil)
|
||||||
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
||||||
}
|
}
|
||||||
|
|
||||||
if viewModel.shouldShowPlayNextItem {
|
if viewModel.shouldShowPlayNextItem {
|
||||||
SFSymbolButton(systemName: "chevron.right.circle", action: {
|
SFSymbolButton(systemName: "chevron.right.circle", action: {
|
||||||
viewModel.playerOverlayDelegate?.didSelectPlayNextItem()
|
viewModel.playerOverlayDelegate?.didSelectPlayNextItem()
|
||||||
})
|
})
|
||||||
.frame(maxWidth: 30, maxHeight: 30)
|
.frame(maxWidth: 30, maxHeight: 30)
|
||||||
.disabled(viewModel.nextItemVideoPlayerViewModel == nil)
|
.disabled(viewModel.nextItemVideoPlayerViewModel == nil)
|
||||||
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
||||||
}
|
}
|
||||||
|
|
||||||
if viewModel.shouldShowAutoPlay {
|
if viewModel.shouldShowAutoPlay {
|
||||||
|
|
|
@ -62,18 +62,18 @@ struct tvOSVLCOverlay: View {
|
||||||
SFSymbolButton(systemName: "chevron.left.circle", action: {
|
SFSymbolButton(systemName: "chevron.left.circle", action: {
|
||||||
viewModel.playerOverlayDelegate?.didSelectPlayPreviousItem()
|
viewModel.playerOverlayDelegate?.didSelectPlayPreviousItem()
|
||||||
})
|
})
|
||||||
.frame(maxWidth: 30, maxHeight: 30)
|
.frame(maxWidth: 30, maxHeight: 30)
|
||||||
.disabled(viewModel.previousItemVideoPlayerViewModel == nil)
|
.disabled(viewModel.previousItemVideoPlayerViewModel == nil)
|
||||||
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
||||||
}
|
}
|
||||||
|
|
||||||
if viewModel.shouldShowPlayNextItem {
|
if viewModel.shouldShowPlayNextItem {
|
||||||
SFSymbolButton(systemName: "chevron.right.circle", action: {
|
SFSymbolButton(systemName: "chevron.right.circle", action: {
|
||||||
viewModel.playerOverlayDelegate?.didSelectPlayNextItem()
|
viewModel.playerOverlayDelegate?.didSelectPlayNextItem()
|
||||||
})
|
})
|
||||||
.frame(maxWidth: 30, maxHeight: 30)
|
.frame(maxWidth: 30, maxHeight: 30)
|
||||||
.disabled(viewModel.nextItemVideoPlayerViewModel == nil)
|
.disabled(viewModel.nextItemVideoPlayerViewModel == nil)
|
||||||
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
.foregroundColor(viewModel.nextItemVideoPlayerViewModel == nil ? .gray : .white)
|
||||||
}
|
}
|
||||||
|
|
||||||
if viewModel.shouldShowAutoPlay {
|
if viewModel.shouldShowAutoPlay {
|
||||||
|
|
|
@ -2951,7 +2951,7 @@
|
||||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 70;
|
CURRENT_PROJECT_VERSION = 70;
|
||||||
DEVELOPMENT_TEAM = 4BHXT8RHFR;
|
DEVELOPMENT_TEAM = "";
|
||||||
INFOPLIST_FILE = WidgetExtension/Info.plist;
|
INFOPLIST_FILE = WidgetExtension/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -2977,7 +2977,7 @@
|
||||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 70;
|
CURRENT_PROJECT_VERSION = 70;
|
||||||
DEVELOPMENT_TEAM = 4BHXT8RHFR;
|
DEVELOPMENT_TEAM = "";
|
||||||
INFOPLIST_FILE = WidgetExtension/Info.plist;
|
INFOPLIST_FILE = WidgetExtension/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
|
|
@ -48,9 +48,9 @@ struct PortraitImageHStackView<TopBarView: View, ItemType: PortraitImageStackabl
|
||||||
failureView: {
|
failureView: {
|
||||||
InitialFailureView(item.failureInitials)
|
InitialFailureView(item.failureInitials)
|
||||||
})
|
})
|
||||||
.portraitPoster(width: maxWidth)
|
.portraitPoster(width: maxWidth)
|
||||||
.shadow(radius: 4, y: 2)
|
.shadow(radius: 4, y: 2)
|
||||||
.accessibilityIgnoresInvertColors()
|
.accessibilityIgnoresInvertColors()
|
||||||
|
|
||||||
if item.showTitle {
|
if item.showTitle {
|
||||||
Text(item.title)
|
Text(item.title)
|
||||||
|
|
|
@ -40,9 +40,9 @@ struct PortraitItemButton<ItemType: PortraitImageStackable>: View {
|
||||||
failureView: {
|
failureView: {
|
||||||
InitialFailureView(item.failureInitials)
|
InitialFailureView(item.failureInitials)
|
||||||
})
|
})
|
||||||
.portraitPoster(width: maxWidth)
|
.portraitPoster(width: maxWidth)
|
||||||
.shadow(radius: 4, y: 2)
|
.shadow(radius: 4, y: 2)
|
||||||
.accessibilityIgnoresInvertColors()
|
.accessibilityIgnoresInvertColors()
|
||||||
|
|
||||||
if item.showTitle {
|
if item.showTitle {
|
||||||
Text(item.title)
|
Text(item.title)
|
||||||
|
|
|
@ -33,13 +33,13 @@ struct ContinueWatchingView: View {
|
||||||
item.getSeriesThumbImage(maxWidth: 320),
|
item.getSeriesThumbImage(maxWidth: 320),
|
||||||
item.getSeriesBackdropImage(maxWidth: 320),
|
item.getSeriesBackdropImage(maxWidth: 320),
|
||||||
])
|
])
|
||||||
.frame(width: 320, height: 180)
|
.frame(width: 320, height: 180)
|
||||||
} else {
|
} else {
|
||||||
ImageView(sources: [
|
ImageView(sources: [
|
||||||
item.getThumbImage(maxWidth: 320),
|
item.getThumbImage(maxWidth: 320),
|
||||||
item.getBackdropImage(maxWidth: 320),
|
item.getBackdropImage(maxWidth: 320),
|
||||||
])
|
])
|
||||||
.frame(width: 320, height: 180)
|
.frame(width: 320, height: 180)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.accessibilityIgnoresInvertColors()
|
.accessibilityIgnoresInvertColors()
|
||||||
|
|
|
@ -69,7 +69,7 @@ struct ItemViewBody: View {
|
||||||
selectedAction: { genre in
|
selectedAction: { genre in
|
||||||
itemRouter.route(to: \.library, (viewModel: .init(genre: genre), title: genre.title))
|
itemRouter.route(to: \.library, (viewModel: .init(genre: genre), title: genre.title))
|
||||||
})
|
})
|
||||||
.padding(.bottom)
|
.padding(.bottom)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Studios
|
// MARK: Studios
|
||||||
|
|
|
@ -375,16 +375,16 @@ struct VLCPlayerOverlayView: View {
|
||||||
ValueSlider(value: $viewModel.sliderPercentage, onEditingChanged: { editing in
|
ValueSlider(value: $viewModel.sliderPercentage, onEditingChanged: { editing in
|
||||||
viewModel.sliderIsScrubbing = editing
|
viewModel.sliderIsScrubbing = editing
|
||||||
})
|
})
|
||||||
.valueSliderStyle(HorizontalValueSliderStyle(track:
|
.valueSliderStyle(HorizontalValueSliderStyle(track:
|
||||||
HorizontalValueTrack(view:
|
HorizontalValueTrack(view:
|
||||||
Capsule().foregroundColor(.purple))
|
Capsule().foregroundColor(.purple))
|
||||||
.background(Capsule().foregroundColor(Color.gray.opacity(0.25)))
|
.background(Capsule().foregroundColor(Color.gray.opacity(0.25)))
|
||||||
.frame(height: 4),
|
.frame(height: 4),
|
||||||
thumb: Circle().foregroundColor(.purple),
|
thumb: Circle().foregroundColor(.purple),
|
||||||
thumbSize: CGSize.Circle(radius: viewModel.sliderIsScrubbing ? 20 : 15),
|
thumbSize: CGSize.Circle(radius: viewModel.sliderIsScrubbing ? 20 : 15),
|
||||||
thumbInteractiveSize: CGSize.Circle(radius: 40),
|
thumbInteractiveSize: CGSize.Circle(radius: 40),
|
||||||
options: .defaultOptions))
|
options: .defaultOptions))
|
||||||
.frame(maxHeight: 50)
|
.frame(maxHeight: 50)
|
||||||
|
|
||||||
Text(viewModel.rightLabelText)
|
Text(viewModel.rightLabelText)
|
||||||
.font(.system(size: 18, weight: .semibold, design: .default))
|
.font(.system(size: 18, weight: .semibold, design: .default))
|
||||||
|
|
|
@ -60,23 +60,33 @@ class VLCPlayerViewController: UIViewController {
|
||||||
UIKeyCommand(title: L10n.playAndPause, action: #selector(didSelectMain), input: " "),
|
UIKeyCommand(title: L10n.playAndPause, action: #selector(didSelectMain), input: " "),
|
||||||
UIKeyCommand(title: L10n.jumpForward, action: #selector(didSelectForward), input: UIKeyCommand.inputRightArrow),
|
UIKeyCommand(title: L10n.jumpForward, action: #selector(didSelectForward), input: UIKeyCommand.inputRightArrow),
|
||||||
UIKeyCommand(title: L10n.jumpBackward, action: #selector(didSelectBackward), input: UIKeyCommand.inputLeftArrow),
|
UIKeyCommand(title: L10n.jumpBackward, action: #selector(didSelectBackward), input: UIKeyCommand.inputLeftArrow),
|
||||||
UIKeyCommand(title: L10n.nextItem, action: #selector(didSelectPlayNextItem), input: UIKeyCommand.inputRightArrow,
|
UIKeyCommand(title: L10n.nextItem,
|
||||||
|
action: #selector(didSelectPlayNextItem),
|
||||||
|
input: UIKeyCommand.inputRightArrow,
|
||||||
modifierFlags: .command),
|
modifierFlags: .command),
|
||||||
UIKeyCommand(title: L10n.previousItem, action: #selector(didSelectPlayPreviousItem), input: UIKeyCommand.inputLeftArrow,
|
UIKeyCommand(title: L10n.previousItem,
|
||||||
|
action: #selector(didSelectPlayPreviousItem),
|
||||||
|
input: UIKeyCommand.inputLeftArrow,
|
||||||
modifierFlags: .command),
|
modifierFlags: .command),
|
||||||
UIKeyCommand(title: L10n.close, action: #selector(didSelectClose), input: UIKeyCommand.inputEscape),
|
UIKeyCommand(title: L10n.close, action: #selector(didSelectClose), input: UIKeyCommand.inputEscape),
|
||||||
]
|
]
|
||||||
if let previous = viewModel.playbackSpeed.previous {
|
if let previous = viewModel.playbackSpeed.previous {
|
||||||
commands.append(.init(title: "\(L10n.playbackSpeed) \(previous.displayTitle)",
|
commands.append(.init(title: "\(L10n.playbackSpeed) \(previous.displayTitle)",
|
||||||
action: #selector(didSelectPreviousPlaybackSpeed), input: "[", modifierFlags: .command))
|
action: #selector(didSelectPreviousPlaybackSpeed),
|
||||||
|
input: "[",
|
||||||
|
modifierFlags: .command))
|
||||||
}
|
}
|
||||||
if let next = viewModel.playbackSpeed.next {
|
if let next = viewModel.playbackSpeed.next {
|
||||||
commands.append(.init(title: "\(L10n.playbackSpeed) \(next.displayTitle)", action: #selector(didSelectNextPlaybackSpeed),
|
commands.append(.init(title: "\(L10n.playbackSpeed) \(next.displayTitle)",
|
||||||
input: "]", modifierFlags: .command))
|
action: #selector(didSelectNextPlaybackSpeed),
|
||||||
|
input: "]",
|
||||||
|
modifierFlags: .command))
|
||||||
}
|
}
|
||||||
if viewModel.playbackSpeed != .one {
|
if viewModel.playbackSpeed != .one {
|
||||||
commands.append(.init(title: "\(L10n.playbackSpeed) \(PlaybackSpeed.one.displayTitle)",
|
commands.append(.init(title: "\(L10n.playbackSpeed) \(PlaybackSpeed.one.displayTitle)",
|
||||||
action: #selector(didSelectNormalPlaybackSpeed), input: "\\", modifierFlags: .command))
|
action: #selector(didSelectNormalPlaybackSpeed),
|
||||||
|
input: "\\",
|
||||||
|
modifierFlags: .command))
|
||||||
}
|
}
|
||||||
commands.forEach { $0.wantsPriorityOverSystemBehavior = true }
|
commands.forEach { $0.wantsPriorityOverSystemBehavior = true }
|
||||||
return commands
|
return commands
|
||||||
|
@ -148,12 +158,18 @@ class VLCPlayerViewController: UIViewController {
|
||||||
refreshJumpForwardOverlayView(with: viewModel.jumpForwardLength)
|
refreshJumpForwardOverlayView(with: viewModel.jumpForwardLength)
|
||||||
|
|
||||||
let defaultNotificationCenter = NotificationCenter.default
|
let defaultNotificationCenter = NotificationCenter.default
|
||||||
defaultNotificationCenter.addObserver(self, selector: #selector(appWillTerminate), name: UIApplication.willTerminateNotification,
|
defaultNotificationCenter.addObserver(self,
|
||||||
|
selector: #selector(appWillTerminate),
|
||||||
|
name: UIApplication.willTerminateNotification,
|
||||||
|
object: nil)
|
||||||
|
defaultNotificationCenter.addObserver(self,
|
||||||
|
selector: #selector(appWillResignActive),
|
||||||
|
name: UIApplication.willResignActiveNotification,
|
||||||
|
object: nil)
|
||||||
|
defaultNotificationCenter.addObserver(self,
|
||||||
|
selector: #selector(appWillResignActive),
|
||||||
|
name: UIApplication.didEnterBackgroundNotification,
|
||||||
object: nil)
|
object: nil)
|
||||||
defaultNotificationCenter.addObserver(self, selector: #selector(appWillResignActive),
|
|
||||||
name: UIApplication.willResignActiveNotification, object: nil)
|
|
||||||
defaultNotificationCenter.addObserver(self, selector: #selector(appWillResignActive),
|
|
||||||
name: UIApplication.didEnterBackgroundNotification, object: nil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
|
@ -205,11 +221,8 @@ class VLCPlayerViewController: UIViewController {
|
||||||
|
|
||||||
let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didTap))
|
let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didTap))
|
||||||
|
|
||||||
let rightSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(didRightSwipe))
|
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))
|
||||||
rightSwipeGesture.direction = .right
|
doubleTapGesture.numberOfTapsRequired = 2
|
||||||
|
|
||||||
let leftSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(didLeftSwipe))
|
|
||||||
leftSwipeGesture.direction = .left
|
|
||||||
|
|
||||||
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(didPinch(_:)))
|
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(didPinch(_:)))
|
||||||
|
|
||||||
|
@ -219,8 +232,10 @@ class VLCPlayerViewController: UIViewController {
|
||||||
view.addGestureRecognizer(pinchGesture)
|
view.addGestureRecognizer(pinchGesture)
|
||||||
|
|
||||||
if viewModel.jumpGesturesEnabled {
|
if viewModel.jumpGesturesEnabled {
|
||||||
view.addGestureRecognizer(rightSwipeGesture)
|
view.addGestureRecognizer(doubleTapGesture)
|
||||||
view.addGestureRecognizer(leftSwipeGesture)
|
singleTapGesture.require(toFail: doubleTapGesture)
|
||||||
|
singleTapGesture.delaysTouchesBegan = true
|
||||||
|
doubleTapGesture.delaysTouchesBegan = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if viewModel.systemControlGesturesEnabled {
|
if viewModel.systemControlGesturesEnabled {
|
||||||
|
@ -246,13 +261,12 @@ class VLCPlayerViewController: UIViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
private func didRightSwipe() {
|
private func didDoubleTap(_ gestureRecognizer: UITapGestureRecognizer) {
|
||||||
didSelectForward()
|
if gestureRecognizer.location(in: mainGestureView).x > (mainGestureView.frame.width / 2) {
|
||||||
}
|
didSelectForward()
|
||||||
|
} else {
|
||||||
@objc
|
didSelectBackward()
|
||||||
private func didLeftSwipe() {
|
}
|
||||||
didSelectBackward()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
|
@ -736,8 +750,11 @@ extension VLCPlayerViewController {
|
||||||
extension VLCPlayerViewController {
|
extension VLCPlayerViewController {
|
||||||
private func restartOverlayDismissTimer(interval: Double = 3) {
|
private func restartOverlayDismissTimer(interval: Double = 3) {
|
||||||
overlayDismissTimer?.invalidate()
|
overlayDismissTimer?.invalidate()
|
||||||
overlayDismissTimer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(dismissTimerFired),
|
overlayDismissTimer = Timer.scheduledTimer(timeInterval: interval,
|
||||||
userInfo: nil, repeats: false)
|
target: self,
|
||||||
|
selector: #selector(dismissTimerFired),
|
||||||
|
userInfo: nil,
|
||||||
|
repeats: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
|
|
Loading…
Reference in New Issue