From 257def1bd3100b70d0f2a6905cd0df0f89d88dc5 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Thu, 11 Feb 2021 01:28:34 +0400 Subject: [PATCH] Fix autoremove issues --- .../ChatListFilterSettingsHeaderItem.swift | 18 +++++++++++++++--- .../Sources/PeerAutoremoveSetupScreen.swift | 16 +++++++--------- .../TelegramUI/Sources/ChatController.swift | 6 ++---- .../Sources/ChatInterfaceInputContexts.swift | 2 +- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/submodules/ChatListFilterSettingsHeaderItem/Sources/ChatListFilterSettingsHeaderItem.swift b/submodules/ChatListFilterSettingsHeaderItem/Sources/ChatListFilterSettingsHeaderItem.swift index 3463b324f1..078a24be76 100644 --- a/submodules/ChatListFilterSettingsHeaderItem/Sources/ChatListFilterSettingsHeaderItem.swift +++ b/submodules/ChatListFilterSettingsHeaderItem/Sources/ChatListFilterSettingsHeaderItem.swift @@ -106,11 +106,14 @@ class ChatListFilterSettingsHeaderItemNode: ListViewItemNode { let makeTitleLayout = TextNode.asyncLayout(self.titleNode) return { item, params, neighbors in + let isHidden = params.width > params.availableHeight && params.availableHeight < 400.0 + let leftInset: CGFloat = 32.0 + params.leftInset let animationName: String var size = 192 var insetDifference = 100 + var additionalBottomInset: CGFloat = 0.0 var playbackMode: AnimatedStickerPlaybackMode = .once switch item.animation { case .folders: @@ -123,7 +126,8 @@ class ChatListFilterSettingsHeaderItemNode: ListViewItemNode { animationName = "MessageAutoRemove" size = 260 insetDifference = 120 - playbackMode = .loop + playbackMode = .once + additionalBottomInset = isHidden ? 8.0 : 16.0 } let topInset: CGFloat = CGFloat(size - insetDifference) @@ -132,9 +136,14 @@ class ChatListFilterSettingsHeaderItemNode: ListViewItemNode { let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - params.rightInset - leftInset * 2.0, height: CGFloat.greatestFiniteMagnitude), alignment: .center, cutout: nil, insets: UIEdgeInsets())) let contentSize = CGSize(width: params.width, height: topInset + titleLayout.size.height) - let insets = itemListNeighborsGroupedInsets(neighbors) + var insets = itemListNeighborsGroupedInsets(neighbors) - let layout = ListViewItemNodeLayout(contentSize: contentSize, insets: insets) + if isHidden { + insets = UIEdgeInsets() + } + insets.bottom += additionalBottomInset + + let layout = ListViewItemNodeLayout(contentSize: isHidden ? CGSize(width: params.width, height: 0.0) : contentSize, insets: insets) return (layout, { [weak self] in if let strongSelf = self { @@ -154,6 +163,9 @@ class ChatListFilterSettingsHeaderItemNode: ListViewItemNode { let _ = titleApply() strongSelf.titleNode.frame = CGRect(origin: CGPoint(x: floor((layout.size.width - titleLayout.size.width) / 2.0), y: topInset + 8.0), size: titleLayout.size) + + strongSelf.animationNode.alpha = isHidden ? 0.0 : 1.0 + strongSelf.titleNode.alpha = isHidden ? 0.0 : 1.0 } }) } diff --git a/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift b/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift index 58a7cc72d6..6ca28ef27c 100644 --- a/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift +++ b/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift @@ -32,13 +32,11 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { case timeHeader(String) case timeValue(Int32, Int32, [Int32]) case timeComment(String) - case globalSwitch(String, Bool) + case globalSwitch(String, Bool, Bool) var section: ItemListSectionId { switch self { - case .header: - return PeerAutoremoveSetupSection.header.rawValue - case .timeHeader, .timeValue, .timeComment: + case .header, .timeHeader, .timeValue, .timeComment: return PeerAutoremoveSetupSection.time.rawValue case .globalSwitch: return PeerAutoremoveSetupSection.global.rawValue @@ -86,8 +84,8 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { } else { return false } - case let .globalSwitch(lhsText, lhsValue): - if case let .globalSwitch(rhsText, rhsValue) = rhs, lhsText == rhsText, lhsValue == rhsValue { + case let .globalSwitch(lhsText, lhsValue, lhsEnable): + if case let .globalSwitch(rhsText, rhsValue, rhsEnable) = rhs, lhsText == rhsText, lhsValue == rhsValue, lhsEnable == rhsEnable { return true } else { return false @@ -112,8 +110,8 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { }, tag: nil) case let .timeComment(text): return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) - case let .globalSwitch(text, value): - return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in + case let .globalSwitch(text, value, enabled): + return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, enabled: enabled, maximumNumberOfLines: 2, sectionId: self.section, style: .blocks, updated: { value in arguments.toggleGlobal(value) }) } @@ -165,7 +163,7 @@ private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: Presentat } } if let user = peer as? TelegramUser { - entries.append(.globalSwitch("Also auto-delete for \(user.compactDisplayTitle)", globalValue)) + entries.append(.globalSwitch("Also auto-delete for \(user.compactDisplayTitle)", globalValue, resolvedValue != Int32.max)) } return entries diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 767eec7ec4..6ed377f9e2 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -7749,10 +7749,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return } - Queue.mainQueue().after(0.8, { - self?.updateChatPresentationInterfaceState(animated: false, interactive: false, { $0.updatedInterfaceState({ $0.withoutSelectionState() }) }) - }) - actionSheet.dismissAnimated() strongSelf.presentAutoremoveSetup() @@ -11918,6 +11914,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return } + strongSelf.updateChatPresentationInterfaceState(animated: false, interactive: false, { $0.updatedInterfaceState({ $0.withoutSelectionState() }) }) + var text: String? if let myValue = value.myValue { if let limitedByValue = value.limitedByValue, limitedByValue < myValue { diff --git a/submodules/TelegramUI/Sources/ChatInterfaceInputContexts.swift b/submodules/TelegramUI/Sources/ChatInterfaceInputContexts.swift index f86ae19de5..baa149e9a9 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceInputContexts.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceInputContexts.swift @@ -285,7 +285,7 @@ func inputTextPanelStateForChatPresentationInterfaceState(_ chatPresentationInte if !extendedSearchLayout { if let peer = chatPresentationInterfaceState.renderedPeer?.peer as? TelegramSecretChat { accessoryItems.append(.messageAutoremoveTimeout(peer.messageAutoremoveTimeout)) - } else if currentAutoremoveTimeout != nil { + } else if currentAutoremoveTimeout != nil && chatPresentationInterfaceState.interfaceState.composeInputState.inputText.length == 0 { accessoryItems.append(.messageAutoremoveTimeout(currentAutoremoveTimeout)) } }