diff --git a/submodules/ChatListUI/Sources/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift index b4711c3b03..0712e07349 100644 --- a/submodules/ChatListUI/Sources/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -2145,7 +2145,7 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController }) #endif - if let componentView = self.chatListHeaderView(), let storyPeerListView = componentView.storyPeerListView(), let _ = storyPeerListView.lockViewFrame(), !self.didShowPasscodeLockTooltipController { + if let componentView = self.chatListHeaderView(), let storyPeerListView = componentView.storyPeerListView(), let _ = storyPeerListView.lockViewFrame(), !self.didShowPasscodeLockTooltipController, !"".isEmpty { self.passcodeLockTooltipDisposable.set(combineLatest(queue: .mainQueue(), ApplicationSpecificNotice.getPasscodeLockTips(accountManager: self.context.sharedContext.accountManager), self.context.sharedContext.accountManager.accessChallengeData() |> take(1)).start(next: { [weak self] tooltipValue, passcodeView in if let strongSelf = self { if !tooltipValue { diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContainerScreen.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContainerScreen.swift index 6d2a48d96c..27a75dd07a 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContainerScreen.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContainerScreen.swift @@ -955,24 +955,44 @@ private final class StoryContainerScreenComponent: Component { private func updateVolumeButtonMonitoring() { if self.volumeButtonsListener == nil { let buttonAction = { [weak self] in - guard let self else { + guard let self, let component = self.component else { return } - switch self.audioMode { - case .off, .ambient: - break - case .on: + guard let slice = component.content.stateValue?.slice else { return } - self.audioMode = .on - - for (_, itemSetView) in self.visibleItemSetViews { - if let componentView = itemSetView.view.view as? StoryItemSetContainerComponent.View { - componentView.leaveAmbientMode() + var isSilentVideo = false + if case let .file(file) = slice.item.storyItem.media { + for attribute in file.attributes { + if case let .Video(_, _, flags, _) = attribute { + if flags.contains(.isSilent) { + isSilentVideo = true + } + } } } - self.state?.updated(transition: .immediate) + if isSilentVideo { + if let slice = component.content.stateValue?.slice, let itemSetView = self.visibleItemSetViews[slice.peer.id], let currentItemView = itemSetView.view.view as? StoryItemSetContainerComponent.View { + currentItemView.displayMutedVideoTooltip() + } + } else { + switch self.audioMode { + case .off, .ambient: + break + case .on: + return + } + self.audioMode = .on + + for (_, itemSetView) in self.visibleItemSetViews { + if let componentView = itemSetView.view.view as? StoryItemSetContainerComponent.View { + componentView.leaveAmbientMode() + } + } + + self.state?.updated(transition: .immediate) + } } self.volumeButtonsListener = VolumeButtonsListener( shouldBeActive: self.volumeButtonsListenerShouldBeActive.get(), diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift index b9f4317d12..26169cb6e6 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift @@ -414,6 +414,8 @@ public final class StoryItemSetContainerComponent: Component { private var verticalPanState: PanState? + private var isAnimatingOut: Bool = false + override init(frame: CGRect) { self.sendMessageContext = StoryItemSetContainerSendMessage() @@ -1366,6 +1368,8 @@ public final class StoryItemSetContainerComponent: Component { func animateOut(transitionOut: StoryContainerScreen.TransitionOut, transitionCloneMasterView: UIView, completion: @escaping () -> Void) { var cleanups: [() -> Void] = [] + self.isAnimatingOut = true + self.sendMessageContext.animateOut(bounds: self.bounds) if let inputPanelView = self.inputPanel.view { @@ -2409,26 +2413,7 @@ public final class StoryItemSetContainerComponent: Component { } if isSilentVideo { - guard let soundButtonView = self.soundButton.view else { - return - } - let tooltipScreen = TooltipScreen( - account: component.context.account, - sharedContext: component.context.sharedContext, - text: .plain(text: "This video has no sound"), style: .default, location: TooltipScreen.Location.point(soundButtonView.convert(soundButtonView.bounds, to: nil).offsetBy(dx: 1.0, dy: -10.0), .top), displayDuration: .infinite, shouldDismissOnTouch: { _, _ in - return .dismiss(consume: true) - } - ) - tooltipScreen.willBecomeDismissed = { [weak self] _ in - guard let self else { - return - } - self.sendMessageContext.tooltipScreen = nil - self.updateIsProgressPaused() - } - self.sendMessageContext.tooltipScreen = tooltipScreen - self.updateIsProgressPaused() - component.controller()?.present(tooltipScreen, in: .current) + self.displayMutedVideoTooltip() } else { component.toggleAmbientMode() } @@ -2496,6 +2481,7 @@ public final class StoryItemSetContainerComponent: Component { self.sendMessageContext.tooltipScreen = nil self.updateIsProgressPaused() } + self.sendMessageContext.tooltipScreen?.dismiss() self.sendMessageContext.tooltipScreen = tooltipScreen self.updateIsProgressPaused() component.controller()?.present(tooltipScreen, in: .current) @@ -2608,7 +2594,7 @@ public final class StoryItemSetContainerComponent: Component { } } - if let currentLeftInfoItem { + if let currentLeftInfoItem, !self.isAnimatingOut { self.leftInfoItem = currentLeftInfoItem let leftInfoItemSize = currentLeftInfoItem.view.update( @@ -2953,6 +2939,7 @@ public final class StoryItemSetContainerComponent: Component { return false } ) + self.sendMessageContext.tooltipScreen?.dismiss() self.sendMessageContext.tooltipScreen = controller self.updateIsProgressPaused() presentController(controller, nil) @@ -3951,6 +3938,7 @@ public final class StoryItemSetContainerComponent: Component { self.sendMessageContext.tooltipScreen = nil self.updateIsProgressPaused() } + self.sendMessageContext.tooltipScreen?.dismiss() self.sendMessageContext.tooltipScreen = tooltipScreen self.updateIsProgressPaused() component.controller()?.present(tooltipScreen, in: .current) @@ -4122,6 +4110,33 @@ public final class StoryItemSetContainerComponent: Component { controller.present(contextController, in: .window(.root)) }) } + + func displayMutedVideoTooltip() { + guard let component = self.component else { + return + } + guard let soundButtonView = self.soundButton.view else { + return + } + let tooltipScreen = TooltipScreen( + account: component.context.account, + sharedContext: component.context.sharedContext, + text: .plain(text: "This video has no sound"), style: .default, location: TooltipScreen.Location.point(soundButtonView.convert(soundButtonView.bounds, to: nil).offsetBy(dx: 1.0, dy: -10.0), .top), displayDuration: .infinite, shouldDismissOnTouch: { _, _ in + return .dismiss(consume: true) + } + ) + tooltipScreen.willBecomeDismissed = { [weak self] _ in + guard let self else { + return + } + self.sendMessageContext.tooltipScreen = nil + self.updateIsProgressPaused() + } + self.sendMessageContext.tooltipScreen?.dismiss() + self.sendMessageContext.tooltipScreen = tooltipScreen + self.updateIsProgressPaused() + component.controller()?.present(tooltipScreen, in: .current) + } } public func makeView() -> View { diff --git a/versions.json b/versions.json index e608eb649c..3725a18249 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,5 @@ { - "app": "9.6", + "app": "9.6.4", "bazel": "6.1.1", "xcode": "14.2" }