Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios

This commit is contained in:
Ilya Laktyushin 2023-08-11 17:21:27 +02:00
commit 3fee94d82b
4 changed files with 36 additions and 10 deletions

View File

@ -1119,8 +1119,8 @@ public final class MessageInputPanelComponent: Component {
theme: component.theme, theme: component.theme,
strings: component.strings, strings: component.strings,
presentController: component.presentController, presentController: component.presentController,
audioRecorder: component.audioRecorder, audioRecorder: nil,
videoRecordingStatus: component.videoRecordingStatus videoRecordingStatus: nil
)), )),
environment: {}, environment: {},
containerSize: CGSize(width: 33.0, height: 33.0) containerSize: CGSize(width: 33.0, height: 33.0)

View File

@ -390,6 +390,7 @@ public final class StoryItemSetContainerComponent: Component {
private let scroller: Scroller private let scroller: Scroller
let componentContainerView: UIView let componentContainerView: UIView
let overlayContainerView: SparseContainerView
let itemsContainerView: UIView let itemsContainerView: UIView
let controlsContainerView: UIView let controlsContainerView: UIView
let controlsClippingView: UIView let controlsClippingView: UIView
@ -474,6 +475,7 @@ public final class StoryItemSetContainerComponent: Component {
self.sendMessageContext = StoryItemSetContainerSendMessage() self.sendMessageContext = StoryItemSetContainerSendMessage()
self.componentContainerView = UIView() self.componentContainerView = UIView()
self.overlayContainerView = SparseContainerView()
self.itemsContainerView = UIView() self.itemsContainerView = UIView()
@ -515,6 +517,7 @@ public final class StoryItemSetContainerComponent: Component {
super.init(frame: frame) super.init(frame: frame)
self.addSubview(self.componentContainerView) self.addSubview(self.componentContainerView)
self.addSubview(self.overlayContainerView)
self.itemsContainerView.addSubview(self.scroller) self.itemsContainerView.addSubview(self.scroller)
self.scroller.delegate = self self.scroller.delegate = self
@ -531,7 +534,7 @@ public final class StoryItemSetContainerComponent: Component {
self.componentContainerView.addSubview(self.viewListsContainer) self.componentContainerView.addSubview(self.viewListsContainer)
self.closeButton.addSubview(self.closeButtonIconView) self.closeButton.addSubview(self.closeButtonIconView)
self.componentContainerView.addSubview(self.closeButton) self.overlayContainerView.addSubview(self.closeButton)
self.closeButton.addTarget(self, action: #selector(self.closePressed), for: .touchUpInside) self.closeButton.addTarget(self, action: #selector(self.closePressed), for: .touchUpInside)
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))) let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:)))
@ -557,10 +560,13 @@ public final class StoryItemSetContainerComponent: Component {
} }
if self.itemsContainerView.frame.contains(point) { if self.itemsContainerView.frame.contains(point) {
if self.viewListDisplayState != .hidden {
} else {
if !self.isPointInsideContentArea(point: point) { if !self.isPointInsideContentArea(point: point) {
return [] return []
} }
} }
}
return [.down] return [.down]
}) })
@ -2111,6 +2117,12 @@ public final class StoryItemSetContainerComponent: Component {
removeOnCompletion: false removeOnCompletion: false
) )
self.overlayContainerView.clipsToBounds = true
let overlayToFrame = sourceLocalFrame
let overlayToBounds = CGRect(origin: CGPoint(x: overlayToFrame.minX, y: overlayToFrame.minY), size: overlayToFrame.size)
self.overlayContainerView.layer.animatePosition(from: CGPoint(), to: overlayToFrame.center.offsetBy(dx: -self.overlayContainerView.center.x, dy: -self.overlayContainerView.center.y), duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring, removeOnCompletion: false, additive: true)
self.overlayContainerView.layer.animateBounds(from: self.overlayContainerView.bounds, to: overlayToBounds, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring, removeOnCompletion: false)
if !transitionOut.destinationIsAvatar { if !transitionOut.destinationIsAvatar {
let transitionView = transitionOut.transitionView let transitionView = transitionOut.transitionView
@ -2379,6 +2391,10 @@ public final class StoryItemSetContainerComponent: Component {
transition.setBounds(view: self.componentContainerView, bounds: CGRect(origin: CGPoint(), size: availableSize)) transition.setBounds(view: self.componentContainerView, bounds: CGRect(origin: CGPoint(), size: availableSize))
transition.setScale(view: self.componentContainerView, scale: dismissPanScale) transition.setScale(view: self.componentContainerView, scale: dismissPanScale)
transition.setPosition(view: self.overlayContainerView, position: CGPoint(x: availableSize.width * 0.5, y: availableSize.height * 0.5 + dismissPanOffset))
transition.setBounds(view: self.overlayContainerView, bounds: CGRect(origin: CGPoint(), size: availableSize))
transition.setScale(view: self.overlayContainerView, scale: dismissPanScale)
var bottomContentInset: CGFloat var bottomContentInset: CGFloat
if !component.safeInsets.bottom.isZero { if !component.safeInsets.bottom.isZero {
bottomContentInset = component.safeInsets.bottom + 1.0 bottomContentInset = component.safeInsets.bottom + 1.0

View File

@ -838,7 +838,12 @@ final class StoryItemSetContainerSendMessage {
self.videoRecorder.set(.single(nil)) self.videoRecorder.set(.single(nil))
self.performWithPossibleStealthModeConfirmation(view: view, action: { [weak self, weak view] in
guard let self, let view else {
return
}
self.sendMessages(view: view, peer: peer, messages: [updatedMessage]) self.sendMessages(view: view, peer: peer, messages: [updatedMessage])
})
}, displaySlowmodeTooltip: { [weak self] view, rect in }, displaySlowmodeTooltip: { [weak self] view, rect in
//self?.interfaceInteraction?.displaySlowmodeTooltip(view, rect) //self?.interfaceInteraction?.displaySlowmodeTooltip(view, rect)
let _ = self let _ = self
@ -883,9 +888,14 @@ final class StoryItemSetContainerSendMessage {
let waveformBuffer: Data? = data.waveform let waveformBuffer: Data? = data.waveform
self.performWithPossibleStealthModeConfirmation(view: view, action: { [weak self, weak view] in
guard let self, let view else {
return
}
self.sendMessages(view: view, peer: peer, messages: [.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: randomId), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "audio/ogg", size: Int64(data.compressedData.count), attributes: [.Audio(isVoice: true, duration: Int(data.duration), title: nil, performer: nil, waveform: waveformBuffer)])), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])]) self.sendMessages(view: view, peer: peer, messages: [.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: randomId), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "audio/ogg", size: Int64(data.compressedData.count), attributes: [.Audio(isVoice: true, duration: Int(data.duration), title: nil, performer: nil, waveform: waveformBuffer)])), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])])
HapticFeedback().tap() HapticFeedback().tap()
})
} }
}) })
} else if let videoRecorderValue = self.videoRecorderValue { } else if let videoRecorderValue = self.videoRecorderValue {

View File

@ -419,7 +419,7 @@ public final class StoryFooterPanelComponent: Component {
} }
let minContentX: CGFloat = 16.0 let minContentX: CGFloat = 16.0
let maxContentX: CGFloat = floor((availableSize.width - contentWidth) * 0.5) let maxContentX: CGFloat = (availableSize.width - contentWidth) * 0.5
var contentX: CGFloat = minContentX.interpolate(to: maxContentX, amount: component.expandFraction) var contentX: CGFloat = minContentX.interpolate(to: maxContentX, amount: component.expandFraction)
let avatarsNodeFrame = CGRect(origin: CGPoint(x: contentX, y: floor((size.height - avatarsSize.height) * 0.5)), size: avatarsSize) let avatarsNodeFrame = CGRect(origin: CGPoint(x: contentX, y: floor((size.height - avatarsSize.height) * 0.5)), size: avatarsSize)