mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-09 02:03:43 +00:00
Various Fixes
This commit is contained in:
parent
0461059383
commit
b5db0d8494
@ -131,39 +131,31 @@ public enum ChatControllerInteractionNavigateToPeer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public struct ChatInterfaceForwardOptionsState: Codable, Equatable {
|
public struct ChatInterfaceForwardOptionsState: Codable, Equatable {
|
||||||
public var deselectedIds: Set<EngineMessage.Id>
|
|
||||||
public var hideNames: Bool
|
public var hideNames: Bool
|
||||||
public var hideCaptions: Bool
|
public var hideCaptions: Bool
|
||||||
|
public var unhideNamesOnCaptionChange: Bool
|
||||||
|
|
||||||
public static func ==(lhs: ChatInterfaceForwardOptionsState, rhs: ChatInterfaceForwardOptionsState) -> Bool {
|
public static func ==(lhs: ChatInterfaceForwardOptionsState, rhs: ChatInterfaceForwardOptionsState) -> Bool {
|
||||||
return lhs.deselectedIds == rhs.deselectedIds && lhs.hideNames == rhs.hideNames && lhs.hideCaptions == rhs.hideCaptions
|
return lhs.hideNames == rhs.hideNames && lhs.hideCaptions == rhs.hideCaptions && lhs.unhideNamesOnCaptionChange == rhs.unhideNamesOnCaptionChange
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(deselectedIds: Set<EngineMessage.Id>, hideNames: Bool, hideCaptions: Bool) {
|
public init(hideNames: Bool, hideCaptions: Bool, unhideNamesOnCaptionChange: Bool) {
|
||||||
self.deselectedIds = deselectedIds
|
|
||||||
self.hideNames = hideNames
|
self.hideNames = hideNames
|
||||||
self.hideCaptions = hideCaptions
|
self.hideCaptions = hideCaptions
|
||||||
|
self.unhideNamesOnCaptionChange = unhideNamesOnCaptionChange
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(from decoder: Decoder) throws {
|
public init(from decoder: Decoder) throws {
|
||||||
let container = try decoder.container(keyedBy: StringCodingKey.self)
|
let container = try decoder.container(keyedBy: StringCodingKey.self)
|
||||||
|
|
||||||
if let data = try? container.decodeIfPresent(Data.self, forKey: "i") {
|
|
||||||
self.deselectedIds = Set(EngineMessage.Id.decodeArrayFromData(data))
|
|
||||||
} else {
|
|
||||||
self.deselectedIds = Set()
|
|
||||||
}
|
|
||||||
|
|
||||||
self.hideNames = (try? container.decodeIfPresent(Bool.self, forKey: "hn")) ?? false
|
self.hideNames = (try? container.decodeIfPresent(Bool.self, forKey: "hn")) ?? false
|
||||||
self.hideCaptions = (try? container.decodeIfPresent(Bool.self, forKey: "hc")) ?? false
|
self.hideCaptions = (try? container.decodeIfPresent(Bool.self, forKey: "hc")) ?? false
|
||||||
|
self.unhideNamesOnCaptionChange = false
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode(to encoder: Encoder) throws {
|
public func encode(to encoder: Encoder) throws {
|
||||||
var container = encoder.container(keyedBy: StringCodingKey.self)
|
var container = encoder.container(keyedBy: StringCodingKey.self)
|
||||||
|
|
||||||
let data = EngineMessage.Id.encodeArrayToData(Array(self.deselectedIds))
|
|
||||||
|
|
||||||
try container.encode(data, forKey: "i")
|
|
||||||
try container.encode(self.hideNames, forKey: "hn")
|
try container.encode(self.hideNames, forKey: "hn")
|
||||||
try container.encode(self.hideCaptions, forKey: "hc")
|
try container.encode(self.hideCaptions, forKey: "hc")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,11 @@ public func customizePresentationTheme(_ theme: PresentationTheme, specialMode:
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func makePresentationTheme(settings: TelegramThemeSettings, specialMode: Bool = false, title: String? = nil, serviceBackgroundColor: UIColor? = nil) -> PresentationTheme? {
|
public func makePresentationTheme(settings: TelegramThemeSettings, specialMode: Bool = false, title: String? = nil, serviceBackgroundColor: UIColor? = nil) -> PresentationTheme? {
|
||||||
let defaultTheme = makeDefaultPresentationTheme(reference: PresentationBuiltinThemeReference(baseTheme: settings.baseTheme), extendingThemeReference: nil, serviceBackgroundColor: serviceBackgroundColor, preview: false)
|
var baseTheme: TelegramBaseTheme = settings.baseTheme
|
||||||
|
if specialMode && baseTheme == .night {
|
||||||
|
baseTheme = .tinted
|
||||||
|
}
|
||||||
|
let defaultTheme = makeDefaultPresentationTheme(reference: PresentationBuiltinThemeReference(baseTheme: baseTheme), extendingThemeReference: nil, serviceBackgroundColor: serviceBackgroundColor, preview: false)
|
||||||
return customizePresentationTheme(defaultTheme, specialMode: specialMode, editing: true, title: title, accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors, animateBubbleColors: settings.animateMessageColors, wallpaper: settings.wallpaper)
|
return customizePresentationTheme(defaultTheme, specialMode: specialMode, editing: true, title: title, accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors, animateBubbleColors: settings.animateMessageColors, wallpaper: settings.wallpaper)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -13,4 +13,10 @@ class AccessoryPanelNode: ASDisplayNode {
|
|||||||
|
|
||||||
func updateState(size: CGSize, inset: CGFloat, interfaceState: ChatPresentationInterfaceState) {
|
func updateState(size: CGSize, inset: CGFloat, interfaceState: ChatPresentationInterfaceState) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func animateIn() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func animateOut() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5484,7 +5484,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
}, updateForwardOptionsState: { [weak self] f in
|
}, updateForwardOptionsState: { [weak self] f in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedForwardOptionsState(f($0.forwardOptionsState ?? ChatInterfaceForwardOptionsState(deselectedIds: Set(), hideNames: false, hideCaptions: false))) }) })
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedForwardOptionsState(f($0.forwardOptionsState ?? ChatInterfaceForwardOptionsState(hideNames: false, hideCaptions: false, unhideNamesOnCaptionChange: false))) }) })
|
||||||
}
|
}
|
||||||
}, presentForwardOptions: { [weak self] sourceNode in
|
}, presentForwardOptions: { [weak self] sourceNode in
|
||||||
if let strongSelf = self, case let .peer(peerId) = strongSelf.chatLocation {
|
if let strongSelf = self, case let .peer(peerId) = strongSelf.chatLocation {
|
||||||
@ -5557,6 +5557,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
var updated = current
|
var updated = current
|
||||||
updated.hideNames = false
|
updated.hideNames = false
|
||||||
updated.hideCaptions = false
|
updated.hideCaptions = false
|
||||||
|
updated.unhideNamesOnCaptionChange = false
|
||||||
return updated
|
return updated
|
||||||
})
|
})
|
||||||
})))
|
})))
|
||||||
@ -5571,6 +5572,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||||
var updated = current
|
var updated = current
|
||||||
updated.hideNames = true
|
updated.hideNames = true
|
||||||
|
updated.unhideNamesOnCaptionChange = false
|
||||||
return updated
|
return updated
|
||||||
})
|
})
|
||||||
})))
|
})))
|
||||||
@ -5589,7 +5591,10 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||||
var updated = current
|
var updated = current
|
||||||
updated.hideCaptions = false
|
updated.hideCaptions = false
|
||||||
|
if updated.unhideNamesOnCaptionChange {
|
||||||
|
updated.unhideNamesOnCaptionChange = false
|
||||||
|
updated.hideNames = false
|
||||||
|
}
|
||||||
return updated
|
return updated
|
||||||
})
|
})
|
||||||
})))
|
})))
|
||||||
@ -5604,7 +5609,10 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||||
var updated = current
|
var updated = current
|
||||||
updated.hideCaptions = true
|
updated.hideCaptions = true
|
||||||
|
if !updated.hideNames {
|
||||||
updated.hideNames = true
|
updated.hideNames = true
|
||||||
|
updated.unhideNamesOnCaptionChange = true
|
||||||
|
}
|
||||||
return updated
|
return updated
|
||||||
})
|
})
|
||||||
})))
|
})))
|
||||||
|
|||||||
@ -1058,6 +1058,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
accessoryPanelSize = accessoryPanelNode.measure(CGSize(width: layout.size.width, height: layout.size.height))
|
accessoryPanelSize = accessoryPanelNode.measure(CGSize(width: layout.size.width, height: layout.size.height))
|
||||||
|
|
||||||
accessoryPanelNode.updateState(size: layout.size, inset: layout.safeInsets.left, interfaceState: self.chatPresentationInterfaceState)
|
accessoryPanelNode.updateState(size: layout.size, inset: layout.safeInsets.left, interfaceState: self.chatPresentationInterfaceState)
|
||||||
|
accessoryPanelNode.animateIn()
|
||||||
|
|
||||||
if accessoryPanelNode !== self.accessoryPanelNode {
|
if accessoryPanelNode !== self.accessoryPanelNode {
|
||||||
dismissedAccessoryPanelNode = self.accessoryPanelNode
|
dismissedAccessoryPanelNode = self.accessoryPanelNode
|
||||||
@ -1519,6 +1520,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
transitionTargetY = inputPanelFrame.minY
|
transitionTargetY = inputPanelFrame.minY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dismissedAccessoryPanelNode.animateOut()
|
||||||
dismissedAccessoryPanelNode.originalFrameBeforeDismissed = dismissedAccessoryPanelNode.frame
|
dismissedAccessoryPanelNode.originalFrameBeforeDismissed = dismissedAccessoryPanelNode.frame
|
||||||
|
|
||||||
transition.updateFrame(node: dismissedAccessoryPanelNode, frame: CGRect(origin: CGPoint(x: 0.0, y: transitionTargetY), size: dismissedAccessoryPanelNode.frame.size), completion: { _ in
|
transition.updateFrame(node: dismissedAccessoryPanelNode, frame: CGRect(origin: CGPoint(x: 0.0, y: transitionTargetY), size: dismissedAccessoryPanelNode.frame.size), completion: { _ in
|
||||||
|
|||||||
@ -303,6 +303,14 @@ final class EditAccessoryPanelNode: AccessoryPanelNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func animateIn() {
|
||||||
|
self.iconNode.layer.animateScale(from: 0.001, to: 1.0, duration: 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func animateOut() {
|
||||||
|
self.iconNode.layer.animateScale(from: 1.0, to: 0.001, duration: 0.2, removeOnCompletion: false)
|
||||||
|
}
|
||||||
|
|
||||||
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
||||||
if self.theme !== theme {
|
if self.theme !== theme {
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
|
|||||||
@ -769,7 +769,7 @@ final class FeaturedStickersScreen: ViewController {
|
|||||||
|
|
||||||
self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
|
self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
|
||||||
|
|
||||||
let searchNavigationNode = SearchNavigationContentNode(theme: self.presentationData.theme, strings: self.presentationData.strings, cancel: { [weak self] in
|
let searchNavigationNode = SearchNavigationContentNode(theme: self.presentationData.theme, strings: self.presentationData.strings, placeholder: { strings in return strings.Stickers_Search }, cancel: { [weak self] in
|
||||||
self?.dismiss()
|
self?.dismiss()
|
||||||
})
|
})
|
||||||
self.searchNavigationNode = searchNavigationNode
|
self.searchNavigationNode = searchNavigationNode
|
||||||
@ -852,15 +852,17 @@ private final class SearchNavigationContentNode: NavigationBarContentNode {
|
|||||||
private let searchBar: SearchBarNode
|
private let searchBar: SearchBarNode
|
||||||
|
|
||||||
private var queryUpdated: ((String, String?) -> Void)?
|
private var queryUpdated: ((String, String?) -> Void)?
|
||||||
|
private var placeholder: ((PresentationStrings) -> String)?
|
||||||
|
|
||||||
init(theme: PresentationTheme, strings: PresentationStrings, cancel: @escaping () -> Void) {
|
init(theme: PresentationTheme, strings: PresentationStrings, placeholder: ((PresentationStrings) -> String)? = nil, cancel: @escaping () -> Void) {
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
self.strings = strings
|
self.strings = strings
|
||||||
|
self.placeholder = placeholder
|
||||||
|
|
||||||
self.cancel = cancel
|
self.cancel = cancel
|
||||||
|
|
||||||
self.searchBar = SearchBarNode(theme: SearchBarNodeTheme(theme: theme), strings: strings, fieldStyle: .modern, cancelText: strings.Common_Done)
|
self.searchBar = SearchBarNode(theme: SearchBarNodeTheme(theme: theme), strings: strings, fieldStyle: .modern, cancelText: strings.Common_Done)
|
||||||
let placeholderText = strings.Common_Search
|
let placeholderText = placeholder?(strings) ?? strings.Common_Search
|
||||||
let searchBarFont = Font.regular(17.0)
|
let searchBarFont = Font.regular(17.0)
|
||||||
|
|
||||||
self.searchBar.placeholderString = NSAttributedString(string: placeholderText, font: searchBarFont, textColor: theme.rootController.navigationSearchBar.inputPlaceholderTextColor)
|
self.searchBar.placeholderString = NSAttributedString(string: placeholderText, font: searchBarFont, textColor: theme.rootController.navigationSearchBar.inputPlaceholderTextColor)
|
||||||
|
|||||||
@ -244,6 +244,14 @@ final class ForwardAccessoryPanelNode: AccessoryPanelNode {
|
|||||||
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func animateIn() {
|
||||||
|
self.iconNode.layer.animateScale(from: 0.001, to: 1.0, duration: 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func animateOut() {
|
||||||
|
self.iconNode.layer.animateScale(from: 1.0, to: 0.001, duration: 0.2, removeOnCompletion: false)
|
||||||
|
}
|
||||||
|
|
||||||
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
||||||
self.updateThemeAndStrings(theme: theme, strings: strings, forwardOptionsState: self.forwardOptionsState)
|
self.updateThemeAndStrings(theme: theme, strings: strings, forwardOptionsState: self.forwardOptionsState)
|
||||||
}
|
}
|
||||||
@ -260,8 +268,7 @@ final class ForwardAccessoryPanelNode: AccessoryPanelNode {
|
|||||||
self.iconNode.image = PresentationResourcesChat.chatInputPanelForwardIconImage(theme)
|
self.iconNode.image = PresentationResourcesChat.chatInputPanelForwardIconImage(theme)
|
||||||
}
|
}
|
||||||
|
|
||||||
let deselectedIds = forwardOptionsState?.deselectedIds ?? Set()
|
let filteredMessages = self.messages
|
||||||
let filteredMessages = self.messages.filter { !deselectedIds.contains($0.id) }
|
|
||||||
|
|
||||||
var title = ""
|
var title = ""
|
||||||
var text = ""
|
var text = ""
|
||||||
|
|||||||
@ -223,6 +223,14 @@ final class ReplyAccessoryPanelNode: AccessoryPanelNode {
|
|||||||
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func animateIn() {
|
||||||
|
self.iconNode.layer.animateScale(from: 0.001, to: 1.0, duration: 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func animateOut() {
|
||||||
|
self.iconNode.layer.animateScale(from: 1.0, to: 0.001, duration: 0.2, removeOnCompletion: false)
|
||||||
|
}
|
||||||
|
|
||||||
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
||||||
if self.theme !== theme {
|
if self.theme !== theme {
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
|
|||||||
@ -72,6 +72,14 @@ final class WebpagePreviewAccessoryPanelNode: AccessoryPanelNode {
|
|||||||
self.webpageDisposable.dispose()
|
self.webpageDisposable.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func animateIn() {
|
||||||
|
self.iconNode.layer.animateScale(from: 0.001, to: 1.0, duration: 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func animateOut() {
|
||||||
|
self.iconNode.layer.animateScale(from: 1.0, to: 0.001, duration: 0.2, removeOnCompletion: false)
|
||||||
|
}
|
||||||
|
|
||||||
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
override func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
||||||
if self.theme !== theme || self.strings !== strings {
|
if self.theme !== theme || self.strings !== strings {
|
||||||
self.strings = strings
|
self.strings = strings
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user