mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various improvements
This commit is contained in:
parent
46e203137a
commit
3ae64b399f
@ -10773,3 +10773,6 @@ Sorry for the inconvenience.";
|
|||||||
"ChatList.PremiumXmasGiftText" = "Gift Telegram Premium for Christmas.";
|
"ChatList.PremiumXmasGiftText" = "Gift Telegram Premium for Christmas.";
|
||||||
|
|
||||||
"ReassignBoost.DescriptionWithLink" = "To boost **%1$@**, reassign a previous boost or [gift Telegram Premium]() to a friend to get **%2$@** additional boosts.";
|
"ReassignBoost.DescriptionWithLink" = "To boost **%1$@**, reassign a previous boost or [gift Telegram Premium]() to a friend to get **%2$@** additional boosts.";
|
||||||
|
|
||||||
|
"ChatList.PremiumGiftInSettingsInfo" = "You can gift **Telegram Premium** to a friend later in **Settings**.";
|
||||||
|
|
||||||
|
@ -2251,6 +2251,7 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
|||||||
if let sourceNode = sourceNode as? ChatListItemNode {
|
if let sourceNode = sourceNode as? ChatListItemNode {
|
||||||
self.interaction.openStories?(id, sourceNode.avatarNode)
|
self.interaction.openStories?(id, sourceNode.avatarNode)
|
||||||
}
|
}
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
chatListInteraction.isSearchMode = true
|
chatListInteraction.isSearchMode = true
|
||||||
|
|
||||||
@ -3561,6 +3562,7 @@ public final class ChatListSearchShimmerNode: ASDisplayNode {
|
|||||||
}, performActiveSessionAction: { _, _ in
|
}, performActiveSessionAction: { _, _ in
|
||||||
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
||||||
}, openStories: { _, _ in
|
}, openStories: { _, _ in
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
var isInlineMode = false
|
var isInlineMode = false
|
||||||
if case .topics = key {
|
if case .topics = key {
|
||||||
|
@ -156,7 +156,8 @@ final class ChatListShimmerNode: ASDisplayNode {
|
|||||||
let interaction = ChatListNodeInteraction(context: context, animationCache: animationCache, animationRenderer: animationRenderer, activateSearch: {}, peerSelected: { _, _, _, _ in }, disabledPeerSelected: { _, _ in }, togglePeerSelected: { _, _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
let interaction = ChatListNodeInteraction(context: context, animationCache: animationCache, animationRenderer: animationRenderer, activateSearch: {}, peerSelected: { _, _, _, _ in }, disabledPeerSelected: { _, _ in }, togglePeerSelected: { _, _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
||||||
}, messageSelected: { _, _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, setPeerThreadMuted: { _, _, _ in }, deletePeer: { _, _ in }, deletePeerThread: { _, _ in }, setPeerThreadStopped: { _, _, _ in }, setPeerThreadPinned: { _, _, _ in }, setPeerThreadHidden: { _, _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, toggleThreadsSelection: { _, _ in }, hidePsa: { _ in }, activateChatPreview: { _, _, _, gesture, _ in
|
}, messageSelected: { _, _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, setPeerThreadMuted: { _, _, _ in }, deletePeer: { _, _ in }, deletePeerThread: { _, _ in }, setPeerThreadStopped: { _, _, _ in }, setPeerThreadPinned: { _, _, _ in }, setPeerThreadHidden: { _, _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, toggleThreadsSelection: { _, _ in }, hidePsa: { _ in }, activateChatPreview: { _, _, _, gesture, _ in
|
||||||
gesture?.cancel()
|
gesture?.cancel()
|
||||||
}, present: { _ in }, openForumThread: { _, _ in }, openStorageManagement: {}, openPasswordSetup: {}, openPremiumIntro: {}, openPremiumGift: {}, openActiveSessions: {}, performActiveSessionAction: { _, _ in }, openChatFolderUpdates: {}, hideChatFolderUpdates: {}, openStories: { _, _ in })
|
}, present: { _ in }, openForumThread: { _, _ in }, openStorageManagement: {}, openPasswordSetup: {}, openPremiumIntro: {}, openPremiumGift: {}, openActiveSessions: {}, performActiveSessionAction: { _, _ in }, openChatFolderUpdates: {}, hideChatFolderUpdates: {}, openStories: { _, _ in }, dismissNotice: { _ in
|
||||||
|
})
|
||||||
interaction.isInlineMode = isInlineMode
|
interaction.isInlineMode = isInlineMode
|
||||||
|
|
||||||
let items = (0 ..< 2).map { _ -> ChatListItem in
|
let items = (0 ..< 2).map { _ -> ChatListItem in
|
||||||
|
@ -106,6 +106,7 @@ public final class ChatListNodeInteraction {
|
|||||||
let openChatFolderUpdates: () -> Void
|
let openChatFolderUpdates: () -> Void
|
||||||
let hideChatFolderUpdates: () -> Void
|
let hideChatFolderUpdates: () -> Void
|
||||||
let openStories: (ChatListNode.OpenStoriesSubject, ASDisplayNode?) -> Void
|
let openStories: (ChatListNode.OpenStoriesSubject, ASDisplayNode?) -> Void
|
||||||
|
let dismissNotice: (ChatListNotice) -> Void
|
||||||
|
|
||||||
public var searchTextHighightState: String?
|
public var searchTextHighightState: String?
|
||||||
var highlightedChatLocation: ChatListHighlightedLocation?
|
var highlightedChatLocation: ChatListHighlightedLocation?
|
||||||
@ -156,7 +157,8 @@ public final class ChatListNodeInteraction {
|
|||||||
performActiveSessionAction: @escaping (NewSessionReview, Bool) -> Void,
|
performActiveSessionAction: @escaping (NewSessionReview, Bool) -> Void,
|
||||||
openChatFolderUpdates: @escaping () -> Void,
|
openChatFolderUpdates: @escaping () -> Void,
|
||||||
hideChatFolderUpdates: @escaping () -> Void,
|
hideChatFolderUpdates: @escaping () -> Void,
|
||||||
openStories: @escaping (ChatListNode.OpenStoriesSubject, ASDisplayNode?) -> Void
|
openStories: @escaping (ChatListNode.OpenStoriesSubject, ASDisplayNode?) -> Void,
|
||||||
|
dismissNotice: @escaping (ChatListNotice) -> Void
|
||||||
) {
|
) {
|
||||||
self.activateSearch = activateSearch
|
self.activateSearch = activateSearch
|
||||||
self.peerSelected = peerSelected
|
self.peerSelected = peerSelected
|
||||||
@ -195,6 +197,7 @@ public final class ChatListNodeInteraction {
|
|||||||
self.openChatFolderUpdates = openChatFolderUpdates
|
self.openChatFolderUpdates = openChatFolderUpdates
|
||||||
self.hideChatFolderUpdates = hideChatFolderUpdates
|
self.hideChatFolderUpdates = hideChatFolderUpdates
|
||||||
self.openStories = openStories
|
self.openStories = openStories
|
||||||
|
self.dismissNotice = dismissNotice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -701,7 +704,7 @@ private func mappedInsertEntries(context: AccountContext, nodeInteraction: ChatL
|
|||||||
hideChatListContacts(context: context)
|
hideChatListContacts(context: context)
|
||||||
} : nil), directionHint: entry.directionHint)
|
} : nil), directionHint: entry.directionHint)
|
||||||
case let .Notice(presentationData, notice):
|
case let .Notice(presentationData, notice):
|
||||||
return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListStorageInfoItem(theme: presentationData.theme, strings: presentationData.strings, notice: notice, action: { [weak nodeInteraction] action in
|
return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListStorageInfoItem(context: context, theme: presentationData.theme, strings: presentationData.strings, notice: notice, action: { [weak nodeInteraction] action in
|
||||||
switch action {
|
switch action {
|
||||||
case .activate:
|
case .activate:
|
||||||
switch notice {
|
switch notice {
|
||||||
@ -717,10 +720,7 @@ private func mappedInsertEntries(context: AccountContext, nodeInteraction: ChatL
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
case .hide:
|
case .hide:
|
||||||
switch notice {
|
nodeInteraction?.dismissNotice(notice)
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case let .buttonChoice(isPositive):
|
case let .buttonChoice(isPositive):
|
||||||
switch notice {
|
switch notice {
|
||||||
case let .reviewLogin(newSessionReview, _):
|
case let .reviewLogin(newSessionReview, _):
|
||||||
@ -1023,7 +1023,7 @@ private func mappedUpdateEntries(context: AccountContext, nodeInteraction: ChatL
|
|||||||
hideChatListContacts(context: context)
|
hideChatListContacts(context: context)
|
||||||
} : nil), directionHint: entry.directionHint)
|
} : nil), directionHint: entry.directionHint)
|
||||||
case let .Notice(presentationData, notice):
|
case let .Notice(presentationData, notice):
|
||||||
return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListStorageInfoItem(theme: presentationData.theme, strings: presentationData.strings, notice: notice, action: { [weak nodeInteraction] action in
|
return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListStorageInfoItem(context: context, theme: presentationData.theme, strings: presentationData.strings, notice: notice, action: { [weak nodeInteraction] action in
|
||||||
switch action {
|
switch action {
|
||||||
case .activate:
|
case .activate:
|
||||||
switch notice {
|
switch notice {
|
||||||
@ -1039,10 +1039,7 @@ private func mappedUpdateEntries(context: AccountContext, nodeInteraction: ChatL
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
case .hide:
|
case .hide:
|
||||||
switch notice {
|
nodeInteraction?.dismissNotice(notice)
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case let .buttonChoice(isPositive):
|
case let .buttonChoice(isPositive):
|
||||||
switch notice {
|
switch notice {
|
||||||
case let .reviewLogin(newSessionReview, _):
|
case let .reviewLogin(newSessionReview, _):
|
||||||
@ -1703,6 +1700,20 @@ public final class ChatListNode: ListView {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.openStories?(subject, itemNode)
|
self.openStories?(subject, itemNode)
|
||||||
|
}, dismissNotice: { [weak self] notice in
|
||||||
|
guard let self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let presentationData = self.context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
switch notice {
|
||||||
|
case .xmasPremiumGift:
|
||||||
|
let _ = dismissServerProvidedSuggestion(account: self.context.account, suggestion: .xmasPremiumGift).startStandalone()
|
||||||
|
self.present?(UndoOverlayController(presentationData: presentationData, content: .info(title: nil, text: presentationData.strings.ChatList_PremiumGiftInSettingsInfo, timeout: 5.0, customUndoText: nil), elevatedLayout: false, action: { _ in
|
||||||
|
return true
|
||||||
|
}))
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
})
|
})
|
||||||
nodeInteraction.isInlineMode = isInlineMode
|
nodeInteraction.isInlineMode = isInlineMode
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ public enum ChatListNodeEntryPromoInfo: Equatable {
|
|||||||
case psa(type: String, message: String?)
|
case psa(type: String, message: String?)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ChatListNotice: Equatable {
|
public enum ChatListNotice: Equatable {
|
||||||
case clearStorage(sizeFraction: Double)
|
case clearStorage(sizeFraction: Double)
|
||||||
case setupPassword
|
case setupPassword
|
||||||
case premiumUpgrade(discount: Int32)
|
case premiumUpgrade(discount: Int32)
|
||||||
|
@ -8,6 +8,8 @@ import ListSectionHeaderNode
|
|||||||
import AppBundle
|
import AppBundle
|
||||||
import ItemListUI
|
import ItemListUI
|
||||||
import Markdown
|
import Markdown
|
||||||
|
import AccountContext
|
||||||
|
import TelegramCore
|
||||||
|
|
||||||
class ChatListStorageInfoItem: ListViewItem {
|
class ChatListStorageInfoItem: ListViewItem {
|
||||||
enum Action {
|
enum Action {
|
||||||
@ -16,6 +18,7 @@ class ChatListStorageInfoItem: ListViewItem {
|
|||||||
case buttonChoice(isPositive: Bool)
|
case buttonChoice(isPositive: Bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let context: AccountContext
|
||||||
let theme: PresentationTheme
|
let theme: PresentationTheme
|
||||||
let strings: PresentationStrings
|
let strings: PresentationStrings
|
||||||
let notice: ChatListNotice
|
let notice: ChatListNotice
|
||||||
@ -23,7 +26,8 @@ class ChatListStorageInfoItem: ListViewItem {
|
|||||||
|
|
||||||
let selectable: Bool = true
|
let selectable: Bool = true
|
||||||
|
|
||||||
init(theme: PresentationTheme, strings: PresentationStrings, notice: ChatListNotice, action: @escaping (Action) -> Void) {
|
init(context: AccountContext, theme: PresentationTheme, strings: PresentationStrings, notice: ChatListNotice, action: @escaping (Action) -> Void) {
|
||||||
|
self.context = context
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
self.strings = strings
|
self.strings = strings
|
||||||
self.notice = notice
|
self.notice = notice
|
||||||
@ -86,6 +90,8 @@ class ChatListStorageInfoItemNode: ItemListRevealOptionsItemNode {
|
|||||||
private let arrowNode: ASImageNode
|
private let arrowNode: ASImageNode
|
||||||
private let separatorNode: ASDisplayNode
|
private let separatorNode: ASDisplayNode
|
||||||
|
|
||||||
|
private var closeButton: HighlightableButtonNode?
|
||||||
|
|
||||||
private var okButtonText: TextNode?
|
private var okButtonText: TextNode?
|
||||||
private var cancelButtonText: TextNode?
|
private var cancelButtonText: TextNode?
|
||||||
private var okButton: HighlightableButtonNode?
|
private var okButton: HighlightableButtonNode?
|
||||||
@ -127,6 +133,13 @@ class ChatListStorageInfoItemNode: ItemListRevealOptionsItemNode {
|
|||||||
super.didLoad()
|
super.didLoad()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc private func closePressed() {
|
||||||
|
guard let item = self.item else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
item.action(.hide)
|
||||||
|
}
|
||||||
|
|
||||||
override func layoutForParams(_ params: ListViewItemLayoutParams, item: ListViewItem, previousItem: ListViewItem?, nextItem: ListViewItem?) {
|
override func layoutForParams(_ params: ListViewItemLayoutParams, item: ListViewItem, previousItem: ListViewItem?, nextItem: ListViewItem?) {
|
||||||
let layout = self.asyncLayout()
|
let layout = self.asyncLayout()
|
||||||
let (_, apply) = layout(item as! ChatListStorageInfoItem, params, nextItem == nil)
|
let (_, apply) = layout(item as! ChatListStorageInfoItem, params, nextItem == nil)
|
||||||
@ -334,6 +347,31 @@ class ChatListStorageInfoItemNode: ItemListRevealOptionsItemNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let arrowIsHidden = strongSelf.arrowNode.isHidden
|
||||||
|
if case .xmasPremiumGift = item.notice {
|
||||||
|
strongSelf.arrowNode.isHidden = true
|
||||||
|
|
||||||
|
let closeButton: HighlightableButtonNode
|
||||||
|
if let current = strongSelf.closeButton {
|
||||||
|
closeButton = current
|
||||||
|
} else {
|
||||||
|
closeButton = HighlightableButtonNode()
|
||||||
|
closeButton.hitTestSlop = UIEdgeInsets(top: -8.0, left: -8.0, bottom: -8.0, right: -8.0)
|
||||||
|
closeButton.addTarget(self, action: #selector(strongSelf.closePressed), forControlEvents: [.touchUpInside])
|
||||||
|
strongSelf.contentContainer.addSubnode(closeButton)
|
||||||
|
strongSelf.closeButton = closeButton
|
||||||
|
}
|
||||||
|
|
||||||
|
if themeUpdated {
|
||||||
|
closeButton.setImage(PresentationResourcesItemList.itemListCloseIconImage(item.theme), for: .normal)
|
||||||
|
}
|
||||||
|
|
||||||
|
let closeButtonSize = closeButton.measure(CGSize(width: 100.0, height: 100.0))
|
||||||
|
closeButton.frame = CGRect(origin: CGPoint(x: layout.size.width - sideInset - closeButtonSize.width, y: floor((layout.size.height - closeButtonSize.height) / 2.0)), size: closeButtonSize)
|
||||||
|
} else {
|
||||||
|
strongSelf.arrowNode.isHidden = arrowIsHidden
|
||||||
|
}
|
||||||
|
|
||||||
strongSelf.contentSize = layout.contentSize
|
strongSelf.contentSize = layout.contentSize
|
||||||
strongSelf.insets = layout.insets
|
strongSelf.insets = layout.insets
|
||||||
|
|
||||||
|
@ -101,6 +101,7 @@ public final class HashtagSearchController: TelegramBaseController {
|
|||||||
}, openChatFolderUpdates: {
|
}, openChatFolderUpdates: {
|
||||||
}, hideChatFolderUpdates: {
|
}, hideChatFolderUpdates: {
|
||||||
}, openStories: { _, _ in
|
}, openStories: { _, _ in
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
|
|
||||||
let previousSearchItems = Atomic<[ChatListSearchEntry]?>(value: nil)
|
let previousSearchItems = Atomic<[ChatListSearchEntry]?>(value: nil)
|
||||||
|
@ -226,6 +226,7 @@ private final class TextSizeSelectionControllerNode: ASDisplayNode, UIScrollView
|
|||||||
}, performActiveSessionAction: { _, _ in
|
}, performActiveSessionAction: { _, _ in
|
||||||
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
||||||
}, openStories: { _, _ in
|
}, openStories: { _, _ in
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
|
|
||||||
let chatListPresentationData = ChatListPresentationData(theme: self.presentationData.theme, fontSize: self.presentationData.listsFontSize, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameSortOrder: self.presentationData.nameSortOrder, nameDisplayOrder: self.presentationData.nameDisplayOrder, disableAnimations: true)
|
let chatListPresentationData = ChatListPresentationData(theme: self.presentationData.theme, fontSize: self.presentationData.listsFontSize, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameSortOrder: self.presentationData.nameSortOrder, nameDisplayOrder: self.presentationData.nameDisplayOrder, disableAnimations: true)
|
||||||
|
@ -375,6 +375,7 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
}, performActiveSessionAction: { _, _ in
|
}, performActiveSessionAction: { _, _ in
|
||||||
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
||||||
}, openStories: { _, _ in
|
}, openStories: { _, _ in
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
|
|
||||||
func makeChatListItem(
|
func makeChatListItem(
|
||||||
|
@ -869,6 +869,7 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
|
|||||||
}, performActiveSessionAction: { _, _ in
|
}, performActiveSessionAction: { _, _ in
|
||||||
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
}, openChatFolderUpdates: {}, hideChatFolderUpdates: {
|
||||||
}, openStories: { _, _ in
|
}, openStories: { _, _ in
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
let chatListPresentationData = ChatListPresentationData(theme: self.presentationData.theme, fontSize: self.presentationData.listsFontSize, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameSortOrder: self.presentationData.nameSortOrder, nameDisplayOrder: self.presentationData.nameDisplayOrder, disableAnimations: true)
|
let chatListPresentationData = ChatListPresentationData(theme: self.presentationData.theme, fontSize: self.presentationData.listsFontSize, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameSortOrder: self.presentationData.nameSortOrder, nameDisplayOrder: self.presentationData.nameDisplayOrder, disableAnimations: true)
|
||||||
|
|
||||||
|
@ -272,6 +272,7 @@ class ChatSearchResultsControllerNode: ViewControllerTracingNode, UIScrollViewDe
|
|||||||
}, openChatFolderUpdates: {
|
}, openChatFolderUpdates: {
|
||||||
}, hideChatFolderUpdates: {
|
}, hideChatFolderUpdates: {
|
||||||
}, openStories: { _, _ in
|
}, openStories: { _, _ in
|
||||||
|
}, dismissNotice: { _ in
|
||||||
})
|
})
|
||||||
interaction.searchTextHighightState = searchQuery
|
interaction.searchTextHighightState = searchQuery
|
||||||
self.interaction = interaction
|
self.interaction = interaction
|
||||||
|
Loading…
x
Reference in New Issue
Block a user