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
2b2d14f53f
commit
b989b55a9a
@ -6976,6 +6976,10 @@ Sorry for the inconvenience.";
|
||||
"Notifications.GroupChats" = "Group Chats";
|
||||
"Notifications.Channels" = "Channels";
|
||||
|
||||
"Notifications.PrivateChatsTitle" = "Private Chats";
|
||||
"Notifications.GroupChatsTitle" = "Group Chats";
|
||||
"Notifications.ChannelsTitle" = "Channels";
|
||||
|
||||
"Notifications.CategoryExceptions_0" = "%@ exceptions";
|
||||
"Notifications.CategoryExceptions_1" = "%@ exception";
|
||||
"Notifications.CategoryExceptions_2" = "%@ exceptions";
|
||||
|
@ -491,6 +491,7 @@ private func availablePaymentMethods(form: BotPaymentForm, current: BotCheckoutP
|
||||
|
||||
final class BotCheckoutControllerNode: ItemListControllerNode, PKPaymentAuthorizationViewControllerDelegate {
|
||||
private weak var controller: BotCheckoutController?
|
||||
private let navigationBar: NavigationBar
|
||||
private let context: AccountContext
|
||||
private let messageId: EngineMessage.Id
|
||||
private let present: (ViewController, Any?) -> Void
|
||||
@ -528,6 +529,7 @@ final class BotCheckoutControllerNode: ItemListControllerNode, PKPaymentAuthoriz
|
||||
|
||||
init(controller: BotCheckoutController?, navigationBar: NavigationBar, context: AccountContext, invoice: TelegramMediaInvoice, messageId: EngineMessage.Id, inputData: Promise<BotCheckoutController.InputData?>, present: @escaping (ViewController, Any?) -> Void, dismissAnimated: @escaping () -> Void, completed: @escaping (String, EngineMessage.Id?) -> Void) {
|
||||
self.controller = controller
|
||||
self.navigationBar = navigationBar
|
||||
self.context = context
|
||||
self.messageId = messageId
|
||||
self.present = present
|
||||
|
@ -68,6 +68,7 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
|
||||
private let topStripeNode: ASDisplayNode
|
||||
private let bottomStripeNode: ASDisplayNode
|
||||
private let highlightedBackgroundNode: ASDisplayNode
|
||||
private let maskNode: ASImageNode
|
||||
|
||||
private let imageNode: TransformImageNode
|
||||
private let titleNode: TextNode
|
||||
@ -86,6 +87,9 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
|
||||
self.bottomStripeNode = ASDisplayNode()
|
||||
self.bottomStripeNode.isLayerBacked = true
|
||||
|
||||
self.maskNode = ASImageNode()
|
||||
self.maskNode.isUserInteractionEnabled = false
|
||||
|
||||
self.imageNode = TransformImageNode()
|
||||
|
||||
self.titleNode = TextNode()
|
||||
@ -217,6 +221,29 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
|
||||
if strongSelf.bottomStripeNode.supernode == nil {
|
||||
strongSelf.insertSubnode(strongSelf.bottomStripeNode, at: 0)
|
||||
}
|
||||
if strongSelf.maskNode.supernode == nil {
|
||||
strongSelf.addSubnode(strongSelf.maskNode)
|
||||
}
|
||||
|
||||
let hasCorners = itemListHasRoundedBlockLayout(params)
|
||||
var hasTopCorners = false
|
||||
var hasBottomCorners = false
|
||||
switch neighbors.top {
|
||||
case .sameSection(false):
|
||||
strongSelf.topStripeNode.isHidden = true
|
||||
default:
|
||||
hasTopCorners = true
|
||||
strongSelf.topStripeNode.isHidden = hasCorners
|
||||
}
|
||||
switch neighbors.bottom {
|
||||
case .sameSection(false):
|
||||
break
|
||||
default:
|
||||
hasBottomCorners = true
|
||||
strongSelf.bottomStripeNode.isHidden = hasCorners
|
||||
}
|
||||
|
||||
strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil
|
||||
|
||||
strongSelf.bottomStripeNode.frame = CGRect(origin: CGPoint(x: 0.0, y: contentSize.height - separatorHeight), size: CGSize(width: params.width, height: separatorHeight))
|
||||
|
||||
@ -231,7 +258,8 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
|
||||
|
||||
strongSelf.botNameNode.frame = CGRect(origin: CGPoint(x: textFrame.minX, y: textFrame.maxY + textBotNameSpacing), size: botNameLayout.size)
|
||||
|
||||
strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -1000.0), size: CGSize(width: params.width, height: contentSize.height + 1000.0))
|
||||
strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: params.width, height: contentSize.height))
|
||||
strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0)
|
||||
strongSelf.highlightedBackgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -UIScreenPixel), size: CGSize(width: params.width, height: 44.0 + UIScreenPixel + UIScreenPixel))
|
||||
}
|
||||
})
|
||||
|
@ -80,7 +80,7 @@ final class BotCheckoutInfoController: ViewController {
|
||||
}
|
||||
|
||||
override public func loadDisplayNode() {
|
||||
self.displayNode = BotCheckoutInfoControllerNode(context: self.context, invoice: self.invoice, messageId: self.messageId, formInfo: self.initialFormInfo, focus: self.focus, theme: self.presentationData.theme, strings: self.presentationData.strings, dismiss: { [weak self] in
|
||||
self.displayNode = BotCheckoutInfoControllerNode(context: self.context, navigationBar: self.navigationBar, invoice: self.invoice, messageId: self.messageId, formInfo: self.initialFormInfo, focus: self.focus, theme: self.presentationData.theme, strings: self.presentationData.strings, dismiss: { [weak self] in
|
||||
self?.presentingViewController?.dismiss(animated: false, completion: nil)
|
||||
}, openCountrySelection: { [weak self] in
|
||||
if let strongSelf = self {
|
||||
|
@ -94,6 +94,7 @@ enum BotCheckoutInfoControllerStatus {
|
||||
|
||||
final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollViewDelegate {
|
||||
private let context: AccountContext
|
||||
private weak var navigationBar: NavigationBar?
|
||||
private let invoice: BotPaymentInvoice
|
||||
private let messageId: EngineMessage.Id
|
||||
private var focus: BotCheckoutInfoControllerFocus?
|
||||
@ -111,6 +112,8 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
|
||||
private let scrollNode: BotCheckoutInfoControllerScrollerNode
|
||||
private let itemNodes: [[BotPaymentItemNode]]
|
||||
private let leftOverlayNode: ASDisplayNode
|
||||
private let rightOverlayNode: ASDisplayNode
|
||||
|
||||
private let addressItems: BotCheckoutInfoAddressItems?
|
||||
private let nameItem: BotPaymentFieldItemNode?
|
||||
@ -125,6 +128,7 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
|
||||
init(
|
||||
context: AccountContext,
|
||||
navigationBar: NavigationBar?,
|
||||
invoice: BotPaymentInvoice,
|
||||
messageId: EngineMessage.Id,
|
||||
formInfo: BotPaymentRequestedInfo,
|
||||
@ -138,6 +142,7 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
present: @escaping (ViewController, Any?) -> Void
|
||||
) {
|
||||
self.context = context
|
||||
self.navigationBar = navigationBar
|
||||
self.invoice = invoice
|
||||
self.messageId = messageId
|
||||
self.formInfo = formInfo
|
||||
@ -152,6 +157,10 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
self.strings = strings
|
||||
|
||||
self.scrollNode = BotCheckoutInfoControllerScrollerNode()
|
||||
self.leftOverlayNode = ASDisplayNode()
|
||||
self.leftOverlayNode.isUserInteractionEnabled = false
|
||||
self.rightOverlayNode = ASDisplayNode()
|
||||
self.rightOverlayNode.isUserInteractionEnabled = false
|
||||
|
||||
var itemNodes: [[BotPaymentItemNode]] = []
|
||||
|
||||
@ -227,6 +236,9 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
super.init()
|
||||
|
||||
self.backgroundColor = self.theme.list.blocksBackgroundColor
|
||||
self.leftOverlayNode.backgroundColor = self.theme.list.blocksBackgroundColor
|
||||
self.rightOverlayNode.backgroundColor = self.theme.list.blocksBackgroundColor
|
||||
|
||||
self.scrollNode.backgroundColor = nil
|
||||
self.scrollNode.isOpaque = false
|
||||
self.scrollNode.view.alwaysBounceVertical = true
|
||||
@ -319,6 +331,12 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
self.verifyDisposable.dispose()
|
||||
}
|
||||
|
||||
override func didLoad() {
|
||||
super.didLoad()
|
||||
|
||||
self.navigationBar?.updateBackgroundAlpha(0.0, transition: .immediate)
|
||||
}
|
||||
|
||||
func updateCountry(_ iso2: String) {
|
||||
if self.formInfo.shippingAddress?.countryIso2 != iso2, let name = AuthorizationSequenceCountrySelectionController.lookupCountryNameById(iso2, strings: self.strings) {
|
||||
let shippingAddress: BotPaymentShippingAddress
|
||||
@ -435,6 +453,12 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
}
|
||||
}
|
||||
|
||||
let inset = max(16.0, floor((layout.size.width - 674.0) / 2.0))
|
||||
var sideInset: CGFloat = 0.0
|
||||
if layout.size.width >= 375.0 {
|
||||
sideInset = inset
|
||||
}
|
||||
|
||||
for items in self.itemNodes {
|
||||
if !items.isEmpty && items[0] is BotPaymentHeaderItemNode {
|
||||
contentHeight += 24.0
|
||||
@ -444,7 +468,7 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
|
||||
for i in 0 ..< items.count {
|
||||
let item = items[i]
|
||||
let itemHeight = item.updateLayout(theme: self.theme, width: layout.size.width, measuredInset: commonInset, previousItemNode: i == 0 ? nil : items[i - 1], nextItemNode: i == (items.count - 1) ? nil : items[i + 1], transition: transition)
|
||||
let itemHeight = item.updateLayout(theme: self.theme, width: layout.size.width, sideInset: sideInset, measuredInset: commonInset, previousItemNode: i == 0 ? nil : items[i - 1], nextItemNode: i == (items.count - 1) ? nil : items[i + 1], transition: transition)
|
||||
transition.updateFrame(node: item, frame: CGRect(origin: CGPoint(x: 0.0, y: contentHeight), size: CGSize(width: layout.size.width, height: itemHeight)))
|
||||
contentHeight += itemHeight
|
||||
}
|
||||
@ -462,6 +486,16 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
self.scrollNode.view.scrollIndicatorInsets = insets
|
||||
self.scrollNode.view.ignoreUpdateBounds = false
|
||||
|
||||
if self.rightOverlayNode.supernode == nil {
|
||||
self.insertSubnode(self.rightOverlayNode, aboveSubnode: self.scrollNode)
|
||||
}
|
||||
if self.leftOverlayNode.supernode == nil {
|
||||
self.insertSubnode(self.leftOverlayNode, aboveSubnode: self.scrollNode)
|
||||
}
|
||||
|
||||
self.leftOverlayNode.frame = CGRect(x: 0.0, y: 0.0, width: sideInset, height: layout.size.height)
|
||||
self.rightOverlayNode.frame = CGRect(x: layout.size.width - sideInset, y: 0.0, width: sideInset, height: layout.size.height)
|
||||
|
||||
if let focus = self.focus {
|
||||
var focusItem: ASDisplayNode?
|
||||
switch focus {
|
||||
@ -525,6 +559,11 @@ final class BotCheckoutInfoControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
})
|
||||
}
|
||||
|
||||
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||
let value = scrollView.contentOffset.y + scrollView.contentInset.top
|
||||
self.navigationBar?.updateBackgroundAlpha(min(30.0, value) / 30.0, transition: .immediate)
|
||||
}
|
||||
|
||||
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
||||
self.focus = nil
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ final class BotCheckoutNativeCardEntryController: ViewController {
|
||||
}
|
||||
|
||||
override public func loadDisplayNode() {
|
||||
self.displayNode = BotCheckoutNativeCardEntryControllerNode(context: self.context, provider: self.provider, theme: self.presentationData.theme, strings: self.presentationData.strings, present: { [weak self] c, a in
|
||||
self.displayNode = BotCheckoutNativeCardEntryControllerNode(context: self.context, navigationBar: self.navigationBar, provider: self.provider, theme: self.presentationData.theme, strings: self.presentationData.strings, present: { [weak self] c, a in
|
||||
self?.present(c, in: .window(.root), with: a)
|
||||
}, dismiss: { [weak self] in
|
||||
self?.presentingViewController?.dismiss(animated: false, completion: nil)
|
||||
|
@ -43,6 +43,7 @@ private final class BotCheckoutNativeCardEntryScrollerNode: ASDisplayNode {
|
||||
|
||||
final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode, UIScrollViewDelegate {
|
||||
private let context: AccountContext
|
||||
private weak var navigationBar: NavigationBar?
|
||||
private let provider: BotCheckoutNativeCardEntryController.Provider
|
||||
|
||||
private let present: (ViewController, Any?) -> Void
|
||||
@ -58,6 +59,8 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
|
||||
private let scrollNode: BotCheckoutNativeCardEntryScrollerNode
|
||||
private let itemNodes: [[BotPaymentItemNode]]
|
||||
private let leftOverlayNode: ASDisplayNode
|
||||
private let rightOverlayNode: ASDisplayNode
|
||||
|
||||
private let cardItem: BotPaymentCardInputItemNode
|
||||
private let cardholderItem: BotPaymentFieldItemNode?
|
||||
@ -74,8 +77,9 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
|
||||
private var dataTask: URLSessionDataTask?
|
||||
|
||||
init(context: AccountContext, provider: BotCheckoutNativeCardEntryController.Provider, theme: PresentationTheme, strings: PresentationStrings, present: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void, openCountrySelection: @escaping () -> Void, updateStatus: @escaping (BotCheckoutNativeCardEntryStatus) -> Void, completion: @escaping (BotCheckoutPaymentMethod) -> Void) {
|
||||
init(context: AccountContext, navigationBar: NavigationBar?, provider: BotCheckoutNativeCardEntryController.Provider, theme: PresentationTheme, strings: PresentationStrings, present: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void, openCountrySelection: @escaping () -> Void, updateStatus: @escaping (BotCheckoutNativeCardEntryStatus) -> Void, completion: @escaping (BotCheckoutPaymentMethod) -> Void) {
|
||||
self.context = context
|
||||
self.navigationBar = navigationBar
|
||||
self.provider = provider
|
||||
|
||||
self.present = present
|
||||
@ -88,6 +92,10 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
self.strings = strings
|
||||
|
||||
self.scrollNode = BotCheckoutNativeCardEntryScrollerNode()
|
||||
self.leftOverlayNode = ASDisplayNode()
|
||||
self.leftOverlayNode.isUserInteractionEnabled = false
|
||||
self.rightOverlayNode = ASDisplayNode()
|
||||
self.rightOverlayNode.isUserInteractionEnabled = false
|
||||
|
||||
var itemNodes: [[BotPaymentItemNode]] = []
|
||||
|
||||
@ -95,7 +103,7 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
var openCountrySelectionImpl: (() -> Void)?
|
||||
|
||||
self.cardItem = BotPaymentCardInputItemNode()
|
||||
cardItem.updated = { data in
|
||||
self.cardItem.updated = { data in
|
||||
cardUpdatedImpl?(data)
|
||||
}
|
||||
itemNodes.append([BotPaymentHeaderItemNode(text: strings.Checkout_NewCard_PaymentCard), self.cardItem])
|
||||
@ -164,6 +172,9 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
super.init()
|
||||
|
||||
self.backgroundColor = self.theme.list.blocksBackgroundColor
|
||||
self.leftOverlayNode.backgroundColor = self.theme.list.blocksBackgroundColor
|
||||
self.rightOverlayNode.backgroundColor = self.theme.list.blocksBackgroundColor
|
||||
|
||||
self.scrollNode.backgroundColor = nil
|
||||
self.scrollNode.isOpaque = false
|
||||
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
|
||||
@ -216,7 +227,7 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
}
|
||||
}
|
||||
|
||||
cardItem.completed = { [weak self] in
|
||||
self.cardItem.completed = { [weak self] in
|
||||
self?.cardholderItem?.activateInput()
|
||||
}
|
||||
|
||||
@ -228,6 +239,12 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
self.dataTask?.cancel()
|
||||
}
|
||||
|
||||
override func didLoad() {
|
||||
super.didLoad()
|
||||
|
||||
self.navigationBar?.updateBackgroundAlpha(0.0, transition: .immediate)
|
||||
}
|
||||
|
||||
func updateCountry(_ iso2: String) {
|
||||
if let name = AuthorizationSequenceCountrySelectionController.lookupCountryNameById(iso2, strings: self.strings) {
|
||||
self.currentCountryIso2 = iso2
|
||||
@ -447,6 +464,12 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
}
|
||||
}
|
||||
|
||||
let inset = max(16.0, floor((layout.size.width - 674.0) / 2.0))
|
||||
var sideInset: CGFloat = 0.0
|
||||
if layout.size.width >= 375.0 {
|
||||
sideInset = inset
|
||||
}
|
||||
|
||||
for items in self.itemNodes {
|
||||
if !items.isEmpty && items[0] is BotPaymentHeaderItemNode {
|
||||
contentHeight += 24.0
|
||||
@ -456,7 +479,7 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
|
||||
for i in 0 ..< items.count {
|
||||
let item = items[i]
|
||||
let itemHeight = item.updateLayout(theme: self.theme, width: layout.size.width, measuredInset: commonInset, previousItemNode: i == 0 ? nil : items[i - 1], nextItemNode: i == (items.count - 1) ? nil : items[i + 1], transition: transition)
|
||||
let itemHeight = item.updateLayout(theme: self.theme, width: layout.size.width, sideInset: sideInset, measuredInset: commonInset, previousItemNode: i == 0 ? nil : items[i - 1], nextItemNode: i == (items.count - 1) ? nil : items[i + 1], transition: transition)
|
||||
transition.updateFrame(node: item, frame: CGRect(origin: CGPoint(x: 0.0, y: contentHeight), size: CGSize(width: layout.size.width, height: itemHeight)))
|
||||
contentHeight += itemHeight
|
||||
}
|
||||
@ -482,6 +505,16 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
}
|
||||
self.scrollNode.view.ignoreUpdateBounds = false
|
||||
|
||||
if self.rightOverlayNode.supernode == nil {
|
||||
self.insertSubnode(self.rightOverlayNode, aboveSubnode: self.scrollNode)
|
||||
}
|
||||
if self.leftOverlayNode.supernode == nil {
|
||||
self.insertSubnode(self.leftOverlayNode, aboveSubnode: self.scrollNode)
|
||||
}
|
||||
|
||||
self.leftOverlayNode.frame = CGRect(x: 0.0, y: 0.0, width: sideInset, height: layout.size.height)
|
||||
self.rightOverlayNode.frame = CGRect(x: layout.size.width - sideInset, y: 0.0, width: sideInset, height: layout.size.height)
|
||||
|
||||
if let previousLayout = previousLayout {
|
||||
var previousInsets = previousLayout.0.insets(options: [.input])
|
||||
previousInsets.top += max(previousLayout.1, previousLayout.0.insets(options: [.statusBar]).top)
|
||||
@ -514,4 +547,10 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
|
||||
func activate() {
|
||||
self.cardItem.activateInput()
|
||||
}
|
||||
|
||||
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||
let value = scrollView.contentOffset.y + scrollView.contentInset.top
|
||||
self.navigationBar?.updateBackgroundAlpha(min(30.0, value) / 30.0, transition: .immediate)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ class BotCheckoutPriceItemNode: ListViewItemNode {
|
||||
let backgroundNode: ASDisplayNode
|
||||
let separatorNode: ASDisplayNode
|
||||
let bottomSeparatorNode: ASDisplayNode
|
||||
private let maskNode: ASImageNode
|
||||
|
||||
private var placeholderNode: ShimmerEffectNode?
|
||||
private var absoluteLocation: (CGRect, CGSize)?
|
||||
@ -109,6 +110,9 @@ class BotCheckoutPriceItemNode: ListViewItemNode {
|
||||
self.separatorNode = ASDisplayNode()
|
||||
self.bottomSeparatorNode = ASDisplayNode()
|
||||
|
||||
self.maskNode = ASImageNode()
|
||||
self.maskNode.isUserInteractionEnabled = false
|
||||
|
||||
super.init(layerBacked: false, dynamicBounce: false)
|
||||
|
||||
self.addSubnode(self.backgroundNode)
|
||||
@ -180,23 +184,39 @@ class BotCheckoutPriceItemNode: ListViewItemNode {
|
||||
|
||||
let leftInset: CGFloat = 16.0 + params.leftInset
|
||||
|
||||
strongSelf.separatorNode.isHidden = !item.hasSeparator
|
||||
strongSelf.separatorNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor
|
||||
strongSelf.separatorNode.frame = CGRect(origin: CGPoint(x: leftInset, y: 0.0), size: CGSize(width: params.width - leftInset, height: UIScreenPixel))
|
||||
|
||||
if strongSelf.maskNode.supernode == nil {
|
||||
strongSelf.addSubnode(strongSelf.maskNode)
|
||||
}
|
||||
|
||||
let hasCorners = itemListHasRoundedBlockLayout(params)
|
||||
var hasTopCorners = false
|
||||
var hasBottomCorners = false
|
||||
switch neighbors.top {
|
||||
case .sameSection(false):
|
||||
break
|
||||
default:
|
||||
hasTopCorners = true
|
||||
}
|
||||
switch neighbors.bottom {
|
||||
case .otherSection, .none:
|
||||
case .sameSection(false):
|
||||
strongSelf.bottomSeparatorNode.isHidden = false
|
||||
default:
|
||||
strongSelf.bottomSeparatorNode.isHidden = !item.isFinal
|
||||
hasBottomCorners = true
|
||||
strongSelf.bottomSeparatorNode.isHidden = !item.isFinal || hasCorners
|
||||
}
|
||||
|
||||
|
||||
strongSelf.separatorNode.isHidden = !item.hasSeparator || (hasCorners && hasTopCorners)
|
||||
strongSelf.separatorNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor
|
||||
strongSelf.separatorNode.frame = CGRect(origin: CGPoint(x: leftInset, y: 0.0), size: CGSize(width: params.width - leftInset, height: UIScreenPixel))
|
||||
|
||||
strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil
|
||||
|
||||
strongSelf.bottomSeparatorNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor
|
||||
strongSelf.bottomSeparatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: contentSize.height), size: CGSize(width: params.width, height: UIScreenPixel))
|
||||
|
||||
strongSelf.backgroundNode.backgroundColor = item.theme.list.itemBlocksBackgroundColor
|
||||
strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: params.width, height: contentSize.height))
|
||||
|
||||
strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0)
|
||||
strongSelf.titleNode.frame = CGRect(origin: CGPoint(x: leftInset, y: verticalOffset + floor((naturalContentHeight - titleLayout.size.height) / 2.0)), size: titleLayout.size)
|
||||
strongSelf.labelNode.frame = CGRect(origin: CGPoint(x: params.width - rightInset - labelLayout.size.width, y: verticalOffset + floor((naturalContentHeight - labelLayout.size.height) / 2.0)), size: labelLayout.size)
|
||||
|
||||
|
@ -467,6 +467,7 @@ private final class FormatterImpl: NSObject, UITextFieldDelegate {
|
||||
|
||||
class BotCheckoutTipItemNode: ListViewItemNode, UITextFieldDelegate {
|
||||
private let backgroundNode: ASDisplayNode
|
||||
private let maskNode: ASImageNode
|
||||
let titleNode: TextNode
|
||||
let labelNode: TextNode
|
||||
let tipMeasurementNode: ImmediateTextNode
|
||||
@ -505,6 +506,9 @@ class BotCheckoutTipItemNode: ListViewItemNode, UITextFieldDelegate {
|
||||
self.scrollNode.view.contentInsetAdjustmentBehavior = .never
|
||||
}
|
||||
|
||||
self.maskNode = ASImageNode()
|
||||
self.maskNode.isUserInteractionEnabled = false
|
||||
|
||||
super.init(layerBacked: false, dynamicBounce: false)
|
||||
|
||||
self.addSubnode(self.backgroundNode)
|
||||
|
@ -63,20 +63,20 @@ final class BotPaymentActionItemNode: BotPaymentItemNode {
|
||||
return 0.0
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.highlightedBackgroundNode.backgroundColor = theme.list.itemHighlightedBackgroundColor
|
||||
self.titleNode.attributedText = NSAttributedString(string: self.title, font: titleFont, textColor: theme.list.itemAccentColor)
|
||||
}
|
||||
|
||||
self.buttonNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: width, height: 44.0))
|
||||
self.buttonNode.frame = CGRect(origin: CGPoint(x: sideInset, y: 0.0), size: CGSize(width: width - sideInset * 2.0, height: 44.0))
|
||||
transition.updateFrame(node: self.highlightedBackgroundNode, frame: CGRect(origin: CGPoint(), size: CGSize(width: width, height: 44.0 + UIScreenPixel)))
|
||||
|
||||
let leftInset: CGFloat = 16.0
|
||||
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 32.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset, y: 11.0), size: titleSize))
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 32.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: 11.0), size: titleSize))
|
||||
|
||||
return 44.0
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ final class BotPaymentCardInputItemNode: BotPaymentItemNode, STPPaymentCardTextF
|
||||
return 0.0
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
|
||||
@ -45,7 +45,7 @@ final class BotPaymentCardInputItemNode: BotPaymentItemNode, STPPaymentCardTextF
|
||||
self.cardField.keyboardAppearance = theme.rootController.keyboardColor.keyboardAppearance
|
||||
}
|
||||
|
||||
self.cardField.frame = CGRect(origin: CGPoint(x: 5.0, y: 0.0), size: CGSize(width: width - 10.0, height: 44.0))
|
||||
self.cardField.frame = CGRect(origin: CGPoint(x: 5.0 + sideInset, y: 0.0), size: CGSize(width: width - 10.0 - sideInset * 2.0, height: 44.0))
|
||||
|
||||
return 44.0
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ class BotPaymentDisclosureItemNode: BotPaymentItemNode {
|
||||
}
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.highlightedBackgroundNode.backgroundColor = theme.list.itemHighlightedBackgroundColor
|
||||
@ -102,13 +102,13 @@ class BotPaymentDisclosureItemNode: BotPaymentItemNode {
|
||||
}
|
||||
}
|
||||
|
||||
self.buttonNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: width, height: 44.0))
|
||||
self.buttonNode.frame = CGRect(origin: CGPoint(x: sideInset, y: 0.0), size: CGSize(width: width - sideInset * 2.0, height: 44.0))
|
||||
transition.updateFrame(node: self.highlightedBackgroundNode, frame: CGRect(origin: CGPoint(), size: CGSize(width: width, height: 44.0 + UIScreenPixel)))
|
||||
|
||||
let leftInset: CGFloat = 16.0
|
||||
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 70.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset, y: 11.0), size: titleSize))
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 70.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: 11.0), size: titleSize))
|
||||
|
||||
var textInset = leftInset
|
||||
if !titleSize.width.isZero {
|
||||
@ -116,8 +116,8 @@ class BotPaymentDisclosureItemNode: BotPaymentItemNode {
|
||||
}
|
||||
textInset = max(measuredInset, textInset)
|
||||
|
||||
let textSize = self.textNode.measure(CGSize(width: width - measuredInset - 8.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: textInset, y: 11.0), size: textSize))
|
||||
let textSize = self.textNode.measure(CGSize(width: width - measuredInset - 8.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: textInset + sideInset, y: 11.0), size: textSize))
|
||||
|
||||
return 44.0
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ final class BotPaymentFieldItemNode: BotPaymentItemNode, UITextFieldDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.titleNode.attributedText = NSAttributedString(string: self.title, font: titleFont, textColor: theme.list.itemPrimaryTextColor)
|
||||
@ -106,9 +106,9 @@ final class BotPaymentFieldItemNode: BotPaymentItemNode, UITextFieldDelegate {
|
||||
|
||||
let leftInset: CGFloat = 16.0
|
||||
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 70.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 70.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset, y: 11.0), size: titleSize))
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: 11.0), size: titleSize))
|
||||
|
||||
var textInset = leftInset
|
||||
if !titleSize.width.isZero {
|
||||
@ -117,7 +117,7 @@ final class BotPaymentFieldItemNode: BotPaymentItemNode, UITextFieldDelegate {
|
||||
|
||||
textInset = max(measuredInset, textInset)
|
||||
|
||||
transition.updateFrame(node: self.textField, frame: CGRect(origin: CGPoint(x: textInset, y: 0.0), size: CGSize(width: max(1.0, width - textInset - 8.0), height: 40.0)))
|
||||
transition.updateFrame(node: self.textField, frame: CGRect(origin: CGPoint(x: textInset + sideInset, y: 0.0), size: CGSize(width: max(1.0, width - textInset - 8.0), height: 40.0)))
|
||||
|
||||
return 44.0
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ final class BotPaymentHeaderItemNode: BotPaymentItemNode {
|
||||
self.addSubnode(self.textNode)
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.textNode.attributedText = NSAttributedString(string: self.text, font: titleFont, textColor: theme.list.sectionHeaderTextColor)
|
||||
@ -30,9 +30,9 @@ final class BotPaymentHeaderItemNode: BotPaymentItemNode {
|
||||
|
||||
let leftInset: CGFloat = 16.0
|
||||
|
||||
let textSize = self.textNode.measure(CGSize(width: width - leftInset - 10.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
let textSize = self.textNode.measure(CGSize(width: width - leftInset - 10.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
|
||||
transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: leftInset, y: 7.0), size: textSize))
|
||||
transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: 7.0), size: textSize))
|
||||
|
||||
return 30.0
|
||||
}
|
||||
|
@ -4,12 +4,17 @@ import AsyncDisplayKit
|
||||
import Display
|
||||
import TelegramPresentationData
|
||||
|
||||
private func botPaymentListHasRoundedBlockLayout(_ width: CGFloat) -> Bool {
|
||||
return width >= 375.0
|
||||
}
|
||||
|
||||
class BotPaymentItemNode: ASDisplayNode {
|
||||
private let needsBackground: Bool
|
||||
|
||||
let backgroundNode: ASDisplayNode
|
||||
private let topSeparatorNode: ASDisplayNode
|
||||
private let bottomSeparatorNode: ASDisplayNode
|
||||
private let maskNode: ASImageNode
|
||||
|
||||
private var theme: PresentationTheme?
|
||||
|
||||
@ -20,6 +25,9 @@ class BotPaymentItemNode: ASDisplayNode {
|
||||
self.topSeparatorNode = ASDisplayNode()
|
||||
self.bottomSeparatorNode = ASDisplayNode()
|
||||
|
||||
self.maskNode = ASImageNode()
|
||||
self.maskNode.isUserInteractionEnabled = false
|
||||
|
||||
super.init()
|
||||
|
||||
if needsBackground {
|
||||
@ -33,7 +41,7 @@ class BotPaymentItemNode: ASDisplayNode {
|
||||
return 0.0
|
||||
}
|
||||
|
||||
final func updateLayout(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, previousItemNode: BotPaymentItemNode?, nextItemNode: BotPaymentItemNode?, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
final func updateLayout(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, previousItemNode: BotPaymentItemNode?, nextItemNode: BotPaymentItemNode?, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.backgroundNode.backgroundColor = theme.list.itemBlocksBackgroundColor
|
||||
@ -41,28 +49,43 @@ class BotPaymentItemNode: ASDisplayNode {
|
||||
self.bottomSeparatorNode.backgroundColor = theme.list.itemBlocksSeparatorColor
|
||||
}
|
||||
|
||||
let height = self.layoutContents(theme: theme, width: width, measuredInset: measuredInset, transition: transition)
|
||||
let height = self.layoutContents(theme: theme, width: width, sideInset: sideInset, measuredInset: measuredInset, transition: transition)
|
||||
|
||||
var topSeparatorInset: CGFloat = 0.0
|
||||
|
||||
if self.maskNode.supernode == nil {
|
||||
self.addSubnode(self.maskNode)
|
||||
}
|
||||
|
||||
let hasCorners = botPaymentListHasRoundedBlockLayout(width)
|
||||
var hasTopCorners = false
|
||||
var hasBottomCorners = false
|
||||
|
||||
if let previousItemNode = previousItemNode, previousItemNode.needsBackground {
|
||||
topSeparatorInset = 16.0
|
||||
} else {
|
||||
hasTopCorners = true
|
||||
self.topSeparatorNode.isHidden = hasCorners
|
||||
}
|
||||
if let nextItemNode = nextItemNode, nextItemNode.needsBackground {
|
||||
self.bottomSeparatorNode.isHidden = true
|
||||
} else {
|
||||
hasBottomCorners = true
|
||||
self.bottomSeparatorNode.isHidden = hasCorners
|
||||
}
|
||||
|
||||
if let nextItemNode = nextItemNode, nextItemNode.needsBackground {
|
||||
bottomSeparatorNode.isHidden = true
|
||||
} else {
|
||||
bottomSeparatorNode.isHidden = false
|
||||
}
|
||||
self.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(theme, top: hasTopCorners, bottom: hasBottomCorners) : nil
|
||||
|
||||
transition.updateFrame(node: self.backgroundNode, frame: CGRect(origin: CGPoint(), size: CGSize(width: width, height: height)))
|
||||
transition.updateFrame(node: self.topSeparatorNode, frame: CGRect(origin: CGPoint(x: topSeparatorInset, y: 0.0), size: CGSize(width: width - topSeparatorInset, height: UIScreenPixel)))
|
||||
transition.updateFrame(node: self.bottomSeparatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: height - UIScreenPixel), size: CGSize(width: width, height: UIScreenPixel)))
|
||||
transition.updateFrame(node: self.maskNode, frame: self.backgroundNode.frame.insetBy(dx: sideInset, dy: 0.0))
|
||||
|
||||
transition.updateFrame(node: self.topSeparatorNode, frame: CGRect(origin: CGPoint(x: topSeparatorInset + sideInset, y: 0.0), size: CGSize(width: width - topSeparatorInset - sideInset - sideInset, height: UIScreenPixel)))
|
||||
transition.updateFrame(node: self.bottomSeparatorNode, frame: CGRect(origin: CGPoint(x: sideInset, y: height - UIScreenPixel), size: CGSize(width: width - sideInset - sideInset, height: UIScreenPixel)))
|
||||
|
||||
return height
|
||||
}
|
||||
|
||||
func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
return 0.0
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ final class BotPaymentSwitchItemNode: BotPaymentItemNode {
|
||||
}
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.titleNode.attributedText = NSAttributedString(string: self.title, font: titleFont, textColor: theme.list.itemPrimaryTextColor)
|
||||
@ -72,12 +72,12 @@ final class BotPaymentSwitchItemNode: BotPaymentItemNode {
|
||||
|
||||
let leftInset: CGFloat = 16.0
|
||||
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 70.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
let titleSize = self.titleNode.measure(CGSize(width: width - leftInset - 70.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset, y: 11.0), size: titleSize))
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: 11.0), size: titleSize))
|
||||
|
||||
let switchSize = self.switchNode.measure(CGSize(width: 100.0, height: 100.0))
|
||||
let switchFrame = CGRect(origin: CGPoint(x: width - switchSize.width - 15.0, y: 6.0), size: switchSize)
|
||||
let switchFrame = CGRect(origin: CGPoint(x: width - switchSize.width - 15.0 - sideInset, y: 6.0), size: switchSize)
|
||||
transition.updateFrame(node: self.switchNode, frame: switchFrame)
|
||||
transition.updateFrame(node: self.buttonNode, frame: switchFrame)
|
||||
|
||||
|
@ -22,7 +22,7 @@ final class BotPaymentTextItemNode: BotPaymentItemNode {
|
||||
self.addSubnode(self.textNode)
|
||||
}
|
||||
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
override func layoutContents(theme: PresentationTheme, width: CGFloat, sideInset: CGFloat, measuredInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
|
||||
if self.theme !== theme {
|
||||
self.theme = theme
|
||||
self.textNode.attributedText = NSAttributedString(string: self.text, font: textFont, textColor: theme.list.sectionHeaderTextColor)
|
||||
@ -30,9 +30,9 @@ final class BotPaymentTextItemNode: BotPaymentItemNode {
|
||||
|
||||
let leftInset: CGFloat = 16.0
|
||||
|
||||
let textSize = self.textNode.measure(CGSize(width: width - leftInset - 10.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
let textSize = self.textNode.measure(CGSize(width: width - leftInset - 10.0 - sideInset * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||
|
||||
transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: leftInset, y: 7.0), size: textSize))
|
||||
transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: leftInset + sideInset, y: 7.0), size: textSize))
|
||||
|
||||
return textSize.height + 7.0 + 7.0
|
||||
}
|
||||
|
@ -144,6 +144,7 @@ public class ItemListDisclosureItemNode: ListViewItemNode, ItemListItemNode {
|
||||
self.backgroundNode.backgroundColor = .white
|
||||
|
||||
self.maskNode = ASImageNode()
|
||||
self.maskNode.isUserInteractionEnabled = false
|
||||
|
||||
self.topStripeNode = ASDisplayNode()
|
||||
self.topStripeNode.isLayerBacked = true
|
||||
|
@ -271,7 +271,7 @@ private func notificationsPeerCategoryEntries(category: NotificationsPeerCategor
|
||||
entries.append(.sound(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsSound, localizedPeerNotificationSoundString(strings: presentationData.strings, sound: filteredGlobalSound(notificationSettings.sound)), filteredGlobalSound(notificationSettings.sound)))
|
||||
}
|
||||
|
||||
entries.append(.exceptionsHeader(presentationData.theme, presentationData.strings.Notifications_MessageNotifications.uppercased()))
|
||||
entries.append(.exceptionsHeader(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsExceptions.uppercased()))
|
||||
entries.append(.addException(presentationData.theme, presentationData.strings.Notification_Exceptions_AddException))
|
||||
|
||||
|
||||
@ -732,7 +732,16 @@ public func notificationsPeerCategoryController(context: AccountContext, categor
|
||||
rightNavigationButton = nil
|
||||
}
|
||||
|
||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.Notifications_Title), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true)
|
||||
let title: String
|
||||
switch category {
|
||||
case .privateChat:
|
||||
title = presentationData.strings.Notifications_PrivateChatsTitle
|
||||
case .group:
|
||||
title = presentationData.strings.Notifications_GroupChatsTitle
|
||||
case .channel:
|
||||
title = presentationData.strings.Notifications_ChannelsTitle
|
||||
}
|
||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(title), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true)
|
||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: entries, style: .blocks, ensureVisibleItemTag: focusOnItemTag, initialScrollToItem: scrollToItem)
|
||||
|
||||
return (controllerState, (listState, arguments))
|
||||
|
@ -138,6 +138,15 @@ func iconForSession(_ session: RecentAccountSession) -> (UIImage?, String?) {
|
||||
if platform.contains("android") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/Android"), "device_android")
|
||||
}
|
||||
if device.contains("iphone") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/iPhone"), nil)
|
||||
}
|
||||
if device.contains("ipad") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/iPad"), nil)
|
||||
}
|
||||
if (platform.contains("macos") || systemVersion.contains("macos")) && device.contains("mac") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/Mac"), nil)
|
||||
}
|
||||
if platform.contains("ios") || platform.contains("macos") || systemVersion.contains("macos") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/iOS"), nil)
|
||||
}
|
||||
@ -278,7 +287,12 @@ class ItemListRecentSessionItemNode: ItemListRevealOptionsItemNode {
|
||||
|
||||
let rightInset: CGFloat = params.rightInset
|
||||
|
||||
titleAttributedString = NSAttributedString(string: "\(item.session.appName) \(item.session.appVersion)", font: titleFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor)
|
||||
var appVersion = item.session.appVersion
|
||||
appVersion = appVersion.replacingOccurrences(of: "APPSTORE", with: "").replacingOccurrences(of: "BETA", with: "Beta").trimmingTrailingSpaces()
|
||||
if let openingRoundBraceRange = appVersion.range(of: " ("), let closingRoundBraceRange = appVersion.range(of: ")") {
|
||||
appVersion = appVersion.replacingCharacters(in: openingRoundBraceRange.lowerBound ..< closingRoundBraceRange.upperBound, with: "")
|
||||
}
|
||||
titleAttributedString = NSAttributedString(string: "\(item.session.appName) \(appVersion)", font: titleFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor)
|
||||
|
||||
var deviceString = ""
|
||||
if !item.session.deviceModel.isEmpty {
|
||||
@ -291,14 +305,7 @@ class ItemListRecentSessionItemNode: ItemListRevealOptionsItemNode {
|
||||
}
|
||||
deviceString += item.session.platform
|
||||
}
|
||||
|
||||
if !item.session.systemVersion.isEmpty {
|
||||
if !deviceString.isEmpty {
|
||||
deviceString += ", "
|
||||
}
|
||||
deviceString += item.session.systemVersion
|
||||
}
|
||||
|
||||
|
||||
var updatedIcon: UIImage?
|
||||
if item.session != currentItem?.session {
|
||||
updatedIcon = iconForSession(item.session).0
|
||||
|
@ -250,7 +250,10 @@ private class RecentSessionScreenNode: ViewControllerTracingNode, UIScrollViewDe
|
||||
switch subject {
|
||||
case let .session(session):
|
||||
self.terminateButton.title = self.presentationData.strings.AuthSessions_View_TerminateSession
|
||||
title = "\(session.appName) \(session.appVersion)"
|
||||
var appVersion = session.appVersion
|
||||
appVersion = appVersion.replacingOccurrences(of: "APPSTORE", with: "").replacingOccurrences(of: "BETA", with: "Beta").trimmingTrailingSpaces()
|
||||
|
||||
title = "\(session.appName) \(appVersion)"
|
||||
if session.isCurrent {
|
||||
subtitle = presentationData.strings.Presence_online
|
||||
subtitleActive = true
|
||||
|
12
submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/Contents.json
vendored
Normal file
12
submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "mac_30.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
135
submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/mac_30.pdf
vendored
Normal file
135
submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/mac_30.pdf
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.478431 1.000000 scn
|
||||
0.000000 45.119995 m
|
||||
0.000000 54.528881 0.000000 59.233322 1.831091 62.827042 c
|
||||
3.441763 65.988159 6.011837 68.558235 9.172960 70.168907 c
|
||||
12.766678 72.000000 17.471119 72.000000 26.880003 72.000000 c
|
||||
45.119995 72.000000 l
|
||||
54.528881 72.000000 59.233322 72.000000 62.827042 70.168907 c
|
||||
65.988167 68.558235 68.558235 65.988159 70.168907 62.827042 c
|
||||
72.000000 59.233322 72.000000 54.528881 72.000000 45.119995 c
|
||||
72.000000 26.880005 l
|
||||
72.000000 17.471119 72.000000 12.766678 70.168907 9.172958 c
|
||||
68.558235 6.011833 65.988167 3.441765 62.827042 1.831093 c
|
||||
59.233322 0.000000 54.528881 0.000000 45.119999 0.000000 c
|
||||
26.880005 0.000000 l
|
||||
17.471119 0.000000 12.766678 0.000000 9.172960 1.831093 c
|
||||
6.011837 3.441765 3.441763 6.011833 1.831091 9.172958 c
|
||||
0.000000 12.766678 0.000000 17.471119 0.000000 26.880001 c
|
||||
0.000000 45.119995 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.800003 16.799911 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
17.280003 38.400082 m
|
||||
17.187492 38.400082 l
|
||||
15.922336 38.400127 14.830906 38.400166 13.931933 38.326714 c
|
||||
12.983105 38.249191 12.039380 38.078033 11.131269 37.615330 c
|
||||
9.776502 36.925041 8.675042 35.823582 7.984754 34.468811 c
|
||||
7.522048 33.560703 7.350889 32.616978 7.273367 31.668148 c
|
||||
7.199918 30.769175 7.199955 29.677742 7.199998 28.412586 c
|
||||
7.200000 28.320076 l
|
||||
7.200000 4.800079 l
|
||||
1.200000 4.800079 l
|
||||
0.537258 4.800079 0.000000 4.262821 0.000000 3.600079 c
|
||||
0.000000 1.611855 1.611774 0.000080 3.599999 0.000080 c
|
||||
7.200000 0.000080 l
|
||||
9.600000 0.000080 l
|
||||
52.800003 0.000080 l
|
||||
55.200005 0.000080 l
|
||||
58.800003 0.000080 l
|
||||
60.788227 0.000080 62.400005 1.611855 62.400005 3.600079 c
|
||||
62.400005 4.262821 61.862743 4.800079 61.200001 4.800079 c
|
||||
55.200005 4.800079 l
|
||||
55.200005 28.320080 l
|
||||
55.200005 28.412533 l
|
||||
55.200050 29.677713 55.200089 30.769163 55.126637 31.668148 c
|
||||
55.049114 32.616978 54.877956 33.560703 54.415253 34.468811 c
|
||||
53.724964 35.823582 52.623501 36.925041 51.268734 37.615330 c
|
||||
50.360622 38.078033 49.416897 38.249191 48.468067 38.326714 c
|
||||
47.569096 38.400166 46.477661 38.400127 45.212505 38.400082 c
|
||||
45.119995 38.400082 l
|
||||
17.280003 38.400082 l
|
||||
h
|
||||
50.400005 4.800079 m
|
||||
50.400005 28.320080 l
|
||||
50.400005 29.703808 50.398136 30.597267 50.342579 31.277275 c
|
||||
50.289310 31.929268 50.198883 32.170994 50.138420 32.289658 c
|
||||
49.908325 32.741249 49.541168 33.108402 49.089581 33.338497 c
|
||||
48.970917 33.398960 48.729191 33.489388 48.077194 33.542656 c
|
||||
47.397186 33.598213 46.503727 33.600082 45.119995 33.600082 c
|
||||
17.280003 33.600082 l
|
||||
15.896273 33.600082 15.002816 33.598213 14.322806 33.542656 c
|
||||
13.670815 33.489388 13.429089 33.398960 13.310424 33.338497 c
|
||||
12.858834 33.108402 12.491681 32.741249 12.261584 32.289658 c
|
||||
12.201122 32.170994 12.110696 31.929268 12.057425 31.277275 c
|
||||
12.001867 30.597263 12.000001 29.703808 12.000001 28.320076 c
|
||||
12.000001 4.800079 l
|
||||
50.400005 4.800079 l
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2940
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 72.000000 72.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000003030 00000 n
|
||||
0000003053 00000 n
|
||||
0000003226 00000 n
|
||||
0000003300 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
3359
|
||||
%%EOF
|
12
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/Contents.json
vendored
Normal file
12
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ipad_30.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
225
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/ipad_30.pdf
vendored
Normal file
225
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/ipad_30.pdf
vendored
Normal file
@ -0,0 +1,225 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.478431 1.000000 scn
|
||||
0.000000 45.119995 m
|
||||
0.000000 54.528881 0.000000 59.233322 1.831091 62.827042 c
|
||||
3.441763 65.988159 6.011837 68.558235 9.172960 70.168907 c
|
||||
12.766678 72.000000 17.471119 72.000000 26.880003 72.000000 c
|
||||
45.119995 72.000000 l
|
||||
54.528881 72.000000 59.233322 72.000000 62.827042 70.168907 c
|
||||
65.988167 68.558235 68.558235 65.988159 70.168907 62.827042 c
|
||||
72.000000 59.233322 72.000000 54.528881 72.000000 45.119995 c
|
||||
72.000000 26.880005 l
|
||||
72.000000 17.471119 72.000000 12.766678 70.168907 9.172958 c
|
||||
68.558235 6.011833 65.988167 3.441765 62.827042 1.831093 c
|
||||
59.233322 0.000000 54.528881 0.000000 45.119999 0.000000 c
|
||||
26.880005 0.000000 l
|
||||
17.471119 0.000000 12.766678 0.000000 9.172960 1.831093 c
|
||||
6.011837 3.441765 3.441763 6.011833 1.831091 9.172958 c
|
||||
0.000000 12.766678 0.000000 17.471119 0.000000 26.880001 c
|
||||
0.000000 45.119995 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 16.800003 7.196266 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
2.620846 5.326904 m
|
||||
1.531268 3.188488 l
|
||||
2.620846 5.326904 l
|
||||
h
|
||||
37.876831 7.424580 m
|
||||
40.015247 6.335003 l
|
||||
37.876831 7.424580 l
|
||||
h
|
||||
35.779156 5.326904 m
|
||||
36.868732 3.188488 l
|
||||
35.779156 5.326904 l
|
||||
h
|
||||
35.779156 52.280563 m
|
||||
36.868732 54.418980 l
|
||||
35.779156 52.280563 l
|
||||
h
|
||||
37.876831 50.182888 m
|
||||
35.738419 49.093311 l
|
||||
37.876831 50.182888 l
|
||||
h
|
||||
2.620846 52.280563 m
|
||||
3.710423 50.142151 l
|
||||
2.620846 52.280563 l
|
||||
h
|
||||
7.680000 50.403732 m
|
||||
30.720007 50.403732 l
|
||||
30.720007 55.203735 l
|
||||
7.680000 55.203735 l
|
||||
7.680000 50.403732 l
|
||||
h
|
||||
36.000000 45.123734 m
|
||||
36.000000 12.483734 l
|
||||
40.800003 12.483734 l
|
||||
40.800003 45.123734 l
|
||||
36.000000 45.123734 l
|
||||
h
|
||||
30.720001 7.203735 m
|
||||
7.679995 7.203735 l
|
||||
7.679995 2.403732 l
|
||||
30.720001 2.403732 l
|
||||
30.720001 7.203735 l
|
||||
h
|
||||
2.400000 12.483734 m
|
||||
2.400000 45.123734 l
|
||||
-2.400000 45.123734 l
|
||||
-2.400000 12.483734 l
|
||||
2.400000 12.483734 l
|
||||
h
|
||||
7.679995 7.203735 m
|
||||
6.296269 7.203735 5.402813 7.205601 4.722805 7.261158 c
|
||||
4.070815 7.314430 3.829088 7.404854 3.710423 7.465317 c
|
||||
1.531268 3.188488 l
|
||||
2.439379 2.725780 3.383104 2.554623 4.331932 2.477100 c
|
||||
5.252741 2.401867 6.375473 2.403732 7.679995 2.403732 c
|
||||
7.679995 7.203735 l
|
||||
h
|
||||
-2.400000 12.483734 m
|
||||
-2.400000 11.179211 -2.401867 10.056477 -2.326633 9.135666 c
|
||||
-2.249111 8.186840 -2.077953 7.243114 -1.615247 6.335003 c
|
||||
2.661584 8.514156 l
|
||||
2.601121 8.632820 2.510695 8.874550 2.457426 9.526539 c
|
||||
2.401867 10.206551 2.400000 11.100006 2.400000 12.483734 c
|
||||
-2.400000 12.483734 l
|
||||
h
|
||||
3.710423 7.465317 m
|
||||
3.258834 7.695415 2.891680 8.062569 2.661584 8.514156 c
|
||||
-1.615247 6.335003 l
|
||||
-0.924959 4.980236 0.176501 3.878777 1.531268 3.188488 c
|
||||
3.710423 7.465317 l
|
||||
h
|
||||
36.000000 12.483734 m
|
||||
36.000000 11.100006 35.998135 10.206551 35.942577 9.526539 c
|
||||
35.889305 8.874550 35.798882 8.632820 35.738419 8.514156 c
|
||||
40.015247 6.335003 l
|
||||
40.477955 7.243114 40.649113 8.186840 40.726635 9.135666 c
|
||||
40.801868 10.056477 40.800003 11.179211 40.800003 12.483734 c
|
||||
36.000000 12.483734 l
|
||||
h
|
||||
30.720001 2.403732 m
|
||||
32.024525 2.403732 33.147259 2.401867 34.068069 2.477100 c
|
||||
35.016895 2.554623 35.960621 2.725780 36.868732 3.188488 c
|
||||
34.689579 7.465317 l
|
||||
34.570915 7.404854 34.329185 7.314430 33.677197 7.261158 c
|
||||
32.997185 7.205601 32.103729 7.203735 30.720001 7.203735 c
|
||||
30.720001 2.403732 l
|
||||
h
|
||||
35.738419 8.514156 m
|
||||
35.508320 8.062569 35.141167 7.695415 34.689579 7.465317 c
|
||||
36.868732 3.188488 l
|
||||
38.223499 3.878777 39.324959 4.980236 40.015247 6.335003 c
|
||||
35.738419 8.514156 l
|
||||
h
|
||||
30.720007 50.403732 m
|
||||
32.103733 50.403732 32.997189 50.401867 33.677197 50.346310 c
|
||||
34.329185 50.293037 34.570911 50.202614 34.689579 50.142151 c
|
||||
36.868732 54.418980 l
|
||||
35.960621 54.881687 35.016899 55.052845 34.068069 55.130367 c
|
||||
33.147259 55.205601 32.024529 55.203735 30.720007 55.203735 c
|
||||
30.720007 50.403732 l
|
||||
h
|
||||
40.800003 45.123734 m
|
||||
40.800003 46.428257 40.801868 47.550991 40.726635 48.471802 c
|
||||
40.649113 49.420628 40.477955 50.364353 40.015247 51.272465 c
|
||||
35.738419 49.093311 l
|
||||
35.798882 48.974648 35.889305 48.732918 35.942577 48.080929 c
|
||||
35.998135 47.400917 36.000000 46.507462 36.000000 45.123734 c
|
||||
40.800003 45.123734 l
|
||||
h
|
||||
34.689579 50.142151 m
|
||||
35.141167 49.912052 35.508320 49.544899 35.738419 49.093311 c
|
||||
40.015247 51.272465 l
|
||||
39.324959 52.627232 38.223499 53.728691 36.868732 54.418980 c
|
||||
34.689579 50.142151 l
|
||||
h
|
||||
7.680000 55.203735 m
|
||||
6.375476 55.203735 5.252744 55.205601 4.331933 55.130367 c
|
||||
3.383105 55.052845 2.439379 54.881687 1.531268 54.418980 c
|
||||
3.710423 50.142151 l
|
||||
3.829088 50.202614 4.070814 50.293037 4.722806 50.346310 c
|
||||
5.402816 50.401867 6.296272 50.403732 7.680000 50.403732 c
|
||||
7.680000 55.203735 l
|
||||
h
|
||||
2.400000 45.123734 m
|
||||
2.400000 46.507462 2.401867 47.400917 2.457426 48.080929 c
|
||||
2.510695 48.732918 2.601121 48.974648 2.661584 49.093311 c
|
||||
-1.615247 51.272465 l
|
||||
-2.077953 50.364353 -2.249111 49.420628 -2.326633 48.471802 c
|
||||
-2.401867 47.550991 -2.400000 46.428257 -2.400000 45.123734 c
|
||||
2.400000 45.123734 l
|
||||
h
|
||||
1.531268 54.418980 m
|
||||
0.176501 53.728691 -0.924959 52.627232 -1.615247 51.272465 c
|
||||
2.661584 49.093311 l
|
||||
2.891680 49.544899 3.258834 49.912052 3.710423 50.142151 c
|
||||
1.531268 54.418980 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
5051
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 72.000000 72.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000005141 00000 n
|
||||
0000005164 00000 n
|
||||
0000005337 00000 n
|
||||
0000005411 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
5470
|
||||
%%EOF
|
12
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/Contents.json
vendored
Normal file
12
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "iphone_30.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
163
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/iphone_30.pdf
vendored
Normal file
163
submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/iphone_30.pdf
vendored
Normal file
@ -0,0 +1,163 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.478431 1.000000 scn
|
||||
0.000000 45.119995 m
|
||||
0.000000 54.528881 0.000000 59.233322 1.831091 62.827042 c
|
||||
3.441763 65.988159 6.011837 68.558235 9.172960 70.168907 c
|
||||
12.766678 72.000000 17.471119 72.000000 26.880003 72.000000 c
|
||||
45.119995 72.000000 l
|
||||
54.528881 72.000000 59.233322 72.000000 62.827042 70.168907 c
|
||||
65.988167 68.558235 68.558235 65.988159 70.168907 62.827042 c
|
||||
72.000000 59.233322 72.000000 54.528881 72.000000 45.119995 c
|
||||
72.000000 26.880005 l
|
||||
72.000000 17.471119 72.000000 12.766678 70.168907 9.172958 c
|
||||
68.558235 6.011833 65.988167 3.441765 62.827042 1.831093 c
|
||||
59.233322 0.000000 54.528881 0.000000 45.119999 0.000000 c
|
||||
26.880005 0.000000 l
|
||||
17.471119 0.000000 12.766678 0.000000 9.172960 1.831093 c
|
||||
6.011837 3.441765 3.441763 6.011833 1.831091 9.172958 c
|
||||
0.000000 12.766678 0.000000 17.471119 0.000000 26.880001 c
|
||||
0.000000 45.119995 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 19.199997 9.599876 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
10.080004 52.800121 m
|
||||
9.987495 52.800121 l
|
||||
9.436961 52.800140 8.919323 52.800159 8.436124 52.794121 c
|
||||
8.344582 52.798107 8.252528 52.800121 8.160005 52.800121 c
|
||||
7.200004 52.800121 l
|
||||
7.200004 52.757835 l
|
||||
7.038636 52.749306 6.882584 52.739063 6.731937 52.726753 c
|
||||
5.783109 52.649231 4.839383 52.478073 3.931273 52.015369 c
|
||||
2.576505 51.325081 1.475045 50.223621 0.784757 48.868851 c
|
||||
0.322051 47.960743 0.150893 47.017017 0.073371 46.068188 c
|
||||
-0.000078 45.169216 -0.000041 44.077785 0.000002 42.812630 c
|
||||
0.000004 42.720119 l
|
||||
0.000004 10.080120 l
|
||||
0.000002 9.987610 l
|
||||
-0.000041 8.722454 -0.000078 7.631023 0.073371 6.732052 c
|
||||
0.150893 5.783222 0.322051 4.839497 0.784757 3.931385 c
|
||||
1.475045 2.576618 2.576505 1.475159 3.931273 0.784870 c
|
||||
4.839384 0.322166 5.783109 0.151009 6.731938 0.073486 c
|
||||
7.630924 0.000034 8.722374 0.000072 9.987555 0.000118 c
|
||||
10.080008 0.000118 l
|
||||
23.520004 0.000118 l
|
||||
23.612455 0.000118 l
|
||||
24.877636 0.000072 25.969086 0.000034 26.868073 0.073486 c
|
||||
27.816900 0.151009 28.760626 0.322166 29.668736 0.784870 c
|
||||
31.023502 1.475159 32.124966 2.576618 32.815254 3.931385 c
|
||||
33.277958 4.839497 33.449116 5.783222 33.526638 6.732052 c
|
||||
33.600082 7.630951 33.600048 8.722282 33.600010 9.987305 c
|
||||
33.600010 9.987579 l
|
||||
33.600006 10.080120 l
|
||||
33.600006 42.720119 l
|
||||
33.600010 42.812660 l
|
||||
33.600010 42.812935 l
|
||||
33.600048 44.077961 33.600082 45.169289 33.526638 46.068188 c
|
||||
33.449116 47.017017 33.277958 47.960743 32.815254 48.868851 c
|
||||
32.124966 50.223621 31.023502 51.325081 29.668736 52.015369 c
|
||||
28.760624 52.478073 27.816900 52.649231 26.868071 52.726753 c
|
||||
26.717424 52.739063 26.561373 52.749306 26.400005 52.757835 c
|
||||
26.400005 52.800121 l
|
||||
25.440006 52.800121 l
|
||||
25.347483 52.800121 25.255426 52.798107 25.163885 52.794121 c
|
||||
24.680685 52.800159 24.163046 52.800140 23.612509 52.800121 c
|
||||
23.520000 52.800121 l
|
||||
10.080004 52.800121 l
|
||||
h
|
||||
8.314891 47.991890 m
|
||||
7.843834 47.984375 7.457473 47.970039 7.122810 47.942696 c
|
||||
6.470818 47.889427 6.229092 47.799000 6.110427 47.738537 c
|
||||
5.658838 47.508442 5.291684 47.141289 5.061588 46.689697 c
|
||||
5.001125 46.571033 4.910699 46.329308 4.857430 45.677315 c
|
||||
4.801870 44.997303 4.800004 44.103848 4.800004 42.720119 c
|
||||
4.800004 10.080120 l
|
||||
4.800004 8.696392 4.801870 7.802933 4.857430 7.122925 c
|
||||
4.910699 6.470932 5.001125 6.229206 5.061588 6.110542 c
|
||||
5.291684 5.658951 5.658838 5.291798 6.110427 5.061703 c
|
||||
6.229092 5.001240 6.470818 4.910812 7.122811 4.857544 c
|
||||
7.802821 4.801983 8.696278 4.800117 10.080008 4.800117 c
|
||||
23.520004 4.800117 l
|
||||
24.903732 4.800117 25.797190 4.801983 26.477198 4.857544 c
|
||||
27.129190 4.910812 27.370916 5.001240 27.489582 5.061703 c
|
||||
27.941170 5.291798 28.308325 5.658951 28.538420 6.110542 c
|
||||
28.598883 6.229206 28.689310 6.470932 28.742579 7.122925 c
|
||||
28.798138 7.802933 28.800005 8.696392 28.800005 10.080120 c
|
||||
28.800005 42.720119 l
|
||||
28.800005 44.103851 28.798138 44.997307 28.742579 45.677315 c
|
||||
28.689310 46.329308 28.598883 46.571033 28.538420 46.689697 c
|
||||
28.308325 47.141289 27.941170 47.508442 27.489582 47.738537 c
|
||||
27.370916 47.799000 27.129190 47.889427 26.477198 47.942696 c
|
||||
26.142536 47.970039 25.756174 47.984375 25.285118 47.991890 c
|
||||
24.562664 47.914627 24.000006 47.303085 24.000006 46.560120 c
|
||||
24.000006 44.704445 22.495684 43.200119 20.640005 43.200119 c
|
||||
12.960005 43.200119 l
|
||||
11.104329 43.200119 9.600004 44.704445 9.600004 46.560120 c
|
||||
9.600004 47.303085 9.037343 47.914627 8.314891 47.991890 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
4420
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 72.000000 72.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000004510 00000 n
|
||||
0000004533 00000 n
|
||||
0000004706 00000 n
|
||||
0000004780 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
4839
|
||||
%%EOF
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":180,"w":30,"h":30,"nm":"safari_30","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Com 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[185]},{"t":40,"s":[180]}],"ix":10},"p":{"a":0,"k":[15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.15,0.205],[-0.233,0.543],[0,0],[0.142,0.444],[0.385,0.123],[1.435,-0.615],[0,0],[0.231,-0.17],[0.15,-0.205],[0.233,-0.543],[0,0],[-0.142,-0.444],[-0.385,-0.123],[-1.435,0.615],[0,0],[-0.231,0.17]],"o":[[0.17,-0.231],[0,0],[0.615,-1.435],[-0.123,-0.385],[-0.444,-0.142],[0,0],[-0.543,0.233],[-0.205,0.15],[-0.17,0.231],[0,0],[-0.615,1.435],[0.123,0.385],[0.444,0.142],[0,0],[0.543,-0.233],[0.205,-0.15]],"v":[[2.611,2.075],[3.13,1.029],[4.28,-1.654],[5.061,-4.251],[4.251,-5.061],[1.654,-4.28],[-1.029,-3.13],[-2.075,-2.611],[-2.611,-2.075],[-3.13,-1.029],[-4.28,1.654],[-5.061,4.251],[-4.251,5.061],[-1.654,4.28],[1.029,3.13],[2.075,2.611]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"d":1,"ty":"el","s":{"a":0,"k":[2.5,2.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"mm","mm":3,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Com 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Com 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Com 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Block","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.671,-1.317],[0,-3.92],[0,0],[-0.763,-1.497],[-1.317,-0.671],[-3.92,0],[0,0],[-1.497,0.763],[-0.671,1.317],[0,3.92],[0,0],[0.763,1.497],[1.317,0.671],[3.92,0],[0,0],[1.497,-0.763]],"o":[[-0.763,1.497],[0,0],[0,3.92],[0.671,1.317],[1.497,0.763],[0,0],[3.92,0],[1.317,-0.671],[0.763,-1.497],[0,0],[0,-3.92],[-0.671,-1.317],[-1.497,-0.763],[0,0],[-3.92,0],[-1.317,0.671]],"v":[[-14.237,-11.178],[-15,-3.8],[-15,3.8],[-14.237,11.178],[-11.178,14.237],[-3.8,15],[3.8,15],[11.178,14.237],[14.237,11.178],[15,3.8],[15,-3.8],[14.237,-11.178],[11.178,-14.237],[3.8,-15],[-3.8,-15],[-11.178,-14.237]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Block","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0}],"markers":[]}
|
||||
{"v":"5.7.4","fr":60,"ip":0,"op":180,"w":30,"h":30,"nm":"safari_30","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Com 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[185]},{"t":150,"s":[180]}],"ix":10},"p":{"a":0,"k":[15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.15,0.205],[-0.233,0.543],[0,0],[0.142,0.444],[0.385,0.123],[1.435,-0.615],[0,0],[0.231,-0.17],[0.15,-0.205],[0.233,-0.543],[0,0],[-0.142,-0.444],[-0.385,-0.123],[-1.435,0.615],[0,0],[-0.231,0.17]],"o":[[0.17,-0.231],[0,0],[0.615,-1.435],[-0.123,-0.385],[-0.444,-0.142],[0,0],[-0.543,0.233],[-0.205,0.15],[-0.17,0.231],[0,0],[-0.615,1.435],[0.123,0.385],[0.444,0.142],[0,0],[0.543,-0.233],[0.205,-0.15]],"v":[[2.611,2.075],[3.13,1.029],[4.28,-1.654],[5.061,-4.251],[4.251,-5.061],[1.654,-4.28],[-1.029,-3.13],[-2.075,-2.611],[-2.611,-2.075],[-3.13,-1.029],[-4.28,1.654],[-5.061,4.251],[-4.251,5.061],[-1.654,4.28],[1.029,3.13],[2.075,2.611]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"d":1,"ty":"el","s":{"a":0,"k":[2.5,2.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"mm","mm":3,"nm":"Объединить контуры 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Com 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":290,"st":110,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Com 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Com 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":290,"st":110,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Block","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.671,-1.317],[0,-3.92],[0,0],[-0.763,-1.497],[-1.317,-0.671],[-3.92,0],[0,0],[-1.497,0.763],[-0.671,1.317],[0,3.92],[0,0],[0.763,1.497],[1.317,0.671],[3.92,0],[0,0],[1.497,-0.763]],"o":[[-0.763,1.497],[0,0],[0,3.92],[0.671,1.317],[1.497,0.763],[0,0],[3.92,0],[1.317,-0.671],[0.763,-1.497],[0,0],[0,-3.92],[-0.671,-1.317],[-1.497,-0.763],[0,0],[-3.92,0],[-1.317,0.671]],"v":[[-14.237,-11.178],[-15,-3.8],[-15,3.8],[-14.237,11.178],[-11.178,14.237],[-3.8,15],[3.8,15],[11.178,14.237],[14.237,11.178],[15,3.8],[15,-3.8],[14.237,-11.178],[11.178,-14.237],[3.8,-15],[-3.8,-15],[-11.178,-14.237]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Заливка 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Преобразовать"}],"nm":"Block","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":290,"st":110,"bm":0}],"markers":[]}
|
Loading…
x
Reference in New Issue
Block a user