Fix audio rate tooltips

This commit is contained in:
Ilya Laktyushin 2023-03-02 23:04:37 +04:00
parent d754df2b1a
commit 4f5e7548d9
3 changed files with 24 additions and 3 deletions

View File

@ -490,6 +490,7 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
}
@objc public func rateButtonPressed() {
var changeType: MediaNavigationAccessoryPanel.ChangeType = .preset
let nextRate: AudioPlaybackRate
if let rate = self.playbackBaseRate {
switch rate {
@ -511,11 +512,12 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
} else {
nextRate = .x1
}
changeType = .sliderCommit(rate.doubleValue, nextRate.doubleValue)
}
} else {
nextRate = .x1_5
}
self.setRate?(nextRate, .preset)
self.setRate?(nextRate, changeType)
let frame = self.rateButton.view.convert(self.rateButton.bounds, to: nil)
@ -542,6 +544,7 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
private func contextMenuSpeedItems(scheduleTooltip: @escaping (MediaNavigationAccessoryPanel.ChangeType?) -> Void) -> Signal<ContextController.Items, NoError> {
var presetItems: [ContextMenuItem] = []
let previousRate = self.playbackBaseRate
let previousValue = self.playbackBaseRate?.doubleValue ?? 1.0
let sliderValuePromise = ValuePromise<Double?>(nil)
let sliderItem: ContextMenuItem = .custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: previousValue, valueChanged: { [weak self] newValue, finished in
@ -567,7 +570,11 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
scheduleTooltip(nil)
f(.default)
self?.setRate?(rate, .preset)
if let previousRate, previousRate.isPreset {
self?.setRate?(rate, .preset)
} else {
self?.setRate?(rate, .sliderCommit(previousValue, rate.doubleValue))
}
})))
}

View File

@ -1045,6 +1045,7 @@ final class OverlayPlayerControlsNode: ASDisplayNode {
private func contextMenuSpeedItems(scheduleTooltip: @escaping (MediaNavigationAccessoryPanel.ChangeType?) -> Void) -> Signal<ContextController.Items, NoError> {
var presetItems: [ContextMenuItem] = []
let previousRate = self.currentRate
let previousValue = self.currentRate?.doubleValue ?? 1.0
let sliderValuePromise = ValuePromise<Double?>(nil)
let sliderItem: ContextMenuItem = .custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: previousValue, valueChanged: { [weak self] newValue, finished in
@ -1071,7 +1072,11 @@ final class OverlayPlayerControlsNode: ASDisplayNode {
f(.default)
self?.control?(.setBaseRate(rate))
self?.presentAudioRateTooltip(baseRate: rate, changeType: .preset)
if let previousRate, previousRate.isPreset {
self?.presentAudioRateTooltip(baseRate: rate, changeType: .preset)
} else {
self?.presentAudioRateTooltip(baseRate: rate, changeType: .sliderCommit(previousValue, rate.doubleValue))
}
})))
}

View File

@ -25,6 +25,15 @@ public enum AudioPlaybackRate: Equatable {
case x16
case custom(Int32)
public var isPreset: Bool {
switch self {
case .x1, .x1_5, .x2:
return true
default:
return false
}
}
public var doubleValue: Double {
return Double(self.rawValue) / 1000.0
}