Various fixes

This commit is contained in:
Ilya Laktyushin 2023-07-08 23:06:17 +02:00
parent 2a56be9fe0
commit 74de28b154
5 changed files with 59 additions and 33 deletions

View File

@ -1080,7 +1080,17 @@ public class CameraScreen: ViewController {
fileprivate var previewBlurPromise = ValuePromise<Bool>(false)
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
private var presentationData: PresentationData
@ -1302,10 +1312,13 @@ public class CameraScreen: ViewController {
}
}
}
self.idleTimerExtensionDisposable.set(self.context.sharedContext.applicationBindings.pushIdleTimerExtension())
}
deinit {
self.changingPositionDisposable?.dispose()
self.idleTimerExtensionDisposable.dispose()
}
private var pipPanGestureRecognizer: UIPanGestureRecognizer?
@ -2224,6 +2237,8 @@ public class CameraScreen: ViewController {
}
}
self.push(controller)
self.requestLayout(transition: .immediate)
}
public func presentDraftTooltip() {

View File

@ -1102,12 +1102,23 @@ final class CaptureControlsComponent: Component {
lockMaskFrame = lockMaskFrame.offsetBy(dx: 8.0, dy: 0.0)
}
}
let _ = self.lockView.update(
transition: transition,
transition: .immediate,
component: AnyComponent(
LockContentComponent(
maskFrame: lockMaskFrame
CameraButton(
content: AnyComponentWithIdentity(
id: "lock",
component: AnyComponent(
LockContentComponent(
maskFrame: lockMaskFrame
)
)
),
minSize: hintIconSize,
action: {
component.flipTapped()
}
)
),
environment: {},
@ -1123,7 +1134,7 @@ final class CaptureControlsComponent: Component {
transition.setScale(view: lockView, scale: isHolding ? 1.0 : 0.1)
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.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)
}
if let lockView = self.lockView.view as? LockContentComponent.View {
if lockView.maskContainerView.superview == nil {
self.addSubview(lockView.maskContainerView)
if let buttonView = self.lockView.view as? CameraButton.View, let contentView = buttonView.contentView.componentView as? LockContentComponent.View {
if contentView.maskContainerView.superview == nil {
self.addSubview(contentView.maskContainerView)
}
lockView.maskContainerView.center = lockView.center
contentView.maskContainerView.center = buttonView.center
}
return size

View File

@ -173,7 +173,7 @@ public final class StoryContentContextImpl: StoryContentContext {
isExpired: false,
isPublic: false,
isPending: true,
isCloseFriends: false,
isCloseFriends: item.privacy.base == .closeFriends,
isForwardingDisabled: false,
isEdited: false
))

View File

@ -1585,11 +1585,7 @@ public final class StoryItemSetContainerComponent: Component {
func update(component: StoryItemSetContainerComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: Transition) -> CGSize {
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 {
self.sendMessageContext.setup(context: component.context, view: self, inputPanelExternalState: self.inputPanelExternalState, keyboardInputData: component.keyboardInputData)
}
@ -1765,7 +1761,11 @@ public final class StoryItemSetContainerComponent: Component {
return
}
self.sendMessageContext.toggleInputMode()
self.state?.updated(transition: .immediate)
if !hasFirstResponder(self) {
self.state?.updated(transition: .spring(duration: 0.4))
} else {
self.state?.updated(transition: .immediate)
}
},
timeoutAction: nil,
forwardAction: component.slice.item.storyItem.isPublic ? { [weak self] in
@ -2242,8 +2242,9 @@ public final class StoryItemSetContainerComponent: Component {
if moreButtonView.superview == nil {
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.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
}
@ -2914,7 +2915,7 @@ public final class StoryItemSetContainerComponent: Component {
if let reactionContextNode = self.disappearingReactionContextNode {
if !reactionContextNode.isAnimatingOutToReaction {
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)
}
}

View File

@ -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 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 {
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: self.inputMediaNodeBackground, frame: inputNodeFrame)
@ -534,8 +537,7 @@ final class StoryItemSetContainerSendMessage {
let peer = component.slice.peer
let _ = (legacyEnqueueGifMessage(account: component.context.account, data: data) |> deliverOnMainQueue).start(next: { [weak self, weak view] message in
if let self, let view {
let messages = self.transformEnqueueMessages(view: view, messages: [message], silentPosting: false)
self.sendMessages(view: view, peer: peer, messages: messages)
self.sendMessages(view: view, peer: peer, messages: [message])
}
})
}
@ -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 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: messages)
self.sendMessages(view: view, peer: peer, messages: [message], silentPosting: false)
}
})
}
@ -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 {
let dataSignal: Signal<(EnginePeer?, DeviceContactExtendedData?), NoError>
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: []))
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 {
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 {
@ -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: []))
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)
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 {
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
Queue.mainQueue().after(0.3) {
if let view {
@ -2241,10 +2242,8 @@ final class StoryItemSetContainerSendMessage {
}
mappedMessages.append(message)
}
let messages = strongSelf.transformEnqueueMessages(view: view, messages: mappedMessages, silentPosting: silentPosting, scheduleTime: scheduleTime)
strongSelf.sendMessages(view: view, peer: peer, messages: messages.map { $0.withUpdatedReplyToMessageId(replyToMessageId).withUpdatedReplyToStoryId(replyToStoryId) }, media: true)
strongSelf.sendMessages(view: view, peer: peer, messages: mappedMessages.map { $0.withUpdatedReplyToMessageId(replyToMessageId).withUpdatedReplyToStoryId(replyToStoryId) }, silentPosting: silentPosting, scheduleTime: scheduleTime)
completion()
}