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() { @objc public func rateButtonPressed() {
var changeType: MediaNavigationAccessoryPanel.ChangeType = .preset
let nextRate: AudioPlaybackRate let nextRate: AudioPlaybackRate
if let rate = self.playbackBaseRate { if let rate = self.playbackBaseRate {
switch rate { switch rate {
@ -511,11 +512,12 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
} else { } else {
nextRate = .x1 nextRate = .x1
} }
changeType = .sliderCommit(rate.doubleValue, nextRate.doubleValue)
} }
} else { } else {
nextRate = .x1_5 nextRate = .x1_5
} }
self.setRate?(nextRate, .preset) self.setRate?(nextRate, changeType)
let frame = self.rateButton.view.convert(self.rateButton.bounds, to: nil) 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> { private func contextMenuSpeedItems(scheduleTooltip: @escaping (MediaNavigationAccessoryPanel.ChangeType?) -> Void) -> Signal<ContextController.Items, NoError> {
var presetItems: [ContextMenuItem] = [] var presetItems: [ContextMenuItem] = []
let previousRate = self.playbackBaseRate
let previousValue = self.playbackBaseRate?.doubleValue ?? 1.0 let previousValue = self.playbackBaseRate?.doubleValue ?? 1.0
let sliderValuePromise = ValuePromise<Double?>(nil) let sliderValuePromise = ValuePromise<Double?>(nil)
let sliderItem: ContextMenuItem = .custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: previousValue, valueChanged: { [weak self] newValue, finished in 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) scheduleTooltip(nil)
f(.default) 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> { private func contextMenuSpeedItems(scheduleTooltip: @escaping (MediaNavigationAccessoryPanel.ChangeType?) -> Void) -> Signal<ContextController.Items, NoError> {
var presetItems: [ContextMenuItem] = [] var presetItems: [ContextMenuItem] = []
let previousRate = self.currentRate
let previousValue = self.currentRate?.doubleValue ?? 1.0 let previousValue = self.currentRate?.doubleValue ?? 1.0
let sliderValuePromise = ValuePromise<Double?>(nil) let sliderValuePromise = ValuePromise<Double?>(nil)
let sliderItem: ContextMenuItem = .custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: previousValue, valueChanged: { [weak self] newValue, finished in 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) f(.default)
self?.control?(.setBaseRate(rate)) 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 x16
case custom(Int32) case custom(Int32)
public var isPreset: Bool {
switch self {
case .x1, .x1_5, .x2:
return true
default:
return false
}
}
public var doubleValue: Double { public var doubleValue: Double {
return Double(self.rawValue) / 1000.0 return Double(self.rawValue) / 1000.0
} }