Various fixes

This commit is contained in:
Ilya Laktyushin
2023-03-02 19:57:26 +04:00
parent ce3753c35a
commit c8ac1832a1
3 changed files with 58 additions and 25 deletions

View File

@@ -1005,14 +1005,26 @@ final class OverlayPlayerControlsNode: ASDisplayNode {
@objc func rateButtonPressed() {
var nextRate: AudioPlaybackRate
if let currentRate = self.currentRate {
switch currentRate {
case .x1:
nextRate = .x1_5
case .x1_5:
nextRate = .x2
default:
if let rate = self.currentRate {
switch rate {
case .x0_5, .x2:
nextRate = .x1
case .x1:
nextRate = .x1_5
case .x1_5:
nextRate = .x2
default:
if rate.doubleValue < 0.5 {
nextRate = .x0_5
} else if rate.doubleValue < 1.0 {
nextRate = .x1
} else if rate.doubleValue < 1.5 {
nextRate = .x1_5
} else if rate.doubleValue < 2.0 {
nextRate = .x2
} else {
nextRate = .x1
}
}
} else {
nextRate = .x1_5
@@ -1032,25 +1044,29 @@ final class OverlayPlayerControlsNode: ASDisplayNode {
private func contextMenuSpeedItems(scheduleTooltip: @escaping (MediaNavigationAccessoryPanel.ChangeType?) -> Void) -> Signal<ContextController.Items, NoError> {
var presetItems: [ContextMenuItem] = []
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
let newValue = normalizeValue(newValue)
self?.control?(.setBaseRate(AudioPlaybackRate(newValue)))
sliderValuePromise.set(newValue)
if finished {
scheduleTooltip(.sliderCommit(previousValue, newValue))
}
}), true)
let theme = self.presentationData.theme
for (text, _, rate) in self.speedList(strings: self.presentationData.strings) {
let isSelected = self.currentRate == rate
presetItems.append(.action(ContextMenuActionItem(text: text, icon: { theme in
if isSelected {
presetItems.append(.action(ContextMenuActionItem(text: text, icon: { _ in return nil }, iconSource: ContextMenuActionItemIconSource(size: CGSize(width: 24.0, height: 24.0), signal: sliderValuePromise.get()
|> map { value in
if isSelected && value == nil {
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
} else {
return nil
}
}, action: { [weak self] _, f in
}), action: { [weak self] _, f in
scheduleTooltip(nil)
f(.default)