mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
2a56be9fe0
commit
74de28b154
@ -1080,7 +1080,17 @@ public class CameraScreen: ViewController {
|
|||||||
fileprivate var previewBlurPromise = ValuePromise<Bool>(false)
|
fileprivate var previewBlurPromise = ValuePromise<Bool>(false)
|
||||||
private let animateFlipAction = ActionSlot<Void>()
|
private let animateFlipAction = ActionSlot<Void>()
|
||||||
|
|
||||||
fileprivate var cameraIsActive = true
|
private let idleTimerExtensionDisposable = MetaDisposable()
|
||||||
|
|
||||||
|
fileprivate var cameraIsActive = true {
|
||||||
|
didSet {
|
||||||
|
if self.cameraIsActive {
|
||||||
|
self.idleTimerExtensionDisposable.set(self.context.sharedContext.applicationBindings.pushIdleTimerExtension())
|
||||||
|
} else {
|
||||||
|
self.idleTimerExtensionDisposable.set(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
fileprivate var hasGallery = false
|
fileprivate var hasGallery = false
|
||||||
|
|
||||||
private var presentationData: PresentationData
|
private var presentationData: PresentationData
|
||||||
@ -1302,10 +1312,13 @@ public class CameraScreen: ViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.idleTimerExtensionDisposable.set(self.context.sharedContext.applicationBindings.pushIdleTimerExtension())
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
self.changingPositionDisposable?.dispose()
|
self.changingPositionDisposable?.dispose()
|
||||||
|
self.idleTimerExtensionDisposable.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
private var pipPanGestureRecognizer: UIPanGestureRecognizer?
|
private var pipPanGestureRecognizer: UIPanGestureRecognizer?
|
||||||
@ -2224,6 +2237,8 @@ public class CameraScreen: ViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.push(controller)
|
self.push(controller)
|
||||||
|
|
||||||
|
self.requestLayout(transition: .immediate)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func presentDraftTooltip() {
|
public func presentDraftTooltip() {
|
||||||
|
@ -1104,11 +1104,22 @@ final class CaptureControlsComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let _ = self.lockView.update(
|
let _ = self.lockView.update(
|
||||||
transition: transition,
|
transition: .immediate,
|
||||||
|
component: AnyComponent(
|
||||||
|
CameraButton(
|
||||||
|
content: AnyComponentWithIdentity(
|
||||||
|
id: "lock",
|
||||||
component: AnyComponent(
|
component: AnyComponent(
|
||||||
LockContentComponent(
|
LockContentComponent(
|
||||||
maskFrame: lockMaskFrame
|
maskFrame: lockMaskFrame
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
minSize: hintIconSize,
|
||||||
|
action: {
|
||||||
|
component.flipTapped()
|
||||||
|
}
|
||||||
|
)
|
||||||
),
|
),
|
||||||
environment: {},
|
environment: {},
|
||||||
containerSize: hintIconSize
|
containerSize: hintIconSize
|
||||||
@ -1123,7 +1134,7 @@ final class CaptureControlsComponent: Component {
|
|||||||
transition.setScale(view: lockView, scale: isHolding ? 1.0 : 0.1)
|
transition.setScale(view: lockView, scale: isHolding ? 1.0 : 0.1)
|
||||||
transition.setAlpha(view: lockView, alpha: isHolding ? 1.0 : 0.0)
|
transition.setAlpha(view: lockView, alpha: isHolding ? 1.0 : 0.0)
|
||||||
|
|
||||||
if let lockMaskView = lockView as? LockContentComponent.View {
|
if let buttonView = lockView as? CameraButton.View, let lockMaskView = buttonView.contentView.componentView as? LockContentComponent.View {
|
||||||
transition.setAlpha(view: lockMaskView.maskContainerView, alpha: isHolding ? 1.0 : 0.0)
|
transition.setAlpha(view: lockMaskView.maskContainerView, alpha: isHolding ? 1.0 : 0.0)
|
||||||
transition.setSublayerTransform(layer: lockMaskView.maskContainerView.layer, transform: isHolding ? CATransform3DIdentity : CATransform3DMakeScale(0.1, 0.1, 1.0))
|
transition.setSublayerTransform(layer: lockMaskView.maskContainerView.layer, transform: isHolding ? CATransform3DIdentity : CATransform3DMakeScale(0.1, 0.1, 1.0))
|
||||||
}
|
}
|
||||||
@ -1155,11 +1166,11 @@ final class CaptureControlsComponent: Component {
|
|||||||
contentView.maskContainerView.frame = contentView.convert(contentView.bounds, to: self)
|
contentView.maskContainerView.frame = contentView.convert(contentView.bounds, to: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
if let lockView = self.lockView.view as? LockContentComponent.View {
|
if let buttonView = self.lockView.view as? CameraButton.View, let contentView = buttonView.contentView.componentView as? LockContentComponent.View {
|
||||||
if lockView.maskContainerView.superview == nil {
|
if contentView.maskContainerView.superview == nil {
|
||||||
self.addSubview(lockView.maskContainerView)
|
self.addSubview(contentView.maskContainerView)
|
||||||
}
|
}
|
||||||
lockView.maskContainerView.center = lockView.center
|
contentView.maskContainerView.center = buttonView.center
|
||||||
}
|
}
|
||||||
|
|
||||||
return size
|
return size
|
||||||
|
@ -173,7 +173,7 @@ public final class StoryContentContextImpl: StoryContentContext {
|
|||||||
isExpired: false,
|
isExpired: false,
|
||||||
isPublic: false,
|
isPublic: false,
|
||||||
isPending: true,
|
isPending: true,
|
||||||
isCloseFriends: false,
|
isCloseFriends: item.privacy.base == .closeFriends,
|
||||||
isForwardingDisabled: false,
|
isForwardingDisabled: false,
|
||||||
isEdited: false
|
isEdited: false
|
||||||
))
|
))
|
||||||
|
@ -1586,10 +1586,6 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
func update(component: StoryItemSetContainerComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: Transition) -> CGSize {
|
func update(component: StoryItemSetContainerComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: Transition) -> CGSize {
|
||||||
let isFirstTime = self.component == nil
|
let isFirstTime = self.component == nil
|
||||||
|
|
||||||
// if let hint = transition.userData(TextFieldComponent.AnimationHint.self), case .textFocusChanged = hint.kind, !hasFirstResponder(self) {
|
|
||||||
// self.sendMessageContext.currentInputMode = .text
|
|
||||||
// }
|
|
||||||
|
|
||||||
if self.component == nil {
|
if self.component == nil {
|
||||||
self.sendMessageContext.setup(context: component.context, view: self, inputPanelExternalState: self.inputPanelExternalState, keyboardInputData: component.keyboardInputData)
|
self.sendMessageContext.setup(context: component.context, view: self, inputPanelExternalState: self.inputPanelExternalState, keyboardInputData: component.keyboardInputData)
|
||||||
}
|
}
|
||||||
@ -1765,7 +1761,11 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.sendMessageContext.toggleInputMode()
|
self.sendMessageContext.toggleInputMode()
|
||||||
|
if !hasFirstResponder(self) {
|
||||||
|
self.state?.updated(transition: .spring(duration: 0.4))
|
||||||
|
} else {
|
||||||
self.state?.updated(transition: .immediate)
|
self.state?.updated(transition: .immediate)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
timeoutAction: nil,
|
timeoutAction: nil,
|
||||||
forwardAction: component.slice.item.storyItem.isPublic ? { [weak self] in
|
forwardAction: component.slice.item.storyItem.isPublic ? { [weak self] in
|
||||||
@ -2242,8 +2242,9 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
if moreButtonView.superview == nil {
|
if moreButtonView.superview == nil {
|
||||||
self.controlsContainerView.addSubview(moreButtonView)
|
self.controlsContainerView.addSubview(moreButtonView)
|
||||||
}
|
}
|
||||||
|
moreButtonView.isUserInteractionEnabled = !component.slice.item.storyItem.isPending
|
||||||
transition.setFrame(view: moreButtonView, frame: CGRect(origin: CGPoint(x: headerRightOffset - moreButtonSize.width, y: 2.0), size: moreButtonSize))
|
transition.setFrame(view: moreButtonView, frame: CGRect(origin: CGPoint(x: headerRightOffset - moreButtonSize.width, y: 2.0), size: moreButtonSize))
|
||||||
transition.setAlpha(view: moreButtonView, alpha: component.slice.item.storyItem.isPending ? 0.0 : 1.0)
|
transition.setAlpha(view: moreButtonView, alpha: component.slice.item.storyItem.isPending ? 0.5 : 1.0)
|
||||||
headerRightOffset -= moreButtonSize.width + 15.0
|
headerRightOffset -= moreButtonSize.width + 15.0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2914,7 +2915,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
if let reactionContextNode = self.disappearingReactionContextNode {
|
if let reactionContextNode = self.disappearingReactionContextNode {
|
||||||
if !reactionContextNode.isAnimatingOutToReaction {
|
if !reactionContextNode.isAnimatingOutToReaction {
|
||||||
transition.setFrame(view: reactionContextNode.view, frame: CGRect(origin: CGPoint(), size: availableSize))
|
transition.setFrame(view: reactionContextNode.view, frame: CGRect(origin: CGPoint(), size: availableSize))
|
||||||
reactionContextNode.updateLayout(size: availableSize, insets: UIEdgeInsets(), anchorRect: reactionsAnchorRect, isCoveredByInput: false, isAnimatingOut: false, transition: transition.containedViewLayoutTransition)
|
reactionContextNode.updateLayout(size: availableSize, insets: UIEdgeInsets(), anchorRect: reactionsAnchorRect, centerAligned: true, isCoveredByInput: false, isAnimatingOut: false, transition: transition.containedViewLayoutTransition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,9 +254,12 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
|
|
||||||
let heightAndOverflow = inputMediaNode.updateLayout(width: availableSize.width, leftInset: 0.0, rightInset: 0.0, bottomInset: bottomInset, standardInputHeight: deviceMetrics.standardInputHeight(inLandscape: false), inputHeight: inputHeight, maximumHeight: availableSize.height, inputPanelHeight: 0.0, transition: .immediate, interfaceState: presentationInterfaceState, layoutMetrics: metrics, deviceMetrics: deviceMetrics, isVisible: true, isExpanded: false)
|
let heightAndOverflow = inputMediaNode.updateLayout(width: availableSize.width, leftInset: 0.0, rightInset: 0.0, bottomInset: bottomInset, standardInputHeight: deviceMetrics.standardInputHeight(inLandscape: false), inputHeight: inputHeight, maximumHeight: availableSize.height, inputPanelHeight: 0.0, transition: .immediate, interfaceState: presentationInterfaceState, layoutMetrics: metrics, deviceMetrics: deviceMetrics, isVisible: true, isExpanded: false)
|
||||||
let inputNodeHeight = heightAndOverflow.0
|
let inputNodeHeight = heightAndOverflow.0
|
||||||
var inputNodeFrame = CGRect(origin: CGPoint(x: 0.0, y: availableSize.height - inputNodeHeight), size: CGSize(width: availableSize.width, height: inputNodeHeight))
|
let inputNodeFrame = CGRect(origin: CGPoint(x: 0.0, y: availableSize.height - inputNodeHeight), size: CGSize(width: availableSize.width, height: inputNodeHeight))
|
||||||
|
|
||||||
if self.needsInputActivation {
|
if self.needsInputActivation {
|
||||||
inputNodeFrame = inputNodeFrame.offsetBy(dx: 0.0, dy: inputNodeHeight)
|
let inputNodeFrame = inputNodeFrame.offsetBy(dx: 0.0, dy: inputNodeHeight)
|
||||||
|
Transition.immediate.setFrame(layer: inputMediaNode.layer, frame: inputNodeFrame)
|
||||||
|
Transition.immediate.setFrame(layer: self.inputMediaNodeBackground, frame: inputNodeFrame)
|
||||||
}
|
}
|
||||||
transition.setFrame(layer: inputMediaNode.layer, frame: inputNodeFrame)
|
transition.setFrame(layer: inputMediaNode.layer, frame: inputNodeFrame)
|
||||||
transition.setFrame(layer: self.inputMediaNodeBackground, frame: inputNodeFrame)
|
transition.setFrame(layer: self.inputMediaNodeBackground, frame: inputNodeFrame)
|
||||||
@ -534,8 +537,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
let peer = component.slice.peer
|
let peer = component.slice.peer
|
||||||
let _ = (legacyEnqueueGifMessage(account: component.context.account, data: data) |> deliverOnMainQueue).start(next: { [weak self, weak view] message in
|
let _ = (legacyEnqueueGifMessage(account: component.context.account, data: data) |> deliverOnMainQueue).start(next: { [weak self, weak view] message in
|
||||||
if let self, let view {
|
if let self, let view {
|
||||||
let messages = self.transformEnqueueMessages(view: view, messages: [message], silentPosting: false)
|
self.sendMessages(view: view, peer: peer, messages: [message])
|
||||||
self.sendMessages(view: view, peer: peer, messages: messages)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -590,8 +592,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: Int64.random(in: Int64.min ... Int64.max)), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "image/webp", size: Int64(data.count), attributes: fileAttributes)
|
let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: Int64.random(in: Int64.min ... Int64.max)), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "image/webp", size: Int64(data.count), attributes: fileAttributes)
|
||||||
let message = EnqueueMessage.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])
|
let message = EnqueueMessage.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])
|
||||||
|
|
||||||
let messages = self.transformEnqueueMessages(view: view, messages: [message], silentPosting: false)
|
self.sendMessages(view: view, peer: peer, messages: [message], silentPosting: false)
|
||||||
self.sendMessages(view: view, peer: peer, messages: messages)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -1340,7 +1341,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.sendMessages(view: view, peer: peer, messages: self.transformEnqueueMessages(view: view, messages: enqueueMessages, silentPosting: silent, scheduleTime: scheduleTime))
|
self.sendMessages(view: view, peer: peer, messages: enqueueMessages, silentPosting: silent, scheduleTime: scheduleTime)
|
||||||
} else if let peer = peers.first {
|
} else if let peer = peers.first {
|
||||||
let dataSignal: Signal<(EnginePeer?, DeviceContactExtendedData?), NoError>
|
let dataSignal: Signal<(EnginePeer?, DeviceContactExtendedData?), NoError>
|
||||||
switch peer {
|
switch peer {
|
||||||
@ -1395,7 +1396,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
}
|
}
|
||||||
enqueueMessages.append(.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []))
|
enqueueMessages.append(.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []))
|
||||||
|
|
||||||
self.sendMessages(view: view, peer: targetPeer, messages: self.transformEnqueueMessages(view: view, messages: enqueueMessages, silentPosting: silent, scheduleTime: scheduleTime))
|
self.sendMessages(view: view, peer: targetPeer, messages: enqueueMessages, silentPosting: silent, scheduleTime: scheduleTime)
|
||||||
} else {
|
} else {
|
||||||
let contactController = component.context.sharedContext.makeDeviceContactInfoController(context: component.context, subject: .filter(peer: peerAndContactData.0?._asPeer(), contactId: nil, contactData: contactData, completion: { [weak self, weak view] peer, contactData in
|
let contactController = component.context.sharedContext.makeDeviceContactInfoController(context: component.context, subject: .filter(peer: peerAndContactData.0?._asPeer(), contactId: nil, contactData: contactData, completion: { [weak self, weak view] peer, contactData in
|
||||||
guard let self, let view else {
|
guard let self, let view else {
|
||||||
@ -1414,7 +1415,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
}
|
}
|
||||||
enqueueMessages.append(.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []))
|
enqueueMessages.append(.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []))
|
||||||
|
|
||||||
self.sendMessages(view: view, peer: targetPeer, messages: self.transformEnqueueMessages(view: view, messages: enqueueMessages, silentPosting: silent, scheduleTime: scheduleTime))
|
self.sendMessages(view: view, peer: targetPeer, messages: enqueueMessages, silentPosting: silent, scheduleTime: scheduleTime)
|
||||||
}
|
}
|
||||||
}), completed: nil, cancelled: nil)
|
}), completed: nil, cancelled: nil)
|
||||||
component.controller()?.push(contactController)
|
component.controller()?.push(contactController)
|
||||||
@ -2168,11 +2169,11 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func sendMessages(view: StoryItemSetContainerComponent.View, peer: EnginePeer, messages: [EnqueueMessage], media: Bool = false, commit: Bool = false) {
|
private func sendMessages(view: StoryItemSetContainerComponent.View, peer: EnginePeer, messages: [EnqueueMessage], silentPosting: Bool = false, scheduleTime: Int32? = nil) {
|
||||||
guard let component = view.component else {
|
guard let component = view.component else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let _ = (enqueueMessages(account: component.context.account, peerId: peer.id, messages: self.transformEnqueueMessages(view: view, messages: messages, silentPosting: false))
|
let _ = (enqueueMessages(account: component.context.account, peerId: peer.id, messages: self.transformEnqueueMessages(view: view, messages: messages, silentPosting: silentPosting, scheduleTime: scheduleTime))
|
||||||
|> deliverOnMainQueue).start(next: { [weak self, weak view] messageIds in
|
|> deliverOnMainQueue).start(next: { [weak self, weak view] messageIds in
|
||||||
Queue.mainQueue().after(0.3) {
|
Queue.mainQueue().after(0.3) {
|
||||||
if let view {
|
if let view {
|
||||||
@ -2242,9 +2243,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
mappedMessages.append(message)
|
mappedMessages.append(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
let messages = strongSelf.transformEnqueueMessages(view: view, messages: mappedMessages, silentPosting: silentPosting, scheduleTime: scheduleTime)
|
strongSelf.sendMessages(view: view, peer: peer, messages: mappedMessages.map { $0.withUpdatedReplyToMessageId(replyToMessageId).withUpdatedReplyToStoryId(replyToStoryId) }, silentPosting: silentPosting, scheduleTime: scheduleTime)
|
||||||
|
|
||||||
strongSelf.sendMessages(view: view, peer: peer, messages: messages.map { $0.withUpdatedReplyToMessageId(replyToMessageId).withUpdatedReplyToStoryId(replyToStoryId) }, media: true)
|
|
||||||
|
|
||||||
completion()
|
completion()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user