diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 1f9a1d234b..99acc4468d 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -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"; diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutControllerNode.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutControllerNode.swift index 84f7812f07..5c55690259 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutControllerNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutControllerNode.swift @@ -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, 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 diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift index 98b7b8ce09..67533a8007 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift @@ -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)) } }) diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutInfoController.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutInfoController.swift index b3864e50f8..a7a8d53eed 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutInfoController.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutInfoController.swift @@ -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 { diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutInfoControllerNode.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutInfoControllerNode.swift index 45093b3233..468baa7f91 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutInfoControllerNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutInfoControllerNode.swift @@ -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 } diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryController.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryController.swift index e880872994..ab4254bd9f 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryController.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryController.swift @@ -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) diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryControllerNode.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryControllerNode.swift index d28cfddea6..14670314ae 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryControllerNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutNativeCardEntryControllerNode.swift @@ -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) + } + } diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutPriceItem.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutPriceItem.swift index 2e33d49e95..a3050cf7e5 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutPriceItem.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutPriceItem.swift @@ -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) diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutTipItem.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutTipItem.swift index 5c8a7c620a..6fb0c82822 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutTipItem.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutTipItem.swift @@ -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) diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentActionItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentActionItemNode.swift index c8063bbbf8..dfba43615a 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentActionItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentActionItemNode.swift @@ -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 } diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentCardInputItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentCardInputItemNode.swift index 8f89cc0093..f41dda6306 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentCardInputItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentCardInputItemNode.swift @@ -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 } diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentDisclosureItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentDisclosureItemNode.swift index 6d599a12b7..b482f85fea 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentDisclosureItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentDisclosureItemNode.swift @@ -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 } diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentFieldItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentFieldItemNode.swift index 947331fc9c..ad28dc16e7 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentFieldItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentFieldItemNode.swift @@ -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 } diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentHeaderItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentHeaderItemNode.swift index 1426dbf4bf..2fcf77b155 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentHeaderItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentHeaderItemNode.swift @@ -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 } diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentItemNode.swift index 18ce2169a6..38d57cefd4 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentItemNode.swift @@ -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 } } diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentSwitchItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentSwitchItemNode.swift index 31c9d41455..5f582bfb9c 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentSwitchItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentSwitchItemNode.swift @@ -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) diff --git a/submodules/BotPaymentsUI/Sources/BotPaymentTextItemNode.swift b/submodules/BotPaymentsUI/Sources/BotPaymentTextItemNode.swift index e638be0912..fd393fed9e 100644 --- a/submodules/BotPaymentsUI/Sources/BotPaymentTextItemNode.swift +++ b/submodules/BotPaymentsUI/Sources/BotPaymentTextItemNode.swift @@ -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 } diff --git a/submodules/ItemListUI/Sources/Items/ItemListDisclosureItem.swift b/submodules/ItemListUI/Sources/Items/ItemListDisclosureItem.swift index 728d816f06..cdda64ab67 100644 --- a/submodules/ItemListUI/Sources/Items/ItemListDisclosureItem.swift +++ b/submodules/ItemListUI/Sources/Items/ItemListDisclosureItem.swift @@ -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 diff --git a/submodules/SettingsUI/Sources/NotificationsPeerCategoryController.swift b/submodules/SettingsUI/Sources/NotificationsPeerCategoryController.swift index fbcd8b10a1..18f9d4f00a 100644 --- a/submodules/SettingsUI/Sources/NotificationsPeerCategoryController.swift +++ b/submodules/SettingsUI/Sources/NotificationsPeerCategoryController.swift @@ -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)) diff --git a/submodules/SettingsUI/Sources/Privacy and Security/Recent Sessions/ItemListRecentSessionItem.swift b/submodules/SettingsUI/Sources/Privacy and Security/Recent Sessions/ItemListRecentSessionItem.swift index 4a6dfcf546..83644d0d2b 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/Recent Sessions/ItemListRecentSessionItem.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/Recent Sessions/ItemListRecentSessionItem.swift @@ -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 diff --git a/submodules/SettingsUI/Sources/Privacy and Security/RecentSessionScreen.swift b/submodules/SettingsUI/Sources/Privacy and Security/RecentSessionScreen.swift index cca09cdee0..1a1f48859c 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/RecentSessionScreen.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/RecentSessionScreen.swift @@ -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 diff --git a/submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/Contents.json new file mode 100644 index 0000000000..80e6a1770a --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "mac_30.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/mac_30.pdf b/submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/mac_30.pdf new file mode 100644 index 0000000000..58668d595f --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Settings/Devices/Mac.imageset/mac_30.pdf @@ -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 \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/Contents.json new file mode 100644 index 0000000000..b12a359557 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ipad_30.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/ipad_30.pdf b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/ipad_30.pdf new file mode 100644 index 0000000000..d0fefbbd8e --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPad.imageset/ipad_30.pdf @@ -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 \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/Contents.json new file mode 100644 index 0000000000..a733e66079 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "iphone_30.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/iphone_30.pdf b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/iphone_30.pdf new file mode 100644 index 0000000000..3ff413b172 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Settings/Devices/iPhone.imageset/iphone_30.pdf @@ -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 \ No newline at end of file diff --git a/submodules/TelegramUI/Resources/Animations/device_android.json b/submodules/TelegramUI/Resources/Animations/device_android.json index 15f7d954c9..e81e747f1d 100644 --- a/submodules/TelegramUI/Resources/Animations/device_android.json +++ b/submodules/TelegramUI/Resources/Animations/device_android.json @@ -1 +1 @@ -{"v":"5.7.4","fr":60,"ip":0,"op":180,"w":30,"h":30,"nm":"android_30","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Eye L","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[10.5,16,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":15,"s":[16.667,16.667,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[20,5,100]},{"t":25,"s":[16.667,16.667,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[3,3],"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":[0.203921571374,0.780392169952,0.349019616842,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":"Eye L","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":188,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Eye R","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.5,16,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":10,"s":[16.667,16.667,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[20,5,100]},{"t":30,"s":[16.667,16.667,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[3,3],"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":[0.203921571374,0.780392169952,0.349019616842,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":"Eye R","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":188,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Face","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,15.5,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.335,1.25],[-4.973,0],[-1.361,-5.079],[0.382,-0.702],[0.129,-0.123],[1.573,0],[0,0],[0.579,0.551],[0.085,0.157]],"o":[[1.361,-5.079],[4.973,0],[0.335,1.25],[-0.085,0.157],[-0.579,0.551],[0,0],[-1.573,0],[-0.129,-0.123],[-0.382,-0.702]],"v":[[-10.536,2.379],[0,-6],[10.536,2.379],[10.657,4.957],[10.279,5.449],[7.34,6],[-7.34,6],[-10.279,5.449],[-10.657,4.957]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","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":"Face","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Ri","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[20.75,9.75,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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":1,"y":0},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.25,-2.25],[-1.25,2.25]],"c":false}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[2.5,-1],[-1.25,2.25]],"c":false}]},{"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.25,-2.25],[-1.25,2.25]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Ri","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Le","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[9.25,9.75,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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":1,"y":0},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.25,-2.25],[1.25,2.25]],"c":false}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-2.5,-1],[1.25,2.25]],"c":false}]},{"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.25,-2.25],[1.25,2.25]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Le","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":6,"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":"rd","nm":"Скругленные углы 1","r":{"a":0,"k":7,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,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":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0}],"markers":[]} \ No newline at end of file +{"v":"5.7.4","fr":60,"ip":0,"op":180,"w":30,"h":30,"nm":"android_30","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Eye L","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[10.5,16,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":125,"s":[16.667,16.667,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":130,"s":[20,5,100]},{"t":135,"s":[16.667,16.667,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[3,3],"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":[0.203921571374,0.780392169952,0.349019616842,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":"Eye L","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":298,"st":110,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Eye R","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.5,16,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[1,1,0.333],"y":[0,0,0]},"t":120,"s":[16.667,16.667,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":130,"s":[20,5,100]},{"t":140,"s":[16.667,16.667,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[3,3],"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":[0.203921571374,0.780392169952,0.349019616842,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":"Eye R","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":298,"st":110,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Face","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[15,15.5,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.335,1.25],[-4.973,0],[-1.361,-5.079],[0.382,-0.702],[0.129,-0.123],[1.573,0],[0,0],[0.579,0.551],[0.085,0.157]],"o":[[1.361,-5.079],[4.973,0],[0.335,1.25],[-0.085,0.157],[-0.579,0.551],[0,0],[-1.573,0],[-0.129,-0.123],[-0.382,-0.702]],"v":[[-10.536,2.379],[0,-6],[10.536,2.379],[10.657,4.957],[10.279,5.449],[7.34,6],[-7.34,6],[-10.279,5.449],[-10.657,4.957]],"c":true},"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","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":"Face","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":294,"st":110,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Ri","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[20.75,9.75,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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":1,"y":0},"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.25,-2.25],[-1.25,2.25]],"c":false}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[2.5,-1],[-1.25,2.25]],"c":false}]},{"t":140,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.25,-2.25],[-1.25,2.25]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Ri","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":294,"st":110,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Le","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[9.25,9.75,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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":1,"y":0},"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.25,-2.25],[1.25,2.25]],"c":false}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-2.5,-1],[1.25,2.25]],"c":false}]},{"t":140,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.25,-2.25],[1.25,2.25]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Le","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":294,"st":110,"bm":0},{"ddd":0,"ind":6,"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":"rd","nm":"Скругленные углы 1","r":{"a":0,"k":7,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,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":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":290,"st":110,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/submodules/TelegramUI/Resources/Animations/device_chrome.json b/submodules/TelegramUI/Resources/Animations/device_chrome.json index 21bd9ddec9..b4f41ef346 100644 --- a/submodules/TelegramUI/Resources/Animations/device_chrome.json +++ b/submodules/TelegramUI/Resources/Animations/device_chrome.json @@ -1 +1 @@ -{"v":"5.7.4","fr":60,"ip":0,"op":180,"w":30,"h":30,"nm":"chrome_30","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Vector 20","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-38.383,-12.48,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,-100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5.252,2.02]],"c":false}]},{"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":60,"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":"Vector 20","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":2,"ty":4,"nm":"Vector 20","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[8.383,39.481,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,-100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5.879,2.144]],"c":false}]},{"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":-60,"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":"Vector 20","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":"Vector 20","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,-27,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5.333,2]],"c":false}]},{"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Vector 20","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":4,"ty":4,"nm":"Ellipse 18","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":10,"s":[9,9]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[5,5]},{"t":30,"s":[9,9]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Ellipse 18","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":5,"ty":4,"nm":"Ellipse 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"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":[-245]},{"t":40,"s":[-240]}],"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":"Ellipse 3","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":6,"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":"rd","nm":"Скругленные углы 1","r":{"a":0,"k":7,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,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":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0}],"markers":[]} \ No newline at end of file +{"v":"5.7.4","fr":60,"ip":0,"op":180,"w":30,"h":30,"nm":"chrome_30","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Vector 20","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-38.383,-12.48,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,-100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":130,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5.252,2.02]],"c":false}]},{"t":140,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":60,"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":"Vector 20","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":2,"ty":4,"nm":"Vector 20","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[8.383,39.481,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,-100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":130,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5.879,2.144]],"c":false}]},{"t":140,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":-60,"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":"Vector 20","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":"Vector 20","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,-27,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":130,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5.333,2]],"c":false}]},{"t":140,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,0],[-5,0]],"c":false}]}],"ix":2},"nm":"Контур 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Vector 20","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":4,"ty":4,"nm":"Ellipse 18","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":120,"s":[9,9]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":130,"s":[5,5]},{"t":140,"s":[9,9]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Контур эллипса 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Обводка 1","mn":"ADBE Vector Graphic - Stroke","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":"Ellipse 18","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":5,"ty":4,"nm":"Ellipse 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"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":[-245]},{"t":150,"s":[-240]}],"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":"Ellipse 3","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":6,"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":"rd","nm":"Скругленные углы 1","r":{"a":0,"k":7,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"fl","c":{"a":0,"k":[0.203921571374,0.780392169952,0.349019616842,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":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":290,"st":110,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/submodules/TelegramUI/Resources/Animations/device_safari.json b/submodules/TelegramUI/Resources/Animations/device_safari.json index b24b075344..0b4756be25 100644 --- a/submodules/TelegramUI/Resources/Animations/device_safari.json +++ b/submodules/TelegramUI/Resources/Animations/device_safari.json @@ -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":[]} \ No newline at end of file +{"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":[]} \ No newline at end of file