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
c4cd3c318a
commit
f91cc7f744
@ -640,6 +640,9 @@ public final class TonContext {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
public protocol ComposeController: ViewController {
|
||||||
|
}
|
||||||
|
|
||||||
public protocol ChatLocationContextHolder: class {
|
public protocol ChatLocationContextHolder: class {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,6 +227,7 @@ private final class AuthTransferScanScreenNode: ViewControllerTracingNode, UIScr
|
|||||||
|
|
||||||
private let camera: Camera
|
private let camera: Camera
|
||||||
private let codeDisposable = MetaDisposable()
|
private let codeDisposable = MetaDisposable()
|
||||||
|
private var torchDisposable: Disposable?
|
||||||
|
|
||||||
fileprivate let focusedCode = ValuePromise<CameraCode?>(ignoreRepeated: true)
|
fileprivate let focusedCode = ValuePromise<CameraCode?>(ignoreRepeated: true)
|
||||||
private var focusedRect: CGRect?
|
private var focusedRect: CGRect?
|
||||||
@ -305,6 +306,13 @@ private final class AuthTransferScanScreenNode: ViewControllerTracingNode, UIScr
|
|||||||
|
|
||||||
self.backgroundColor = self.presentationData.theme.list.plainBackgroundColor
|
self.backgroundColor = self.presentationData.theme.list.plainBackgroundColor
|
||||||
|
|
||||||
|
self.torchDisposable = (self.camera.hasTorch
|
||||||
|
|> deliverOnMainQueue).start(next: { [weak self] hasTorch in
|
||||||
|
if let strongSelf = self {
|
||||||
|
strongSelf.torchButtonNode.isHidden = !hasTorch
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
self.addSubnode(self.previewNode)
|
self.addSubnode(self.previewNode)
|
||||||
self.addSubnode(self.fadeNode)
|
self.addSubnode(self.fadeNode)
|
||||||
self.addSubnode(self.topDimNode)
|
self.addSubnode(self.topDimNode)
|
||||||
@ -323,6 +331,7 @@ private final class AuthTransferScanScreenNode: ViewControllerTracingNode, UIScr
|
|||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
self.codeDisposable.dispose()
|
self.codeDisposable.dispose()
|
||||||
|
self.torchDisposable?.dispose()
|
||||||
self.camera.stopCapture(invalidate: true)
|
self.camera.stopCapture(invalidate: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +93,10 @@ private final class CameraContext {
|
|||||||
self.session.commitConfiguration()
|
self.session.commitConfiguration()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var hasTorch: Signal<Bool, NoError> {
|
||||||
|
return self.device.isFlashAvailable
|
||||||
|
}
|
||||||
|
|
||||||
func setTorchActive(_ active: Bool) {
|
func setTorchActive(_ active: Bool) {
|
||||||
self.device.setTorchActive(active)
|
self.device.setTorchActive(active)
|
||||||
}
|
}
|
||||||
@ -189,6 +193,21 @@ public final class Camera {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public var hasTorch: Signal<Bool, NoError> {
|
||||||
|
return Signal { subscriber in
|
||||||
|
let disposable = MetaDisposable()
|
||||||
|
self.queue.async {
|
||||||
|
if let context = self.contextRef?.takeUnretainedValue() {
|
||||||
|
disposable.set(context.hasTorch.start(next: { hasTorch in
|
||||||
|
subscriber.putNext(hasTorch)
|
||||||
|
subscriber.putCompletion()
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return disposable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public func attachPreviewNode(_ node: CameraPreviewNode) {
|
public func attachPreviewNode(_ node: CameraPreviewNode) {
|
||||||
let nodeRef: Unmanaged<CameraPreviewNode> = Unmanaged.passRetained(node)
|
let nodeRef: Unmanaged<CameraPreviewNode> = Unmanaged.passRetained(node)
|
||||||
self.queue.async {
|
self.queue.async {
|
||||||
|
@ -1799,8 +1799,20 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc private func composePressed() {
|
@objc private func composePressed() {
|
||||||
let controller = self.context.sharedContext.makeComposeController(context: self.context)
|
guard let navigationController = self.navigationController as? NavigationController else {
|
||||||
(self.navigationController as? NavigationController)?.pushViewController(controller)
|
return
|
||||||
|
}
|
||||||
|
var hasComposeController = false
|
||||||
|
navigationController.viewControllers.forEach { controller in
|
||||||
|
if controller is ComposeController {
|
||||||
|
hasComposeController = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !hasComposeController {
|
||||||
|
let controller = self.context.sharedContext.makeComposeController(context: self.context)
|
||||||
|
navigationController.pushViewController(controller)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override var keyShortcuts: [KeyShortcut] {
|
public override var keyShortcuts: [KeyShortcut] {
|
||||||
|
@ -893,6 +893,14 @@ final class ChatListContainerNode: ASDisplayNode, UIGestureRecognizerDelegate {
|
|||||||
insets.left += layout.safeInsets.left
|
insets.left += layout.safeInsets.left
|
||||||
insets.right += layout.safeInsets.right
|
insets.right += layout.safeInsets.right
|
||||||
|
|
||||||
|
if isEditing {
|
||||||
|
if !layout.safeInsets.left.isZero {
|
||||||
|
insets.bottom += 34.0
|
||||||
|
} else {
|
||||||
|
insets.bottom += 49.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
transition.updateAlpha(node: self, alpha: isReorderingFilters ? 0.5 : 1.0)
|
transition.updateAlpha(node: self, alpha: isReorderingFilters ? 0.5 : 1.0)
|
||||||
self.isUserInteractionEnabled = !isReorderingFilters
|
self.isUserInteractionEnabled = !isReorderingFilters
|
||||||
|
|
||||||
|
@ -853,7 +853,7 @@ public func channelVisibilityController(context: AccountContext, peerId: PeerId,
|
|||||||
let revokeLinkDisposable = MetaDisposable()
|
let revokeLinkDisposable = MetaDisposable()
|
||||||
actionsDisposable.add(revokeLinkDisposable)
|
actionsDisposable.add(revokeLinkDisposable)
|
||||||
|
|
||||||
actionsDisposable.add((context.account.viewTracker.peerView(peerId) |> filter { $0.cachedData != nil } |> take(1) |> mapToSignal { view -> Signal<Void, NoError> in
|
actionsDisposable.add((context.account.viewTracker.peerView(peerId) |> filter { $0.cachedData != nil } |> take(1) |> mapToSignal { view -> Signal<String?, NoError> in
|
||||||
return ensuredExistingPeerExportedInvitation(account: context.account, peerId: peerId)
|
return ensuredExistingPeerExportedInvitation(account: context.account, peerId: peerId)
|
||||||
}).start())
|
}).start())
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ private enum BlockedPeersEntry: ItemListNodeEntry {
|
|||||||
return ItemListPeerActionItem(presentationData: presentationData, icon: PresentationResourcesItemList.addPersonIcon(theme), title: text, sectionId: self.section, editing: false, action: {
|
return ItemListPeerActionItem(presentationData: presentationData, icon: PresentationResourcesItemList.addPersonIcon(theme), title: text, sectionId: self.section, editing: false, action: {
|
||||||
arguments.addPeer()
|
arguments.addPeer()
|
||||||
})
|
})
|
||||||
case let .peerItem(_, theme, strings, dateTimeFormat, nameDisplayOrder, peer, editing, enabled):
|
case let .peerItem(_, _, strings, dateTimeFormat, nameDisplayOrder, peer, editing, enabled):
|
||||||
let revealOptions = ItemListPeerItemRevealOptions(options: [ItemListPeerItemRevealOption(type: .destructive, title: strings.BlockedUsers_Unblock, action: {
|
let revealOptions = ItemListPeerItemRevealOptions(options: [ItemListPeerItemRevealOption(type: .destructive, title: strings.BlockedUsers_Unblock, action: {
|
||||||
arguments.removePeer(peer.id)
|
arguments.removePeer(peer.id)
|
||||||
})])
|
})])
|
||||||
@ -219,8 +219,6 @@ public func blockedPeersController(context: AccountContext, blockedPeersContext:
|
|||||||
let removePeerDisposable = MetaDisposable()
|
let removePeerDisposable = MetaDisposable()
|
||||||
actionsDisposable.add(removePeerDisposable)
|
actionsDisposable.add(removePeerDisposable)
|
||||||
|
|
||||||
let peersPromise = Promise<[Peer]?>(nil)
|
|
||||||
|
|
||||||
let arguments = BlockedPeersControllerArguments(context: context, setPeerIdWithRevealedOptions: { peerId, fromPeerId in
|
let arguments = BlockedPeersControllerArguments(context: context, setPeerIdWithRevealedOptions: { peerId, fromPeerId in
|
||||||
updateState { state in
|
updateState { state in
|
||||||
if (peerId == nil && fromPeerId == state.peerIdWithRevealedOptions) || (peerId != nil && fromPeerId == nil) {
|
if (peerId == nil && fromPeerId == state.peerIdWithRevealedOptions) || (peerId != nil && fromPeerId == nil) {
|
||||||
@ -231,7 +229,7 @@ public func blockedPeersController(context: AccountContext, blockedPeersContext:
|
|||||||
}
|
}
|
||||||
}, addPeer: {
|
}, addPeer: {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyPrivateChats, .excludeSavedMessages, .removeSearchHeader, .excludeRecent], title: presentationData.strings.BlockedUsers_SelectUserTitle))
|
let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyPrivateChats, .excludeSavedMessages, .removeSearchHeader, .excludeRecent, .doNotSearchMessages], title: presentationData.strings.BlockedUsers_SelectUserTitle))
|
||||||
controller.peerSelected = { [weak controller] peerId in
|
controller.peerSelected = { [weak controller] peerId in
|
||||||
guard let strongController = controller else {
|
guard let strongController = controller else {
|
||||||
return
|
return
|
||||||
|
@ -15,6 +15,8 @@ private let blue = UIColor(rgb: 0x0078ff)
|
|||||||
private let lightBlue = UIColor(rgb: 0x59c7f8)
|
private let lightBlue = UIColor(rgb: 0x59c7f8)
|
||||||
private let green = UIColor(rgb: 0x33c659)
|
private let green = UIColor(rgb: 0x33c659)
|
||||||
private let activeBlue = UIColor(rgb: 0x00a0b9)
|
private let activeBlue = UIColor(rgb: 0x00a0b9)
|
||||||
|
private let purple = UIColor(rgb: 0x6b81f0)
|
||||||
|
private let pink = UIColor(rgb: 0xd75a76)
|
||||||
|
|
||||||
private let areaSize = CGSize(width: 440.0, height: 440.0)
|
private let areaSize = CGSize(width: 440.0, height: 440.0)
|
||||||
private let blobSize = CGSize(width: 244.0, height: 244.0)
|
private let blobSize = CGSize(width: 244.0, height: 244.0)
|
||||||
|
@ -224,10 +224,11 @@ public func stringForMediaKind(_ kind: MessageContentKind, strings: Presentation
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func descriptionStringForMessage(contentSettings: ContentSettings, message: Message, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId) -> (String, Bool) {
|
public func descriptionStringForMessage(contentSettings: ContentSettings, message: Message, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId) -> (String, Bool) {
|
||||||
if !message.text.isEmpty {
|
let contentKind = messageContentKind(contentSettings: contentSettings, message: message, strings: strings, nameDisplayOrder: nameDisplayOrder, accountPeerId: accountPeerId)
|
||||||
|
if !message.text.isEmpty && ![.expiredImage, .expiredVideo].contains(contentKind.key) {
|
||||||
return (foldLineBreaks(message.text), false)
|
return (foldLineBreaks(message.text), false)
|
||||||
}
|
}
|
||||||
return stringForMediaKind(messageContentKind(contentSettings: contentSettings, message: message, strings: strings, nameDisplayOrder: nameDisplayOrder, accountPeerId: accountPeerId), strings: strings)
|
return stringForMediaKind(contentKind, strings: strings)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func foldLineBreaks(_ text: String) -> String {
|
public func foldLineBreaks(_ text: String) -> String {
|
||||||
|
@ -9778,7 +9778,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func forwardMessages(messages: [Message], resetCurrent: Bool) {
|
private func forwardMessages(messages: [Message], resetCurrent: Bool) {
|
||||||
var filter: ChatListNodePeersFilter = [.onlyWriteable, .includeSavedMessages, .excludeDisabled]
|
var filter: ChatListNodePeersFilter = [.onlyWriteable, .includeSavedMessages, .excludeDisabled, .doNotSearchMessages]
|
||||||
var hasPublicPolls = false
|
var hasPublicPolls = false
|
||||||
var hasPublicQuiz = false
|
var hasPublicQuiz = false
|
||||||
for message in messages {
|
for message in messages {
|
||||||
|
@ -1528,7 +1528,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
|
|||||||
selectionNode.updateSelected(selected, animated: false)
|
selectionNode.updateSelected(selected, animated: false)
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
||||||
} else {
|
} else {
|
||||||
let selectionNode = ChatMessageSelectionNode(wallpaper: item.presentationData.theme.wallpaper, theme: item.presentationData.theme.theme, toggle: { [weak self] value in
|
let selectionNode = ChatMessageSelectionNode(wallpaper: item.presentationData.theme.wallpaper, theme: item.presentationData.theme.theme, toggle: { [weak self] value in
|
||||||
@ -1539,7 +1539,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
|
|||||||
|
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
self.addSubnode(selectionNode)
|
self.addSubnode(selectionNode)
|
||||||
self.selectionNode = selectionNode
|
self.selectionNode = selectionNode
|
||||||
selectionNode.updateSelected(selected, animated: false)
|
selectionNode.updateSelected(selected, animated: false)
|
||||||
|
@ -2636,7 +2636,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
let offset: CGFloat = params.leftInset + (incoming ? 42.0 : 0.0)
|
let offset: CGFloat = params.leftInset + (incoming ? 42.0 : 0.0)
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: params.width, height: layout.contentSize.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: params.width, height: layout.contentSize.height))
|
||||||
strongSelf.selectionNode?.frame = selectionFrame
|
strongSelf.selectionNode?.frame = selectionFrame
|
||||||
strongSelf.selectionNode?.updateLayout(size: selectionFrame.size)
|
strongSelf.selectionNode?.updateLayout(size: selectionFrame.size, leftInset: params.leftInset)
|
||||||
|
|
||||||
if let actionButtonsSizeAndApply = actionButtonsSizeAndApply {
|
if let actionButtonsSizeAndApply = actionButtonsSizeAndApply {
|
||||||
var animated = false
|
var animated = false
|
||||||
@ -3446,7 +3446,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
selectionNode.updateSelected(selected, animated: animated)
|
selectionNode.updateSelected(selected, animated: animated)
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentSize.width, height: self.contentSize.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentSize.width, height: self.contentSize.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
||||||
} else {
|
} else {
|
||||||
let selectionNode = ChatMessageSelectionNode(wallpaper: item.presentationData.theme.wallpaper, theme: item.presentationData.theme.theme, toggle: { [weak self] value in
|
let selectionNode = ChatMessageSelectionNode(wallpaper: item.presentationData.theme.wallpaper, theme: item.presentationData.theme.theme, toggle: { [weak self] value in
|
||||||
@ -3462,7 +3462,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
|
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentSize.width, height: self.contentSize.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentSize.width, height: self.contentSize.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
self.insertSubnode(selectionNode, belowSubnode: self.messageAccessibilityArea)
|
self.insertSubnode(selectionNode, belowSubnode: self.messageAccessibilityArea)
|
||||||
self.selectionNode = selectionNode
|
self.selectionNode = selectionNode
|
||||||
selectionNode.updateSelected(selected, animated: false)
|
selectionNode.updateSelected(selected, animated: false)
|
||||||
|
@ -452,7 +452,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView {
|
|||||||
|
|
||||||
strongSelf.appliedItem = item
|
strongSelf.appliedItem = item
|
||||||
strongSelf.appliedForwardInfo = (forwardSource, forwardAuthorSignature)
|
strongSelf.appliedForwardInfo = (forwardSource, forwardAuthorSignature)
|
||||||
|
|
||||||
let transition: ContainedViewLayoutTransition
|
let transition: ContainedViewLayoutTransition
|
||||||
if animation.isAnimated {
|
if animation.isAnimated {
|
||||||
transition = .animated(duration: 0.2, curve: .spring)
|
transition = .animated(duration: 0.2, curve: .spring)
|
||||||
@ -886,7 +886,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView {
|
|||||||
if let selectionNode = self.selectionNode {
|
if let selectionNode = self.selectionNode {
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
selectionNode.updateSelected(selected, animated: animated)
|
selectionNode.updateSelected(selected, animated: animated)
|
||||||
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
||||||
} else {
|
} else {
|
||||||
@ -897,7 +897,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView {
|
|||||||
})
|
})
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
self.addSubnode(selectionNode)
|
self.addSubnode(selectionNode)
|
||||||
self.selectionNode = selectionNode
|
self.selectionNode = selectionNode
|
||||||
selectionNode.updateSelected(selected, animated: false)
|
selectionNode.updateSelected(selected, animated: false)
|
||||||
|
@ -424,6 +424,7 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible {
|
|||||||
|
|
||||||
node.contentSize = layout.contentSize
|
node.contentSize = layout.contentSize
|
||||||
node.insets = layout.insets
|
node.insets = layout.insets
|
||||||
|
node.safeInsets = UIEdgeInsets(top: 0.0, left: params.leftInset, bottom: 0.0, right: params.rightInset)
|
||||||
|
|
||||||
node.updateSelectionState(animated: false)
|
node.updateSelectionState(animated: false)
|
||||||
node.updateHighlightedState(animated: false)
|
node.updateHighlightedState(animated: false)
|
||||||
@ -493,6 +494,7 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible {
|
|||||||
completion(layout, { _ in
|
completion(layout, { _ in
|
||||||
apply(animation, false)
|
apply(animation, false)
|
||||||
if let nodeValue = node() as? ChatMessageItemView {
|
if let nodeValue = node() as? ChatMessageItemView {
|
||||||
|
nodeValue.safeInsets = UIEdgeInsets(top: 0.0, left: params.leftInset, bottom: 0.0, right: params.rightInset)
|
||||||
nodeValue.updateSelectionState(animated: false)
|
nodeValue.updateSelectionState(animated: false)
|
||||||
nodeValue.updateHighlightedState(animated: false)
|
nodeValue.updateHighlightedState(animated: false)
|
||||||
}
|
}
|
||||||
|
@ -647,6 +647,7 @@ public class ChatMessageItemView: ListViewItemNode {
|
|||||||
|
|
||||||
var item: ChatMessageItem?
|
var item: ChatMessageItem?
|
||||||
var accessibilityData: ChatMessageAccessibilityData?
|
var accessibilityData: ChatMessageAccessibilityData?
|
||||||
|
var safeInsets = UIEdgeInsets()
|
||||||
|
|
||||||
var awaitingAppliedReaction: (String?, () -> Void)?
|
var awaitingAppliedReaction: (String?, () -> Void)?
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ final class ChatMessageSelectionNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateLayout(size: CGSize) {
|
func updateLayout(size: CGSize, leftInset: CGFloat) {
|
||||||
let checkSize = CGSize(width: 32.0, height: 32.0)
|
let checkSize = CGSize(width: 32.0, height: 32.0)
|
||||||
self.checkNode.frame = CGRect(origin: CGPoint(x: 4.0, y: floor((size.height - checkSize.height) / 2.0)), size: checkSize)
|
self.checkNode.frame = CGRect(origin: CGPoint(x: 4.0 + leftInset, y: floor((size.height - checkSize.height) / 2.0)), size: checkSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -673,9 +673,14 @@ class ChatMessageStickerItemNode: ChatMessageItemView {
|
|||||||
replyInfoNode.frame = replyInfoFrame
|
replyInfoNode.frame = replyInfoFrame
|
||||||
strongSelf.replyBackgroundNode?.frame = replyBackgroundFrame ?? CGRect()
|
strongSelf.replyBackgroundNode?.frame = replyBackgroundFrame ?? CGRect()
|
||||||
|
|
||||||
if let _ = item.controllerInteraction.selectionState, isEmoji {
|
if isEmoji && !incoming {
|
||||||
replyInfoNode.alpha = 0.0
|
if let _ = item.controllerInteraction.selectionState {
|
||||||
strongSelf.replyBackgroundNode?.alpha = 0.0
|
replyInfoNode.alpha = 0.0
|
||||||
|
strongSelf.replyBackgroundNode?.alpha = 0.0
|
||||||
|
} else {
|
||||||
|
replyInfoNode.alpha = 1.0
|
||||||
|
strongSelf.replyBackgroundNode?.alpha = 1.0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if let replyInfoNode = strongSelf.replyInfoNode {
|
} else if let replyInfoNode = strongSelf.replyInfoNode {
|
||||||
replyInfoNode.removeFromSupernode()
|
replyInfoNode.removeFromSupernode()
|
||||||
@ -1007,7 +1012,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView {
|
|||||||
if let selectionNode = self.selectionNode {
|
if let selectionNode = self.selectionNode {
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
selectionNode.updateSelected(selected, animated: animated)
|
selectionNode.updateSelected(selected, animated: animated)
|
||||||
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
self.subnodeTransform = CATransform3DMakeTranslation(offset, 0.0, 0.0);
|
||||||
} else {
|
} else {
|
||||||
@ -1018,7 +1023,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView {
|
|||||||
})
|
})
|
||||||
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
let selectionFrame = CGRect(origin: CGPoint(x: -offset, y: 0.0), size: CGSize(width: self.contentBounds.size.width, height: self.contentBounds.size.height))
|
||||||
selectionNode.frame = selectionFrame
|
selectionNode.frame = selectionFrame
|
||||||
selectionNode.updateLayout(size: selectionFrame.size)
|
selectionNode.updateLayout(size: selectionFrame.size, leftInset: self.safeInsets.left)
|
||||||
self.addSubnode(selectionNode)
|
self.addSubnode(selectionNode)
|
||||||
self.selectionNode = selectionNode
|
self.selectionNode = selectionNode
|
||||||
selectionNode.updateSelected(selected, animated: false)
|
selectionNode.updateSelected(selected, animated: false)
|
||||||
|
@ -677,7 +677,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate {
|
|||||||
if let previousAdditionalSideInsets = previousAdditionalSideInsets, previousAdditionalSideInsets.right != additionalSideInsets.right {
|
if let previousAdditionalSideInsets = previousAdditionalSideInsets, previousAdditionalSideInsets.right != additionalSideInsets.right {
|
||||||
additionalOffset = (previousAdditionalSideInsets.right - additionalSideInsets.right) / 3.0
|
additionalOffset = (previousAdditionalSideInsets.right - additionalSideInsets.right) / 3.0
|
||||||
|
|
||||||
if case let .animated(duration, curve) = transition {
|
if case let .animated(duration, _) = transition {
|
||||||
transition = .animated(duration: 0.2, curve: .easeInOut)
|
transition = .animated(duration: 0.2, curve: .easeInOut)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import TelegramPermissionsUI
|
|||||||
import AppBundle
|
import AppBundle
|
||||||
import DeviceAccess
|
import DeviceAccess
|
||||||
|
|
||||||
public class ComposeController: ViewController {
|
public class ComposeControllerImpl: ViewController, ComposeController {
|
||||||
private let context: AccountContext
|
private let context: AccountContext
|
||||||
|
|
||||||
private var contactsNode: ComposeControllerNode {
|
private var contactsNode: ComposeControllerNode {
|
||||||
|
@ -228,7 +228,8 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
|||||||
if let requestOpenMessageFromSearch = self?.requestOpenMessageFromSearch {
|
if let requestOpenMessageFromSearch = self?.requestOpenMessageFromSearch {
|
||||||
requestOpenMessageFromSearch(peer, messageId)
|
requestOpenMessageFromSearch(peer, messageId)
|
||||||
}
|
}
|
||||||
}, addContact: nil, peerContextAction: nil, present: { _, _ in
|
}, addContact: nil, peerContextAction: nil, present: { [weak self] c, a in
|
||||||
|
self?.present(c, a)
|
||||||
}, presentInGlobalOverlay: { _, _ in
|
}, presentInGlobalOverlay: { _, _ in
|
||||||
}, navigationController: nil), cancel: { [weak self] in
|
}, navigationController: nil), cancel: { [weak self] in
|
||||||
if let requestDeactivateSearch = self?.requestDeactivateSearch {
|
if let requestDeactivateSearch = self?.requestDeactivateSearch {
|
||||||
|
@ -1176,7 +1176,7 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func makeComposeController(context: AccountContext) -> ViewController {
|
public func makeComposeController(context: AccountContext) -> ViewController {
|
||||||
return ComposeController(context: context)
|
return ComposeControllerImpl(context: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func makeProxySettingsController(context: AccountContext) -> ViewController {
|
public func makeProxySettingsController(context: AccountContext) -> ViewController {
|
||||||
|
@ -48,6 +48,9 @@ public func parseInternalUrl(query: String) -> ParsedInternalUrl? {
|
|||||||
if query.hasPrefix("s/") {
|
if query.hasPrefix("s/") {
|
||||||
query = String(query[query.index(query.startIndex, offsetBy: 2)...])
|
query = String(query[query.index(query.startIndex, offsetBy: 2)...])
|
||||||
}
|
}
|
||||||
|
if query.hasSuffix("/") {
|
||||||
|
query.removeLast()
|
||||||
|
}
|
||||||
if let components = URLComponents(string: "/" + query) {
|
if let components = URLComponents(string: "/" + query) {
|
||||||
var pathComponents = components.path.components(separatedBy: "/")
|
var pathComponents = components.path.components(separatedBy: "/")
|
||||||
if !pathComponents.isEmpty {
|
if !pathComponents.isEmpty {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user