From dca6b5f145b9a8044ee221dd089d88ff4a5b0bd6 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 12 Mar 2026 13:51:27 +0100 Subject: [PATCH] Various improvements --- .../Sources/AttachmentContainer.swift | 1 + .../Sources/AttachmentPanel.swift | 1 + .../Sources/BrowserBookmarksScreen.swift | 2 +- .../ChatPanelInterfaceInteraction.swift | 4 + submodules/ContactListUI/BUILD | 1 + .../GalleryUI/Sources/GalleryPagerNode.swift | 16 +- .../Items/UniversalVideoGalleryItem.swift | 83 ++- .../LegacyComponents/TGVideoEditAdjustments.h | 1 + .../Sources/TGMediaAssetsController.m | 15 +- .../TGMediaPickerGalleryInterfaceView.m | 9 +- .../Sources/TGMediaPickerGalleryModel.m | 9 +- .../TGMediaPickerGalleryPhotoItemView.h | 1 + .../TGMediaPickerGalleryPhotoItemView.m | 347 +++++++--- .../TGMediaPickerGalleryVideoItemView.m | 4 +- .../Sources/TGMediaVideoConverter.m | 5 +- .../Sources/TGPhotoCaptionInputMixin.m | 2 +- .../Sources/TGVideoEditAdjustments.m | 9 +- .../Sources/LegacyMediaPickers.swift | 95 +-- .../Sources/MediaPickerGridItem.swift | 11 +- submodules/PremiumUI/BUILD | 3 +- .../Sources/PremiumIntroScreen.swift | 68 +- ...AutodownloadConnectionTypeController.swift | 8 +- .../DataAndStorageSettingsController.swift | 18 +- .../EnergySavingSettingsScreen.swift | 20 +- .../SaveIncomingMediaController.swift | 4 +- .../NotificationsAndSoundsController.swift | 6 +- .../PrivacyAndSecurityController.swift | 17 +- .../Sources/Search/SettingsSearchItem.swift | 2 +- .../ApiUtils/StoreMessage_Telegram.swift | 2 +- .../TelegramEngine/Messages/Polls.swift | 10 +- .../PresentationResourcesSettings.swift | 237 +++++-- .../Sources/AttachmentFileController.swift | 319 +++++---- .../Sources/AttachmentFileSearchItem.swift | 407 ++++++++++-- ...hatMessageFactCheckBubbleContentNode.swift | 2 +- .../ChatMessageInteractiveFileNode.swift | 2 +- .../ChatMessageTextBubbleContentNode.swift | 2 +- .../Sources/ChatRecentActionsController.swift | 1 + .../ChatRecentActionsControllerNode.swift | 2 +- .../ChatSendAudioMessageContextPreview.swift | 2 +- .../Sources/ChatTextInputPanelComponent.swift | 2 + .../Sources/ChatTextInputPanelNode.swift | 31 +- .../Sources/ChatControllerInteraction.swift | 4 +- .../Sources/SelectCraftGiftScreen.swift | 1 - .../Sources/GiftStoreScreen.swift | 58 +- .../Sources/ItemListDatePickerItem.swift | 4 +- .../Sources/ListActionItemComponent.swift | 29 +- .../ListComposePollOptionComponent/BUILD | 1 + .../Sources/MediaEditorVideoExport.swift | 206 +++++- .../Sources/MediaEditorScreen.swift | 4 + .../PeerInfoScreenDisclosureItem.swift | 4 +- .../Sources/PeerInfoScreen.swift | 2 +- .../Sources/PeerInfoSelectionPanelNode.swift | 1 + .../Sources/PeerInfoSettingsItems.swift | 2 +- .../Sources/PeerInfoStoryPaneNode.swift | 1 + .../Sources/PeerInfoVisualMediaPaneNode.swift | 42 +- .../Sources/PeerSelectionControllerNode.swift | 1 + .../TranslateHeaderPanelComponent/BUILD | 1 + .../Sources/ChatTranslationPanelNode.swift | 553 +--------------- .../BUILD | 28 + ...anslationLanguagesContextMenuContent.swift | 610 +++++++++++++++++ .../Message/LivePhoto.imageset}/Contents.json | 2 +- .../Message/LivePhoto.imageset/livecorner.pdf | Bin 0 -> 9057 bytes .../Icons/Add.imageset}/Contents.json | 2 +- .../Item List/Icons/Add.imageset/plus.pdf | Bin 0 -> 5467 bytes .../Icons/Appearance.imageset/Contents.json | 12 + .../Icons/Appearance.imageset/appearance.pdf | Bin 0 -> 5695 bytes .../Icons/Away.imageset}/Contents.json | 2 +- .../Item List/Icons/Away.imageset/away.pdf | Bin 0 -> 13492 bytes .../Icons/Backdrop.imageset/Backdrop@2x.png | Bin 0 -> 4799 bytes .../Icons/Backdrop.imageset/Backdrop@3x.png | Bin 0 -> 5374 bytes .../Icons/Backdrop.imageset/Contents.json | 22 + .../Icons/Block.imageset}/Contents.json | 2 +- .../Item List/Icons/Block.imageset/stop.pdf | Bin 0 -> 6088 bytes .../Icons/Brush.imageset/Contents.json | 12 + .../Item List/Icons/Brush.imageset/brush.pdf | Bin 0 -> 5776 bytes .../Icons/Case.imageset}/Contents.json | 2 +- .../Icons/Case.imageset/suitcase.pdf | Bin 0 -> 6922 bytes .../Icons/Cellular.imageset/Contents.json | 12 + .../Icons/Cellular.imageset/mobiledata.pdf | Bin 0 -> 6259 bytes .../Icons/Channel.imageset}/Contents.json | 2 +- .../Icons/Channel.imageset/channel.pdf | Bin 0 -> 5892 bytes .../Item List/Icons/Chat.imageset/Bubble.pdf | Bin 0 -> 13327 bytes .../Icons/Chat.imageset}/Contents.json | 2 +- .../Icons/Chatbot.imageset}/Contents.json | 2 +- .../Icons/Chatbot.imageset/chatbot.pdf | Bin 0 -> 6116 bytes .../Icons/Checkbox.imageset/Contents.json | 12 + .../Icons/Checkbox.imageset/checkbox.pdf | Bin 0 -> 5721 bytes .../Icons/Clock.imageset/Contents.json | 12 + .../Item List/Icons/Clock.imageset/clock.pdf | Bin 0 -> 5913 bytes .../Icons}/Contents.json | 0 .../Icons/Data.imageset}/Contents.json | 2 +- .../Item List/Icons/Data.imageset/storage.pdf | Bin 0 -> 5731 bytes .../Icons/Devices.imageset}/Contents.json | 2 +- .../Icons/Devices.imageset/devices.pdf | Bin 0 -> 6178 bytes .../Icons/Effect.imageset/Contents.json | 12 + .../Icons/Effect.imageset/effects.pdf | Bin 0 -> 6134 bytes .../Icons/Email.imageset/Contents.json | 12 + .../Item List/Icons/Email.imageset/email.pdf | Bin 0 -> 6214 bytes .../Icons/Emoji.imageset/Contents.json | 12 + .../Item List/Icons/Emoji.imageset/emoji.pdf | Bin 0 -> 6333 bytes .../Icons/FaceId.imageset/Contents.json | 12 + .../Icons/FaceId.imageset/faceid.pdf | Bin 0 -> 7335 bytes .../Icons/Faq.imageset/Contents.json | 12 + .../Item List/Icons/Faq.imageset/question.pdf | Bin 0 -> 5732 bytes .../Icons/File.imageset/Contents.json | 12 + .../Icons/File.imageset/document.pdf | Bin 0 -> 6232 bytes .../Icons/Folder.imageset/Contents.json | 12 + .../Icons/Folder.imageset/folder.pdf | Bin 0 -> 6049 bytes .../Icons/Gif.imageset/Contents.json | 12 + .../Item List/Icons/Gif.imageset/gifs.pdf | Bin 0 -> 6326 bytes .../Icons/Gift.imageset/Contents.json | 12 + .../Item List/Icons/Gift.imageset/gift.pdf | Bin 0 -> 6443 bytes .../Icons/Gradient.imageset/Contents.json | 12 + .../Icons/Gradient.imageset/gradient.pdf | Bin 0 -> 10722 bytes .../Icons/Group.imageset/3members.pdf | Bin 0 -> 7033 bytes .../Icons/Group.imageset/Contents.json | 12 + .../Icons/Hand.imageset/Contents.json | 12 + .../Item List/Icons/Hand.imageset/hand.pdf | Bin 0 -> 5975 bytes .../Icons/Icons.imageset/Contents.json | 12 + .../Item List/Icons/Icons.imageset/icons.pdf | Bin 0 -> 6659 bytes .../Icons/Intro.imageset/Contents.json | 12 + .../Icons/Intro.imageset/intro.pdf} | Bin 11996 -> 13282 bytes .../Icons/Key.imageset}/Contents.json | 2 +- .../Item List/Icons/Key.imageset/key.pdf | Bin 0 -> 5558 bytes .../Icons/Language.imageset/Contents.json | 12 + .../Icons/Language.imageset/globe.pdf | Bin 0 -> 6763 bytes .../Icons/LastSeen.imageset/Contents.json | 12 + .../Icons/LastSeen.imageset/lastseen.pdf | Bin 0 -> 5741 bytes .../Icons/Link.imageset/Contents.json | 12 + .../Item List/Icons/Link.imageset/link.pdf | Bin 0 -> 13774 bytes .../Icons/Location.imageset/Contents.json | 12 + .../Icons/Location.imageset/location.pdf | Bin 0 -> 5782 bytes .../Icons/LockBubble.imageset/Contents.json | 12 + .../Icons/LockBubble.imageset/LockBubble.pdf | Bin 0 -> 13446 bytes .../Icons/Member.imageset/Contents.json | 12 + .../Icons/Member.imageset/member.pdf | Bin 0 -> 5797 bytes .../Icons/MessageEffect.imageset/Bubble-1.pdf | Bin 0 -> 17893 bytes .../MessageEffect.imageset/Contents.json | 12 + .../Icons/Microphone.imageset/Contents.json | 12 + .../Icons/Microphone.imageset/microphone.pdf | Bin 0 -> 5552 bytes .../Icons/Multiple.imageset/Contents.json | 12 + .../Icons/Multiple.imageset/multiple.pdf | Bin 0 -> 6491 bytes .../Icons/NoAds.imageset/Contents.json | 12 + .../Icons/NoAds.imageset/speaker.pdf | Bin 0 -> 5984 bytes .../Icons}/NoForward.imageset/Contents.json | 0 .../Icons}/NoForward.imageset/spy.pdf | Bin 6771 -> 6774 bytes .../Notifications.imageset/Contents.json | 12 + .../Icons/Notifications.imageset/bell.pdf | Bin 0 -> 6519 bytes .../Icons/Phone.imageset/Contents.json | 12 + .../Item List/Icons/Phone.imageset/phone.pdf | Bin 0 -> 5734 bytes .../Icons/Photo.imageset/Contents.json | 12 + .../Item List/Icons/Photo.imageset/photo.pdf | Bin 0 -> 6232 bytes .../Icons/Pie.imageset/Contents.json | 12 + .../Item List/Icons/Pie.imageset/piechart.pdf | Bin 0 -> 5712 bytes .../Icons/Play.imageset/Contents.json | 12 + .../Item List/Icons/Play.imageset/music.pdf | Bin 0 -> 5782 bytes .../Icons/PowerSaving.imageset/Contents.json | 12 + .../Icons/PowerSaving.imageset/battery.pdf | Bin 0 -> 6685 bytes .../Icons/Premium.imageset/Contents.json | 12 + .../Icons/Premium.imageset/premium.pdf | Bin 0 -> 5929 bytes .../Icons/Privacy.imageset/Contents.json | 12 + .../Item List/Icons/Privacy.imageset/lock.pdf | Bin 0 -> 5635 bytes .../Icons/Profile.imageset/Contents.json | 12 + .../Icons/Profile.imageset/profile.pdf | Bin 0 -> 6284 bytes .../Icons/Reactions.imageset/Contents.json | 12 + .../Icons/Reactions.imageset/heart.pdf | Bin 0 -> 5751 bytes .../SavedMessages.imageset/Contents.json | 12 + .../Icons/SavedMessages.imageset/bookmark.pdf | Bin 0 -> 5656 bytes .../Icons/Share.imageset/Contents.json | 12 + .../Item List/Icons/Share.imageset/Share.pdf | Bin 0 -> 5739 bytes .../Icons/Shuffle.imageset/Contents.json | 12 + .../Icons/Shuffle.imageset/shuffle.pdf | Bin 0 -> 6368 bytes .../Icons}/Speed.imageset/Contents.json | 0 .../Item List/Icons/Speed.imageset/Speed.pdf | Bin 0 -> 5936 bytes .../Icons/Stars.imageset/Contents.json | 12 + .../Item List/Icons/Stars.imageset/stars.pdf | Bin 0 -> 5980 bytes .../Icons/Stats.imageset/Contents.json | 12 + .../Item List/Icons/Stats.imageset/stats.pdf | Bin 0 -> 5982 bytes .../Icons/Sticker.imageset/Contents.json | 12 + .../Icons/Sticker.imageset/sticker.pdf | Bin 0 -> 6951 bytes .../Icons}/Stories.imageset/Contents.json | 0 .../Icons/Stories.imageset/stories.pdf | Bin 0 -> 7016 bytes .../Icons/Support.imageset/Contents.json | 12 + .../Icons/Support.imageset/support.pdf} | Bin 11545 -> 13228 bytes .../Icons/Tag.imageset/Contents.json | 12 + .../Item List/Icons/Tag.imageset/Tag.pdf | Bin 0 -> 5938 bytes .../Icons/Timer.imageset}/Contents.json | 2 +- .../Icons/Timer.imageset/stopwatch.pdf | Bin 0 -> 5653 bytes .../Icons/Tips.imageset/Contents.json | 12 + .../Item List/Icons/Tips.imageset/lamp.pdf | Bin 0 -> 5583 bytes .../Icons/Translation.imageset/Contents.json | 12 + .../Translation.imageset/translation.pdf | Bin 0 -> 6189 bytes .../Icons/Update.imageset/Contents.json | 12 + .../Icons/Update.imageset/rotate.pdf | Bin 0 -> 5925 bytes .../Icons/Video.imageset/Contents.json | 12 + .../Icons/Video.imageset/videocamera.pdf | Bin 0 -> 5824 bytes .../Icons/View.imageset/Contents.json | 12 + .../Item List/Icons/View.imageset/eye.pdf | Bin 0 -> 5733 bytes .../Icons/Wallpaper.imageset/Contents.json | 12 + .../Icons/Wallpaper.imageset/wallpaper.pdf | Bin 0 -> 6548 bytes .../Icons/Wifi.imageset/Contents.json | 12 + .../Item List/Icons/Wifi.imageset/wifi.pdf | Bin 0 -> 5686 bytes .../Item List/Icons/X2.imageset/2x.pdf | Bin 0 -> 5911 bytes .../Icons/X2.imageset}/Contents.json | 0 .../BusinessPerk/Away.imageset/bubble_30.pdf | 191 ------ .../ChatLinks.imageset/linktochat.pdf | 195 ------ .../Chatbots.imageset/bots_30.pdf | 219 ------- .../Greetings.imageset/hand_30.pdf | 179 ----- .../BusinessPerk/Hours.imageset/clock_30.pdf | 163 ----- .../BusinessPerk/Intro.imageset/Contents.json | 12 - .../Intro.imageset/introsetting_30.pdf | 182 ------ .../BusinessPerk/Links.imageset/Contents.json | 12 - .../Links.imageset/linktochat.pdf | 195 ------ .../Location.imageset/Contents.json | 12 - .../Location.imageset/location_30.pdf | 158 ----- .../Replies.imageset/Contents.json | 12 - .../Replies.imageset/stories_30.pdf | 158 ----- .../BusinessPerk/Status.imageset/work_30.pdf | 183 ------ .../BusinessPerk/Tag.imageset/Contents.json | 12 - .../BusinessPerk/Tag.imageset/tag_30 (3).pdf | 164 ----- .../Premium/Perk/AppIcon.imageset/AppIcon.pdf | 159 ----- .../Perk/Avatar.imageset/Contents.json | 12 - .../Premium/Perk/Avatar.imageset/Profile.pdf | 79 --- .../Premium/Perk/Badge.imageset/Badge.pdf | 97 --- .../Premium/Perk/Chat.imageset/Chat.pdf | 76 --- .../Perk/Colors.imageset/Contents.json | 12 - .../Premium/Perk/Colors.imageset/brush_30.pdf | 169 ----- .../Premium/Perk/Emoji.imageset/Contents.json | 12 - .../Premium/Perk/Emoji.imageset/Emoji (1).pdf | 120 ---- .../Perk/LastSeen.imageset/Contents.json | 12 - .../Perk/LastSeen.imageset/lastseen_30.pdf | 169 ----- .../Premium/Perk/Limits.imageset/2x.pdf | 107 --- .../MessageEffects.imageset/Contents.json | 12 - .../MessageEffects.imageset/msgeffects.pdf | Bin 7485 -> 0 bytes .../MessagePrivacy.imageset/Contents.json | 12 - .../messageprivacy_30.pdf | 185 ------ .../Perk/MessageTags.imageset/Contents.json | 12 - .../Perk/MessageTags.imageset/tag_30 (2).pdf | 164 ----- .../Premium/Perk/NoAds.imageset/Ads.pdf | 127 ---- .../Perk/PaidMessages.imageset/Contents.json | 12 - .../Perk/Reactions.imageset/Contents.json | 12 - .../Perk/Reactions.imageset/Reactions.pdf | 75 --- .../Premium/Perk/Speed.imageset/Speed.pdf | 112 ---- .../Premium/Perk/Status.imageset/status.pdf | 98 --- .../Perk/Stickers.imageset/Contents.json | 12 - .../Perk/Stickers.imageset/Stickers.pdf | 149 ----- .../Premium/Perk/Stories.imageset/stories.pdf | 245 ------- .../Premium/Perk/Todo.imageset/Contents.json | 12 - .../Perk/Translation.imageset/Contents.json | 12 - .../Translation.imageset/translatepremium.pdf | 125 ---- .../Premium/Perk/Upload.imageset/Files.pdf | 119 ---- .../Premium/Perk/Voice.imageset/Contents.json | 12 - .../Premium/Perk/Voice.imageset/Voice.pdf | 91 --- .../Perk/Wallpapers.imageset/Contents.json | 12 - .../Wallpapers.imageset/wallpapers_30.pdf | 227 ------- .../Chat/ChatControllerLoadDisplayNode.swift | 27 + .../Chat/ChatMessageActionOptions.swift | 4 +- .../TelegramUI/Sources/ChatController.swift | 13 +- .../ChatInterfaceStateContextMenus.swift | 11 +- .../OverlayAudioPlayerControllerNode.swift | 2 +- .../Sources/PollResultsController.swift | 2 +- .../Sources/SharedAccountContext.swift | 7 +- .../TransformOutgoingMessageMedia.swift | 2 +- submodules/TranslateUI/BUILD | 7 + .../TranslateUI/Sources/TranslateScreen.swift | 613 +++++++++++++++--- 265 files changed, 3474 insertions(+), 6149 deletions(-) create mode 100644 submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/BUILD create mode 100644 submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/Sources/TranslationLanguagesContextMenuContent.swift rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk/ChatLinks.imageset => Chat/Message/LivePhoto.imageset}/Contents.json (76%) create mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Message/LivePhoto.imageset/livecorner.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/Chat.imageset => Item List/Icons/Add.imageset}/Contents.json (79%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Add.imageset/plus.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/appearance.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/Badge.imageset => Item List/Icons/Away.imageset}/Contents.json (79%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Away.imageset/away.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Backdrop@2x.png create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Backdrop@3x.png create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Contents.json rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/Upload.imageset => Item List/Icons/Block.imageset}/Contents.json (79%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Block.imageset/stop.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/brush.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk/Hours.imageset => Item List/Icons/Case.imageset}/Contents.json (77%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Case.imageset/suitcase.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Cellular.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Cellular.imageset/mobiledata.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk/Status.imageset => Item List/Icons/Channel.imageset}/Contents.json (78%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Channel.imageset/channel.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Chat.imageset/Bubble.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/Status.imageset => Item List/Icons/Chat.imageset}/Contents.json (78%) rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk/Chatbots.imageset => Item List/Icons/Chatbot.imageset}/Contents.json (78%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Chatbot.imageset/chatbot.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/checkbox.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/clock.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk => Item List/Icons}/Contents.json (100%) rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/AppIcon.imageset => Item List/Icons/Data.imageset}/Contents.json (78%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Data.imageset/storage.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk/Greetings.imageset => Item List/Icons/Devices.imageset}/Contents.json (78%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Devices.imageset/devices.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Effect.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Effect.imageset/effects.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Email.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Email.imageset/email.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/emoji.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/FaceId.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/FaceId.imageset/faceid.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/question.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/File.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/File.imageset/document.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/folder.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/gifs.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Gift.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Gift.imageset/gift.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/gradient.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Group.imageset/3members.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Group.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/hand.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/icons.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Intro.imageset/Contents.json rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/PaidMessages.imageset/paidmessages.pdf => Item List/Icons/Intro.imageset/intro.pdf} (76%) rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/NoAds.imageset => Item List/Icons/Key.imageset}/Contents.json (80%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Key.imageset/key.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Language.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Language.imageset/globe.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/lastseen.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/link.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/location.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/LockBubble.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/LockBubble.imageset/LockBubble.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/member.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/MessageEffect.imageset/Bubble-1.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/MessageEffect.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Microphone.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Microphone.imageset/microphone.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/multiple.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/speaker.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk => Item List/Icons}/NoForward.imageset/Contents.json (100%) rename submodules/TelegramUI/Images.xcassets/{Premium/Perk => Item List/Icons}/NoForward.imageset/spy.pdf (73%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/bell.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/phone.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Photo.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Photo.imageset/photo.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/piechart.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/music.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/PowerSaving.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/PowerSaving.imageset/battery.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/premium.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/lock.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/profile.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Reactions.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Reactions.imageset/heart.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/bookmark.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Share.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Share.imageset/Share.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/shuffle.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk => Item List/Icons}/Speed.imageset/Contents.json (100%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Speed.imageset/Speed.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/stars.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/stats.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/sticker.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk => Item List/Icons}/Stories.imageset/Contents.json (100%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Stories.imageset/stories.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Support.imageset/Contents.json rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/Todo.imageset/checks.pdf => Item List/Icons/Support.imageset/support.pdf} (76%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Tag.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/BusinessPerk/Away.imageset => Item List/Icons/Timer.imageset}/Contents.json (77%) create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Timer.imageset/stopwatch.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/lamp.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/translation.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Update.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Update.imageset/rotate.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Video.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Video.imageset/videocamera.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/eye.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/wallpaper.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Wifi.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/Wifi.imageset/wifi.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Item List/Icons/X2.imageset/2x.pdf rename submodules/TelegramUI/Images.xcassets/{Premium/Perk/Limits.imageset => Item List/Icons/X2.imageset}/Contents.json (100%) delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Away.imageset/bubble_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/linktochat.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Chatbots.imageset/bots_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Greetings.imageset/hand_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Hours.imageset/clock_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/introsetting_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/linktochat.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/location_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/stories_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/work_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/tag_30 (3).pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/AppIcon.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Profile.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Badge.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Chat.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/brush_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Emoji (1).pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/lastseen_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Limits.imageset/2x.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/msgeffects.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/messageprivacy_30.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/tag_30 (2).pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Ads.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/PaidMessages.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Reactions.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Speed.imageset/Speed.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Status.imageset/status.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Stickers.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Stories.imageset/stories.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Todo.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/translatepremium.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Files.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Voice.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/Contents.json delete mode 100644 submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/wallpapers_30.pdf diff --git a/submodules/AttachmentUI/Sources/AttachmentContainer.swift b/submodules/AttachmentUI/Sources/AttachmentContainer.swift index c45190c870..4ea1a636c3 100644 --- a/submodules/AttachmentUI/Sources/AttachmentContainer.swift +++ b/submodules/AttachmentUI/Sources/AttachmentContainer.swift @@ -682,6 +682,7 @@ final class AttachmentContainer: ASDisplayNode, ASGestureRecognizerDelegate { if let view = view as? UIScrollView { if view.description.contains("WKChildScroll") { return nil + } else if view is UITextView { } else { return (view, nil) } diff --git a/submodules/AttachmentUI/Sources/AttachmentPanel.swift b/submodules/AttachmentUI/Sources/AttachmentPanel.swift index 8ca0b54ad5..4bb1b98337 100644 --- a/submodules/AttachmentUI/Sources/AttachmentPanel.swift +++ b/submodules/AttachmentUI/Sources/AttachmentPanel.swift @@ -1410,6 +1410,7 @@ final class AttachmentPanel: ASDisplayNode, ASScrollViewDelegate, ASGestureRecog }, dismissForwardMessages: { }, dismissSuggestPost: { }, displayUndo: { _ in + }, presentInputTextTranslation: { _, _ in }, sendEmoji: { _, _, _ in }, updateHistoryFilter: { _ in }, updateChatLocationThread: { _, _ in diff --git a/submodules/BrowserUI/Sources/BrowserBookmarksScreen.swift b/submodules/BrowserUI/Sources/BrowserBookmarksScreen.swift index f3c9d0f50f..2ea2b2f233 100644 --- a/submodules/BrowserUI/Sources/BrowserBookmarksScreen.swift +++ b/submodules/BrowserUI/Sources/BrowserBookmarksScreen.swift @@ -126,7 +126,7 @@ public final class BrowserBookmarksScreen: ViewController { }, scheduleCurrentMessage: { _ in }, sendScheduledMessagesNow: { _ in }, editScheduledMessagesTime: { _ in - }, performTextSelectionAction: { _, _, _, _ in + }, performTextSelectionAction: { _, _, _, _, _ in }, displayImportedMessageTooltip: { _ in }, displaySwipeToReplyHint: { }, dismissReplyMarkupMessage: { _ in diff --git a/submodules/ChatPresentationInterfaceState/Sources/ChatPanelInterfaceInteraction.swift b/submodules/ChatPresentationInterfaceState/Sources/ChatPanelInterfaceInteraction.swift index 9aa995b19c..76a15829be 100644 --- a/submodules/ChatPresentationInterfaceState/Sources/ChatPanelInterfaceInteraction.swift +++ b/submodules/ChatPresentationInterfaceState/Sources/ChatPanelInterfaceInteraction.swift @@ -195,6 +195,7 @@ public final class ChatPanelInterfaceInteraction { public let dismissForwardMessages: () -> Void public let dismissSuggestPost: () -> Void public let displayUndo: (UndoOverlayContent) -> Void + public let presentInputTextTranslation: (NSAttributedString, @escaping (NSAttributedString) -> Void) -> Void public let sendEmoji: (String, ChatTextInputTextCustomEmojiAttribute, Bool) -> Void public let requestLayout: (ContainedViewLayoutTransition) -> Void public let chatController: () -> ViewController? @@ -321,6 +322,7 @@ public final class ChatPanelInterfaceInteraction { dismissForwardMessages: @escaping () -> Void, dismissSuggestPost: @escaping () -> Void, displayUndo: @escaping (UndoOverlayContent) -> Void, + presentInputTextTranslation: @escaping (NSAttributedString, @escaping (NSAttributedString) -> Void) -> Void, sendEmoji: @escaping (String, ChatTextInputTextCustomEmojiAttribute, Bool) -> Void, updateHistoryFilter: @escaping ((ChatPresentationInterfaceState.HistoryFilter?) -> ChatPresentationInterfaceState.HistoryFilter?) -> Void, updateChatLocationThread: @escaping (Int64?, ChatControllerAnimateInnerChatSwitchDirection?) -> Void, @@ -450,6 +452,7 @@ public final class ChatPanelInterfaceInteraction { self.dismissForwardMessages = dismissForwardMessages self.dismissSuggestPost = dismissSuggestPost self.displayUndo = displayUndo + self.presentInputTextTranslation = presentInputTextTranslation self.sendEmoji = sendEmoji self.updateHistoryFilter = updateHistoryFilter self.updateChatLocationThread = updateChatLocationThread @@ -587,6 +590,7 @@ public final class ChatPanelInterfaceInteraction { }, dismissForwardMessages: { }, dismissSuggestPost: { }, displayUndo: { _ in + }, presentInputTextTranslation: { _, _ in }, sendEmoji: { _, _, _ in }, updateHistoryFilter: { _ in }, updateChatLocationThread: { _, _ in diff --git a/submodules/ContactListUI/BUILD b/submodules/ContactListUI/BUILD index 67211ef08d..fa3d0c4468 100644 --- a/submodules/ContactListUI/BUILD +++ b/submodules/ContactListUI/BUILD @@ -47,6 +47,7 @@ swift_library( "//submodules/ContextUI", "//submodules/TelegramUI/Components/EdgeEffect", "//submodules/TelegramUI/Components/SearchInputPanelComponent", + "//submodules/TelegramUI/Components/ButtonComponent", "//submodules/SearchBarNode", ], visibility = [ diff --git a/submodules/GalleryUI/Sources/GalleryPagerNode.swift b/submodules/GalleryUI/Sources/GalleryPagerNode.swift index 457e6a429b..8ec3af00ca 100644 --- a/submodules/GalleryUI/Sources/GalleryPagerNode.swift +++ b/submodules/GalleryUI/Sources/GalleryPagerNode.swift @@ -89,7 +89,7 @@ public final class GalleryPagerNode: ASDisplayNode, ASScrollViewDelegate, ASGest private let leftFadeNode: ASDisplayNode private let rightFadeNode: ASDisplayNode private var highlightedSide: Bool? - private var activeSide: Bool? + private var activeSide: GalleryItemNode.ActiveEdge? private var canPerformSideNavigationAction: Bool = false private var sideActionInitialPosition: CGPoint? @@ -208,6 +208,10 @@ public final class GalleryPagerNode: ASDisplayNode, ASScrollViewDelegate, ASGest activeSide = true } + if activeSide == nil, let centralIndex = strongSelf.centralItemIndex, let itemNode = strongSelf.visibleItemNode(at: centralIndex), itemNode.hasActiveEdgeAction(edge: .middle) { + activeSide = true + } + if !strongSelf.pagingEnabled { highlightedSide = nil } @@ -233,7 +237,7 @@ public final class GalleryPagerNode: ASDisplayNode, ASScrollViewDelegate, ASGest let size = strongSelf.bounds var highlightedSide: Bool? - var activeSide: Bool? + var activeSide: GalleryItemNode.ActiveEdge? if let point { if point.x < edgeWidth(width: size.width) { if strongSelf.canGoToPreviousItem() { @@ -249,9 +253,11 @@ public final class GalleryPagerNode: ASDisplayNode, ASScrollViewDelegate, ASGest } } if point.x < activeEdgeWidth(width: size.width), let centralIndex = strongSelf.centralItemIndex, let itemNode = strongSelf.visibleItemNode(at: centralIndex), itemNode.hasActiveEdgeAction(edge: .left) { - activeSide = false + activeSide = .left } else if point.x > 0.0, let centralIndex = strongSelf.centralItemIndex, let itemNode = strongSelf.visibleItemNode(at: centralIndex), itemNode.hasActiveEdgeAction(edge: .right) { - activeSide = true + activeSide = .right + } else if let centralIndex = strongSelf.centralItemIndex, let itemNode = strongSelf.visibleItemNode(at: centralIndex), itemNode.hasActiveEdgeAction(edge: .middle) { + activeSide = .middle } } @@ -303,7 +309,7 @@ public final class GalleryPagerNode: ASDisplayNode, ASScrollViewDelegate, ASGest return } if let centralIndex = self.centralItemIndex, let itemNode = self.visibleItemNode(at: centralIndex) { - itemNode.setActiveEdgeAction(edge: activeSide ? .right : .left) + itemNode.setActiveEdgeAction(edge: activeSide) } self.canPerformSideNavigationAction = false diff --git a/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift index a714c74319..7de25df73e 100644 --- a/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift @@ -301,7 +301,7 @@ private final class UniversalVideoGalleryItemOverlayNode: GalleryOverlayContentN let currentTime = Int32(CFAbsoluteTimeGetCurrent()) var currentAd: (Int32, Message?)? - for (time, maybeMessage) in adSchedule { + for (time, maybeMessage) in self.adSchedule { if currentTime > time { currentAd = (time, maybeMessage) } @@ -954,6 +954,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { private var isAnimatingOut: Bool = false private var isLivePhoto = false private var didAutoplayLivePhotoOnce = false + private var isPlayingLivePhotoByHolding = false init(context: AccountContext, presentationData: PresentationData, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction, Message) -> Void, present: @escaping (ViewController, Any?) -> Void) { self.context = context @@ -1365,6 +1366,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { self.dismissOnOrientationChange = item.landscape self.isLivePhoto = false self.didAutoplayLivePhotoOnce = false + self.isPlayingLivePhotoByHolding = false var hasLinkedStickers = false if let content = item.content as? NativeVideoContent { @@ -1701,6 +1703,9 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { initialBuffering = true } isPaused = !whilePlaying + if strongSelf.isPlayingLivePhotoByHolding { + isPaused = false + } var isStreaming = false if let fetchStatus = strongSelf.fetchStatus { switch fetchStatus { @@ -1824,7 +1829,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { if case let .message(message, _) = item.contentInfo, let content = item.content as? NativeVideoContent, let image = message.media.first(where: { $0 is TelegramMediaImage }), let imageReference = content.fileReference.abstract.withUpdatedMedia(image).concrete(TelegramMediaImage.self) { let imageNode = TransformImageNode() - imageNode.alpha = 0.0 + imageNode.alpha = 1.0 imageNode.isUserInteractionEnabled = false imageNode.setSignal(chatMessagePhoto(postbox: context.account.postbox, userLocation: content.userLocation, photoReference: imageReference, synchronousLoad: true, highQuality: true)) imageNode.frame = CGRect(origin: .zero, size: videoSize) @@ -1919,9 +1924,8 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { } if strongSelf.isLivePhoto { - if let imageNode = strongSelf.imageNode { - imageNode.alpha = 1.0 - imageNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + if !strongSelf.isPlayingLivePhotoByHolding { + strongSelf.setLivePhotoVideoVisible(false, animated: true) } } else if let snapshotView = videoNode?.view.snapshotView(afterScreenUpdates: false) { videoNode?.view.addSubview(snapshotView) @@ -1930,8 +1934,12 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { }) } - videoNode?.seek(0.0) - + if !strongSelf.isLivePhoto { + videoNode?.seek(0.0) + } else if strongSelf.isPlayingLivePhotoByHolding { + videoNode?.playOnceWithSound(playAndRecord: false, actionAtEnd: .loop) + } + if strongSelf.actionAtEnd == .stop && strongSelf.isCentral == true { strongSelf.isPlayingPromise.set(false) strongSelf.isPlaying = false @@ -2020,12 +2028,12 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { } else { livePhotoIconNode = ASImageNode() livePhotoIconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Media Editor/LiveOn"), color: .white) - self.addSubnode(livePhotoIconNode) + //self.addSubnode(livePhotoIconNode) self.livePhotoIconNode = livePhotoIconNode } if let icon = livePhotoIconNode.image { - livePhotoIconNode.frame = CGRect(origin: CGPoint(x: 8.0, y: 8.0 + 169.0), size: icon.size) + livePhotoIconNode.frame = CGRect(origin: CGPoint(x: 8.0, y: 8.0), size: icon.size) } } else if let livePhotoIconNode = self.livePhotoIconNode { self.livePhotoIconNode = nil @@ -2102,11 +2110,48 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { return false } self.didAutoplayLivePhotoOnce = true - videoNode.alpha = 1.0 + self.setLivePhotoVideoVisible(true, animated: true) videoNode.continuePlayingWithoutSound(actionAtEnd: .stop) return true } + private func setLivePhotoVideoVisible(_ isVisible: Bool, animated: Bool) { + guard let imageNode = self.imageNode else { + return + } + let targetAlpha: CGFloat = isVisible ? 0.0 : 1.0 + guard imageNode.alpha != targetAlpha else { + return + } + + let previousAlpha = imageNode.alpha + imageNode.layer.removeAnimation(forKey: "opacity") + imageNode.alpha = targetAlpha + if animated { + imageNode.layer.animateAlpha(from: previousAlpha, to: targetAlpha, duration: 0.2) + } + } + + private func updateLivePhotoHoldPlayback(isActive: Bool, animated: Bool) { + guard self.isLivePhoto, let videoNode = self.videoNode else { + return + } + guard self.isPlayingLivePhotoByHolding != isActive else { + return + } + + self.isPlayingLivePhotoByHolding = isActive + if isActive { + self.setLivePhotoVideoVisible(true, animated: animated) + videoNode.seek(0.0) + videoNode.play() + } else { + videoNode.pause() + videoNode.seek(0.0) + self.setLivePhotoVideoVisible(false, animated: animated) + } + } + override func centralityUpdated(isCentral: Bool) { super.centralityUpdated(isCentral: isCentral) @@ -2146,6 +2191,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { } } } else { + self.updateLivePhotoHoldPlayback(isActive: false, animated: false) self.isPlayingPromise.set(false) self.isPlaying = false @@ -2182,11 +2228,13 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { if self.skipInitialPause { self.skipInitialPause = false } else { + self.updateLivePhotoHoldPlayback(isActive: false, animated: false) self.ignorePauseStatus = true videoNode.pause() videoNode.seek(0.0) } } else { + self.updateLivePhotoHoldPlayback(isActive: false, animated: false) if let status = self.playerStatusValue { self.maybeStorePlaybackStatus(status: status) } @@ -2297,7 +2345,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { private var actionAtEnd: MediaPlayerPlayOnceWithSoundActionAtEnd { if self.isLivePhoto { - return .stop + return self.isPlayingLivePhotoByHolding ? .loop : .stop } if let item = self.item { if !item.isSecret, let content = item.content as? NativeVideoContent, content.duration <= 30 { @@ -3980,7 +4028,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { override func hasActiveEdgeAction(edge: ActiveEdge) -> Bool { if case .middle = edge { return self.isLivePhoto - } else if case .right = edge { + } else if case .right = edge, !self.isLivePhoto { if let playerStatusValue = self.playerStatusValue, case .playing = playerStatusValue.status { return true } else { @@ -3996,7 +4044,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { return } if let edge, case .middle = edge { - print() + self.updateLivePhotoHoldPlayback(isActive: true, animated: true) } else if let edge, case .right = edge { let effectiveRate: Double if let current = self.activeEdgeRateState { @@ -4010,9 +4058,12 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { self.activeEdgeRateState = (playbackRate, effectiveRate) } videoNode.setBaseRate(effectiveRate) - } else if let (initialRate, _) = self.activeEdgeRateState { - self.activeEdgeRateState = nil - videoNode.setBaseRate(initialRate) + } else { + self.updateLivePhotoHoldPlayback(isActive: false, animated: true) + if let (initialRate, _) = self.activeEdgeRateState { + self.activeEdgeRateState = nil + videoNode.setBaseRate(initialRate) + } } if let validLayout = self.validLayout { diff --git a/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoEditAdjustments.h b/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoEditAdjustments.h index 8c219596f8..f579444c19 100644 --- a/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoEditAdjustments.h +++ b/submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGVideoEditAdjustments.h @@ -50,6 +50,7 @@ typedef enum + (instancetype)editAdjustmentsWithOriginalSize:(CGSize)originalSize preset:(TGMediaVideoConversionPreset)preset; + (instancetype)editAdjustmentsWithOriginalSize:(CGSize)originalSize preset:(TGMediaVideoConversionPreset)preset bounce:(bool)bounce; + (instancetype)editAdjustmentsWithPhotoEditorValues:(PGPhotoEditorValues *)values preset:(TGMediaVideoConversionPreset)preset; ++ (instancetype)editAdjustmentsWithPhotoEditorValues:(PGPhotoEditorValues *)values preset:(TGMediaVideoConversionPreset)preset bounce:(bool)bounce sendAsGif:(bool)sendAsGif; + (instancetype)editAdjustmentsWithPhotoEditorValues:(PGPhotoEditorValues *)values preset:(TGMediaVideoConversionPreset)preset documentId:(int64_t)documentId colors:(NSArray *)colors; + (instancetype)editAdjustmentsWithPhotoEditorValues:(PGPhotoEditorValues *)values preset:(TGMediaVideoConversionPreset)preset stickerPackId:(int64_t)stickerPackId stickerPackAccessHash:(int64_t)stickerPackAccessHash documentId:(int64_t)documentId colors:(NSArray *)colors; + (instancetype)editAdjustmentsWithDictionary:(NSDictionary *)dictionary; diff --git a/submodules/LegacyComponents/Sources/TGMediaAssetsController.m b/submodules/LegacyComponents/Sources/TGMediaAssetsController.m index 347a9c0d28..7fb1541958 100644 --- a/submodules/LegacyComponents/Sources/TGMediaAssetsController.m +++ b/submodules/LegacyComponents/Sources/TGMediaAssetsController.m @@ -1190,11 +1190,22 @@ dict[@"coverImage"] = image; if (livePhotoMode == TGMediaLivePhotoModeBounce) { - dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithOriginalSize:dimensions preset:TGMediaVideoConversionPresetCompressedHigh bounce:true]; + if ([adjustments isKindOfClass:[PGPhotoEditorValues class]]) { + dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithPhotoEditorValues:adjustments preset:TGMediaVideoConversionPresetCompressedHigh bounce:true sendAsGif:true]; + } else { + dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithOriginalSize:dimensions preset:TGMediaVideoConversionPresetCompressedHigh bounce:true]; + } } else if (livePhotoMode == TGMediaLivePhotoModeLoop) { - dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithOriginalSize:dimensions preset:TGMediaVideoConversionPresetCompressedHigh bounce:false]; + if ([adjustments isKindOfClass:[PGPhotoEditorValues class]]) { + dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithPhotoEditorValues:adjustments preset:TGMediaVideoConversionPresetCompressedHigh bounce:false sendAsGif:true]; + } else { + dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithOriginalSize:dimensions preset:TGMediaVideoConversionPresetCompressedHigh bounce:false]; + } } else { dict[@"livePhoto"] = @true; + if ([adjustments isKindOfClass:[PGPhotoEditorValues class]]) { + dict[@"adjustments"] = [TGVideoEditAdjustments editAdjustmentsWithPhotoEditorValues:adjustments preset:TGMediaVideoConversionPresetCompressedMedium bounce:false sendAsGif:false]; + } } if (adjustments.paintingData.stickers.count > 0) diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryInterfaceView.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryInterfaceView.m index d8ffe716b6..6f3d8df1c1 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryInterfaceView.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryInterfaceView.m @@ -341,6 +341,11 @@ TGMediaPickerGalleryVideoItemView *videoItemView = (TGMediaPickerGalleryVideoItemView *)strongSelf->_currentItemView; [videoItemView returnFromEditing]; } + else if ([currentItemView isKindOfClass:[TGMediaPickerGalleryPhotoItemView class]]) + { + TGMediaPickerGalleryPhotoItemView *photoItemView = (TGMediaPickerGalleryPhotoItemView *)strongSelf->_currentItemView; + [photoItemView returnFromEditing]; + } [strongSelf setSelectionInterfaceHidden:false delay:0.25 animated:true]; [strongSelf setItemHeaderViewHidden:false animated:true]; @@ -752,10 +757,6 @@ [_muteButton setImage:muteActiveIcon forState:UIControlStateSelected]; [_muteButton setImage:muteActiveIcon forState:UIControlStateSelected | UIControlStateHighlighted]; - if (@"".length == 0) { - hasLivePhotoButton = false; - } - [_captionMixin setLivePhotoHidden:!hasLivePhotoButton]; [self setNeedsLayout]; diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryModel.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryModel.m index 326c1a548f..d3b4cf056e 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryModel.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryModel.m @@ -14,6 +14,7 @@ #import #import #import +#import "TGMediaPickerGalleryPhotoItemView.h" #import #import @@ -573,9 +574,11 @@ [strongSelf updateHiddenItem]; - UIView *referenceView = [strongSelf referenceViewForItem:item frame:NULL]; - if ([referenceView isKindOfClass:[TGMediaPickerGalleryVideoItemView class]]) - [(TGMediaPickerGalleryVideoItemView *)referenceView returnFromEditing]; + TGModernGalleryItemView *galleryItemView = [strongSelf.controller itemViewForItem:item]; + if ([galleryItemView isKindOfClass:[TGMediaPickerGalleryVideoItemView class]]) + [(TGMediaPickerGalleryVideoItemView *)galleryItemView returnFromEditing]; + else if ([galleryItemView isKindOfClass:[TGMediaPickerGalleryPhotoItemView class]]) + [(TGMediaPickerGalleryPhotoItemView *)galleryItemView returnFromEditing]; if (iosMajorVersion() >= 7) [strongSelf.controller setNeedsStatusBarAppearanceUpdate]; diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.h b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.h index 3c1046ac92..0d325094ac 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.h +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.h @@ -9,6 +9,7 @@ @property (nonatomic, strong) TGModernGalleryImageItemImageView *imageView; - (void)setLivePhotoMode:(TGMediaLivePhotoMode)mode; +- (void)returnFromEditing; - (void)toggleSendAsGif; @end diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.m index cc41f33adf..f3f831028d 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryPhotoItemView.m @@ -17,11 +17,14 @@ #import #import +#import #import #import +#import "PGPhotoEditor.h" +#import "TGPhotoEditorPreviewView.h" #import "TGPhotoDrawingController.h" #import @@ -30,32 +33,6 @@ #import #import -@interface TGMediaPickerGalleryLivePhotoVideoView : UIView - -@property (nonatomic, strong) AVPlayer *player; - -@end - -@implementation TGMediaPickerGalleryLivePhotoVideoView - -+ (Class)layerClass -{ - return [AVPlayerLayer class]; -} - -- (AVPlayer *)player -{ - return ((AVPlayerLayer *)self.layer).player; -} - -- (void)setPlayer:(AVPlayer *)player -{ - ((AVPlayerLayer *)self.layer).player = player; - ((AVPlayerLayer *)self.layer).videoGravity = AVLayerVideoGravityResizeAspectFill; -} - -@end - @interface TGMediaPickerGalleryPhotoItemView () { TGMediaPickerGalleryFetchResultItem *_fetchItem; @@ -69,6 +46,8 @@ UIView *_temporaryRepView; + UIImageView *_paintingImageView; + UIImage *_paintingSourceImage; UIView *_contentView; UIView *_contentWrapperView; UIView *_entitiesView; @@ -81,7 +60,8 @@ TGMediaLivePhotoMode _livePhotoMode; - TGMediaPickerGalleryLivePhotoVideoView *_livePhotoVideoView; + TGPhotoEditorPreviewView *_livePhotoVideoView; + PGPhotoEditor *_livePhotoEditor; AVPlayer *_livePhotoPlayer; id _livePhotoDidPlayToEndObserver; UILongPressGestureRecognizer *_livePhotoPressGestureRecognizer; @@ -89,6 +69,9 @@ bool _livePhotoIsLoadingPlayer; bool _livePhotoPlaybackLooping; bool _livePhotoIsHolding; + bool _livePhotoIsVisible; + bool _cancelSingleTapAfterLivePhotoHold; + bool _livePhotoAutoplayPending; bool _livePhotoPendingPlayback; bool _livePhotoPendingPlaybackLooping; @@ -132,7 +115,11 @@ }; [self.scrollView addSubview:_imageView]; + _paintingImageView = [[UIImageView alloc] init]; + [_imageView addSubview:_paintingImageView]; + _contentView = [[UIView alloc] init]; + _contentView.clipsToBounds = true; [_imageView addSubview:_contentView]; _contentWrapperView = [[UIView alloc] init]; @@ -166,6 +153,12 @@ { self.imageView.hidden = hidden; _temporaryRepView.hidden = hidden; + _livePhotoVideoView.hidden = hidden; + _paintingImageView.hidden = hidden || (_paintingImageView.image == nil); + _contentView.hidden = hidden; + + if (hidden) + [self stopAndHideLivePhotoVideo:false]; } - (void)prepareForRecycle @@ -173,6 +166,9 @@ _imageView.hidden = false; [_imageView reset]; [self setProgressVisible:false value:0.0f animated:false]; + _livePhotoIsVisible = false; + _cancelSingleTapAfterLivePhotoHold = false; + _livePhotoAutoplayPending = false; [self stopAndCleanupLivePhotoPlayback]; _livePhotoMode = TGMediaLivePhotoModeOff; @@ -196,7 +192,8 @@ [super setItem:item synchronously:synchronously]; [self stopAndCleanupLivePhotoPlayback]; - _livePhotoMode = TGMediaLivePhotoModeOff; + _livePhotoMode = (item.editingContext != nil) ? [item.editingContext livePhotoModeForItem:item.editableMediaItem] : TGMediaLivePhotoModeOff; + [self updatePaintingImage:[item.editingContext adjustmentsForItem:item.editableMediaItem]]; if (_entitiesView == nil) { _entitiesView = [item.stickersContext drawingEntitiesViewWithSize:item.asset.originalSize]; @@ -235,12 +232,9 @@ }; SSignal *assetSignal = [SSignal single:nil]; - if ([item.asset isKindOfClass:[TGMediaAsset class]]) - { + if ([item.asset isKindOfClass:[TGMediaAsset class]]) { assetSignal = [TGMediaAssetImageSignals imageForAsset:(TGMediaAsset *)item.asset imageType:(item.immediateThumbnailImage != nil) ? TGMediaAssetImageTypeScreen : TGMediaAssetImageTypeFastScreen size:CGSizeMake(1280, 1280)]; - } - else - { + } else { assetSignal = [item.asset screenImageSignal:0.0]; } @@ -252,21 +246,16 @@ __strong TGMediaPickerGalleryPhotoItemView *strongSelf = weakSelf; if (strongSelf == nil) return [SSignal complete]; - - if (result == nil) - { + + if (result == nil) { return [[assetSignal deliverOn:[SQueue mainQueue]] afterNext:^(__unused id next) { fadeOutRepView(); }]; - } - else if ([result isKindOfClass:[UIView class]]) - { + } else if ([result isKindOfClass:[UIView class]]) { [strongSelf _setTemporaryRepView:result]; return [[SSignal single:nil] deliverOn:[SQueue mainQueue]]; - } - else - { + } else { return [[[SSignal single:result] deliverOn:[SQueue mainQueue]] afterNext:^(__unused id next) { fadeOutRepView(); @@ -275,14 +264,19 @@ }]; SSignal *adjustmentsSignal = [item.editingContext adjustmentsSignalForItem:item.editableMediaItem]; - [_adjustmentsDisposable setDisposable:[[adjustmentsSignal deliverOn:[SQueue mainQueue]] startStrictWithNext:^(__unused id next) + [_adjustmentsDisposable setDisposable:[[adjustmentsSignal deliverOn:[SQueue mainQueue]] startStrictWithNext:^(id next) { __strong TGMediaPickerGalleryPhotoItemView *strongSelf = weakSelf; if (strongSelf == nil) return; - [strongSelf layoutEntities]; + [strongSelf updatePaintingImage:next]; + [strongSelf layoutEditedSubviews]; [strongSelf->_entitiesView setupWithEntitiesData:next.paintingData.entitiesData]; + [strongSelf->_livePhotoEditor importAdjustments:next]; + + if (strongSelf->_livePhotoPlayer != nil && strongSelf->_livePhotoPlayer.rate <= FLT_EPSILON) + [strongSelf->_livePhotoEditor reprocess]; } file:__FILE_NAME__ line:__LINE__]]; } @@ -301,20 +295,13 @@ if ([next isKindOfClass:[UIImage class]]) { strongSelf->_imageSize = ((UIImage *)next).size; - [strongSelf layoutEntities]; + //[strongSelf layoutEditedSubviews]; } [strongSelf reset]; - [strongSelf layoutLivePhotoVideoView]; - + [strongSelf layoutEditedSubviews]; }]]; -// if (!item.asFile) { -// [_facesDisposable setDisposable:[[TGPaintFaceDetector detectFacesInItem:item.editableMediaItem editingContext:item.editingContext] startStrictWithNext:nil file:__FILE_NAME__ line:__LINE__]]; -// -// return; -// } - _fileInfoLabel.text = nil; if (_attributesDisposable == nil) @@ -340,6 +327,8 @@ } file:__FILE_NAME__ line:__LINE__]]; } } + + [self _applyCurrentLivePhotoMode]; } - (void)setSafeAreaInset:(UIEdgeInsets)safeAreaInset @@ -359,7 +348,7 @@ [self.containerView addSubview:view]; - [self layoutEntities]; + [self layoutEditedSubviews]; } - (void)setProgressVisible:(bool)progressVisible value:(CGFloat)value animated:(bool)animated @@ -403,6 +392,12 @@ - (void)singleTap { + if (_cancelSingleTapAfterLivePhotoHold) + { + _cancelSingleTapAfterLivePhotoHold = false; + return; + } + if ([self.item conformsToProtocol:@protocol(TGModernGallerySelectableItem)]) { TGMediaSelectionContext *selectionContext = ((id)self.item).selectionContext; @@ -524,15 +519,61 @@ - (void)setFrame:(CGRect)frame { [super setFrame:frame]; - [self layoutEntities]; - [self layoutLivePhotoVideoView]; + [self layoutEditedSubviews]; } -- (void)layoutEntities { - if (self.item == nil) { +- (id)currentAdjustments +{ + return [self.item.editingContext adjustmentsForItem:self.item.editableMediaItem]; +} + +- (void)updatePaintingImage:(id)adjustments +{ + _paintingSourceImage = adjustments.paintingData.image; + _paintingImageView.image = _paintingSourceImage; + _paintingImageView.hidden = true; +} + +- (UIImage *)livePhotoPaintingOverlayImageForSize:(CGSize)size cropRect:(CGRect)cropRect orientation:(UIImageOrientation)orientation rotation:(CGFloat)rotation mirrored:(bool)mirrored originalSize:(CGSize)originalSize +{ + if (_paintingSourceImage == nil || size.width <= FLT_EPSILON || size.height <= FLT_EPSILON || cropRect.size.width <= FLT_EPSILON || cropRect.size.height <= FLT_EPSILON || originalSize.width <= FLT_EPSILON) + return nil; + + CGFloat width = TGOrientationIsSideward(orientation, NULL) ? size.height : size.width; + CGFloat scale = originalSize.width / _paintingSourceImage.size.width / cropRect.size.width * width; + CGFloat paintingRatio = _paintingSourceImage.size.width / originalSize.width; + CGSize rotatedContentSize = TGRotatedContentSize(_paintingSourceImage.size, rotation); + + UIGraphicsBeginImageContextWithOptions(size, false, 0.0f); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextClearRect(context, CGRectMake(0.0f, 0.0f, size.width, size.height)); + + CGAffineTransform transform = CGAffineTransformIdentity; + transform = CGAffineTransformTranslate(transform, size.width / 2.0f, size.height / 2.0f); + transform = CGAffineTransformScale(transform, scale, scale); + transform = CGAffineTransformRotate(transform, TGRotationForOrientation(orientation)); + transform = CGAffineTransformTranslate(transform, (rotatedContentSize.width / 2.0f - CGRectGetMidX(cropRect) * paintingRatio), (rotatedContentSize.height / 2.0f - CGRectGetMidY(cropRect) * paintingRatio)); + transform = CGAffineTransformRotate(transform, rotation); + CGContextConcatCTM(context, transform); + + if (mirrored) + CGContextScaleCTM(context, -1.0f, 1.0f); + + [_paintingSourceImage drawAtPoint:CGPointMake(-_paintingSourceImage.size.width / 2.0f, -_paintingSourceImage.size.height / 2.0f)]; + + UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return result; +} + +- (void)layoutEditedSubviews +{ + if (self.item == nil) + { return; } - TGVideoEditAdjustments *adjustments = (TGVideoEditAdjustments *)[self.item.editingContext adjustmentsForItem:self.item.editableMediaItem]; + + id adjustments = [self currentAdjustments]; CGRect cropRect = CGRectMake(0, 0, self.item.asset.originalSize.width, self.item.asset.originalSize.height); CGFloat rotation = 0.0; UIImageOrientation orientation = UIImageOrientationUp; @@ -545,11 +586,13 @@ mirrored = adjustments.cropMirrored; } - [self _layoutPlayerViewWithCropRect:cropRect orientation:orientation rotation:rotation mirrored:mirrored]; + [self _layoutEditedSubviewsWithCropRect:cropRect orientation:orientation rotation:rotation mirrored:mirrored]; } -- (void)_layoutPlayerViewWithCropRect:(CGRect)cropRect orientation:(UIImageOrientation)orientation rotation:(CGFloat)rotation mirrored:(bool)mirrored +- (void)_layoutEditedSubviewsWithCropRect:(CGRect)cropRect orientation:(UIImageOrientation)orientation rotation:(CGFloat)rotation mirrored:(bool)mirrored { + static const CGFloat TGMediaPickerGalleryPhotoItemViewMaxLivePhotoPreviewSide = 1280.0f; + CGSize originalSize = self.item.asset.originalSize; CGSize rotatedCropSize = cropRect.size; @@ -559,8 +602,27 @@ CGSize containerSize = _imageSize; CGSize fittedSize = TGScaleToSize(rotatedCropSize, containerSize); CGRect previewFrame = CGRectMake((containerSize.width - fittedSize.width) / 2, (containerSize.height - fittedSize.height) / 2, fittedSize.width, fittedSize.height); - CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(TGRotationForOrientation(orientation)); + if (mirrored) + rotationTransform = CGAffineTransformScale(rotationTransform, -1.0f, 1.0f); + + CGSize livePhotoPreviewSize = previewFrame.size; + CGFloat maxPreviewSide = MAX(livePhotoPreviewSize.width, livePhotoPreviewSize.height); + if (maxPreviewSide > TGMediaPickerGalleryPhotoItemViewMaxLivePhotoPreviewSide + FLT_EPSILON) + { + CGFloat previewScale = TGMediaPickerGalleryPhotoItemViewMaxLivePhotoPreviewSide / maxPreviewSide; + livePhotoPreviewSize = CGSizeMake(CGFloor(livePhotoPreviewSize.width * previewScale), CGFloor(livePhotoPreviewSize.height * previewScale)); + } + CGFloat livePhotoViewScale = 1.0f; + if (livePhotoPreviewSize.width > FLT_EPSILON && livePhotoPreviewSize.height > FLT_EPSILON) + { + livePhotoViewScale = MAX(previewFrame.size.width / livePhotoPreviewSize.width, previewFrame.size.height / livePhotoPreviewSize.height); + } + + _livePhotoVideoView.bounds = CGRectMake(0.0f, 0.0f, livePhotoPreviewSize.width, livePhotoPreviewSize.height); + _livePhotoVideoView.center = CGPointMake(CGRectGetMidX(previewFrame), CGRectGetMidY(previewFrame)); + _livePhotoVideoView.transform = CGAffineTransformScale(rotationTransform, livePhotoViewScale, livePhotoViewScale); + _contentView.transform = rotationTransform; _contentView.frame = previewFrame; @@ -583,6 +645,10 @@ CGFloat scale = fittedOriginalSize.width / originalSize.width; CGPoint offset = TGPaintSubtractPoints(centerPoint, [TGPhotoDrawingController fittedCropRect:cropRect centerScale:scale]); + _paintingImageView.transform = CGAffineTransformIdentity; + _paintingImageView.frame = previewFrame; + _paintingImageView.image = [self livePhotoPaintingOverlayImageForSize:previewFrame.size cropRect:cropRect orientation:orientation rotation:rotation mirrored:mirrored originalSize:originalSize]; + CGPoint boundsCenter = TGPaintCenterOfRect(_contentWrapperView.bounds); _entitiesView.center = TGPaintAddPoints(boundsCenter, offset); } @@ -595,10 +661,34 @@ return (((TGMediaAsset *)self.item.asset).subtypes & TGMediaAssetSubtypePhotoLive) != 0; } -- (void)layoutLivePhotoVideoView +- (void)_applyCurrentLivePhotoMode { - if (_livePhotoVideoView != nil) - _livePhotoVideoView.frame = _imageView.bounds; + if (_livePhotoMode == TGMediaLivePhotoModeOff) + { + _livePhotoAutoplayPending = false; + [self stopLivePhotoBounceIfNeeded]; + [self stopAndCleanupLivePhotoPlayback]; + } + else if (_livePhotoMode == TGMediaLivePhotoModeLive) + { + [self ensureLivePhotoPressRecognizer]; + [self requestLivePhotoAutoplay]; + } + else if (_livePhotoMode == TGMediaLivePhotoModeLoop) + { + _livePhotoAutoplayPending = false; + [self stopLivePhotoBounceIfNeeded]; + [self removeLivePhotoPressRecognizer]; + [self ensureLivePhotoPlayer]; + [self playLivePhotoVideoLooping:true fromStart:true]; + } + else if (_livePhotoMode == TGMediaLivePhotoModeBounce) + { + _livePhotoAutoplayPending = false; + [self removeLivePhotoPressRecognizer]; + [self ensureLivePhotoPlayer]; + [self playLivePhotoVideoLooping:false fromStart:true]; + } } - (void)setLivePhotoMode:(TGMediaLivePhotoMode)mode @@ -607,34 +697,69 @@ return; _livePhotoMode = mode; + [self _applyCurrentLivePhotoMode]; +} + +- (void)returnFromEditing +{ + self.imageView.hidden = false; + _livePhotoVideoView.hidden = false; + _paintingImageView.hidden = (_paintingImageView.image == nil) || _livePhotoVideoView.alpha <= FLT_EPSILON; + _contentView.hidden = false; - if (_livePhotoMode == TGMediaLivePhotoModeLive) + _livePhotoMode = (self.item.editingContext != nil) ? [self.item.editingContext livePhotoModeForItem:self.item.editableMediaItem] : TGMediaLivePhotoModeOff; + [self updatePaintingImage:[self currentAdjustments]]; + [self layoutEditedSubviews]; + + if (_livePhotoEditor != nil) { - [self ensureLivePhotoPressRecognizer]; - [self ensureLivePhotoPlayer]; - [self playLivePhotoVideoLooping:false fromStart:true]; + [_livePhotoEditor importAdjustments:[self currentAdjustments]]; + + if (_livePhotoPlayer.rate <= FLT_EPSILON) + [_livePhotoEditor reprocess]; } - else if (_livePhotoMode == TGMediaLivePhotoModeLoop) + + [self _applyCurrentLivePhotoMode]; +} + +- (void)setIsVisible:(bool)isVisible +{ + [super setIsVisible:isVisible]; + + if (_livePhotoIsVisible == isVisible) + return; + + _livePhotoIsVisible = isVisible; + + if (isVisible) { - [self stopLivePhotoBounceIfNeeded]; - [self removeLivePhotoPressRecognizer]; - [self ensureLivePhotoPlayer]; - [self playLivePhotoVideoLooping:true fromStart:true]; - } - else if (_livePhotoMode == TGMediaLivePhotoModeBounce) - { - [self removeLivePhotoPressRecognizer]; - [self ensureLivePhotoPlayer]; - [self playLivePhotoVideoLooping:false fromStart:true]; + if (_livePhotoMode == TGMediaLivePhotoModeLive) + [self requestLivePhotoAutoplay]; } else { - [self stopLivePhotoBounceIfNeeded]; - [self stopAndHideLivePhotoVideo:true]; - [self removeLivePhotoPressRecognizer]; + _livePhotoAutoplayPending = false; + _livePhotoIsHolding = false; + [self stopAndHideLivePhotoVideo:false]; } } +- (void)requestLivePhotoAutoplay +{ + if (_livePhotoMode != TGMediaLivePhotoModeLive || !_livePhotoIsVisible || ![self isCurrentAssetLivePhoto]) + return; + + if (_livePhotoPlayer == nil) + { + _livePhotoAutoplayPending = true; + [self ensureLivePhotoPlayer]; + return; + } + + _livePhotoAutoplayPending = false; + [self playLivePhotoVideoLooping:false fromStart:true]; +} + - (void)ensureLivePhotoPlayer { if (_livePhotoPlayer != nil || _livePhotoIsLoadingPlayer || ![self isCurrentAssetLivePhoto]) @@ -658,7 +783,15 @@ strongSelf->_livePhotoPlayer.muted = true; [strongSelf ensureLivePhotoVideoView]; - strongSelf->_livePhotoVideoView.player = strongSelf->_livePhotoPlayer; + + id adjustments = [strongSelf currentAdjustments]; + [strongSelf updatePaintingImage:adjustments]; + + strongSelf->_livePhotoEditor = [[PGPhotoEditor alloc] initWithOriginalSize:strongSelf.item.asset.originalSize adjustments:adjustments forVideo:true enableStickers:true]; + strongSelf->_livePhotoEditor.previewOutput = strongSelf->_livePhotoVideoView; + [strongSelf->_livePhotoEditor setPlayerItem:playerItem forCropRect:CGRectZero cropRotation:0.0f cropOrientation:UIImageOrientationUp cropMirrored:false]; + [strongSelf->_livePhotoEditor processAnimated:false completion:nil]; + [strongSelf layoutEditedSubviews]; __weak TGMediaPickerGalleryPhotoItemView *observerWeakSelf = strongSelf; strongSelf->_livePhotoDidPlayToEndObserver = [[NSNotificationCenter defaultCenter] addObserverForName:AVPlayerItemDidPlayToEndTimeNotification object:playerItem queue:[NSOperationQueue mainQueue] usingBlock:^(__unused NSNotification *note) @@ -673,6 +806,11 @@ strongSelf->_livePhotoPendingPlayback = false; [strongSelf playLivePhotoVideoLooping:shouldLoop fromStart:true]; } + else if (strongSelf->_livePhotoAutoplayPending) + { + strongSelf->_livePhotoAutoplayPending = false; + [strongSelf playLivePhotoVideoLooping:false fromStart:true]; + } } file:__FILE_NAME__ line:__LINE__]]; } @@ -680,11 +818,15 @@ { if (_livePhotoVideoView != nil) return; - - _livePhotoVideoView = [[TGMediaPickerGalleryLivePhotoVideoView alloc] initWithFrame:_imageView.bounds]; + + _livePhotoVideoView = [[TGPhotoEditorPreviewView alloc] initWithFrame:_imageView.bounds]; + _livePhotoVideoView.customTouchDownHandling = true; _livePhotoVideoView.alpha = 0.0f; _livePhotoVideoView.userInteractionEnabled = false; - [_imageView insertSubview:_livePhotoVideoView aboveSubview:_contentView]; + [_imageView insertSubview:_livePhotoVideoView belowSubview:_paintingImageView]; + [_livePhotoVideoView setNeedsTransitionIn]; + [_livePhotoVideoView performTransitionInIfNeeded]; + [self layoutEditedSubviews]; } - (void)ensureLivePhotoPressRecognizer @@ -707,6 +849,7 @@ [self.scrollView removeGestureRecognizer:_livePhotoPressGestureRecognizer]; _livePhotoPressGestureRecognizer = nil; _livePhotoIsHolding = false; + _cancelSingleTapAfterLivePhotoHold = false; } - (void)handleLivePhotoPress:(UILongPressGestureRecognizer *)gestureRecognizer @@ -718,6 +861,7 @@ { case UIGestureRecognizerStateBegan: _livePhotoIsHolding = true; + _cancelSingleTapAfterLivePhotoHold = true; [self playLivePhotoVideoLooping:true fromStart:true]; break; @@ -738,13 +882,11 @@ if (_livePhotoMode == TGMediaLivePhotoModeOff || ![self isCurrentAssetLivePhoto]) return; - [self ensureLivePhotoPlayer]; - [self ensureLivePhotoVideoView]; - if (_livePhotoPlayer == nil) { _livePhotoPendingPlayback = true; _livePhotoPendingPlaybackLooping = looping; + [self ensureLivePhotoPlayer]; return; } @@ -754,6 +896,7 @@ void (^playBlock)(void) = ^ { _livePhotoVideoView.alpha = 1.0f; + _paintingImageView.hidden = (_paintingImageView.image == nil); [_livePhotoPlayer play]; }; @@ -799,23 +942,36 @@ _livePhotoPendingPlaybackLooping = false; [_livePhotoPlayer pause]; - - if (_livePhotoPlayer != nil) - [_livePhotoPlayer seekToTime:kCMTimeZero toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; - + if (_livePhotoVideoView == nil) + { + if (_livePhotoPlayer != nil) + [_livePhotoPlayer seekToTime:kCMTimeZero toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; return; + } + + if (_paintingImageView.image != nil) + animated = false; + + _paintingImageView.hidden = true; if (animated) { [UIView animateWithDuration:0.2f animations:^ { _livePhotoVideoView.alpha = 0.0f; + } completion:^(__unused BOOL finished) + { + if (_livePhotoPlayer != nil) + [_livePhotoPlayer seekToTime:kCMTimeZero toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; }]; } else { _livePhotoVideoView.alpha = 0.0f; + + if (_livePhotoPlayer != nil) + [_livePhotoPlayer seekToTime:kCMTimeZero toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; } } @@ -832,10 +988,13 @@ { [self removeLivePhotoPressRecognizer]; [self stopAndHideLivePhotoVideo:false]; + _livePhotoAutoplayPending = false; [self removeLivePhotoPlaybackObserver]; [_liveVideoItemDisposable setDisposable:nil]; + [_livePhotoEditor cleanup]; + _livePhotoEditor = nil; _livePhotoPlayer = nil; [_livePhotoVideoView removeFromSuperview]; _livePhotoVideoView = nil; diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m index 57a8ae9bda..5ab3eb4e4a 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m @@ -515,7 +515,7 @@ strongSelf->_sendAsGif = baseAdjustments.sendAsGif; [strongSelf _mutePlayer:baseAdjustments.sendAsGif]; - if (baseAdjustments.sendAsGif || ([strongSelf itemIsLivePhoto])) + if (baseAdjustments.sendAsGif) [strongSelf setPlayButtonHidden:true animated:false]; [strongSelf->_entitiesView setupWithEntitiesData:adjustments.paintingData.entitiesData]; @@ -1576,7 +1576,7 @@ [parentView addSubview:_tooltipContainerView]; NSMutableArray *actions = [[NSMutableArray alloc] init]; - NSString *text = [self itemIsLivePhoto] ? TGLocalized(@"MediaPicker.LivePhotoDescription") : TGLocalized(@"MediaPicker.VideoMuteDescription"); + NSString *text = TGLocalized(@"MediaPicker.VideoMuteDescription"); [actions addObject:@{@"title":text}]; _tooltipContainerView.menuView.forceArrowOnTop = false; _tooltipContainerView.menuView.multiline = true; diff --git a/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m b/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m index b74097aa3e..3a31673dc3 100644 --- a/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m +++ b/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m @@ -885,7 +885,10 @@ + (TGMediaVideoConversionPreset)presetFromAdjustments:(TGMediaVideoEditAdjustments *)adjustments { - TGMediaVideoConversionPreset preset = adjustments.preset; + TGMediaVideoConversionPreset preset = TGMediaVideoConversionPresetCompressedDefault; + if ([adjustments isKindOfClass:[TGMediaVideoEditAdjustments class]]) { + preset = adjustments.preset; + } if (preset == TGMediaVideoConversionPresetCompressedDefault) { NSNumber *presetValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"TG_preferredVideoPreset_v0"]; diff --git a/submodules/LegacyComponents/Sources/TGPhotoCaptionInputMixin.m b/submodules/LegacyComponents/Sources/TGPhotoCaptionInputMixin.m index ed137cd82c..aaad318d8f 100644 --- a/submodules/LegacyComponents/Sources/TGPhotoCaptionInputMixin.m +++ b/submodules/LegacyComponents/Sources/TGPhotoCaptionInputMixin.m @@ -338,7 +338,7 @@ backgroundHeight += _keyboardHeight - edgeInsets.bottom; } - CGRect livePhotoButtonFrame = CGRectMake(edgeInsets.left + 16.0, edgeInsets.top + 160.0 + 32.0 - _keyboardHeight, 160.0, 18.0); + CGRect livePhotoButtonFrame = CGRectMake(edgeInsets.left + 16.0, edgeInsets.top + 80.0 + 32.0 - _keyboardHeight, 160.0, 18.0); _livePhotoButtonView.frame = livePhotoButtonFrame; CGRect panelFrame = CGRectMake(edgeInsets.left, panelY, frame.size.width, panelHeight); diff --git a/submodules/LegacyComponents/Sources/TGVideoEditAdjustments.m b/submodules/LegacyComponents/Sources/TGVideoEditAdjustments.m index 1a41c032c4..0fb42d6012 100644 --- a/submodules/LegacyComponents/Sources/TGVideoEditAdjustments.m +++ b/submodules/LegacyComponents/Sources/TGVideoEditAdjustments.m @@ -139,8 +139,11 @@ const NSTimeInterval TGVideoEditMaximumGifDuration = 30.5; return adjustments; } - + (instancetype)editAdjustmentsWithPhotoEditorValues:(PGPhotoEditorValues *)values preset:(TGMediaVideoConversionPreset)preset { + return [self editAdjustmentsWithPhotoEditorValues:values preset:preset bounce:false sendAsGif:true]; +} + ++ (instancetype)editAdjustmentsWithPhotoEditorValues:(PGPhotoEditorValues *)values preset:(TGMediaVideoConversionPreset)preset bounce:(bool)bounce sendAsGif:(bool)sendAsGif { TGVideoEditAdjustments *adjustments = [[[self class] alloc] init]; adjustments->_originalSize = values.originalSize; CGRect cropRect = values.cropRect; @@ -153,8 +156,10 @@ const NSTimeInterval TGVideoEditMaximumGifDuration = 30.5; adjustments->_cropLockedAspectRatio = values.cropLockedAspectRatio; adjustments->_cropMirrored = values.cropMirrored; adjustments->_paintingData = [values.paintingData dataForAnimation]; - adjustments->_sendAsGif = true; + adjustments->_sendAsGif = sendAsGif; adjustments->_preset = preset; + adjustments->_bounce = bounce; + adjustments->_toolValues = [values toolValues]; return adjustments; } diff --git a/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift b/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift index f9c61ee078..92fd8c621f 100644 --- a/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift +++ b/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift @@ -131,9 +131,9 @@ private enum LegacyAssetVideoData { } private enum LegacyAssetItem { - case image(data: LegacyAssetImageData, thumbnail: UIImage?, caption: NSAttributedString?, stickers: [FileMediaReference], video: LegacyAssetVideoData?) + case image(data: LegacyAssetImageData, thumbnail: UIImage?, caption: NSAttributedString?, stickers: [FileMediaReference], video: LegacyAssetVideoData?, adjustments: TGVideoEditAdjustments?) case file(data: LegacyAssetImageData, thumbnail: UIImage?, mimeType: String, name: String, caption: NSAttributedString?) - case video(data: LegacyAssetVideoData, thumbnail: UIImage?, cover: UIImage?, adjustments: TGVideoEditAdjustments?, caption: NSAttributedString?, asFile: Bool, asAnimation: Bool, stickers: [FileMediaReference], isLivePhoto: Bool) + case video(data: LegacyAssetVideoData, thumbnail: UIImage?, cover: UIImage?, adjustments: TGVideoEditAdjustments?, caption: NSAttributedString?, asFile: Bool, asAnimation: Bool, stickers: [FileMediaReference]) } private final class LegacyAssetItemWrapper: NSObject { @@ -183,10 +183,10 @@ public func legacyAssetPickerItemGenerator() -> ((Any?, NSAttributedString?, Str let url: String? = (dict["url"] as? String) ?? (dict["url"] as? URL)?.path if let url = url { let dimensions = image.size - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: 4.0), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: false, asAnimation: true, stickers: stickers, isLivePhoto: false), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: 4.0), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: false, asAnimation: true, stickers: stickers), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) } } else { - result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .image(image), thumbnail: thumbnail, caption: caption, stickers: stickers, video: nil), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, forceHd: forceHd, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) + result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .image(image), thumbnail: thumbnail, caption: caption, stickers: stickers, video: nil, adjustments: nil), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, forceHd: forceHd, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) } return result } else if (dict["type"] as! NSString) == "cloudPhoto" { @@ -209,7 +209,7 @@ public func legacyAssetPickerItemGenerator() -> ((Any?, NSAttributedString?, Str result["item" as NSString] = LegacyAssetItemWrapper(item: .file(data: .asset(asset.backingAsset), thumbnail: thumbnail, mimeType: mimeType, name: name, caption: caption), timer: nil, spoiler: nil, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) } else { let forceHd = (dict["hd"] as? NSNumber)?.boolValue ?? false - result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .asset(asset.backingAsset), thumbnail: thumbnail, caption: caption, stickers: [], video: nil), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, forceHd: forceHd, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) + result["item" as NSString] = LegacyAssetItemWrapper(item: .image(data: .asset(asset.backingAsset), thumbnail: thumbnail, caption: caption, stickers: [], video: nil, adjustments: nil), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, forceHd: forceHd, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) } return result } else if (dict["type"] as! NSString) == "file" { @@ -230,7 +230,7 @@ public func legacyAssetPickerItemGenerator() -> ((Any?, NSAttributedString?, Str let dimensions = (dict["dimensions"]! as AnyObject).cgSizeValue! let duration = (dict["duration"]! as AnyObject).doubleValue! - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: tempFileUrl.path, dimensions: dimensions, duration: duration), thumbnail: thumbnail, cover: nil, adjustments: nil, caption: caption, asFile: false, asAnimation: true, stickers: [], isLivePhoto: false), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: tempFileUrl.path, dimensions: dimensions, duration: duration), thumbnail: thumbnail, cover: nil, adjustments: nil, caption: caption, asFile: false, asAnimation: true, stickers: []), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) return result } @@ -248,13 +248,13 @@ public func legacyAssetPickerItemGenerator() -> ((Any?, NSAttributedString?, Str if let asset = dict["asset"] as? TGMediaAsset { var result: [AnyHashable: Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .asset(asset), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: stickers, isLivePhoto: false), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .asset(asset), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: stickers), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) return result } else if let url = (dict["url"] as? String) ?? (dict["url"] as? URL)?.absoluteString { let dimensions = (dict["dimensions"]! as AnyObject).cgSizeValue! let duration = (dict["duration"]! as AnyObject).doubleValue! var result: [AnyHashable: Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: stickers, isLivePhoto: false), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) + result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: stickers), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) return result } } else if (dict["type"] as! NSString) == "cameraVideo" { @@ -269,21 +269,23 @@ public func legacyAssetPickerItemGenerator() -> ((Any?, NSAttributedString?, Str if let value = dict["livePhoto"] as? Bool { isLivePhoto = value } - + let url: String? = (dict["url"] as? String) ?? (dict["url"] as? URL)?.path if let url = url, let previewImage = dict["previewImage"] as? UIImage { let dimensions = previewImage.pixelSize() let duration = (dict["duration"]! as AnyObject).doubleValue! + + var result: [AnyHashable: Any] = [:] if isLivePhoto, let cover { - var result: [AnyHashable: Any] = [:] result["item" as NSString] = LegacyAssetItemWrapper( item: .image( data: .image(cover), thumbnail: thumbnail, caption: caption, stickers: stickers, - video: .tempFile(path: url, dimensions: dimensions, duration: duration) + video: .tempFile(path: url, dimensions: dimensions, duration: duration), + adjustments: dict["adjustments"] as? TGVideoEditAdjustments ), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, @@ -291,13 +293,26 @@ public func legacyAssetPickerItemGenerator() -> ((Any?, NSAttributedString?, Str groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId ) - - return result } else { - var result: [AnyHashable: Any] = [:] - result["item" as NSString] = LegacyAssetItemWrapper(item: .video(data: .tempFile(path: url, dimensions: dimensions, duration: duration), thumbnail: thumbnail, cover: cover, adjustments: dict["adjustments"] as? TGVideoEditAdjustments, caption: caption, asFile: asFile, asAnimation: false, stickers: stickers, isLivePhoto: isLivePhoto), timer: (dict["timer"] as? NSNumber)?.intValue, spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, price: price, groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, uniqueId: uniqueId) - return result + result["item" as NSString] = LegacyAssetItemWrapper( + item: .video( + data: .tempFile(path: url, dimensions: dimensions, duration: duration), + thumbnail: thumbnail, + cover: cover, + adjustments: dict["adjustments"] as? TGVideoEditAdjustments, + caption: caption, + asFile: asFile, + asAnimation: false, + stickers: stickers + ), + timer: (dict["timer"] as? NSNumber)?.intValue, + spoiler: (dict["spoiler"] as? NSNumber)?.boolValue, + price: price, + groupedId: (dict["groupedId"] as? NSNumber)?.int64Value, + uniqueId: uniqueId + ) } + return result } } return nil @@ -411,7 +426,7 @@ public func legacyAssetPickerEnqueueMessages(context: AccountContext, account: A outer: for item in (anyValues as! NSArray) { if let item = (item as? NSDictionary)?.object(forKey: "item") as? LegacyAssetItemWrapper { switch item.item { - case let .image(data, thumbnail, caption, stickers, video): + case let .image(data, thumbnail, caption, stickers, video, adjustments): var representations: [TelegramMediaImageRepresentation] = [] if let thumbnail = thumbnail { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) @@ -458,32 +473,24 @@ public func legacyAssetPickerEnqueueMessages(context: AccountContext, account: A var videoFile: TelegramMediaFile? if let video, case let .tempFile(path, dimensions, duration) = video { - let finalDimensions: CGSize = dimensions - let finalDuration: Double = duration - - //let defaultPreset = TGMediaVideoConversionPreset(rawValue: UInt32(UserDefaults.standard.integer(forKey: "TG_preferredVideoPreset_v0"))) + var finalDimensions: CGSize = dimensions + var finalDuration: Double = duration + let preset: TGMediaVideoConversionPreset = TGMediaVideoConversionPresetCompressedMedium -// if let selectedPreset = adjustments?.preset { -// preset = selectedPreset -// } else if preset == TGMediaVideoConversionPresetCompressedDefault && defaultPreset != TGMediaVideoConversionPresetCompressedDefault { -// preset = defaultPreset -// } -// if !asAnimation { -// finalDimensions = TGMediaVideoConverter.dimensions(for: finalDimensions, adjustments: adjustments, preset: TGMediaVideoConversionPresetCompressedMedium) -// } + finalDimensions = TGMediaVideoConverter.dimensions(for: finalDimensions, adjustments: adjustments, preset: preset) - let resourceAdjustments: VideoMediaResourceAdjustments? = nil -// if let adjustments = adjustments { -// if adjustments.trimApplied() { -// finalDuration = adjustments.trimEndValue - adjustments.trimStartValue -// } -// -// if let dict = adjustments.dictionary(), let data = try? NSKeyedArchiver.archivedData(withRootObject: dict, requiringSecureCoding: false) { -// let adjustmentsData = MemoryBuffer(data: data) -// let digest = MemoryBuffer(data: adjustmentsData.md5Digest()) -// resourceAdjustments = VideoMediaResourceAdjustments(data: adjustmentsData, digest: digest, isStory: false) -// } -// } + var resourceAdjustments: VideoMediaResourceAdjustments? + if let adjustments = adjustments { + if adjustments.trimApplied() { + finalDuration = adjustments.trimEndValue - adjustments.trimStartValue + } + + if let dict = adjustments.dictionary(), let data = try? NSKeyedArchiver.archivedData(withRootObject: dict, requiringSecureCoding: false) { + let adjustmentsData = MemoryBuffer(data: data) + let digest = MemoryBuffer(data: adjustmentsData.md5Digest()) + resourceAdjustments = VideoMediaResourceAdjustments(data: adjustmentsData, digest: digest, isStory: false) + } + } let resource = LocalFileVideoMediaResource(randomId: Int64.random(in: Int64.min ... Int64.max), path: path, adjustments: resourceAdjustments) let estimatedSize = TGMediaVideoConverter.estimatedSize(for: preset, duration: finalDuration, hasAudio: true) @@ -836,7 +843,7 @@ public func legacyAssetPickerEnqueueMessages(context: AccountContext, account: A default: break } - case let .video(data, thumbnail, cover, adjustments, caption, asFile, asAnimation, stickers, isLivePhoto): + case let .video(data, thumbnail, cover, adjustments, caption, asFile, asAnimation, stickers): var finalDimensions: CGSize var finalDuration: Double switch data { @@ -882,10 +889,10 @@ public func legacyAssetPickerEnqueueMessages(context: AccountContext, account: A var videoCover: TelegramMediaImage? if let cover { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - let maxSide: CGFloat = isLivePhoto ? 1280.0 : 640.0 + let maxSide: CGFloat = 1280.0 let coverSize = cover.size.aspectFitted(CGSize(width: maxSide, height: maxSide)) let coverImage = TGScaleImageToPixelSize(cover, coverSize)! - if let coverData = coverImage.jpegData(compressionQuality: isLivePhoto ? 0.87 : 0.6) { + if let coverData = coverImage.jpegData(compressionQuality: 0.87) { account.postbox.mediaBox.storeResourceData(resource.id, data: coverData) videoCover = TelegramMediaImage( imageId: MediaId(namespace: 0, id: 0), diff --git a/submodules/MediaPickerUI/Sources/MediaPickerGridItem.swift b/submodules/MediaPickerUI/Sources/MediaPickerGridItem.swift index 77d4a01edd..176ebbc0f0 100644 --- a/submodules/MediaPickerUI/Sources/MediaPickerGridItem.swift +++ b/submodules/MediaPickerUI/Sources/MediaPickerGridItem.swift @@ -25,7 +25,7 @@ private let leftShadowImage: UIImage = { context.clear(CGRect(origin: CGPoint(), size: size)) context.translateBy(x: size.width / 2.0, y: size.height / 2.0) - context.scaleBy(x: -1.0, y: 1.0) + context.scaleBy(x: -1.0, y: -1.0) context.translateBy(x: -size.width / 2.0, y: -size.height / 2.0) UIGraphicsPushContext(context) @@ -602,7 +602,12 @@ final class MediaPickerGridItemNode: GridItemNode { typeIcon = UIImage(bundleImageName: "Media Editor/MediaVideo") } duration = stringForDuration(Int32(asset.duration)) + } else { + if asset.mediaSubtypes.contains(.photoLive) { + typeIcon = UIImage(bundleImageName: "Chat/Message/LivePhoto") + } } + if asset.isFavorite { typeIcon = generateTintedImage(image: UIImage(bundleImageName: "Media Grid/Favorite"), color: .white) } @@ -715,9 +720,9 @@ final class MediaPickerGridItemNode: GridItemNode { let backgroundSize = CGSize(width: self.bounds.width, height: floorToScreenPixels(self.bounds.height / 9.0 * 16.0)) self.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: floorToScreenPixels((self.bounds.height - backgroundSize.height) / 2.0)), size: backgroundSize) self.imageNode.frame = self.bounds - self.leftShadowNode.frame = CGRect(x: 0.0, y: self.bounds.height - leftShadowImage.size.height, width: min(leftShadowImage.size.width, self.bounds.width), height: leftShadowImage.size.height) + self.leftShadowNode.frame = CGRect(x: 0.0, y: 0.0, width: min(leftShadowImage.size.width, self.bounds.width), height: leftShadowImage.size.height) self.rightShadowNode.frame = CGRect(x: self.bounds.width - min(rightShadowImage.size.width, self.bounds.width), y: self.bounds.height - rightShadowImage.size.height, width: min(rightShadowImage.size.width, self.bounds.width), height: rightShadowImage.size.height) - self.typeIconNode.frame = CGRect(x: 0.0, y: self.bounds.height - 20.0, width: 19.0, height: 19.0) + self.typeIconNode.frame = CGRect(x: 0.0, y: 1.0, width: 19.0, height: 19.0) self.activateAreaNode.frame = self.bounds if self.durationNode.supernode != nil { diff --git a/submodules/PremiumUI/BUILD b/submodules/PremiumUI/BUILD index f2a16847e2..cc91eaa8f6 100644 --- a/submodules/PremiumUI/BUILD +++ b/submodules/PremiumUI/BUILD @@ -91,7 +91,8 @@ swift_library( "//submodules/Components/ViewControllerComponent:ViewControllerComponent", "//submodules/Components/MultilineTextComponent:MultilineTextComponent", "//submodules/Components/MultilineTextWithEntitiesComponent:MultilineTextWithEntitiesComponent", - "//submodules/Components/SheetComponent:SheetComponent", + "//submodules/Components/SheetComponent", + "//submodules/Components/ResizableSheetComponent", "//submodules/Components/BundleIconComponent:BundleIconComponent", "//submodules/Components/SolidRoundedButtonComponent:SolidRoundedButtonComponent", "//submodules/Components/BlurredBackgroundComponent:BlurredBackgroundComponent", diff --git a/submodules/PremiumUI/Sources/PremiumIntroScreen.swift b/submodules/PremiumUI/Sources/PremiumIntroScreen.swift index e0999df159..6f5fd2847a 100644 --- a/submodules/PremiumUI/Sources/PremiumIntroScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumIntroScreen.swift @@ -797,71 +797,71 @@ public enum PremiumPerk: CaseIterable { var iconName: String { switch self { case .doubleLimits: - return "Premium/Perk/Limits" + return "Item List/Icons/X2" case .moreUpload: - return "Premium/Perk/Upload" + return "Item List/Icons/File" case .fasterDownload: - return "Premium/Perk/Speed" + return "Item List/Icons/Speed" case .voiceToText: - return "Premium/Perk/Voice" + return "Item List/Icons/Microphone" case .noAds: - return "Premium/Perk/NoAds" + return "Item List/Icons/NoAds" case .uniqueReactions: - return "Premium/Perk/Reactions" + return "Item List/Icons/Reactions" case .premiumStickers: - return "Premium/Perk/Stickers" + return "Item List/Icons/Sticker" case .advancedChatManagement: - return "Premium/Perk/Chat" + return "Item List/Icons/Chat" case .profileBadge: - return "Premium/Perk/Badge" + return "Item List/Icons/Premium" case .animatedUserpics: - return "Premium/Perk/Avatar" + return "Item List/Icons/Play" case .appIcons: - return "Premium/Perk/AppIcon" + return "Item List/Icons/Icons" case .animatedEmoji: - return "Premium/Perk/Emoji" + return "Item List/Icons/Emoji" case .emojiStatus: - return "Premium/Perk/Status" + return "Item List/Icons/Hand" case .translation: - return "Premium/Perk/Translation" + return "Item List/Icons/Translation" case .stories: - return "Premium/Perk/Stories" + return "Item List/Icons/Stories" case .colors: - return "Premium/Perk/Colors" + return "Item List/Icons/Brush" case .wallpapers: - return "Premium/Perk/Wallpapers" + return "Item List/Icons/Wallpaper" case .messageTags: - return "Premium/Perk/MessageTags" + return "Item List/Icons/Tag" case .lastSeen: - return "Premium/Perk/LastSeen" + return "Item List/Icons/LastSeen" case .messagePrivacy: - return "Premium/Perk/MessagePrivacy" + return "Item List/Icons/LockBubble" case .folderTags: return "Premium/Perk/MessageTags" case .business: return "Premium/Perk/Business" case .messageEffects: - return "Premium/Perk/MessageEffects" + return "Item List/Icons/MessageEffect" case .todo: - return "Premium/Perk/Todo" + return "Item List/Icons/Checkbox" case .copyProtection: - return "Premium/Perk/NoForward" + return "Item List/Icons/NoForward" case .businessLocation: - return "Premium/BusinessPerk/Location" + return "Item List/Icons/Location" case .businessHours: - return "Premium/BusinessPerk/Hours" + return "Item List/Icons/Clock" case .businessQuickReplies: - return "Premium/BusinessPerk/Replies" + return "Item List/Icons/Share" case .businessGreetingMessage: - return "Premium/BusinessPerk/Greetings" + return "Item List/Icons/Hand" case .businessAwayMessage: - return "Premium/BusinessPerk/Away" + return "Item List/Icons/Away" case .businessChatBots: - return "Premium/BusinessPerk/Chatbots" + return "Item List/Icons/Chatbot" case .businessIntro: - return "Premium/BusinessPerk/Intro" + return "Item List/Icons/Intro" case .businessLinks: - return "Premium/BusinessPerk/Links" + return "Item List/Icons/Link" } } } @@ -2552,7 +2552,7 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent { leftIcon: .custom(AnyComponentWithIdentity(id: 0, component: AnyComponent(PerkIconComponent( backgroundColor: UIColor(rgb: 0x676bff), foregroundColor: .white, - iconName: "Premium/BusinessPerk/Status" + iconName: "Item List/Icons/Case" ))), false), icon: ListActionItemComponent.Icon(component: AnyComponentWithIdentity(id: 0, component: AnyComponent(EmojiActionIconComponent( context: accountContext, @@ -2595,7 +2595,7 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent { leftIcon: .custom(AnyComponentWithIdentity(id: 0, component: AnyComponent(PerkIconComponent( backgroundColor: UIColor(rgb: 0x4492ff), foregroundColor: .white, - iconName: "Premium/BusinessPerk/Tag" + iconName: "Item List/Icons/Tag" ))), false), action: { _ in guard let accountContext else { @@ -2630,7 +2630,7 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent { leftIcon: .custom(AnyComponentWithIdentity(id: 0, component: AnyComponent(PerkIconComponent( backgroundColor: UIColor(rgb: 0x41a6a5), foregroundColor: .white, - iconName: "Premium/Perk/Stories" + iconName: "Item List/Icons/Stories" ))), false), action: { _ in guard let accountContext else { diff --git a/submodules/SettingsUI/Sources/Data and Storage/AutodownloadConnectionTypeController.swift b/submodules/SettingsUI/Sources/Data and Storage/AutodownloadConnectionTypeController.swift index 7448fd667e..b3f5cfb6a5 100644 --- a/submodules/SettingsUI/Sources/Data and Storage/AutodownloadConnectionTypeController.swift +++ b/submodules/SettingsUI/Sources/Data and Storage/AutodownloadConnectionTypeController.swift @@ -182,19 +182,19 @@ private enum AutodownloadMediaCategoryEntry: ItemListNodeEntry { case let .typesHeader(_, text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) case let .photos(_, text, value, enabled): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Photos")?.precomposed(), title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.photos, title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { arguments.customize(.photo) }, tag: AutodownloadMediaCategoryEntryTag.photos) case let .stories(_, text, value, enabled): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Stories")?.precomposed(), title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.stories, title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { arguments.customize(.story) }, tag: AutodownloadMediaCategoryEntryTag.stories) case let .videos(_, text, value, enabled): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Videos")?.precomposed(), title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.videos, title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { arguments.customize(.video) }, tag: AutodownloadMediaCategoryEntryTag.videos) case let .files(_, text, value, enabled): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Files")?.precomposed(), title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.files, title: text, enabled: enabled, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { arguments.customize(.file) }, tag: AutodownloadMediaCategoryEntryTag.files) case let .voiceMessagesInfo(_, text): diff --git a/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift b/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift index e058f8985a..9f122dc341 100644 --- a/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift +++ b/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift @@ -363,21 +363,21 @@ private enum DataAndStorageEntry: ItemListNodeEntry { let arguments = arguments as! DataAndStorageControllerArguments switch self { case let .storageUsage(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Storage")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.storageUsage, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openStorageUsage() }) case let .networkUsage(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Network")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.dataUsage, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openNetworkUsage() }) case let .automaticDownloadHeader(_, text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) case let .automaticDownloadCellular(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Cellular")?.precomposed(), title: text, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.cellular, title: text, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { arguments.openAutomaticDownloadConnectionType(.cellular) }) case let .automaticDownloadWifi(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/WiFi")?.precomposed(), title: text, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.wifi, title: text, label: value, labelStyle: .detailText, sectionId: self.section, style: .blocks, action: { arguments.openAutomaticDownloadConnectionType(.wifi) }) case let .automaticDownloadReset(theme, text, enabled): @@ -393,16 +393,16 @@ private enum DataAndStorageEntry: ItemListNodeEntry { case let .autoSaveHeader(text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) case let .autoSaveItem(_, type, title, label, value): - let iconName: String + let icon: UIImage? switch type { case .privateChats: - iconName = "Settings/Menu/EditProfile" + icon = PresentationResourcesSettings.privateChats case .groups: - iconName = "Settings/Menu/GroupChats" + icon = PresentationResourcesSettings.groups case .channels: - iconName = "Settings/Menu/Channels" + icon = PresentationResourcesSettings.channels } - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: iconName)?.precomposed(), title: title, label: value, labelStyle: .text, additionalDetailLabel: label.isEmpty ? nil : label, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: icon, title: title, label: value, labelStyle: .text, additionalDetailLabel: label.isEmpty ? nil : label, sectionId: self.section, style: .blocks, action: { arguments.openSaveIncoming(type) }) case let .autoSaveInfo(text): diff --git a/submodules/SettingsUI/Sources/Data and Storage/EnergySavingSettingsScreen.swift b/submodules/SettingsUI/Sources/Data and Storage/EnergySavingSettingsScreen.swift index 865fe18f0c..7aaa39a45a 100644 --- a/submodules/SettingsUI/Sources/Data and Storage/EnergySavingSettingsScreen.swift +++ b/submodules/SettingsUI/Sources/Data and Storage/EnergySavingSettingsScreen.swift @@ -38,47 +38,47 @@ public enum EnergySavingItemType: CaseIterable { } } - func title(strings: PresentationStrings) -> (String, String, String) { + func title(strings: PresentationStrings) -> (UIImage?, String, String) { switch self { case .autoplayVideo: return ( - "Settings/Power/PowerIconVideo", + PresentationResourcesSettings.videos, strings.PowerSavingScreen_OptionAutoplayVideoTitle, strings.PowerSavingScreen_OptionAutoplayVideoText ) case .autoplayGif: return ( - "Settings/Power/PowerIconGif", + PresentationResourcesSettings.gifs, strings.PowerSavingScreen_OptionAutoplayGifTitle, strings.PowerSavingScreen_OptionAutoplayGifText ) case .loopStickers: return ( - "Settings/Power/PowerIconStickers", + PresentationResourcesSettings.stickersGreen, strings.PowerSavingScreen_OptionAutoplayStickersTitle, strings.PowerSavingScreen_OptionAutoplayStickersText ) case .loopEmoji: return ( - "Settings/Power/PowerIconEmoji", + PresentationResourcesSettings.emoji, strings.PowerSavingScreen_OptionAutoplayEmojiTitle, strings.PowerSavingScreen_OptionAutoplayEmojiText ) case .fullTranslucency: return ( - "Settings/Power/PowerIconEffects", + PresentationResourcesSettings.effects, strings.PowerSavingScreen_OptionAutoplayEffectsTitle, strings.PowerSavingScreen_OptionAutoplayEffectsText ) case .extendBackgroundWork: return ( - "Settings/Power/PowerIconBackgroundTime", + PresentationResourcesSettings.clock, strings.PowerSavingScreen_OptionBackgroundTitle, strings.PowerSavingScreen_OptionBackgroundText ) case .autodownloadInBackground: return ( - "Settings/Power/PowerIconMedia", + PresentationResourcesSettings.photosBlue, strings.PowerSavingScreen_OptionPreloadTitle, strings.PowerSavingScreen_OptionPreloadText ) @@ -204,8 +204,8 @@ private enum EnergeSavingSettingsScreenEntry: ItemListNodeEntry { case .itemsHeader: return ItemListSectionHeaderItem(presentationData: presentationData, text: presentationData.strings.PowerSavingScreen_OptionsHeader, sectionId: self.section) case let .item(_, type, value, enabled): - let (iconName, title, text) = type.title(strings: presentationData.strings) - return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: iconName)?.precomposed(), title: title, text: text, value: value, enableInteractiveChanges: true, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in + let (icon, title, text) = type.title(strings: presentationData.strings) + return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, icon: icon, title: title, text: text, value: value, enableInteractiveChanges: true, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in arguments.toggleItem(type) }, activatedWhileDisabled: { arguments.displayDisabledTooltip() diff --git a/submodules/SettingsUI/Sources/Data and Storage/SaveIncomingMediaController.swift b/submodules/SettingsUI/Sources/Data and Storage/SaveIncomingMediaController.swift index d45446860c..c127449e59 100644 --- a/submodules/SettingsUI/Sources/Data and Storage/SaveIncomingMediaController.swift +++ b/submodules/SettingsUI/Sources/Data and Storage/SaveIncomingMediaController.swift @@ -200,11 +200,11 @@ private enum SaveIncomingMediaEntry: ItemListNodeEntry { case let .typesHeader(text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) case let .typePhotos(title, value): - return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/DataPhotos"), title: title, value: value, sectionId: self.section, style: .blocks, updated: { _ in + return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.photosLightBlue, title: title, value: value, sectionId: self.section, style: .blocks, updated: { _ in arguments.toggle(.photo) }) case let .typeVideos(title, value): - return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/DataVideo"), title: title, value: value, sectionId: self.section, style: .blocks, updated: { _ in + return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.videosBlue, title: title, value: value, sectionId: self.section, style: .blocks, updated: { _ in arguments.toggle(.video) }) case let .typesInfo(text): diff --git a/submodules/SettingsUI/Sources/Notifications/NotificationsAndSoundsController.swift b/submodules/SettingsUI/Sources/Notifications/NotificationsAndSoundsController.swift index 5259d56163..0109d7090e 100644 --- a/submodules/SettingsUI/Sources/Notifications/NotificationsAndSoundsController.swift +++ b/submodules/SettingsUI/Sources/Notifications/NotificationsAndSoundsController.swift @@ -450,15 +450,15 @@ private enum NotificationsAndSoundsEntry: ItemListNodeEntry { case let .categoriesHeader(_, text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) case let .privateChats(_, title, subtitle, label): - return NotificationsCategoryItemListItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/EditProfile"), title: title, subtitle: subtitle, label: label, sectionId: self.section, style: .blocks, action: { + return NotificationsCategoryItemListItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.privateChats, title: title, subtitle: subtitle, label: label, sectionId: self.section, style: .blocks, action: { arguments.openPeerCategory(.privateChat) }) case let .groupChats(_, title, subtitle, label): - return NotificationsCategoryItemListItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/GroupChats"), title: title, subtitle: subtitle, label: label, sectionId: self.section, style: .blocks, action: { + return NotificationsCategoryItemListItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.groups, title: title, subtitle: subtitle, label: label, sectionId: self.section, style: .blocks, action: { arguments.openPeerCategory(.group) }) case let .channels(_, title, subtitle, label): - return NotificationsCategoryItemListItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Channels"), title: title, subtitle: subtitle, label: label, sectionId: self.section, style: .blocks, action: { + return NotificationsCategoryItemListItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.channels, title: title, subtitle: subtitle, label: label, sectionId: self.section, style: .blocks, action: { arguments.openPeerCategory(.channel) }) case let .stories(_, title, subtitle, label): diff --git a/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift b/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift index 416fdf56bd..e024a7d320 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift @@ -424,7 +424,7 @@ private enum PrivacyAndSecurityEntry: ItemListNodeEntry { case let .privacyHeader(_, text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) case let .blockedPeers(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Blocked")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.block, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openBlockedUsers() }) case let .phoneNumberPrivacy(_, text, value): @@ -480,31 +480,32 @@ private enum PrivacyAndSecurityEntry: ItemListNodeEntry { arguments.openVoiceCallPrivacy() }) case let .passcode(_, text, hasFaceId, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: hasFaceId ? "Settings/Menu/FaceId" : "Settings/Menu/TouchId")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + let _ = hasFaceId + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.faceId, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openPasscode() }) case let .twoStepVerification(_, text, value, data): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/TwoStepAuth")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.lockOrange, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openTwoStepVerification(data) }) case let .passkeys(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Passkeys")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.passkeys, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openPasskeys() }) case let .messageAutoremoveTimeout(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Timer")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.timer, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.setupMessageAutoremove() }, tag: PrivacyAndSecurityEntryTag.messageAutoremoveTimeout) case let .messageAutoremoveInfo(_, text): return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) - case let .loginEmail(_, text, emailPattern): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/LoginEmail")?.precomposed(), title: text, label: "", sectionId: self.section, style: .blocks, action: { + case let .loginEmail(_, text, emailPattern): + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.email, title: text, label: "", sectionId: self.section, style: .blocks, action: { arguments.openEmailSettings(emailPattern) }) case let .loginEmailInfo(_, text): return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) case let .activeSessions(_, text, value): - return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: UIImage(bundleImageName: "Settings/Menu/Websites")?.precomposed(), title: text, label: value, sectionId: self.section, style: .blocks, action: { + return ItemListDisclosureItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesSettings.activeSessions, title: text, label: value, sectionId: self.section, style: .blocks, action: { arguments.openActiveSessions() }) case let .autoArchiveHeader(text): diff --git a/submodules/SettingsUI/Sources/Search/SettingsSearchItem.swift b/submodules/SettingsUI/Sources/Search/SettingsSearchItem.swift index 440f524fd2..dc2178f8e7 100644 --- a/submodules/SettingsUI/Sources/Search/SettingsSearchItem.swift +++ b/submodules/SettingsUI/Sources/Search/SettingsSearchItem.swift @@ -21,7 +21,7 @@ extension SettingsSearchableItemIcon { func image() -> UIImage? { switch self { case .profile: - return PresentationResourcesSettings.editProfile + return PresentationResourcesSettings.privateChats case .proxy: return PresentationResourcesSettings.proxy case .savedMessages: diff --git a/submodules/TelegramCore/Sources/ApiUtils/StoreMessage_Telegram.swift b/submodules/TelegramCore/Sources/ApiUtils/StoreMessage_Telegram.swift index 2d2f32e51d..b3820bd68d 100644 --- a/submodules/TelegramCore/Sources/ApiUtils/StoreMessage_Telegram.swift +++ b/submodules/TelegramCore/Sources/ApiUtils/StoreMessage_Telegram.swift @@ -449,7 +449,7 @@ func textMediaAndExpirationTimerFromApiMedia(_ media: Api.MessageMedia?, _ peerI let (poll, results) = (messageMediaPollData.poll, messageMediaPollData.results) switch poll { case let .poll(pollData): - let (id, flags, question, answers, closePeriod, _) = (pollData.id, pollData.flags, pollData.question, pollData.answers, pollData.closePeriod, pollData.closeDate) + let (id, flags, question, answers, closePeriod) = (pollData.id, pollData.flags, pollData.question, pollData.answers, pollData.closePeriod) let publicity: TelegramMediaPollPublicity if (flags & (1 << 1)) != 0 { publicity = .public diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/Polls.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/Polls.swift index d13a6fd4b2..8f0238b66d 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/Polls.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/Polls.swift @@ -209,12 +209,12 @@ private final class PollResultsOptionContext { private var canLoadMore: Bool = true private var nextOffset: String? private var results: [PollResultsOptionState.Voter] = [] - private var count: Int + private var count: Int? private var populateCache: Bool = true let state = Promise() - init(queue: Queue, account: Account, pollId: MediaId, messageId: MessageId, opaqueIdentifier: Data, count: Int) { + init(queue: Queue, account: Account, pollId: MediaId, messageId: MessageId, opaqueIdentifier: Data, count: Int?) { self.queue = queue self.account = account self.pollId = pollId @@ -385,7 +385,7 @@ public struct PollResultsOptionState: Equatable { public var isLoadingMore: Bool public var hasLoadedOnce: Bool public var canLoadMore: Bool - public var count: Int + public var count: Int? } public struct PollResultsState: Equatable { @@ -403,11 +403,11 @@ private final class PollResultsContextImpl { self.queue = queue for option in poll.options { - var count = 0 + var count: Int? if let voters = poll.results.voters { for voter in voters { if voter.opaqueIdentifier == option.opaqueIdentifier { - count = Int(voter.count ?? 0) + count = voter.count.flatMap(Int.init) } } } diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift index 785aa906b8..375935d667 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift @@ -26,13 +26,15 @@ private func addRoundedRectPath(context: CGContext, rect: CGRect, radius: CGFloa context.restoreGState() } -private func renderIcon(name: String, scaleFactor: CGFloat = 1.0, backgroundColors: [UIColor]? = nil) -> UIImage? { - return generateImage(CGSize(width: 29.0, height: 29.0), contextGenerator: { size, context in +private let gradientImage = UIImage(bundleImageName: "Item List/Icons/Gradient") +private let backdropImage = UIImage(bundleImageName: "Item List/Icons/Backdrop") +public func renderSettingsIcon(name: String, scaleFactor: CGFloat = 1.0, backgroundColors: [UIColor]? = nil) -> UIImage? { + return generateImage(CGSize(width: 30.0, height: 30.0), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) context.clear(bounds) if let backgroundColors { - addRoundedRectPath(context: context, rect: CGRect(origin: CGPoint(), size: size), radius: 7.0) + context.addPath(UIBezierPath(roundedRect: CGRect(origin: .zero, size: size), cornerRadius: 8.0).cgPath) context.clip() var locations: [CGFloat] = [0.0, 1.0] @@ -44,6 +46,21 @@ private func renderIcon(name: String, scaleFactor: CGFloat = 1.0, backgroundColo context.drawLinearGradient(gradient, start: CGPoint(x: size.width, y: size.height), end: CGPoint(x: 0.0, y: 0.0), options: CGGradientDrawingOptions()) context.resetClip() + + if let gradientImage, let cgImage = gradientImage.cgImage { + context.saveGState() + context.setBlendMode(.plusLighter) + context.draw(cgImage, in: CGRect(origin: .zero, size: size)) + context.restoreGState() + } + + if let backdropImage, let cgImage = backdropImage.cgImage { + context.saveGState() + context.setBlendMode(.overlay) + context.draw(cgImage, in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: size)) + context.restoreGState() + } + if let image = generateTintedImage(image: UIImage(bundleImageName: name), color: .white), let cgImage = image.cgImage { let imageSize = CGSize(width: image.size.width * scaleFactor, height: image.size.height * scaleFactor) context.draw(cgImage, in: CGRect(origin: CGPoint(x: (bounds.width - imageSize.width) * 0.5, y: (bounds.height - imageSize.height) * 0.5), size: imageSize)) @@ -62,36 +79,75 @@ private func renderIcon(name: String, scaleFactor: CGFloat = 1.0, backgroundColo }) } +private let colorRed = UIColor(rgb: 0xFF453A) +private let colorGreen = UIColor(rgb: 0x34C759) +private let colorBlue = UIColor(rgb: 0x0A84FF) +private let colorLightBlue = UIColor(rgb: 0x32ADE6) +private let colorTeal = UIColor(rgb: 0x00c7be) +private let colorOrange = UIColor(rgb: 0xFF9F0A) +private let colorPurple = UIColor(rgb: 0xAF52DE) +private let colorGray = UIColor(rgb: 0x8E8E93) +private let colorViolet = UIColor(rgb: 0x5E5CE6) + public struct PresentationResourcesSettings { - public static let editProfile = renderIcon(name: "Settings/Menu/EditProfile") - public static let proxy = renderIcon(name: "Settings/Menu/Proxy") - public static let savedMessages = renderIcon(name: "Settings/Menu/SavedMessages") - public static let recentCalls = renderIcon(name: "Settings/Menu/RecentCalls") - public static let devices = renderIcon(name: "Settings/Menu/Sessions") - public static let chatFolders = renderIcon(name: "Settings/Menu/ChatListFilters") - public static let stickers = renderIcon(name: "Settings/Menu/Stickers") - public static let notifications = renderIcon(name: "Settings/Menu/Notifications") - public static let security = renderIcon(name: "Settings/Menu/Security") - public static let dataAndStorage = renderIcon(name: "Settings/Menu/DataAndStorage") - public static let appearance = renderIcon(name: "Settings/Menu/Appearance") - public static let language = renderIcon(name: "Settings/Menu/Language") - public static let deleteAccount = renderIcon(name: "Chat/Info/GroupRemovedIcon") - public static let powerSaving = renderIcon(name: "Settings/Menu/PowerSaving") - public static let stories = renderIcon(name: "Premium/Perk/Stories", scaleFactor: 0.97, backgroundColors: [UIColor(rgb: 0x5856D6)]) - public static let premiumGift = renderIcon(name: "Settings/Menu/Gift") - public static let business = renderIcon(name: "Settings/Menu/Business", backgroundColors: [UIColor(rgb: 0xA95CE3), UIColor(rgb: 0xF16B80)]) - public static let myProfile = renderIcon(name: "Settings/Menu/Profile") - public static let reactions = renderIcon(name: "Settings/Menu/Reactions") - public static let balance = renderIcon(name: "Settings/Menu/Balance", scaleFactor: 0.97, backgroundColors: [UIColor(rgb: 0x34c759)]) - public static let affiliateProgram = renderIcon(name: "Settings/Menu/AffiliateProgram") - public static let earnStars = renderIcon(name: "Settings/Menu/EarnStars") - public static let channelMessages = renderIcon(name: "Chat/Info/ChannelMessages", backgroundColors: [UIColor(rgb: 0x5856D6)]) + public static let proxy = renderSettingsIcon(name: "Settings/Menu/Proxy") + public static let savedMessages = renderSettingsIcon(name: "Item List/Icons/SavedMessages", backgroundColors: [colorBlue]) + public static let recentCalls = renderSettingsIcon(name: "Item List/Icons/Phone", backgroundColors: [colorGreen]) + public static let devices = renderSettingsIcon(name: "Item List/Icons/Devices", backgroundColors: [colorOrange]) + public static let chatFolders = renderSettingsIcon(name: "Item List/Icons/Folder", backgroundColors: [colorLightBlue]) + public static let stickers = renderSettingsIcon(name: "Item List/Icons/Sticker", backgroundColors: [colorOrange]) + public static let notifications = renderSettingsIcon(name: "Item List/Icons/Notifications", backgroundColors: [colorRed]) + public static let security = renderSettingsIcon(name: "Item List/Icons/Privacy", backgroundColors: [colorGray]) + public static let dataAndStorage = renderSettingsIcon(name: "Item List/Icons/Data", backgroundColors: [colorGreen]) + public static let appearance = renderSettingsIcon(name: "Item List/Icons/Appearance", backgroundColors: [colorLightBlue]) + public static let language = renderSettingsIcon(name: "Item List/Icons/Language", backgroundColors: [colorPurple]) + public static let deleteAccount = renderSettingsIcon(name: "Chat/Info/GroupRemovedIcon") + public static let powerSaving = renderSettingsIcon(name: "Item List/Icons/PowerSaving", backgroundColors: [colorOrange]) + public static let business = renderSettingsIcon(name: "Settings/Menu/Business", backgroundColors: [UIColor(rgb: 0xA95CE3), UIColor(rgb: 0xF16B80)]) + public static let myProfile = renderSettingsIcon(name: "Item List/Icons/Profile", backgroundColors: [colorRed]) - public static let premium = generateImage(CGSize(width: 29.0, height: 29.0), contextGenerator: { size, context in + public static let storageUsage = renderSettingsIcon(name: "Item List/Icons/Pie", backgroundColors: [colorOrange]) + public static let dataUsage = renderSettingsIcon(name: "Item List/Icons/Stats", backgroundColors: [colorPurple]) + + public static let cellular = renderSettingsIcon(name: "Item List/Icons/Cellular", backgroundColors: [colorGreen]) + public static let wifi = renderSettingsIcon(name: "Item List/Icons/Wifi", backgroundColors: [colorBlue]) + + public static let privateChats = renderSettingsIcon(name: "Item List/Icons/Member", backgroundColors: [colorBlue]) + public static let groups = renderSettingsIcon(name: "Item List/Icons/Group", backgroundColors: [colorGreen]) + public static let channels = renderSettingsIcon(name: "Item List/Icons/Channel", backgroundColors: [colorOrange]) + public static let stories = renderSettingsIcon(name: "Item List/Icons/Stories", backgroundColors: [colorViolet]) + public static let reactions = renderSettingsIcon(name: "Item List/Icons/Reactions", backgroundColors: [UIColor(rgb: 0xFF2D55)]) + + public static let photos = renderSettingsIcon(name: "Item List/Icons/Photo", backgroundColors: [colorOrange]) + public static let videos = renderSettingsIcon(name: "Item List/Icons/Video", backgroundColors: [colorRed]) + public static let files = renderSettingsIcon(name: "Item List/Icons/File", backgroundColors: [colorBlue]) + public static let gifs = renderSettingsIcon(name: "Item List/Icons/Gif", backgroundColors: [colorOrange]) + public static let stickersGreen = renderSettingsIcon(name: "Item List/Icons/Sticker", backgroundColors: [colorGreen]) + public static let emoji = renderSettingsIcon(name: "Item List/Icons/Emoji", backgroundColors: [colorTeal]) + public static let effects = renderSettingsIcon(name: "Item List/Icons/Effect", backgroundColors: [colorLightBlue]) + public static let photosBlue = renderSettingsIcon(name: "Item List/Icons/Photo", backgroundColors: [colorBlue]) + public static let clock = renderSettingsIcon(name: "Item List/Icons/Clock", backgroundColors: [colorPurple]) + public static let photosLightBlue = renderSettingsIcon(name: "Item List/Icons/Photo", backgroundColors: [colorLightBlue]) + public static let videosBlue = renderSettingsIcon(name: "Item List/Icons/Video", backgroundColors: [colorBlue]) + + public static let block = renderSettingsIcon(name: "Item List/Icons/Block", backgroundColors: [colorRed]) + public static let activeSessions = renderSettingsIcon(name: "Item List/Icons/Language", backgroundColors: [colorBlue]) + public static let faceId = renderSettingsIcon(name: "Item List/Icons/FaceId", backgroundColors: [colorGreen]) + public static let lockOrange = renderSettingsIcon(name: "Item List/Icons/Privacy", backgroundColors: [colorOrange]) + public static let passkeys = renderSettingsIcon(name: "Item List/Icons/Key", backgroundColors: [colorViolet]) + public static let timer = renderSettingsIcon(name: "Item List/Icons/Timer", backgroundColors: [colorPurple]) + public static let email = renderSettingsIcon(name: "Item List/Icons/Email", backgroundColors: [colorViolet]) + + public static let balance = renderSettingsIcon(name: "Settings/Menu/Balance", scaleFactor: 0.97, backgroundColors: [colorGreen]) + public static let affiliateProgram = renderSettingsIcon(name: "Settings/Menu/AffiliateProgram") + public static let earnStars = renderSettingsIcon(name: "Settings/Menu/EarnStars") + public static let channelMessages = renderSettingsIcon(name: "Chat/Info/ChannelMessages", backgroundColors: [UIColor(rgb: 0x5856D6)]) + + public static let premium = generateImage(CGSize(width: 30.0, height: 30.0), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) context.clear(bounds) - let path = UIBezierPath(roundedRect: bounds, cornerRadius: 7.0) + let path = UIBezierPath(roundedRect: bounds, cornerRadius: 8.0) context.addPath(path.cgPath) context.clip() @@ -104,27 +160,52 @@ public struct PresentationResourcesSettings { ] var locations: [CGFloat] = [0.0, 0.15, 0.5, 0.85, 1.0] let gradient = CGGradient(colorsSpace: deviceColorSpace, colors: colorsArray as CFArray, locations: &locations)! - context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: size.height), options: CGGradientDrawingOptions()) - if let image = generateTintedImage(image: UIImage(bundleImageName: "Premium/ButtonIcon"), color: UIColor(rgb: 0xffffff)), let cgImage = image.cgImage { - context.draw(cgImage, in: CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - image.size.width) / 2.0), y: floorToScreenPixels((bounds.height - image.size.height) / 2.0)), size: image.size)) + if let gradientImage, let cgImage = gradientImage.cgImage { + context.saveGState() + context.setBlendMode(.plusLighter) + context.draw(cgImage, in: CGRect(origin: .zero, size: size)) + context.restoreGState() } - drawBorder(context: context, rect: bounds) + if let backdropImage, let cgImage = backdropImage.cgImage { + context.saveGState() + context.setBlendMode(.overlay) + context.draw(cgImage, in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: size)) + context.restoreGState() + } + + if let image = generateTintedImage(image: UIImage(bundleImageName: "Item List/Icons/Premium"), color: UIColor(rgb: 0xffffff)), let cgImage = image.cgImage { + context.draw(cgImage, in: CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - image.size.width) / 2.0), y: floorToScreenPixels((bounds.height - image.size.height) / 2.0)), size: image.size)) + } }) - public static let ton = generateImage(CGSize(width: 29.0, height: 29.0), contextGenerator: { size, context in + public static let ton = generateImage(CGSize(width: 30.0, height: 30.0), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) context.clear(bounds) - let path = UIBezierPath(roundedRect: bounds, cornerRadius: 7.0) + let path = UIBezierPath(roundedRect: bounds, cornerRadius: 8.0) context.addPath(path.cgPath) context.clip() context.setFillColor(UIColor(rgb: 0x32ade6).cgColor) context.fill(bounds) + if let gradientImage, let cgImage = gradientImage.cgImage { + context.saveGState() + context.setBlendMode(.plusLighter) + context.draw(cgImage, in: CGRect(origin: .zero, size: size)) + context.restoreGState() + } + + if let backdropImage, let cgImage = backdropImage.cgImage { + context.saveGState() + context.setBlendMode(.overlay) + context.draw(cgImage, in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: size)) + context.restoreGState() + } + if let image = generateTintedImage(image: UIImage(bundleImageName: "Ads/TonAbout"), color: UIColor(rgb: 0xffffff)), let cgImage = image.cgImage { context.draw(cgImage, in: CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - image.size.width) / 2.0), y: floorToScreenPixels((bounds.height - image.size.height) / 2.0)), size: image.size)) } @@ -132,7 +213,7 @@ public struct PresentationResourcesSettings { drawBorder(context: context, rect: bounds) }) - public static let stars = generateImage(CGSize(width: 29.0, height: 29.0), contextGenerator: { size, context in + public static let stars = generateImage(CGSize(width: 30.0, height: 30.0), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) context.clear(bounds) @@ -149,11 +230,61 @@ public struct PresentationResourcesSettings { context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: size.height), options: CGGradientDrawingOptions()) - if let image = generateTintedImage(image: UIImage(bundleImageName: "Premium/ButtonIcon"), color: UIColor(rgb: 0xffffff)), let cgImage = image.cgImage { - context.draw(cgImage, in: CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - image.size.width) / 2.0), y: floorToScreenPixels((bounds.height - image.size.height) / 2.0)), size: image.size)) + if let gradientImage, let cgImage = gradientImage.cgImage { + context.saveGState() + context.setBlendMode(.plusLighter) + context.draw(cgImage, in: CGRect(origin: .zero, size: size)) + context.restoreGState() } - drawBorder(context: context, rect: bounds) + if let backdropImage, let cgImage = backdropImage.cgImage { + context.saveGState() + context.setBlendMode(.overlay) + context.draw(cgImage, in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: size)) + context.restoreGState() + } + + if let image = generateTintedImage(image: UIImage(bundleImageName: "Item List/Icons/Stars"), color: UIColor(rgb: 0xffffff)), let cgImage = image.cgImage { + context.draw(cgImage, in: CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - image.size.width) / 2.0), y: floorToScreenPixels((bounds.height - image.size.height) / 2.0)), size: image.size)) + } + }) + + public static let premiumGift = generateImage(CGSize(width: 30.0, height: 30.0), contextGenerator: { size, context in + let bounds = CGRect(origin: CGPoint(), size: size) + context.clear(bounds) + + let path = UIBezierPath(roundedRect: bounds, cornerRadius: 8.0) + context.addPath(path.cgPath) + context.clip() + + let colorsArray: [CGColor] = [ + UIColor(rgb: 0x3ba1f2).cgColor, + UIColor(rgb: 0x3ba1f2).cgColor, + UIColor(rgb: 0x39b3b4).cgColor, + UIColor(rgb: 0x34c27d).cgColor, + UIColor(rgb: 0x34c27d).cgColor + ] + var locations: [CGFloat] = [0.0, 0.15, 0.5, 0.85, 1.0] + let gradient = CGGradient(colorsSpace: deviceColorSpace, colors: colorsArray as CFArray, locations: &locations)! + context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: size.height), options: CGGradientDrawingOptions()) + + if let gradientImage, let cgImage = gradientImage.cgImage { + context.saveGState() + context.setBlendMode(.plusLighter) + context.draw(cgImage, in: CGRect(origin: .zero, size: size)) + context.restoreGState() + } + + if let backdropImage, let cgImage = backdropImage.cgImage { + context.saveGState() + context.setBlendMode(.overlay) + context.draw(cgImage, in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: size)) + context.restoreGState() + } + + if let image = generateTintedImage(image: UIImage(bundleImageName: "Item List/Icons/Gift"), color: UIColor(rgb: 0xffffff)), let cgImage = image.cgImage { + context.draw(cgImage, in: CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - image.size.width) / 2.0), y: floorToScreenPixels((bounds.height - image.size.height) / 2.0)), size: image.size)) + } }) public static let bot = generateImage(CGSize(width: 29.0, height: 29.0), contextGenerator: { size, context in @@ -174,23 +305,23 @@ public struct PresentationResourcesSettings { drawBorder(context: context, rect: bounds) }) - public static let passport = renderIcon(name: "Settings/Menu/Passport") - public static let watch = renderIcon(name: "Settings/Menu/Watch") + public static let passport = renderSettingsIcon(name: "Settings/Menu/Passport") + public static let watch = renderSettingsIcon(name: "Settings/Menu/Watch") - public static let support = renderIcon(name: "Settings/Menu/Support") - public static let faq = renderIcon(name: "Settings/Menu/Faq") - public static let tips = renderIcon(name: "Settings/Menu/Tips") + public static let support = renderSettingsIcon(name: "Item List/Icons/Support", backgroundColors: [colorOrange]) + public static let faq = renderSettingsIcon(name: "Item List/Icons/Faq", backgroundColors: [colorLightBlue]) + public static let tips = renderSettingsIcon(name: "Item List/Icons/Tips", backgroundColors: [UIColor(rgb: 0xffcc02)]) - public static let addAccount = renderIcon(name: "Settings/Menu/AddAccount") - public static let setPasscode = renderIcon(name: "Settings/Menu/SetPasscode") - public static let clearCache = renderIcon(name: "Settings/Menu/ClearCache") - public static let changePhoneNumber = renderIcon(name: "Settings/Menu/ChangePhoneNumber") + public static let addAccount = renderSettingsIcon(name: "Settings/Menu/AddAccount") + public static let setPasscode = renderSettingsIcon(name: "Settings/Menu/SetPasscode") + public static let clearCache = renderSettingsIcon(name: "Settings/Menu/ClearCache") + public static let changePhoneNumber = renderSettingsIcon(name: "Settings/Menu/ChangePhoneNumber") - public static let deleteAddAccount = renderIcon(name: "Settings/Menu/DeleteAddAccount") - public static let deleteSetTwoStepAuth = renderIcon(name: "Settings/Menu/DeleteTwoStepAuth") - public static let deleteSetPasscode = renderIcon(name: "Settings/Menu/FaceId") - public static let deleteChats = renderIcon(name: "Settings/Menu/DeleteChats") - public static let clearSynced = renderIcon(name: "Settings/Menu/ClearSynced") + public static let deleteAddAccount = renderSettingsIcon(name: "Settings/Menu/DeleteAddAccount") + public static let deleteSetTwoStepAuth = renderSettingsIcon(name: "Settings/Menu/DeleteTwoStepAuth") + public static let deleteSetPasscode = renderSettingsIcon(name: "Settings/Menu/FaceId") + public static let deleteChats = renderSettingsIcon(name: "Settings/Menu/DeleteChats") + public static let clearSynced = renderSettingsIcon(name: "Settings/Menu/ClearSynced") - public static let websites = renderIcon(name: "Settings/Menu/Websites") + public static let websites = renderSettingsIcon(name: "Settings/Menu/Websites") } diff --git a/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileController.swift b/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileController.swift index a294b89d53..cb5a5bb6a2 100644 --- a/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileController.swift +++ b/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileController.swift @@ -27,15 +27,17 @@ private final class AttachmentFileControllerArguments { let openFiles: () -> Void let scanDocument: () -> Void let expandSavedMusic: () -> Void + let expandRecentMusic: () -> Void let send: (Message) -> Void - init(context: AccountContext, isAudio: Bool, openGallery: @escaping () -> Void, openFiles: @escaping () -> Void, scanDocument: @escaping () -> Void, expandSavedMusic: @escaping () -> Void, send: @escaping (Message) -> Void) { + init(context: AccountContext, isAudio: Bool, openGallery: @escaping () -> Void, openFiles: @escaping () -> Void, scanDocument: @escaping () -> Void, expandSavedMusic: @escaping () -> Void, expandRecentMusic: @escaping () -> Void, send: @escaping (Message) -> Void) { self.context = context self.isAudio = isAudio self.openGallery = openGallery self.openFiles = openFiles self.scanDocument = scanDocument self.expandSavedMusic = expandSavedMusic + self.expandRecentMusic = expandRecentMusic self.send = send } } @@ -44,6 +46,7 @@ private enum AttachmentFileSection: Int32 { case select case savedMusic case recent + case global } private func areMessagesEqual(_ lhsMessage: Message?, _ rhsMessage: Message?) -> Bool { @@ -66,93 +69,132 @@ private enum AttachmentFileEntry: ItemListNodeEntry { case savedHeader(PresentationTheme, String) case savedFile(Int32, PresentationTheme, Message?) - case showMore(PresentationTheme, String) + case savedShowMore(PresentationTheme, String) case recentHeader(PresentationTheme, String) - case file(Int32, PresentationTheme, Message?) + case recentFile(Int32, PresentationTheme, Message?) + case recentShowMore(PresentationTheme, String) + + case globalHeader(PresentationTheme, String) + case globalFile(Int32, PresentationTheme, Message?) + case globalShowMore(PresentationTheme, String) var section: ItemListSectionId { switch self { - case .selectFromGallery, .selectFromFiles, .scanDocument: - return AttachmentFileSection.select.rawValue - case .savedHeader, .savedFile, .showMore: - return AttachmentFileSection.savedMusic.rawValue - case .recentHeader, .file: - return AttachmentFileSection.recent.rawValue + case .selectFromGallery, .selectFromFiles, .scanDocument: + return AttachmentFileSection.select.rawValue + case .savedHeader, .savedFile, .savedShowMore: + return AttachmentFileSection.savedMusic.rawValue + case .recentHeader, .recentFile, .recentShowMore: + return AttachmentFileSection.recent.rawValue + case .globalHeader, .globalFile, .globalShowMore: + return AttachmentFileSection.global.rawValue } } var stableId: Int32 { switch self { - case .selectFromGallery: - return 0 - case .selectFromFiles: - return 1 - case .scanDocument: - return 2 - case .savedHeader: - return 3 - case let .savedFile(index, _, _): - return 4 + index - case .showMore: - return 9999 - case .recentHeader: - return 10000 - case let .file(index, _, _): - return 10001 + index + case .selectFromGallery: + return 0 + case .selectFromFiles: + return 1 + case .scanDocument: + return 2 + case .savedHeader: + return 3 + case let .savedFile(index, _, _): + return 4 + index + case .savedShowMore: + return 9999 + case .recentHeader: + return 10000 + case let .recentFile(index, _, _): + return 10001 + index + case .recentShowMore: + return 100000 + case .globalHeader: + return 100001 + case let .globalFile(index, _, _): + return 100002 + index + case .globalShowMore: + return 200000 } } static func ==(lhs: AttachmentFileEntry, rhs: AttachmentFileEntry) -> Bool { switch lhs { - case let .selectFromGallery(lhsTheme, lhsText): - if case let .selectFromGallery(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .selectFromFiles(lhsTheme, lhsText): - if case let .selectFromFiles(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .scanDocument(lhsTheme, lhsText): - if case let .scanDocument(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .savedHeader(lhsTheme, lhsText): - if case let .savedHeader(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .savedFile(lhsIndex, lhsTheme, lhsMessage): - if case let .savedFile(rhsIndex, rhsTheme, rhsMessage) = rhs, lhsIndex == rhsIndex, lhsTheme === rhsTheme, areMessagesEqual(lhsMessage, rhsMessage) { - return true - } else { - return false - } - case let .showMore(lhsTheme, lhsText): - if case let .showMore(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .recentHeader(lhsTheme, lhsText): - if case let .recentHeader(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } - case let .file(lhsIndex, lhsTheme, lhsMessage): - if case let .file(rhsIndex, rhsTheme, rhsMessage) = rhs, lhsIndex == rhsIndex, lhsTheme === rhsTheme, areMessagesEqual(lhsMessage, rhsMessage) { - return true - } else { - return false - } + case let .selectFromGallery(lhsTheme, lhsText): + if case let .selectFromGallery(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .selectFromFiles(lhsTheme, lhsText): + if case let .selectFromFiles(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .scanDocument(lhsTheme, lhsText): + if case let .scanDocument(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .savedHeader(lhsTheme, lhsText): + if case let .savedHeader(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .savedFile(lhsIndex, lhsTheme, lhsMessage): + if case let .savedFile(rhsIndex, rhsTheme, rhsMessage) = rhs, lhsIndex == rhsIndex, lhsTheme === rhsTheme, areMessagesEqual(lhsMessage, rhsMessage) { + return true + } else { + return false + } + case let .savedShowMore(lhsTheme, lhsText): + if case let .savedShowMore(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .recentHeader(lhsTheme, lhsText): + if case let .recentHeader(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .recentFile(lhsIndex, lhsTheme, lhsMessage): + if case let .recentFile(rhsIndex, rhsTheme, rhsMessage) = rhs, lhsIndex == rhsIndex, lhsTheme === rhsTheme, areMessagesEqual(lhsMessage, rhsMessage) { + return true + } else { + return false + } + case let .recentShowMore(lhsTheme, lhsText): + if case let .recentShowMore(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .globalHeader(lhsTheme, lhsText): + if case let .globalHeader(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } + case let .globalFile(lhsIndex, lhsTheme, lhsMessage): + if case let .globalFile(rhsIndex, rhsTheme, rhsMessage) = rhs, lhsIndex == rhsIndex, lhsTheme === rhsTheme, areMessagesEqual(lhsMessage, rhsMessage) { + return true + } else { + return false + } + case let .globalShowMore(lhsTheme, lhsText): + if case let .globalShowMore(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } } } @@ -163,45 +205,65 @@ private enum AttachmentFileEntry: ItemListNodeEntry { func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { let arguments = arguments as! AttachmentFileControllerArguments switch self { - case let .selectFromGallery(_, text): - return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.imageIcon(presentationData.theme), title: text, alwaysPlain: false, sectionId: self.section, height: .generic, editing: false, action: { - arguments.openGallery() - }) - case let .selectFromFiles(_, text): - return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.cloudIcon(presentationData.theme), title: text, alwaysPlain: false, sectionId: self.section, height: .generic, editing: false, action: { - arguments.openFiles() - }) - case let .scanDocument(_, text): - return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.scanIcon(presentationData.theme), title: text, alwaysPlain: false, sectionId: self.section, height: .generic, editing: false, action: { - arguments.scanDocument() - }) - case let .savedHeader(_, text): - return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) - case let .savedFile(_, _, message): - let interaction = ListMessageItemInteraction(openMessage: { message, _ in - arguments.send(message) - return false - }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) + case let .selectFromGallery(_, text): + return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.imageIcon(presentationData.theme), title: text, alwaysPlain: false, sectionId: self.section, height: .generic, editing: false, action: { + arguments.openGallery() + }) + case let .selectFromFiles(_, text): + return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.cloudIcon(presentationData.theme), title: text, alwaysPlain: false, sectionId: self.section, height: .generic, editing: false, action: { + arguments.openFiles() + }) + case let .scanDocument(_, text): + return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.scanIcon(presentationData.theme), title: text, alwaysPlain: false, sectionId: self.section, height: .generic, editing: false, action: { + arguments.scanDocument() + }) + case let .savedHeader(_, text): + return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) + case let .savedFile(_, _, message): + let interaction = ListMessageItemInteraction(openMessage: { message, _ in + arguments.send(message) + return false + }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) - let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat - let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false)) - return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: arguments.context.account.peerId), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section) - case let .showMore(theme, text): - return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: { - arguments.expandSavedMusic() - }) - case let .recentHeader(_, text): - return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) - case let .file(_, _, message): - let interaction = ListMessageItemInteraction(openMessage: { message, _ in - arguments.send(message) - return false - }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) + let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat + let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false)) + return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: arguments.context.account.peerId), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section) + case let .savedShowMore(theme, text): + return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: { + arguments.expandSavedMusic() + }) + case let .recentHeader(_, text): + return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) + case let .recentFile(_, _, message): + let interaction = ListMessageItemInteraction(openMessage: { message, _ in + arguments.send(message) + return false + }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) - let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat - let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false)) + let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat + let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false)) - return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section) + return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section) + case let .recentShowMore(theme, text): + return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: { + arguments.expandRecentMusic() + }) + case let .globalHeader(_, text): + return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) + case let .globalFile(_, _, message): + let interaction = ListMessageItemInteraction(openMessage: { message, _ in + arguments.send(message) + return false + }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) + + let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat + let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false)) + + return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section) + case let .globalShowMore(theme, text): + return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: { + + }) } } } @@ -230,36 +292,49 @@ private func attachmentFileControllerEntries(presentationData: PresentationData, if case .audio = mode { if let savedMusic, savedMusic.count > 0 { entries.append(.savedHeader(presentationData.theme, presentationData.strings.MediaEditor_Audio_SavedMusic.uppercased())) + var savedMusic = savedMusic - var showMore = false + var hasShowMore = false if savedMusic.count > 4 && !state.savedMusicExpanded { savedMusic = Array(savedMusic.prefix(3)) - showMore = true + hasShowMore = true } + var i: Int32 = 0 for file in savedMusic { entries.append(.savedFile(i, presentationData.theme, file)) i += 1 } - if showMore { - entries.append(.showMore(presentationData.theme, presentationData.strings.MediaEditor_Audio_ShowMore)) + if hasShowMore { + entries.append(.savedShowMore(presentationData.theme, presentationData.strings.MediaEditor_Audio_ShowMore)) } } } - if let recentDocuments = recentDocuments { + if let recentDocuments { if recentDocuments.count > 0 { entries.append(.recentHeader(presentationData.theme, listTitle.uppercased())) + + var recentDocuments = recentDocuments + var hasShowMore = false + if !"".isEmpty, case .audio = mode, recentDocuments.count > 4 && !state.savedMusicExpanded { + recentDocuments = Array(recentDocuments.prefix(3)) + hasShowMore = true + } + var i: Int32 = 0 for file in recentDocuments { - entries.append(.file(i, presentationData.theme, file)) + entries.append(.recentFile(i, presentationData.theme, file)) i += 1 } + if hasShowMore { + entries.append(.recentShowMore(presentationData.theme, presentationData.strings.MediaEditor_Audio_ShowMore)) + } } } else { entries.append(.recentHeader(presentationData.theme, listTitle.uppercased())) for i in 0 ..< 11 { - entries.append(.file(Int32(i), presentationData.theme, nil)) + entries.append(.recentFile(Int32(i), presentationData.theme, nil)) } } @@ -353,6 +428,7 @@ public class AttachmentFileControllerImpl: ItemListController, AttachmentFileCon private struct AttachmentFileControllerState: Equatable { var searching: Bool var savedMusicExpanded: Bool + var recentMusicExpanded: Bool } public enum AttachmentFileControllerMode { @@ -372,8 +448,8 @@ public func makeAttachmentFileControllerImpl( ) -> AttachmentFileController { let actionsDisposable = DisposableSet() - let statePromise = ValuePromise(AttachmentFileControllerState(searching: false, savedMusicExpanded: false), ignoreRepeated: true) - let stateValue = Atomic(value: AttachmentFileControllerState(searching: false, savedMusicExpanded: false)) + let statePromise = ValuePromise(AttachmentFileControllerState(searching: false, savedMusicExpanded: false, recentMusicExpanded: false), ignoreRepeated: true) + let stateValue = Atomic(value: AttachmentFileControllerState(searching: false, savedMusicExpanded: false, recentMusicExpanded: false)) let updateState: ((AttachmentFileControllerState) -> AttachmentFileControllerState) -> Void = { f in statePromise.set(stateValue.modify { f($0) }) } @@ -403,6 +479,13 @@ public func makeAttachmentFileControllerImpl( return updatedState } }, + expandRecentMusic: { + updateState { state in + var updatedState = state + updatedState.recentMusicExpanded = true + return updatedState + } + }, send: { message in if message.id.namespace == Namespaces.Message.Local { if let file = message.media.first(where: { $0 is TelegramMediaFile }) as? TelegramMediaFile { diff --git a/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileSearchItem.swift b/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileSearchItem.swift index cf18f0c2a8..2879bbe112 100644 --- a/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileSearchItem.swift +++ b/submodules/TelegramUI/Components/AttachmentFileController/Sources/AttachmentFileSearchItem.swift @@ -18,6 +18,7 @@ import ContextUI import ListMessageItem import ComponentFlow import SearchInputPanelComponent +import ItemListPeerActionItem final class AttachmentFileSearchItem: ItemListControllerSearch { let context: AccountContext @@ -198,16 +199,20 @@ private final class AttachmentFileSearchItemNode: ItemListControllerSearchNode { private final class AttachmentFileSearchContainerInteraction { let context: AccountContext let send: (Message) -> Void + let expandSection: (Int32) -> Void - init(context: AccountContext, send: @escaping (Message) -> Void) { + init(context: AccountContext, send: @escaping (Message) -> Void, expandSection: @escaping (Int32) -> Void) { self.context = context self.send = send + self.expandSection = expandSection } } private enum AttachmentFileSearchEntryId: Hashable { - case placeholder(Int) - case message(MessageId) + case header(Int32) + case placeholder(Int32, Int32) + case message(Int32, MessageId) + case showMore(Int32) } private func areMessagesEqual(_ lhsMessage: Message?, _ rhsMessage: Message?) -> Bool { @@ -223,37 +228,95 @@ private func areMessagesEqual(_ lhsMessage: Message?, _ rhsMessage: Message?) -> return true } -private final class AttachmentFileSearchEntry: Comparable, Identifiable { - let index: Int - let message: Message? +private enum AttachmentFileSearchEntry: Comparable, Identifiable { + case header(title: String, section: Int32) + case file(index: Int32, message: Message?, section: Int32) + case showMore(text: String, section: Int32) - init(index: Int, message: Message?) { - self.index = index - self.message = message + var section: ItemListSectionId { + switch self { + case let .header(_, section): + return section + case let .file(_, _, section): + return section + case let .showMore(_, section): + return section + } } var stableId: AttachmentFileSearchEntryId { - if let message = self.message { - return .message(message.id) - } else { - return .placeholder(self.index) + switch self { + case let .header(_, section): + return .header(section) + case let .file(index, message, section): + if let message { + return .message(section, message.id) + } else { + return .placeholder(section, index) + } + case let .showMore(_, section): + return .showMore(section) + } + } + + var sortId: Int64 { + switch self { + case let .header(_, section): + return Int64(section) * 100000 + case let .file(index, _, section): + return Int64(section) * 100000 + 1 + Int64(index) + case let .showMore(_, section): + return Int64(section + 1) * 100000 - 1 } } static func ==(lhs: AttachmentFileSearchEntry, rhs: AttachmentFileSearchEntry) -> Bool { - return lhs.index == rhs.index && areMessagesEqual(lhs.message, rhs.message) + switch lhs { + case let .header(lhsTitle, lhsSection): + if case let .header(rhsTitle, rhsSection) = rhs, lhsTitle == rhsTitle, lhsSection == rhsSection { + return true + } else { + return false + } + case let .file(lhsIndex, lhsMessage, lhsSection): + if case let .file(rhsIndex, rhsMessage, rhsSection) = rhs, lhsIndex == rhsIndex, areMessagesEqual(lhsMessage, rhsMessage), lhsSection == rhsSection { + return true + } else { + return false + } + case let .showMore(lhsText, lhsSection): + if case let .showMore(rhsText, rhsSection) = rhs, lhsText == rhsText, lhsSection == rhsSection { + return true + } else { + return false + } + } } static func <(lhs: AttachmentFileSearchEntry, rhs: AttachmentFileSearchEntry) -> Bool { - return lhs.index < rhs.index + return lhs.sortId < rhs.sortId } - func item(context: AccountContext, presentationData: PresentationData, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, interaction: AttachmentFileSearchContainerInteraction) -> ListViewItem { - let itemInteraction = ListMessageItemInteraction(openMessage: { message, _ in - interaction.send(message) - return false - }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) - return ListMessageItem(presentationData: ChatPresentationData(presentationData: presentationData), systemStyle: .glass, context: interaction.context, chatLocation: .peer(id: PeerId(0)), interaction: itemInteraction, message: message, selection: .none, displayHeader: true, displayFileInfo: false, displayBackground: true, style: .plain) + func item(context: AccountContext, presentationData: PresentationData, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, interaction: AttachmentFileSearchContainerInteraction, mode: AttachmentFileControllerMode) -> ListViewItem { + switch self { + case let .header(title, section): + return ItemListSectionHeaderItem(presentationData: ItemListPresentationData(presentationData), text: title, sectionId: section) + case let .file(_, message, section): + let itemInteraction = ListMessageItemInteraction(openMessage: { message, _ in + interaction.send(message) + return false + }, openMessageContextMenu: { _, _, _, _, _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] }) + + let displayFileInfo = mode == .audio + let isStoryMusic = mode == .audio + let isDownloadList = mode == .audio + + return ListMessageItem(presentationData: ChatPresentationData(presentationData: presentationData), systemStyle: .glass, context: interaction.context, chatLocation: .peer(id: PeerId(0)), interaction: itemInteraction, message: message, selection: .none, displayHeader: false, isDownloadList: isDownloadList, isStoryMusic: isStoryMusic, displayFileInfo: displayFileInfo, displayBackground: true, style: .blocks, sectionId: section) + case let .showMore(text, section): + return ItemListPeerActionItem(presentationData: ItemListPresentationData(presentationData), systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(presentationData.theme), title: text, sectionId: section, editing: false, action: { + interaction.expandSection(section) + }) + } } } @@ -266,12 +329,12 @@ struct AttachmentFileSearchContainerTransition { let query: String } -private func attachmentFileSearchContainerPreparedRecentTransition(from fromEntries: [AttachmentFileSearchEntry], to toEntries: [AttachmentFileSearchEntry], isSearching: Bool, isEmpty: Bool, query: String, context: AccountContext, presentationData: PresentationData, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, interaction: AttachmentFileSearchContainerInteraction) -> AttachmentFileSearchContainerTransition { +private func attachmentFileSearchContainerPreparedRecentTransition(from fromEntries: [AttachmentFileSearchEntry], to toEntries: [AttachmentFileSearchEntry], isSearching: Bool, isEmpty: Bool, query: String, context: AccountContext, presentationData: PresentationData, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, interaction: AttachmentFileSearchContainerInteraction, mode: AttachmentFileControllerMode) -> AttachmentFileSearchContainerTransition { let (deleteIndices, indicesAndItems, updateIndices) = mergeListsStableWithUpdates(leftList: fromEntries, rightList: toEntries) let deletions = deleteIndices.map { ListViewDeleteItem(index: $0, directionHint: nil) } - let insertions = indicesAndItems.map { ListViewInsertItem(index: $0.0, previousIndex: $0.2, item: $0.1.item(context: context, presentationData: presentationData, nameSortOrder: nameSortOrder, nameDisplayOrder: nameDisplayOrder, interaction: interaction), directionHint: nil) } - let updates = updateIndices.map { ListViewUpdateItem(index: $0.0, previousIndex: $0.2, item: $0.1.item(context: context, presentationData: presentationData, nameSortOrder: nameSortOrder, nameDisplayOrder: nameDisplayOrder, interaction: interaction), directionHint: nil) } + let insertions = indicesAndItems.map { ListViewInsertItem(index: $0.0, previousIndex: $0.2, item: $0.1.item(context: context, presentationData: presentationData, nameSortOrder: nameSortOrder, nameDisplayOrder: nameDisplayOrder, interaction: interaction, mode: mode), directionHint: nil) } + let updates = updateIndices.map { ListViewUpdateItem(index: $0.0, previousIndex: $0.2, item: $0.1.item(context: context, presentationData: presentationData, nameSortOrder: nameSortOrder, nameDisplayOrder: nameDisplayOrder, interaction: interaction, mode: mode), directionHint: nil) } return AttachmentFileSearchContainerTransition(deletions: deletions, insertions: insertions, updates: updates, isSearching: isSearching, isEmpty: isEmpty, query: query) } @@ -284,6 +347,8 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon private let dimNode: ASDisplayNode private let backgroundNode: ASDisplayNode private let listNode: ListView + private let leftOverlayNode: ASDisplayNode + private let rightOverlayNode: ASDisplayNode private let emptyResultsTitleNode: ImmediateTextNode private let emptyResultsTextNode: ImmediateTextNode @@ -295,9 +360,18 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon private let emptyQueryDisposable = MetaDisposable() private let searchDisposable = MetaDisposable() + private let savedMusicContext: ProfileSavedMusicContext? + private var presentationData: PresentationData private var presentationDataDisposable: Disposable? private let presentationDataPromise: Promise + + private var expandedSections = Set() { + didSet { + self.expandedSectionsPromise.set(self.expandedSections) + } + } + private var expandedSectionsPromise = ValuePromise>(Set()) private var _hasDim: Bool = false override public var hasDim: Bool { @@ -308,6 +382,15 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon self.context = context self.send = send + let savedMusicContext: ProfileSavedMusicContext? + switch mode { + case .audio: + savedMusicContext = ProfileSavedMusicContext(account: context.account, peerId: context.account.peerId) + default: + savedMusicContext = nil + } + self.savedMusicContext = savedMusicContext + self.presentationData = presentationData self.presentationDataPromise = Promise(self.presentationData) @@ -321,6 +404,10 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon self.listNode.accessibilityPageScrolledString = { row, count in return presentationData.strings.VoiceOver_ScrollStatus(row, count).string } + self.leftOverlayNode = ASDisplayNode() + self.leftOverlayNode.isUserInteractionEnabled = false + self.rightOverlayNode = ASDisplayNode() + self.rightOverlayNode.isUserInteractionEnabled = false self.emptyResultsTitleNode = ImmediateTextNode() self.emptyResultsTitleNode.displaysAsynchronously = false @@ -336,12 +423,15 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon super.init() - self.backgroundNode.backgroundColor = self.presentationData.theme.chatList.backgroundColor + self.backgroundNode.backgroundColor = self.presentationData.theme.list.blocksBackgroundColor self.backgroundNode.alpha = 0.0 - self.listNode.backgroundColor = self.presentationData.theme.chatList.backgroundColor + self.listNode.backgroundColor = self.presentationData.theme.list.blocksBackgroundColor self.listNode.alpha = 0.0 + self.leftOverlayNode.backgroundColor = self.presentationData.theme.list.blocksBackgroundColor + self.rightOverlayNode.backgroundColor = self.presentationData.theme.list.blocksBackgroundColor + self._hasDim = true self.addSubnode(self.dimNode) @@ -355,6 +445,8 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon let interaction = AttachmentFileSearchContainerInteraction(context: context, send: { [weak self] message in send(message) self?.listNode.clearHighlightAnimated(true) + }, expandSection: { [weak self] section in + self?.expandedSections.insert(section) }) let presentationDataPromise = self.presentationDataPromise @@ -369,49 +461,179 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon } } + let expandedSectionsPromise = self.expandedSectionsPromise let foundItems = searchQuery |> mapToSignal { query -> Signal<[AttachmentFileSearchEntry]?, NoError> in - guard let query = query, !query.isEmpty else { + guard let query, !query.isEmpty else { return .single(nil) } - let signal: Signal<[Message]?, NoError> + let queryTokens = stringTokens(query.lowercased()) + + let shared: Signal<[Message]?, NoError> + let savedMusic: Signal<[Message]?, NoError> + let globalMusic: Signal<[Message]?, NoError> switch mode { case .recent: - signal = .single(nil) + shared = .single(nil) |> then( context.engine.messages.searchMessages(location: .sentMedia(tags: [.file]), query: query, state: nil) |> map { result -> [Message]? in return result.0.messages } ) + savedMusic = .single(nil) + globalMusic = .single(nil) case .audio: - signal = .single(nil) + shared = .single(nil) |> then( context.engine.messages.searchMessages(location: .general(scope: .everywhere, tags: [.music], minDate: nil, maxDate: nil), query: query, state: nil) |> map { result -> [Message]? in return result.0.messages } ) + savedMusic = .single(nil) + |> then( + savedMusicContext!.state + |> map { state in + let peerId = context.account.peerId + var messages: [Message] = [] + let peers = SimpleDictionary() + for file in state.files { + var indexString = "" + for attribute in file.attributes { + if case let .Audio(_, _, title, performer, _) = attribute { + if let title = title?.lowercased() { + indexString += "\(title) " + } + if let performer = performer?.lowercased() { + indexString += "\(performer) " + } + } else if case let .FileName(fileName) = attribute { + indexString += "\(fileName) " + } + } + + let tokens = stringTokens(indexString) + guard matchStringTokens(tokens, with: queryTokens) else { + continue + } + let stableId = UInt32(clamping: file.fileId.id % Int64(Int32.max)) + messages.append(Message(stableId: stableId, stableVersion: 0, id: MessageId(peerId: peerId, namespace: Namespaces.Message.Local, id: Int32(stableId)), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, threadId: nil, timestamp: 0, flags: [], tags: [.music], globalTags: [], localTags: [], customTags: [], forwardInfo: nil, author: nil, text: "", attributes: [], media: [file], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: [], associatedMedia: [:], associatedThreadInfo: nil, associatedStories: [:])) + } + return messages + } + ) + globalMusic = .single(nil) + |> then( + context.engine.peers.resolvePeerByName(name: "lybot", referrer: nil) + |> mapToSignal { result -> Signal in + guard case let .result(result) = result else { + return .complete() + } + return .single(result) + } + |> mapToSignal { peer -> Signal in + guard let peer = peer else { + return .single(nil) + } + return context.engine.messages.requestChatContextResults(botId: peer.id, peerId: context.account.peerId, query: query, offset: "") + |> map { results -> ChatContextResultCollection? in + return results?.results + } + |> `catch` { error -> Signal in + return .single(nil) + } + } + |> map { contextResult in + guard let results = contextResult?.results else { + return [] + } + let peerId = context.account.peerId + var messages: [Message] = [] + let peers = SimpleDictionary() + for result in results { + switch result { + case let .internalReference(internalReference): + if let file = internalReference.file { + let stableId = UInt32(clamping: file.fileId.id % Int64(Int32.max)) + messages.append(Message(stableId: stableId, stableVersion: 0, id: MessageId(peerId: peerId, namespace: Namespaces.Message.Local, id: Int32(stableId)), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, threadId: nil, timestamp: 0, flags: [], tags: [.music], globalTags: [], localTags: [], customTags: [], forwardInfo: nil, author: nil, text: "", attributes: [], media: [file], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: [], associatedMedia: [:], associatedThreadInfo: nil, associatedStories: [:])) + } + default: + break + } + } + return messages + } + ) } updateActivity(true) - return combineLatest(signal, presentationDataPromise.get()) - |> mapToSignal { messages, presentationData -> Signal<[AttachmentFileSearchEntry]?, NoError> in + return combineLatest(shared, savedMusic, globalMusic, presentationDataPromise.get(), expandedSectionsPromise.get()) + |> mapToSignal { messages, savedMusic, globalMusic, presentationData, expandedSections -> Signal<[AttachmentFileSearchEntry]?, NoError> in var entries: [AttachmentFileSearchEntry] = [] - var index = 0 - if let messages = messages { - for message in messages { - entries.append(AttachmentFileSearchEntry(index: index, message: message)) - index += 1 + + if let messages { + var section: Int32 = 0 + var index: Int32 = 0 + + if let savedMusic, !savedMusic.isEmpty { + entries.append(.header(title: "SAVED MUSIC", section: section)) + + var savedMusic = savedMusic + var hasShowMore = false + if savedMusic.count > 4 && !expandedSections.contains(section) { + savedMusic = Array(savedMusic.prefix(3)) + hasShowMore = true + } + for message in savedMusic { + entries.append(.file(index: index, message: message, section: section)) + index += 1 + } + if hasShowMore { + entries.append(.showMore(text: presentationData.strings.MediaEditor_Audio_ShowMore, section: section)) + } + } + + index = 0 + section += 1 + + if !messages.isEmpty { + entries.append(.header(title: "SHARED AUDIO", section: section)) + var messages = messages + var hasShowMore = false + if messages.count > 4 && !expandedSections.contains(section) { + messages = Array(messages.prefix(3)) + hasShowMore = true + } + for message in messages { + entries.append(.file(index: index, message: message, section: section)) + index += 1 + } + if hasShowMore { + entries.append(.showMore(text: presentationData.strings.MediaEditor_Audio_ShowMore, section: section)) + } + } + + if let globalMusic, !globalMusic.isEmpty { + index = 0 + section += 1 + + entries.append(.header(title: "GLOBAL SEARCH", section: section)) + for message in globalMusic { + entries.append(.file(index: index, message: message, section: section)) + index += 1 + } } } else { + var index: Int32 = 0 for _ in 0 ..< 16 { - entries.append(AttachmentFileSearchEntry(index: index, message: nil)) + entries.append(.file(index: index, message: nil, section: 0)) index += 1 } } + return .single(entries) } } @@ -423,28 +645,22 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon let previousEntries = previousSearchItems.swap(entries) updateActivity(false) let firstTime = previousEntries == nil - let transition = attachmentFileSearchContainerPreparedRecentTransition(from: previousEntries ?? [], to: entries ?? [], isSearching: entries != nil, isEmpty: entries?.isEmpty ?? false, query: query ?? "", context: context, presentationData: presentationData, nameSortOrder: presentationData.nameSortOrder, nameDisplayOrder: presentationData.nameDisplayOrder, interaction: interaction) + let transition = attachmentFileSearchContainerPreparedRecentTransition(from: previousEntries ?? [], to: entries ?? [], isSearching: entries != nil, isEmpty: entries?.isEmpty ?? false, query: query ?? "", context: context, presentationData: presentationData, nameSortOrder: presentationData.nameSortOrder, nameDisplayOrder: presentationData.nameDisplayOrder, interaction: interaction, mode: mode) strongSelf.enqueueTransition(transition, firstTime: firstTime) } })) -// self.presentationDataDisposable = (context.sharedContext.presentationData -// |> deliverOnMainQueue).startStrict(next: { [weak self] presentationData in -// if let strongSelf = self { -// let previousTheme = strongSelf.presentationData.theme -// let previousStrings = strongSelf.presentationData.strings -// -// strongSelf.presentationData = presentationData -// -// if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings { -// strongSelf.updateThemeAndStrings(theme: presentationData.theme, strings: presentationData.strings) -// } -// } -// }) - self.listNode.beganInteractiveDragging = { [weak self] _ in self?.dismissInput?() } + + self.listNode.itemNodeHitTest = { [weak self] point in + if let strongSelf = self { + return point.x > strongSelf.leftOverlayNode.frame.maxX && point.x < strongSelf.rightOverlayNode.frame.minX + } else { + return true + } + } } deinit { @@ -459,16 +675,14 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon } private func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) { - self.backgroundNode.backgroundColor = theme.chatList.backgroundColor - self.listNode.backgroundColor = theme.chatList.backgroundColor + self.backgroundNode.backgroundColor = theme.list.blocksBackgroundColor + self.listNode.backgroundColor = theme.list.blocksBackgroundColor + self.leftOverlayNode.backgroundColor = theme.list.blocksBackgroundColor + self.rightOverlayNode.backgroundColor = theme.list.blocksBackgroundColor } override public func searchTextUpdated(text: String) { - if text.isEmpty { - self.searchQuery.set(.single(nil)) - } else { - self.searchQuery.set(.single(text)) - } + self.searchQuery.set(.single(!text.isEmpty ? text : nil)) } private func enqueueTransition(_ transition: AttachmentFileSearchContainerTransition, firstTime: Bool) { @@ -489,6 +703,8 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon options.insert(.PreferSynchronousDrawing) options.insert(.PreferSynchronousResourceLoading) + //options.insert(.AnimateInsertion) + let isSearching = transition.isSearching self.listNode.transaction(deleteIndices: transition.deletions, insertIndicesAndItems: transition.insertions, updateIndicesAndItems: transition.updates, options: options, updateSizeAndInsets: nil, updateOpaqueState: nil, completion: { [weak self] _ in guard let strongSelf = self else { @@ -523,6 +739,20 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon var insets = layout.insets(options: [.input]) insets.top += navigationBarHeight + insets.bottom += 60.0 + + let inset = max(16.0, floor((layout.size.width - 674.0) / 2.0)) + if layout.size.width >= 375.0 { + insets.left += inset + insets.right += inset + } + + if self.rightOverlayNode.supernode == nil { + self.insertSubnode(self.rightOverlayNode, aboveSubnode: self.listNode) + } + if self.leftOverlayNode.supernode == nil { + self.insertSubnode(self.leftOverlayNode, aboveSubnode: self.listNode) + } let topInset = navigationBarHeight transition.updateFrame(node: self.dimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: topInset), size: CGSize(width: layout.size.width, height: layout.size.height - topInset))) @@ -531,6 +761,9 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon self.listNode.frame = CGRect(origin: CGPoint(), size: layout.size) self.listNode.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: [.Synchronous], scrollToItem: nil, updateSizeAndInsets: ListViewUpdateSizeAndInsets(size: layout.size, insets: insets, duration: duration, curve: curve), stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) + self.leftOverlayNode.frame = CGRect(x: 0.0, y: 0.0, width: insets.left, height: layout.size.height) + self.rightOverlayNode.frame = CGRect(x: layout.size.width - insets.right, y: 0.0, width: insets.right, height: layout.size.height) + let padding: CGFloat = 16.0 let emptyTitleSize = self.emptyResultsTitleNode.updateLayout(CGSize(width: layout.size.width - layout.safeInsets.left - layout.safeInsets.right - padding * 2.0, height: CGFloat.greatestFiniteMagnitude)) let emptyTextSize = self.emptyResultsTextNode.updateLayout(CGSize(width: layout.size.width - layout.safeInsets.left - layout.safeInsets.right - padding * 2.0, height: CGFloat.greatestFiniteMagnitude)) @@ -571,3 +804,57 @@ public final class AttachmentFileSearchContainerNode: SearchDisplayControllerCon return result } } + +private func stringTokens(_ string: String) -> [ValueBoxKey] { + let nsString = string.folding(options: .diacriticInsensitive, locale: .current).lowercased() as NSString + + let flag = UInt(kCFStringTokenizerUnitWord) + let tokenizer = CFStringTokenizerCreate(kCFAllocatorDefault, nsString, CFRangeMake(0, nsString.length), flag, CFLocaleCopyCurrent()) + var tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer) + var tokens: [ValueBoxKey] = [] + + var addedTokens = Set() + while tokenType != [] { + let currentTokenRange = CFStringTokenizerGetCurrentTokenRange(tokenizer) + + if currentTokenRange.location >= 0 && currentTokenRange.length != 0 { + let token = ValueBoxKey(length: currentTokenRange.length * 2) + nsString.getCharacters(token.memory.assumingMemoryBound(to: unichar.self), range: NSMakeRange(currentTokenRange.location, currentTokenRange.length)) + if !addedTokens.contains(token) { + tokens.append(token) + addedTokens.insert(token) + } + } + tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer) + } + + return tokens +} + +private func matchStringTokens(_ tokens: [ValueBoxKey], with other: [ValueBoxKey]) -> Bool { + if other.isEmpty { + return false + } else if other.count == 1 { + let otherToken = other[0] + for token in tokens { + if otherToken.isPrefix(to: token) { + return true + } + } + } else { + for otherToken in other { + var found = false + for token in tokens { + if otherToken.isPrefix(to: token) { + found = true + break + } + } + if !found { + return false + } + } + return true + } + return false +} diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageFactCheckBubbleContentNode/Sources/ChatMessageFactCheckBubbleContentNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageFactCheckBubbleContentNode/Sources/ChatMessageFactCheckBubbleContentNode.swift index f3a4e4a6c9..294d430e00 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageFactCheckBubbleContentNode/Sources/ChatMessageFactCheckBubbleContentNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageFactCheckBubbleContentNode/Sources/ChatMessageFactCheckBubbleContentNode.swift @@ -166,7 +166,7 @@ public class ChatMessageFactCheckBubbleContentNode: ChatMessageBubbleContentNode guard let strongSelf = self, let item = strongSelf.item else { return } - item.controllerInteraction.performTextSelectionAction(item.message, true, text, action) + item.controllerInteraction.performTextSelectionAction(item.message, true, text, nil, action) }) textSelectionNode.enableQuote = false self.textSelectionNode = textSelectionNode diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageInteractiveFileNode/Sources/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageInteractiveFileNode/Sources/ChatMessageInteractiveFileNode.swift index e77f2b04f3..63ec5d3875 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageInteractiveFileNode/Sources/ChatMessageInteractiveFileNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageInteractiveFileNode/Sources/ChatMessageInteractiveFileNode.swift @@ -2059,7 +2059,7 @@ public final class ChatMessageInteractiveFileNode: ASDisplayNode { guard let strongSelf = self, let item = strongSelf.arguments else { return } - item.controllerInteraction.performTextSelectionAction(item.message, true, text, action) + item.controllerInteraction.performTextSelectionAction(item.message, true, text, nil, action) }) textSelectionNode.enableQuote = false self.textSelectionNode = textSelectionNode diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageTextBubbleContentNode/Sources/ChatMessageTextBubbleContentNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageTextBubbleContentNode/Sources/ChatMessageTextBubbleContentNode.swift index 2960e53b8d..a6b8ad6925 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageTextBubbleContentNode/Sources/ChatMessageTextBubbleContentNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageTextBubbleContentNode/Sources/ChatMessageTextBubbleContentNode.swift @@ -1640,7 +1640,7 @@ public class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode { guard let strongSelf = self, let item = strongSelf.item else { return } - item.controllerInteraction.performTextSelectionAction(item.message, true, text, action) + item.controllerInteraction.performTextSelectionAction(item.message, true, text, nil, action) }) textSelectionNode.updateRange = { [weak self] selectionRange in guard let strongSelf = self else { diff --git a/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsController.swift b/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsController.swift index 93d7b85687..5171c2a152 100644 --- a/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsController.swift +++ b/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsController.swift @@ -179,6 +179,7 @@ public final class ChatRecentActionsController: TelegramBaseController { }, dismissForwardMessages: { }, dismissSuggestPost: { }, displayUndo: { _ in + }, presentInputTextTranslation: { _, _ in }, sendEmoji: { _, _, _ in }, updateHistoryFilter: { _ in }, updateChatLocationThread: { _, _ in diff --git a/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsControllerNode.swift index ae38d3783b..c18599f74e 100644 --- a/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatRecentActionsController/Sources/ChatRecentActionsControllerNode.swift @@ -594,7 +594,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { }, scheduleCurrentMessage: { _ in }, sendScheduledMessagesNow: { _ in }, editScheduledMessagesTime: { _ in - }, performTextSelectionAction: { _, _, _, _ in + }, performTextSelectionAction: { _, _, _, _, _ in }, displayImportedMessageTooltip: { _ in }, displaySwipeToReplyHint: { }, dismissReplyMarkupMessage: { _ in diff --git a/submodules/TelegramUI/Components/Chat/ChatSendAudioMessageContextPreview/Sources/ChatSendAudioMessageContextPreview.swift b/submodules/TelegramUI/Components/Chat/ChatSendAudioMessageContextPreview/Sources/ChatSendAudioMessageContextPreview.swift index 583ae84fa7..adbdd583ef 100644 --- a/submodules/TelegramUI/Components/Chat/ChatSendAudioMessageContextPreview/Sources/ChatSendAudioMessageContextPreview.swift +++ b/submodules/TelegramUI/Components/Chat/ChatSendAudioMessageContextPreview/Sources/ChatSendAudioMessageContextPreview.swift @@ -451,7 +451,7 @@ public final class ChatSendGroupMediaMessageContextPreview: UIView, ChatSendMess }, scheduleCurrentMessage: { _ in }, sendScheduledMessagesNow: { _ in }, editScheduledMessagesTime: { _ in - }, performTextSelectionAction: { _, _, _, _ in + }, performTextSelectionAction: { _, _, _, _, _ in }, displayImportedMessageTooltip: { _ in }, displaySwipeToReplyHint: { }, dismissReplyMarkupMessage: { _ in diff --git a/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelComponent.swift b/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelComponent.swift index d3920e7d92..2380c96b79 100644 --- a/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelComponent.swift +++ b/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelComponent.swift @@ -756,6 +756,8 @@ public final class ChatTextInputPanelComponent: Component { }, displayUndo: { _ in }, + presentInputTextTranslation: { _, _ in + }, sendEmoji: { _, _, _ in }, updateHistoryFilter: { _ in diff --git a/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift b/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift index 41ba4e99f6..c4f433f965 100644 --- a/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatTextInputPanelNode/Sources/ChatTextInputPanelNode.swift @@ -4711,8 +4711,7 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg } else { return ASEditableTextNodeTargetForAction(target: nil) } - } - else if action == makeSelectorFromString("_accessibilitySpeakLanguageSelection:") || action == makeSelectorFromString("_accessibilityPauseSpeaking:") || action == makeSelectorFromString("_accessibilitySpeakSentence:") { + } else if action == makeSelectorFromString("_accessibilitySpeakLanguageSelection:") || action == makeSelectorFromString("_accessibilityPauseSpeaking:") || action == makeSelectorFromString("_accessibilitySpeakSentence:") { return ASEditableTextNodeTargetForAction(target: nil) } else if action == makeSelectorFromString("_showTextStyleOptions:") { if #available(iOS 16.0, *) { @@ -4727,6 +4726,12 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg return ASEditableTextNodeTargetForAction(target: nil) } } + } else if action == makeSelectorFromString("_translate:") { + if let textInputNode = self.textInputNode, textInputNode.selectedRange.length > 0 { + return ASEditableTextNodeTargetForAction(target: self) + } else { + return ASEditableTextNodeTargetForAction(target: nil) + } } else if action == #selector(self.formatAttributesBold(_:)) || action == #selector(self.formatAttributesItalic(_:)) || action == #selector(self.formatAttributesMonospace(_:)) || action == #selector(self.formatAttributesLink(_:)) || action == #selector(self.formatAttributesStrikethrough(_:)) || action == #selector(self.formatAttributesUnderline(_:)) || action == #selector(self.formatAttributesSpoiler(_:)) || action == #selector(self.formatAttributesQuote(_:)) || action == #selector(self.formatAttributesCodeBlock(_:)) { if case .format = self.inputMenu.state { if action == #selector(self.formatAttributesSpoiler(_:)), let selectedRange = self.textInputNode?.selectedRange { @@ -4903,6 +4908,28 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg } } + @objc public func _translate(_ sender: Any) { + var text = NSAttributedString() + self.interfaceInteraction?.updateTextInputStateAndMode { current, inputMode in + text = current.inputText.attributedSubstring(from: NSMakeRange(current.selectionRange.lowerBound, current.selectionRange.count)) + return (current, inputMode) + } + self.interfaceInteraction?.presentInputTextTranslation(text, { [weak self] attributedString in + guard let self else { + return + } + self.interfaceInteraction?.updateTextInputStateAndMode { current, inputMode in + if let inputText = current.inputText.mutableCopy() as? NSMutableAttributedString { + inputText.replaceCharacters(in: NSMakeRange(current.selectionRange.lowerBound, current.selectionRange.count), with: attributedString) + let updatedRange = current.selectionRange.lowerBound + attributedString.length + return (ChatTextInputState(inputText: inputText, selectionRange: updatedRange ..< updatedRange), .text) + } else { + return (ChatTextInputState(inputText: attributedString), inputMode) + } + } + }) + } + @objc public func _showTextStyleOptions(_ sender: Any) { if let textInputNode = self.textInputNode { self.inputMenu.format(view: textInputNode.view, rect: textInputNode.selectionRect.offsetBy(dx: 0.0, dy: -textInputNode.textView.contentOffset.y).insetBy(dx: 0.0, dy: -1.0)) diff --git a/submodules/TelegramUI/Components/ChatControllerInteraction/Sources/ChatControllerInteraction.swift b/submodules/TelegramUI/Components/ChatControllerInteraction/Sources/ChatControllerInteraction.swift index 8f3ca6d8eb..aec8d1f4e8 100644 --- a/submodules/TelegramUI/Components/ChatControllerInteraction/Sources/ChatControllerInteraction.swift +++ b/submodules/TelegramUI/Components/ChatControllerInteraction/Sources/ChatControllerInteraction.swift @@ -234,7 +234,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol public let scheduleCurrentMessage: (ChatSendMessageActionSheetController.SendParameters?) -> Void public let sendScheduledMessagesNow: ([MessageId]) -> Void public let editScheduledMessagesTime: ([MessageId]) -> Void - public let performTextSelectionAction: (Message?, Bool, NSAttributedString, TextSelectionAction) -> Void + public let performTextSelectionAction: (Message?, Bool, NSAttributedString, [MessageTextEntity]?, TextSelectionAction) -> Void public let displayImportedMessageTooltip: (ASDisplayNode) -> Void public let displaySwipeToReplyHint: () -> Void public let dismissReplyMarkupMessage: (Message) -> Void @@ -405,7 +405,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol scheduleCurrentMessage: @escaping (ChatSendMessageActionSheetController.SendParameters?) -> Void, sendScheduledMessagesNow: @escaping ([MessageId]) -> Void, editScheduledMessagesTime: @escaping ([MessageId]) -> Void, - performTextSelectionAction: @escaping (Message?, Bool, NSAttributedString, TextSelectionAction) -> Void, + performTextSelectionAction: @escaping (Message?, Bool, NSAttributedString, [MessageTextEntity]?, TextSelectionAction) -> Void, displayImportedMessageTooltip: @escaping (ASDisplayNode) -> Void, displaySwipeToReplyHint: @escaping () -> Void, dismissReplyMarkupMessage: @escaping (Message) -> Void, diff --git a/submodules/TelegramUI/Components/Gifts/GiftCraftScreen/Sources/SelectCraftGiftScreen.swift b/submodules/TelegramUI/Components/Gifts/GiftCraftScreen/Sources/SelectCraftGiftScreen.swift index 4be7cb725e..e150e98c67 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftCraftScreen/Sources/SelectCraftGiftScreen.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftCraftScreen/Sources/SelectCraftGiftScreen.swift @@ -465,7 +465,6 @@ final class SelectGiftPageContent: Component { statusBarHeight: contentHeight - 62.0, navigationHeight: 0.0, overNavigationContainer: self, - starsContext: component.context.starsContext!, peerId: component.context.account.peerId, gift: component.genericGift, isPlain: true, diff --git a/submodules/TelegramUI/Components/Gifts/GiftStoreScreen/Sources/GiftStoreScreen.swift b/submodules/TelegramUI/Components/Gifts/GiftStoreScreen/Sources/GiftStoreScreen.swift index a04263b2c8..3ca9528195 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftStoreScreen/Sources/GiftStoreScreen.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftStoreScreen/Sources/GiftStoreScreen.swift @@ -43,7 +43,6 @@ public final class GiftStoreContentComponent: Component { let statusBarHeight: CGFloat let navigationHeight: CGFloat let overNavigationContainer: UIView - let starsContext: StarsContext let peerId: EnginePeer.Id let gift: StarGift.Gift let isPlain: Bool @@ -63,7 +62,6 @@ public final class GiftStoreContentComponent: Component { statusBarHeight: CGFloat, navigationHeight: CGFloat, overNavigationContainer: UIView, - starsContext: StarsContext, peerId: EnginePeer.Id, gift: StarGift.Gift, isPlain: Bool, @@ -82,7 +80,6 @@ public final class GiftStoreContentComponent: Component { self.statusBarHeight = statusBarHeight self.navigationHeight = navigationHeight self.overNavigationContainer = overNavigationContainer - self.starsContext = starsContext self.peerId = peerId self.gift = gift self.isPlain = isPlain @@ -1147,7 +1144,6 @@ final class GiftStoreScreenComponent: Component { let context: AccountContext let resaleGiftsContext: ResaleGiftsContext let overNavigationContainer: UIView - let starsContext: StarsContext let peerId: EnginePeer.Id let gift: StarGift.Gift @@ -1155,14 +1151,12 @@ final class GiftStoreScreenComponent: Component { context: AccountContext, resaleGiftsContext: ResaleGiftsContext, overNavigationContainer: UIView, - starsContext: StarsContext, peerId: EnginePeer.Id, gift: StarGift.Gift ) { self.context = context self.resaleGiftsContext = resaleGiftsContext self.overNavigationContainer = overNavigationContainer - self.starsContext = starsContext self.peerId = peerId self.gift = gift } @@ -1342,8 +1336,8 @@ final class GiftStoreScreenComponent: Component { self.environment = environment self.state = state - if self.component == nil { - self.starsStateDisposable = (component.starsContext.state + if self.component == nil, let tonContext = component.context.tonContext { + self.starsStateDisposable = (tonContext.state |> deliverOnMainQueue).start(next: { [weak self] state in guard let self else { return @@ -1445,7 +1439,6 @@ final class GiftStoreScreenComponent: Component { statusBarHeight: environment.statusBarHeight, navigationHeight: environment.navigationHeight, overNavigationContainer: component.overNavigationContainer, - starsContext: component.starsContext, peerId: component.peerId, gift: component.gift, isPlain: false, @@ -1503,31 +1496,32 @@ final class GiftStoreScreenComponent: Component { transition.setFrame(view: subtitleView, frame: subtitleFrame) } - //TODO:localize - let starsFilterSize = self.starsFilter.update( - transition: transition, - component: AnyComponent( - StarsFilterComponent(theme: theme, text: "Show listings for stars only", isSelected: component.resaleGiftsContext.currentState?.starsOnly ?? false, selectionUpdated: { [weak self] starsOnly in - guard let self else { - return - } - if let contentView = self.content.view as? GiftStoreContentComponent.View { - contentView.updateStarsOnly(starsOnly) - } - }) - ), - environment: {}, - containerSize: CGSize(width: availableSize.width - headerSideInset * 2.0, height: 100.0) - ) - let starsFilterFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - starsFilterSize.width) / 2.0), y: self.starsFilterIsHidden ? availableSize.height + 64.0 : availableSize.height - starsFilterSize.height - environment.safeInsets.bottom - 16.0), size: starsFilterSize) - if let starsFilterView = self.starsFilter.view { - if starsFilterView.superview == nil { - self.addSubview(starsFilterView) + if let tonState = self.starsState, tonState.balance.value == 0 { + //TODO:localize + let starsFilterSize = self.starsFilter.update( + transition: transition, + component: AnyComponent( + StarsFilterComponent(theme: theme, text: "Show listings for stars only", isSelected: component.resaleGiftsContext.currentState?.starsOnly ?? false, selectionUpdated: { [weak self] starsOnly in + guard let self else { + return + } + if let contentView = self.content.view as? GiftStoreContentComponent.View { + contentView.updateStarsOnly(starsOnly) + } + }) + ), + environment: {}, + containerSize: CGSize(width: availableSize.width - headerSideInset * 2.0, height: 100.0) + ) + let starsFilterFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - starsFilterSize.width) / 2.0), y: self.starsFilterIsHidden ? availableSize.height + 64.0 : availableSize.height - starsFilterSize.height - environment.safeInsets.bottom - 16.0), size: starsFilterSize) + if let starsFilterView = self.starsFilter.view { + if starsFilterView.superview == nil { + self.addSubview(starsFilterView) + } + transition.setFrame(view: starsFilterView, frame: starsFilterFrame) } - transition.setFrame(view: starsFilterView, frame: starsFilterFrame) } - let previousBounds = self.scrollView.bounds if self.scrollView.frame != CGRect(origin: CGPoint(), size: availableSize) { @@ -1579,7 +1573,6 @@ public class GiftStoreScreen: ViewControllerComponentContainer { public init( context: AccountContext, - starsContext: StarsContext, peerId: EnginePeer.Id, gift: StarGift.Gift ) { @@ -1592,7 +1585,6 @@ public class GiftStoreScreen: ViewControllerComponentContainer { context: context, resaleGiftsContext: resaleGiftsContext, overNavigationContainer: self.overNavigationContainer, - starsContext: starsContext, peerId: peerId, gift: gift ), navigationBarAppearance: .transparent, theme: .default, updatedPresentationData: nil) diff --git a/submodules/TelegramUI/Components/ItemListDatePickerItem/Sources/ItemListDatePickerItem.swift b/submodules/TelegramUI/Components/ItemListDatePickerItem/Sources/ItemListDatePickerItem.swift index b4f89aa2ee..2448f18e59 100644 --- a/submodules/TelegramUI/Components/ItemListDatePickerItem/Sources/ItemListDatePickerItem.swift +++ b/submodules/TelegramUI/Components/ItemListDatePickerItem/Sources/ItemListDatePickerItem.swift @@ -168,7 +168,7 @@ public class ItemListDatePickerItemNode: ListViewItemNode, ItemListItemNode { } else if item.displayingTimeSelection { height = 260.0 } else { - height = 56.0 + height = 52.0 } switch item.style { case .plain: @@ -294,7 +294,7 @@ public class ItemListDatePickerItemNode: ListViewItemNode, ItemListItemNode { datePickerNode.date = item.date.flatMap { Date(timeIntervalSince1970: TimeInterval($0)) } let datePickerSize = CGSize(width: width, height: pickerHeight) - datePickerNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((params.width - datePickerSize.width) / 2.0), y: 6.0), size: datePickerSize) + datePickerNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((params.width - datePickerSize.width) / 2.0), y: 4.0), size: datePickerSize) datePickerNode.updateLayout(size: datePickerSize, transition: .immediate) transition.updateFrame(node: strongSelf.containerNode, frame: CGRect(origin: .zero, size: CGSize(width: params.width, height: contentSize.height))) diff --git a/submodules/TelegramUI/Components/ListActionItemComponent/Sources/ListActionItemComponent.swift b/submodules/TelegramUI/Components/ListActionItemComponent/Sources/ListActionItemComponent.swift index f78775bc49..2e213c6f3e 100644 --- a/submodules/TelegramUI/Components/ListActionItemComponent/Sources/ListActionItemComponent.swift +++ b/submodules/TelegramUI/Components/ListActionItemComponent/Sources/ListActionItemComponent.swift @@ -138,6 +138,11 @@ public final class ListActionItemComponent: Component { case center } + public enum VerticalAlignment { + case `default` + case middle + } + public final class ContextOption: Equatable { public let id: AnyHashable public let title: String @@ -170,6 +175,7 @@ public final class ListActionItemComponent: Component { public let background: AnyComponent? public let title: AnyComponent public let titleAlignment: Alignment + public let verticalAlignment: VerticalAlignment public let contentInsets: UIEdgeInsets public let leftIcon: LeftIcon? public let icon: Icon? @@ -186,6 +192,7 @@ public final class ListActionItemComponent: Component { background: AnyComponent? = nil, title: AnyComponent, titleAlignment: Alignment = .default, + verticalAlignment: VerticalAlignment = .default, contentInsets: UIEdgeInsets = UIEdgeInsets(top: 12.0, left: 0.0, bottom: 12.0, right: 0.0), leftIcon: LeftIcon? = nil, icon: Icon? = nil, @@ -201,6 +208,7 @@ public final class ListActionItemComponent: Component { self.background = background self.title = title self.titleAlignment = titleAlignment + self.verticalAlignment = verticalAlignment self.contentInsets = contentInsets self.leftIcon = leftIcon self.icon = icon @@ -228,6 +236,9 @@ public final class ListActionItemComponent: Component { if lhs.titleAlignment != rhs.titleAlignment { return false } + if lhs.verticalAlignment != rhs.verticalAlignment { + return false + } if lhs.contentInsets != rhs.contentInsets { return false } @@ -667,12 +678,19 @@ public final class ListActionItemComponent: Component { containerSize: CGSize(width: availableSize.width, height: availableSize.height) ) let leftIconX: CGFloat + let leftIconY: CGFloat if adjustLeftInset { leftIconX = 15.0 } else { leftIconX = floor((contentLeftInset - leftIconSize.width) * 0.5) } - let leftIconFrame = CGRect(origin: CGPoint(x: leftIconX, y: floor((min(60.0, contentHeight) - leftIconSize.height) * 0.5)), size: leftIconSize) + switch component.verticalAlignment { + case .default: + leftIconY = floor((min(60.0, contentHeight) - leftIconSize.height) * 0.5) + case .middle: + leftIconY = floor((contentHeight - leftIconSize.height) * 0.5) + } + let leftIconFrame = CGRect(origin: CGPoint(x: leftIconX, y: leftIconY), size: leftIconSize) if let leftIconView = leftIcon.view { if leftIconView.superview == nil { leftIconView.isUserInteractionEnabled = false @@ -800,7 +818,14 @@ public final class ListActionItemComponent: Component { } switchSize = switchView.bounds.size } - let switchFrame = CGRect(origin: CGPoint(x: availableSize.width - 16.0 - switchSize.width, y: floor((min(60.0, contentHeight) - switchSize.height) * 0.5)), size: switchSize) + let switchY: CGFloat + switch component.verticalAlignment { + case .default: + switchY = floor((min(60.0, contentHeight) - switchSize.height) * 0.5) + case .middle: + switchY = floor((contentHeight - switchSize.height) * 0.5) + } + let switchFrame = CGRect(origin: CGPoint(x: availableSize.width - 16.0 - switchSize.width, y: switchY), size: switchSize) switchTransition.setFrame(view: switchNode.view, frame: switchFrame) case .icons, .lock: let switchNode: IconSwitchNode diff --git a/submodules/TelegramUI/Components/ListComposePollOptionComponent/BUILD b/submodules/TelegramUI/Components/ListComposePollOptionComponent/BUILD index 52d1774caa..a8d8cf1580 100644 --- a/submodules/TelegramUI/Components/ListComposePollOptionComponent/BUILD +++ b/submodules/TelegramUI/Components/ListComposePollOptionComponent/BUILD @@ -13,6 +13,7 @@ swift_library( "//submodules/Display", "//submodules/TelegramPresentationData", "//submodules/ComponentFlow", + "//submodules/TelegramCore", "//submodules/Components/MultilineTextComponent", "//submodules/TelegramUI/Components/SliderComponent", "//submodules/TelegramUI/Components/ListSectionComponent", diff --git a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift index 23635bb062..92b590f103 100644 --- a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift +++ b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift @@ -228,6 +228,12 @@ public final class MediaEditorVideoExport { var skippingUpdate = false var initialized = false } + + private struct BounceFrame { + let pixelBuffer: CVPixelBuffer + let timestamp: CMTime + } + private var additionalVideoOutput: [Int: VideoOutput] = [:] private var mainComposeFramerate: Float? @@ -248,8 +254,11 @@ public final class MediaEditorVideoExport { } } } + private var sourceDurationValue: CMTime? private var imageArguments: (frameRate: Double, position: CMTime)? + private var bounceFrames: [BounceFrame] = [] + private var bounceReverseFrameIndex: Int? private let pauseDispatchGroup = DispatchGroup() private var cancelled = false @@ -316,6 +325,111 @@ public final class MediaEditorVideoExport { } } + private var isBounceEnabled: Bool { + guard self.configuration.values.videoBounce else { + return false + } + if case .video = self.subject { + return true + } else { + return false + } + } + + private var sourceStartTime: CMTime { + return self.reader?.timeRange.start ?? .zero + } + + private func outputTimestamp(for sourceTimestamp: CMTime) -> CMTime { + if self.isBounceEnabled { + return CMTimeSubtract(sourceTimestamp, self.sourceStartTime) + } else { + return sourceTimestamp + } + } + + private func updateProgress(at timestamp: CMTime) { + guard let duration = self.durationValue, duration.seconds > 0.0 else { + return + } + let progressTimestamp: Double + if self.isBounceEnabled { + progressTimestamp = timestamp.seconds + } else { + progressTimestamp = timestamp.seconds - self.sourceStartTime.seconds + } + let progress = min(max(progressTimestamp / duration.seconds, 0.0), 1.0) + self.statusValue = .progress(Float(progress)) + } + + private func startBounceReversePassIfNeeded() -> Bool { + guard self.isBounceEnabled, self.bounceReverseFrameIndex == nil, !self.bounceFrames.isEmpty else { + return false + } + self.bounceReverseFrameIndex = self.bounceFrames.count - 1 + return true + } + + private func bounceTimestamp(for forwardTimestamp: CMTime) -> CMTime { + guard let sourceDuration = self.sourceDurationValue, let outputDuration = self.durationValue else { + return forwardTimestamp + } + let mirroredTimestamp = CMTimeAdd(sourceDuration, CMTimeSubtract(sourceDuration, forwardTimestamp)) + return CMTimeMinimum(mirroredTimestamp, outputDuration) + } + + private func outputAudioBuffer(from buffer: CMSampleBuffer) -> CMSampleBuffer? { + guard self.isBounceEnabled else { + return buffer + } + + let sampleCount = CMSampleBufferGetNumSamples(buffer) + guard sampleCount > 0 else { + return buffer + } + + var timingInfo = Array( + repeating: CMSampleTimingInfo(duration: .invalid, presentationTimeStamp: .invalid, decodeTimeStamp: .invalid), + count: sampleCount + ) + var timingInfoCount: CMItemCount = 0 + let status = timingInfo.withUnsafeMutableBufferPointer { timingInfoBuffer in + CMSampleBufferGetSampleTimingInfoArray( + buffer, + entryCount: sampleCount, + arrayToFill: timingInfoBuffer.baseAddress, + entriesNeededOut: &timingInfoCount + ) + } + guard status == noErr else { + return nil + } + + let sourceStartTime = self.sourceStartTime + for index in 0 ..< Int(timingInfoCount) { + timingInfo[index].presentationTimeStamp = CMTimeSubtract(timingInfo[index].presentationTimeStamp, sourceStartTime) + if timingInfo[index].decodeTimeStamp.isValid { + timingInfo[index].decodeTimeStamp = CMTimeSubtract(timingInfo[index].decodeTimeStamp, sourceStartTime) + } + } + + var adjustedBuffer: CMSampleBuffer? + let copyStatus = timingInfo.withUnsafeMutableBufferPointer { timingInfoBuffer in + CMSampleBufferCreateCopyWithNewTiming( + allocator: kCFAllocatorDefault, + sampleBuffer: buffer, + sampleTimingEntryCount: Int(timingInfoCount), + sampleTimingArray: timingInfoBuffer.baseAddress, + sampleBufferOut: &adjustedBuffer + ) + } + guard copyStatus == noErr else { + return nil + } + + return adjustedBuffer + } + private func setup() { Logger.shared.log("VideoExport", "Setting up") @@ -393,37 +507,42 @@ public final class MediaEditorVideoExport { mainInput = .sticker(file) } - let duration: CMTime + let sourceDuration: CMTime if self.configuration.isSticker { - duration = CMTime(seconds: self.configuration.preferredDuration ?? 3.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + sourceDuration = CMTime(seconds: self.configuration.preferredDuration ?? 3.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) } else if let mainAsset { if let trimmedDuration = self.configuration.timeRange?.duration { - duration = trimmedDuration + sourceDuration = trimmedDuration } else { if isStory && mainAsset.duration.seconds > 60.0 { - duration = CMTime(seconds: 60.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + sourceDuration = CMTime(seconds: 60.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) } else { - duration = mainAsset.duration + sourceDuration = mainAsset.duration } } } else if let additionalAsset { if let trimmedDuration = self.configuration.additionalVideoTimeRange?.duration { - duration = trimmedDuration + sourceDuration = trimmedDuration } else { if additionalAsset.duration.seconds > 60.0 { - duration = CMTime(seconds: 60.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + sourceDuration = CMTime(seconds: 60.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) } else { - duration = additionalAsset.duration + sourceDuration = additionalAsset.duration } } } else { if let audioDuration = self.configuration.audioTimeRange?.duration { - duration = audioDuration + sourceDuration = audioDuration } else { - duration = CMTime(seconds: 5.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + sourceDuration = CMTime(seconds: 5.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) } } - self.durationValue = duration + self.sourceDurationValue = sourceDuration + if self.isBounceEnabled { + self.durationValue = CMTimeAdd(sourceDuration, sourceDuration) + } else { + self.durationValue = sourceDuration + } let _ = (combineLatest(signals) |> deliverOn(self.queue)).start(next: { [weak self] additionalInputs in @@ -439,7 +558,7 @@ public final class MediaEditorVideoExport { return } - var duration = self.durationValue?.seconds + var duration = self.sourceDurationValue?.seconds if case .image = self.subject { duration = nil } @@ -490,7 +609,7 @@ public final class MediaEditorVideoExport { var additionalTracks: [AdditionalTrack] = [] var audioMix: AVMutableAudioMix? - if hasVideoOrAudio, let duration = self.durationValue { + if hasVideoOrAudio, let duration = self.sourceDurationValue { composition = AVMutableComposition() var audioMixParameters: [AVMutableAudioMixInputParameters] = [] @@ -520,7 +639,7 @@ public final class MediaEditorVideoExport { try? compositionTrack.insertTimeRange(CMTimeRange(start: .zero, duration: asset.duration), of: videoAssetTrack, at: .zero) } } - if let audioAssetTrack = asset.tracks(withMediaType: .audio).first, !self.configuration.values.videoIsMuted { + if let audioAssetTrack = asset.tracks(withMediaType: .audio).first, !self.configuration.values.videoIsMuted, !self.isBounceEnabled { if let compositionTrack = composition?.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid) { try? compositionTrack.insertTimeRange(CMTimeRange(start: .zero, duration: asset.duration), of: audioAssetTrack, at: .zero) @@ -555,7 +674,7 @@ public final class MediaEditorVideoExport { try? compositionTrack.insertTimeRange(timeRange, of: videoAssetTrack, at: startTime) } } - if let audioAssetTrack = asset.tracks(withMediaType: .audio).first, volume ?? 1.0 > 0.01 { + if let audioAssetTrack = asset.tracks(withMediaType: .audio).first, volume ?? 1.0 > 0.01, !self.isBounceEnabled { if let compositionTrack = composition?.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid) { try? compositionTrack.insertTimeRange(timeRange, of: audioAssetTrack, at: startTime) @@ -591,7 +710,7 @@ public final class MediaEditorVideoExport { try? compositionTrack.insertTimeRange(timeRange, of: videoAssetTrack, at: startTime) } } - if let audioAssetTrack = asset.tracks(withMediaType: .audio).first, self.configuration.values.additionalVideoVolume ?? 1.0 > 0.01 { + if let audioAssetTrack = asset.tracks(withMediaType: .audio).first, self.configuration.values.additionalVideoVolume ?? 1.0 > 0.01, !self.isBounceEnabled { if let compositionTrack = composition?.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid) { try? compositionTrack.insertTimeRange(timeRange, of: audioAssetTrack, at: startTime) @@ -762,6 +881,25 @@ public final class MediaEditorVideoExport { return false } + if let reverseFrameIndex = self.bounceReverseFrameIndex { + let frame = self.bounceFrames[reverseFrameIndex] + let timestamp = self.bounceTimestamp(for: frame.timestamp) + if !writer.appendPixelBuffer(frame.pixelBuffer, at: timestamp) { + writer.markVideoAsFinished() + return false + } + self.updateProgress(at: timestamp) + + if reverseFrameIndex == 0 { + self.bounceReverseFrameIndex = nil + writer.markVideoAsFinished() + return false + } else { + self.bounceReverseFrameIndex = reverseFrameIndex - 1 + continue + } + } + if let reader = self.reader, reader.status != .reading { writer.markVideoAsFinished() return false @@ -793,7 +931,7 @@ public final class MediaEditorVideoExport { self.mainVideoOffset ) - if let duration = self.durationValue { + if !self.isBounceEnabled, let duration = self.durationValue { let startTime = self.reader?.timeRange.start.seconds ?? 0.0 let progress = (timestamp.seconds - startTime) / duration.seconds self.statusValue = .progress(Float(progress)) @@ -801,8 +939,12 @@ public final class MediaEditorVideoExport { } } } else { - writer.markVideoAsFinished() - return false + if self.startBounceReversePassIfNeeded() { + continue + } else { + writer.markVideoAsFinished() + return false + } } } @@ -874,7 +1016,7 @@ public final class MediaEditorVideoExport { ) ) - if !updatedProgress, let duration = self.durationValue { + if !self.isBounceEnabled, !updatedProgress, let duration = self.durationValue { let startTime = self.reader?.timeRange.start.seconds ?? 0.0 let progress = (timestamp.seconds - startTime) / duration.seconds self.statusValue = .progress(Float(progress)) @@ -921,9 +1063,14 @@ public final class MediaEditorVideoExport { } } guard let timestamp else { - writer.markVideoAsFinished() - return false + if self.startBounceReversePassIfNeeded() { + continue + } else { + writer.markVideoAsFinished() + return false + } } + let outputTimestamp = self.outputTimestamp(for: timestamp) if let stickerEntity = self.stickerEntity, let ciContext = composer.ciContext { let imageArguments = self.imageArguments @@ -949,9 +1096,14 @@ public final class MediaEditorVideoExport { pool: writer.pixelBufferPool, completion: { pixelBuffer in if let pixelBuffer { - if !writer.appendPixelBuffer(pixelBuffer, at: timestamp) { + if !writer.appendPixelBuffer(pixelBuffer, at: outputTimestamp) { writer.markVideoAsFinished() appendFailed = true + } else { + if self.isBounceEnabled { + self.bounceFrames.append(BounceFrame(pixelBuffer: pixelBuffer, timestamp: outputTimestamp)) + } + self.updateProgress(at: outputTimestamp) } } else { appendFailed = true @@ -988,7 +1140,11 @@ public final class MediaEditorVideoExport { } self.pauseDispatchGroup.wait() if let buffer = output.copyNextSampleBuffer() { - if !writer.appendAudioBuffer(buffer) { + guard let outputBuffer = self.outputAudioBuffer(from: buffer) else { + writer.markAudioAsFinished() + return false + } + if !writer.appendAudioBuffer(outputBuffer) { writer.markAudioAsFinished() return false } @@ -1031,7 +1187,7 @@ public final class MediaEditorVideoExport { self.internalStatus = .exporting - writer.startSession(atSourceTime: self.reader?.timeRange.start ?? .zero) + writer.startSession(atSourceTime: self.isBounceEnabled ? .zero : (self.reader?.timeRange.start ?? .zero)) var videoCompleted = false var audioCompleted = false diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift index 47bb5140f4..67b37e55f9 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift @@ -7745,6 +7745,10 @@ public final class MediaEditorScreenImpl: ViewController, MediaEditorScreen, UID self.stickerResultController?.disappeared = nil } + if self.node.mediaEditor?.values.hasChanges == true { + print() + } + let _ = (imagesReady.get() |> filter { $0 } |> take(1) diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/ListItems/PeerInfoScreenDisclosureItem.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/ListItems/PeerInfoScreenDisclosureItem.swift index 7f4204da32..f788f65067 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/ListItems/PeerInfoScreenDisclosureItem.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/ListItems/PeerInfoScreenDisclosureItem.swift @@ -233,9 +233,9 @@ private final class PeerInfoScreenDisclosureItemNode: PeerInfoScreenItemNode { } })) } - iconSize = CGSize(width: 29.0, height: 29.0) + iconSize = CGSize(width: 30.0, height: 30.0) } else { - iconSize = CGSize(width: 29.0, height: 29.0) + iconSize = CGSize(width: 30.0, height: 30.0) } let iconFrame = CGRect(origin: CGPoint(x: sideInset, y: floorToScreenPixels((height - iconSize.height) / 2.0)), size: iconSize) transition.updateFrame(node: self.iconNode, frame: iconFrame) diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift index 89cea5a76d..154e208da5 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift @@ -1186,7 +1186,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro }, scheduleCurrentMessage: { _ in }, sendScheduledMessagesNow: { _ in }, editScheduledMessagesTime: { _ in - }, performTextSelectionAction: { _, _, _, _ in + }, performTextSelectionAction: { _, _, _, _, _ in }, displayImportedMessageTooltip: { _ in }, displaySwipeToReplyHint: { }, dismissReplyMarkupMessage: { _ in diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSelectionPanelNode.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSelectionPanelNode.swift index 5ed1e9a78c..330bba5457 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSelectionPanelNode.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSelectionPanelNode.swift @@ -172,6 +172,7 @@ final class PeerInfoSelectionPanelNode: ASDisplayNode { }, dismissForwardMessages: { }, dismissSuggestPost: { }, displayUndo: { _ in + }, presentInputTextTranslation: { _, _ in }, sendEmoji: { _, _, _ in }, updateHistoryFilter: { _ in }, updateChatLocationThread: { _, _ in diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSettingsItems.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSettingsItems.swift index 9703be2db2..326137da2b 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSettingsItems.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoSettingsItems.swift @@ -179,7 +179,7 @@ func settingsItems(data: PeerInfoScreenData?, context: AccountContext, presentat let fileReference: FileMediaReference = .attachBot(peer: peer, media: icon) iconSignal = instantPageImageFile(account: context.account, userLocation: .other, fileReference: fileReference, fetched: true) |> map { generator -> UIImage? in - let size = CGSize(width: 29.0, height: 29.0) + let size = CGSize(width: 30.0, height: 30.0) let context = generator(TransformImageArguments(corners: ImageCorners(), imageSize: size, boundingSize: size, intrinsicInsets: .zero)) return context?.generateImage() } diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift index b0292ae644..58f72fcab0 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoStoryPaneNode.swift @@ -642,6 +642,7 @@ private final class ItemLayer: CALayer, SparseItemGridLayer { durationLayer.removeFromSuperlayer() } + if let topRightIcon { if let privacyTypeLayer = self.privacyTypeLayer { privacyTypeLayer.update(topRightIcon: topRightIcon, isMin: isMin) diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoVisualMediaPaneNode.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoVisualMediaPaneNode.swift index a992c28852..a93817f2b1 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoVisualMediaPaneNode.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoVisualMediaPaneNode.swift @@ -308,7 +308,7 @@ private protocol ItemLayer: SparseItemGridLayer { var hasContents: Bool { get set } func setSpoilerContents(_ contents: Any?) - func updateDuration(duration: Int32?, isMin: Bool, minFactor: CGFloat) + func updateDuration(duration: Int32?, isLivePhoto: Bool, isMin: Bool, minFactor: CGFloat) func updateSelection(theme: CheckNodeTheme, isSelected: Bool?, animated: Bool) func updateHasSpoiler(hasSpoiler: Bool) @@ -318,6 +318,7 @@ private protocol ItemLayer: SparseItemGridLayer { private final class GenericItemLayer: CALayer, ItemLayer { var item: VisualMediaItem? + var livePhotoLayer: SimpleLayer? var durationLayer: DurationLayer? var rightShadowLayer: SimpleLayer? var minFactor: CGFloat = 1.0 @@ -369,9 +370,27 @@ private final class GenericItemLayer: CALayer, ItemLayer { self.item = item } - func updateDuration(duration: Int32?, isMin: Bool, minFactor: CGFloat) { + func updateDuration(duration: Int32?, isLivePhoto: Bool, isMin: Bool, minFactor: CGFloat) { self.minFactor = minFactor + if isLivePhoto && !isMin { + if let _ = self.livePhotoLayer { + + } else { + let livePhotoLayer = SimpleLayer() + livePhotoLayer.contentsGravity = .topLeft + livePhotoLayer.contentsScale = UIScreenScale + livePhotoLayer.contents = livePhotoImage.cgImage + self.addSublayer(livePhotoLayer) + livePhotoLayer.frame = CGRect(origin: CGPoint(x: 3.0, y: 3.0), size: livePhotoImage.size) + livePhotoLayer.transform = CATransform3DMakeScale(minFactor, minFactor, 1.0) + self.livePhotoLayer = livePhotoLayer + } + } else if let livePhotoLayer = self.livePhotoLayer { + self.livePhotoLayer = nil + livePhotoLayer.removeFromSuperlayer() + } + if let duration { if let durationLayer = self.durationLayer { durationLayer.update(duration: duration, isMin: isMin) @@ -970,12 +989,15 @@ private final class SparseItemGridBindingImpl: SparseItemGridBinding, ListShimme } var duration: Int32? + var isLivePhoto = false var isMin: Bool = false - if let file = selectedMedia as? TelegramMediaFile, !file.isAnimated { + if let image = selectedMedia as? TelegramMediaImage, let _ = image.video { + isLivePhoto = true + } else if let file = selectedMedia as? TelegramMediaFile, !file.isAnimated { duration = file.duration.flatMap { Int32(floor($0)) } isMin = layer.bounds.width < 80.0 } - layer.updateDuration(duration: duration, isMin: isMin, minFactor: min(1.0, layer.bounds.height / 74.0)) + layer.updateDuration(duration: duration, isLivePhoto: isLivePhoto, isMin: isMin, minFactor: min(1.0, layer.bounds.height / 74.0)) } if let selectionState = self.chatControllerInteraction.selectionState { @@ -2411,3 +2433,15 @@ private class MediaListSelectionRecognizer: UIPanGestureRecognizer { } } } + +private let livePhotoImage: UIImage = { + let baseImage = UIImage(bundleImageName: "Chat/Message/LivePhoto")! + let image = generateImage(baseImage.size, rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + UIGraphicsPushContext(context) + baseImage.draw(in: CGRect(origin: CGPoint(), size: size)) + UIGraphicsPopContext() + }) + return image! +}() diff --git a/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionControllerNode.swift b/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionControllerNode.swift index 874fe745d8..dfa91ea3a3 100644 --- a/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionControllerNode.swift +++ b/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionControllerNode.swift @@ -833,6 +833,7 @@ final class PeerSelectionControllerNode: ASDisplayNode { }, dismissForwardMessages: { }, dismissSuggestPost: { }, displayUndo: { _ in + }, presentInputTextTranslation: { _, _ in }, sendEmoji: { _, _, _ in }, updateHistoryFilter: { _ in }, updateChatLocationThread: { _, _ in diff --git a/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/BUILD b/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/BUILD index 852662d539..7ed891c752 100644 --- a/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/BUILD +++ b/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/BUILD @@ -27,6 +27,7 @@ swift_library( "//submodules/TelegramUIPreferences", "//submodules/TelegramNotices", "//submodules/PremiumUI", + "//submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent", ], visibility = [ "//visibility:public", diff --git a/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/Sources/ChatTranslationPanelNode.swift b/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/Sources/ChatTranslationPanelNode.swift index 07cc56bd14..cf04513bd7 100644 --- a/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/Sources/ChatTranslationPanelNode.swift +++ b/submodules/TelegramUI/Components/TranslateHeaderPanelComponent/Sources/ChatTranslationPanelNode.swift @@ -21,6 +21,7 @@ import ComponentFlow import ComponentDisplayAdapters import LocalMediaResources import AppBundle +import TranslationLanguagesContextMenuContent final class ChatTranslationPanelNode: ASDisplayNode { private let context: AccountContext @@ -446,558 +447,6 @@ private final class TranslationContextReferenceContentSource: ContextReferenceCo } } -private let separatorHeight: CGFloat = 7.0 - -private final class TranslationLanguagesContextMenuContent: ContextControllerItemsContent { - private final class BackButtonNode: HighlightTrackingButtonNode { - let highlightBackgroundNode: ASDisplayNode - let titleLabelNode: ImmediateTextNode - let separatorNode: ASDisplayNode - let iconNode: ASImageNode - - var action: (() -> Void)? - - private var theme: PresentationTheme? - - init() { - self.highlightBackgroundNode = ASDisplayNode() - self.highlightBackgroundNode.isAccessibilityElement = false - self.highlightBackgroundNode.alpha = 0.0 - - self.titleLabelNode = ImmediateTextNode() - self.titleLabelNode.isAccessibilityElement = false - self.titleLabelNode.maximumNumberOfLines = 1 - self.titleLabelNode.isUserInteractionEnabled = false - - self.iconNode = ASImageNode() - self.iconNode.isAccessibilityElement = false - - self.separatorNode = ASDisplayNode() - self.separatorNode.isAccessibilityElement = false - - super.init() - - self.addSubnode(self.separatorNode) - self.addSubnode(self.highlightBackgroundNode) - self.addSubnode(self.titleLabelNode) - self.addSubnode(self.iconNode) - - self.isAccessibilityElement = true - - self.highligthedChanged = { [weak self] highlighted in - guard let strongSelf = self else { - return - } - if highlighted { - strongSelf.highlightBackgroundNode.alpha = 1.0 - } else { - let previousAlpha = strongSelf.highlightBackgroundNode.alpha - strongSelf.highlightBackgroundNode.alpha = 0.0 - strongSelf.highlightBackgroundNode.layer.animateAlpha(from: previousAlpha, to: 0.0, duration: 0.2) - } - } - - self.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) - } - - @objc private func pressed() { - self.action?() - } - - func update(size: CGSize, presentationData: PresentationData, isLast: Bool) { - let standardIconWidth: CGFloat = 32.0 - let sideInset: CGFloat = 16.0 - let iconSideInset: CGFloat = 12.0 - - if self.theme !== presentationData.theme { - self.theme = presentationData.theme - self.iconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Back"), color: presentationData.theme.contextMenu.primaryColor) - - self.accessibilityLabel = presentationData.strings.Common_Back - } - - self.highlightBackgroundNode.backgroundColor = presentationData.theme.contextMenu.itemHighlightedBackgroundColor - self.separatorNode.backgroundColor = presentationData.theme.contextMenu.itemSeparatorColor - - self.highlightBackgroundNode.frame = CGRect(origin: CGPoint(), size: size) - - self.titleLabelNode.attributedText = NSAttributedString(string: presentationData.strings.Common_Back, font: Font.regular(17.0), textColor: presentationData.theme.contextMenu.primaryColor) - let titleSize = self.titleLabelNode.updateLayout(CGSize(width: size.width - sideInset - standardIconWidth, height: 100.0)) - self.titleLabelNode.frame = CGRect(origin: CGPoint(x: sideInset + 36.0, y: floor((size.height - titleSize.height) / 2.0)), size: titleSize) - - if let iconImage = self.iconNode.image { - let iconFrame = CGRect(origin: CGPoint(x: iconSideInset, y: floor((size.height - iconImage.size.height) / 2.0)), size: iconImage.size) - self.iconNode.frame = iconFrame - } - - self.separatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: size.height - UIScreenPixel), size: CGSize(width: size.width, height: UIScreenPixel)) - self.separatorNode.isHidden = isLast - } - } - - private final class LanguagesListNode: ASDisplayNode, ASScrollViewDelegate { - private final class ItemNode: HighlightTrackingButtonNode { - let context: AccountContext - let highlightBackgroundNode: ASDisplayNode - let titleLabelNode: ImmediateTextNode - let separatorNode: ASDisplayNode - - let action: () -> Void - - private var language: String? - - init(context: AccountContext, action: @escaping () -> Void) { - self.action = action - self.context = context - - self.highlightBackgroundNode = ASDisplayNode() - self.highlightBackgroundNode.isAccessibilityElement = false - self.highlightBackgroundNode.alpha = 0.0 - - self.titleLabelNode = ImmediateTextNode() - self.titleLabelNode.isAccessibilityElement = false - self.titleLabelNode.maximumNumberOfLines = 1 - self.titleLabelNode.isUserInteractionEnabled = false - - self.separatorNode = ASDisplayNode() - self.separatorNode.isAccessibilityElement = false - - super.init() - - self.isAccessibilityElement = true - - self.addSubnode(self.separatorNode) - self.addSubnode(self.highlightBackgroundNode) - self.addSubnode(self.titleLabelNode) - - self.highligthedChanged = { [weak self] highlighted in - guard let strongSelf = self, let language = strongSelf.language, !language.isEmpty else { - return - } - if highlighted { - strongSelf.highlightBackgroundNode.alpha = 1.0 - } else { - let previousAlpha = strongSelf.highlightBackgroundNode.alpha - strongSelf.highlightBackgroundNode.alpha = 0.0 - strongSelf.highlightBackgroundNode.layer.animateAlpha(from: previousAlpha, to: 0.0, duration: 0.2) - } - } - - self.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) - } - - @objc private func pressed() { - guard let language = self.language, !language.isEmpty else { - return - } - self.action() - } - - private var displayTitle: String? - func update(size: CGSize, presentationData: PresentationData, language: String, displayTitle: String, isLast: Bool, syncronousLoad: Bool) { - let sideInset: CGFloat = 16.0 - - if self.language != language { - self.language = language - self.displayTitle = displayTitle - - self.accessibilityLabel = "\(displayTitle)" - } - - self.highlightBackgroundNode.backgroundColor = presentationData.theme.contextMenu.itemHighlightedBackgroundColor - - self.highlightBackgroundNode.frame = CGRect(origin: CGPoint(), size: size) - - self.titleLabelNode.attributedText = NSAttributedString(string: self.displayTitle ?? "", font: Font.regular(17.0), textColor: presentationData.theme.contextMenu.primaryColor) - let maxTextWidth: CGFloat = size.width - sideInset - - let titleSize = self.titleLabelNode.updateLayout(CGSize(width: maxTextWidth, height: 100.0)) - let titleFrame = CGRect(origin: CGPoint(x: sideInset, y: floor((size.height - titleSize.height) / 2.0)), size: titleSize) - self.titleLabelNode.frame = titleFrame - - if language == "" { - self.separatorNode.backgroundColor = presentationData.theme.contextMenu.sectionSeparatorColor - self.separatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: size.width, height: separatorHeight)) - self.separatorNode.isHidden = false - } else { - self.separatorNode.backgroundColor = presentationData.theme.contextMenu.itemSeparatorColor - self.separatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: size.height), size: CGSize(width: size.width, height: UIScreenPixel)) - self.separatorNode.isHidden = isLast - } - } - } - - private let context: AccountContext - private let languages: [(String, String)] - private let requestUpdate: (LanguagesListNode, ContainedViewLayoutTransition) -> Void - private let requestUpdateApparentHeight: (LanguagesListNode, ContainedViewLayoutTransition) -> Void - private let selectLanguage: (String) -> Void - - private let scrollNode: ASScrollNode - private var ignoreScrolling: Bool = false - private var animateIn: Bool = false - private var bottomScrollInset: CGFloat = 0.0 - - private var presentationData: PresentationData? - private var currentSize: CGSize? - private var apparentHeight: CGFloat = 0.0 - - private var itemNodes: [Int: ItemNode] = [:] - - init( - context: AccountContext, - languages: [(String, String)], - requestUpdate: @escaping (LanguagesListNode, ContainedViewLayoutTransition) -> Void, - requestUpdateApparentHeight: @escaping (LanguagesListNode, ContainedViewLayoutTransition) -> Void, - selectLanguage: @escaping (String) -> Void - ) { - self.context = context - self.languages = languages - self.requestUpdate = requestUpdate - self.requestUpdateApparentHeight = requestUpdateApparentHeight - self.selectLanguage = selectLanguage - - self.scrollNode = ASScrollNode() - self.scrollNode.canCancelAllTouchesInViews = true - self.scrollNode.view.delaysContentTouches = false - self.scrollNode.view.showsVerticalScrollIndicator = false - if #available(iOS 11.0, *) { - self.scrollNode.view.contentInsetAdjustmentBehavior = .never - } - self.scrollNode.clipsToBounds = false - - super.init() - - self.addSubnode(self.scrollNode) - self.scrollNode.view.delegate = self.wrappedScrollViewDelegate - - self.clipsToBounds = true - } - - func scrollViewDidScroll(_ scrollView: UIScrollView) { - if self.ignoreScrolling { - return - } - self.updateVisibleItems(animated: false, syncronousLoad: false) - - if let size = self.currentSize { - var apparentHeight = -self.scrollNode.view.contentOffset.y + self.scrollNode.view.contentSize.height - apparentHeight = max(apparentHeight, 44.0) - apparentHeight = min(apparentHeight, size.height) - if self.apparentHeight != apparentHeight { - self.apparentHeight = apparentHeight - - self.requestUpdateApparentHeight(self, .immediate) - } - } - } - - private func updateVisibleItems(animated: Bool, syncronousLoad: Bool) { - guard let size = self.currentSize else { - return - } - guard let presentationData = self.presentationData else { - return - } - let itemHeight: CGFloat = 44.0 - let visibleBounds = self.scrollNode.bounds.insetBy(dx: 0.0, dy: -180.0) - - var validIds = Set() - - let minVisibleIndex = max(0, Int(floor(visibleBounds.minY / itemHeight))) - let maxVisibleIndex = Int(ceil(visibleBounds.maxY / itemHeight)) - - var separatorIndex = 0 - for i in 0 ..< self.languages.count { - if self.languages[i].0.isEmpty { - separatorIndex = i - break - } - } - - if minVisibleIndex <= maxVisibleIndex { - for index in minVisibleIndex ... maxVisibleIndex { - if index < self.languages.count { - let height = self.languages[index].0.isEmpty ? separatorHeight : itemHeight - var itemFrame = CGRect(origin: CGPoint(x: 0.0, y: CGFloat(index) * itemHeight), size: CGSize(width: size.width, height: height)) - if index > separatorIndex { - itemFrame.origin.y += separatorHeight - itemHeight - } - - let (languageCode, displayTitle) = self.languages[index] - validIds.insert(index) - - let itemNode: ItemNode - if let current = self.itemNodes[index] { - itemNode = current - } else { - let selectLanguage = self.selectLanguage - itemNode = ItemNode(context: self.context, action: { - selectLanguage(languageCode) - }) - self.itemNodes[index] = itemNode - self.scrollNode.addSubnode(itemNode) - } - - itemNode.update(size: itemFrame.size, presentationData: presentationData, language: languageCode, displayTitle: displayTitle, isLast: index == self.languages.count - 1 || index == separatorIndex - 1, syncronousLoad: syncronousLoad) - itemNode.frame = itemFrame - } - } - } - - var removeIds: [Int] = [] - for (id, itemNode) in self.itemNodes { - if !validIds.contains(id) { - removeIds.append(id) - itemNode.removeFromSupernode() - } - } - for id in removeIds { - self.itemNodes.removeValue(forKey: id) - } - } - - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { - var extendedScrollNodeFrame = self.scrollNode.frame - extendedScrollNodeFrame.size.height += self.bottomScrollInset - - if extendedScrollNodeFrame.contains(point) { - return self.scrollNode.view.hitTest(self.view.convert(point, to: self.scrollNode.view), with: event) - } - - return super.hitTest(point, with: event) - } - - func update(presentationData: PresentationData, constrainedSize: CGSize, bottomInset: CGFloat, transition: ContainedViewLayoutTransition) -> (height: CGFloat, apparentHeight: CGFloat) { - let itemHeight: CGFloat = 44.0 - - self.presentationData = presentationData - - var separatorIndex = 0 - for i in 0 ..< self.languages.count { - if self.languages[i].0.isEmpty { - separatorIndex = i - break - } - } - - var contentHeight: CGFloat - if separatorIndex != 0 { - contentHeight = CGFloat(self.languages.count - 1) * itemHeight + separatorHeight - } else { - contentHeight = CGFloat(self.languages.count) * itemHeight - } - let size = CGSize(width: constrainedSize.width, height: contentHeight) - - let containerSize = CGSize(width: size.width, height: min(constrainedSize.height, size.height)) - self.currentSize = containerSize - - self.ignoreScrolling = true - - if self.scrollNode.frame != CGRect(origin: CGPoint(), size: containerSize) { - self.scrollNode.frame = CGRect(origin: CGPoint(), size: containerSize) - } - if self.scrollNode.view.contentInset.bottom != bottomInset { - self.scrollNode.view.contentInset.bottom = bottomInset - } - self.bottomScrollInset = bottomInset - let scrollContentSize = CGSize(width: size.width, height: size.height) - if self.scrollNode.view.contentSize != scrollContentSize { - self.scrollNode.view.contentSize = scrollContentSize - } - self.ignoreScrolling = false - - self.updateVisibleItems(animated: transition.isAnimated, syncronousLoad: !transition.isAnimated) - - self.animateIn = false - - var apparentHeight = -self.scrollNode.view.contentOffset.y + self.scrollNode.view.contentSize.height - apparentHeight = max(apparentHeight, 44.0) - apparentHeight = min(apparentHeight, containerSize.height) - self.apparentHeight = apparentHeight - - return (containerSize.height, apparentHeight) - } - } - - final class ItemsNode: ASDisplayNode, ContextControllerItemsNode { - private let context: AccountContext - private let languages: [(String, String)] - private let requestUpdate: (ContainedViewLayoutTransition) -> Void - private let requestUpdateApparentHeight: (ContainedViewLayoutTransition) -> Void - - private var presentationData: PresentationData - - private var backButtonNode: BackButtonNode? - private var separatorNode: ASDisplayNode? - - private let currentTabIndex: Int = 0 - private var visibleTabNodes: [Int: LanguagesListNode] = [:] - - private let selectLanguage: (String) -> Void - - private(set) var apparentHeight: CGFloat = 0.0 - - init( - context: AccountContext, - languages: [(String, String)], - requestUpdate: @escaping (ContainedViewLayoutTransition) -> Void, - requestUpdateApparentHeight: @escaping (ContainedViewLayoutTransition) -> Void, - back: (() -> Void)?, - selectLanguage: @escaping (String) -> Void - ) { - self.context = context - self.languages = languages - self.selectLanguage = selectLanguage - self.presentationData = context.sharedContext.currentPresentationData.with({ $0 }) - - self.requestUpdate = requestUpdate - self.requestUpdateApparentHeight = requestUpdateApparentHeight - - if let back = back { - self.backButtonNode = BackButtonNode() - self.backButtonNode?.action = { - back() - } - } - - super.init() - - if self.backButtonNode != nil { - self.separatorNode = ASDisplayNode() - } - - if let backButtonNode = self.backButtonNode { - self.addSubnode(backButtonNode) - } - if let separatorNode = self.separatorNode { - self.addSubnode(separatorNode) - } - } - - func update(presentationData: PresentationData, constrainedWidth: CGFloat, maxHeight: CGFloat, bottomInset: CGFloat, transition: ContainedViewLayoutTransition) -> (cleanSize: CGSize, apparentHeight: CGFloat) { - let constrainedSize = CGSize(width: min(220.0, constrainedWidth), height: min(604.0, maxHeight)) - - var topContentHeight: CGFloat = 0.0 - if let backButtonNode = self.backButtonNode { - let backButtonFrame = CGRect(origin: CGPoint(x: 0.0, y: topContentHeight), size: CGSize(width: constrainedSize.width, height: 44.0)) - backButtonNode.update(size: backButtonFrame.size, presentationData: self.presentationData, isLast: true) - transition.updateFrame(node: backButtonNode, frame: backButtonFrame) - topContentHeight += backButtonFrame.height - } - if let separatorNode = self.separatorNode { - let separatorFrame = CGRect(origin: CGPoint(x: 0.0, y: topContentHeight), size: CGSize(width: constrainedSize.width, height: separatorHeight)) - separatorNode.backgroundColor = self.presentationData.theme.contextMenu.sectionSeparatorColor - transition.updateFrame(node: separatorNode, frame: separatorFrame) - topContentHeight += separatorFrame.height - } - - var tabLayouts: [Int: (height: CGFloat, apparentHeight: CGFloat)] = [:] - - var visibleIndices: [Int] = [] - visibleIndices.append(self.currentTabIndex) - - let previousVisibleTabFrames: [(Int, CGRect)] = self.visibleTabNodes.map { key, value -> (Int, CGRect) in - return (key, value.frame) - } - - for index in visibleIndices { - var tabTransition = transition - let tabNode: LanguagesListNode - var initialReferenceFrame: CGRect? - if let current = self.visibleTabNodes[index] { - tabNode = current - } else { - for (previousIndex, previousFrame) in previousVisibleTabFrames { - if index > previousIndex { - initialReferenceFrame = previousFrame.offsetBy(dx: constrainedSize.width, dy: 0.0) - } else { - initialReferenceFrame = previousFrame.offsetBy(dx: -constrainedSize.width, dy: 0.0) - } - break - } - - tabNode = LanguagesListNode( - context: self.context, - languages: self.languages, - requestUpdate: { [weak self] tab, transition in - guard let strongSelf = self else { - return - } - if strongSelf.visibleTabNodes.contains(where: { $0.value === tab }) { - strongSelf.requestUpdate(transition) - } - }, - requestUpdateApparentHeight: { [weak self] tab, transition in - guard let strongSelf = self else { - return - } - if strongSelf.visibleTabNodes.contains(where: { $0.value === tab }) { - strongSelf.requestUpdateApparentHeight(transition) - } - }, - selectLanguage: self.selectLanguage - ) - self.addSubnode(tabNode) - self.visibleTabNodes[index] = tabNode - tabTransition = .immediate - } - - let tabLayout = tabNode.update(presentationData: presentationData, constrainedSize: CGSize(width: constrainedSize.width, height: constrainedSize.height - topContentHeight), bottomInset: bottomInset, transition: tabTransition) - tabLayouts[index] = tabLayout - let currentFractionalTabIndex = CGFloat(self.currentTabIndex) - let xOffset: CGFloat = (CGFloat(index) - currentFractionalTabIndex) * constrainedSize.width - let tabFrame = CGRect(origin: CGPoint(x: xOffset, y: topContentHeight), size: CGSize(width: constrainedSize.width, height: tabLayout.height)) - tabTransition.updateFrame(node: tabNode, frame: tabFrame) - if let initialReferenceFrame = initialReferenceFrame { - transition.animatePositionAdditive(node: tabNode, offset: CGPoint(x: initialReferenceFrame.minX - tabFrame.minX, y: 0.0)) - } - } - - var contentSize = CGSize(width: constrainedSize.width, height: topContentHeight) - var apparentHeight = topContentHeight - - if let tabLayout = tabLayouts[self.currentTabIndex] { - contentSize.height += tabLayout.height - apparentHeight += tabLayout.apparentHeight - } - - return (contentSize, apparentHeight) - } - } - - let context: AccountContext - let languages: [(String, String)] - let back: (() -> Void)? - let selectLanguage: (String) -> Void - - public init( - context: AccountContext, - languages: [(String, String)], - back: (() -> Void)?, - selectLanguage: @escaping (String) -> Void - ) { - self.context = context - self.languages = languages - self.back = back - self.selectLanguage = selectLanguage - } - - func node( - requestUpdate: @escaping (ContainedViewLayoutTransition) -> Void, - requestUpdateApparentHeight: @escaping (ContainedViewLayoutTransition) -> Void - ) -> ContextControllerItemsNode { - return ItemsNode( - context: self.context, - languages: self.languages, - requestUpdate: requestUpdate, - requestUpdateApparentHeight: requestUpdateApparentHeight, - back: self.back, - selectLanguage: self.selectLanguage - ) - } -} - private func parseCocoonMenuTextEntities(_ input: String, emojiFileId: Int64) -> (String, [MessageTextEntity]) { var output = "" diff --git a/submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/BUILD b/submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/BUILD new file mode 100644 index 0000000000..c56da66785 --- /dev/null +++ b/submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/BUILD @@ -0,0 +1,28 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "TranslationLanguagesContextMenuContent", + module_name = "TranslationLanguagesContextMenuContent", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/Display", + "//submodules/AsyncDisplayKit", + "//submodules/TelegramPresentationData", + "//submodules/AccountContext", + "//submodules/SSignalKit/SwiftSignalKit", + "//submodules/Postbox", + "//submodules/TelegramCore", + "//submodules/LocalizedPeerData", + "//submodules/TelegramStringFormatting", + "//submodules/TextFormat", + "//submodules/ContextUI", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/Sources/TranslationLanguagesContextMenuContent.swift b/submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/Sources/TranslationLanguagesContextMenuContent.swift new file mode 100644 index 0000000000..020a6f1f6b --- /dev/null +++ b/submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent/Sources/TranslationLanguagesContextMenuContent.swift @@ -0,0 +1,610 @@ +import Foundation +import UIKit +import Display +import AsyncDisplayKit +import SwiftSignalKit +import Postbox +import TelegramCore +import TelegramPresentationData +import TelegramStringFormatting +import TextFormat +import Markdown +import AccountContext +import ContextUI +import ComponentFlow +import AppBundle + +private let separatorHeight: CGFloat = 1.0 + +public final class TranslationLanguagesContextMenuContent: ContextControllerItemsContent { + private final class BackButtonNode: HighlightTrackingButtonNode { + let highlightBackgroundNode: ASDisplayNode + let titleLabelNode: ImmediateTextNode + let separatorNode: ASDisplayNode + let iconNode: ASImageNode + + var action: (() -> Void)? + + private var theme: PresentationTheme? + + init() { + self.highlightBackgroundNode = ASDisplayNode() + self.highlightBackgroundNode.isAccessibilityElement = false + self.highlightBackgroundNode.alpha = 0.0 + + self.titleLabelNode = ImmediateTextNode() + self.titleLabelNode.isAccessibilityElement = false + self.titleLabelNode.maximumNumberOfLines = 1 + self.titleLabelNode.isUserInteractionEnabled = false + + self.iconNode = ASImageNode() + self.iconNode.isAccessibilityElement = false + + self.separatorNode = ASDisplayNode() + self.separatorNode.isAccessibilityElement = false + + super.init() + + self.addSubnode(self.separatorNode) + self.addSubnode(self.highlightBackgroundNode) + self.addSubnode(self.titleLabelNode) + self.addSubnode(self.iconNode) + + self.isAccessibilityElement = true + + self.highligthedChanged = { [weak self] highlighted in + guard let strongSelf = self else { + return + } + if highlighted { + strongSelf.highlightBackgroundNode.alpha = 1.0 + } else { + let previousAlpha = strongSelf.highlightBackgroundNode.alpha + strongSelf.highlightBackgroundNode.alpha = 0.0 + strongSelf.highlightBackgroundNode.layer.animateAlpha(from: previousAlpha, to: 0.0, duration: 0.2) + } + } + + self.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) + } + + @objc private func pressed() { + self.action?() + } + + func update(size: CGSize, presentationData: PresentationData, isLast: Bool) { + let standardIconWidth: CGFloat = 32.0 + let sideInset: CGFloat = 16.0 + let iconSideInset: CGFloat = 12.0 + + if self.theme !== presentationData.theme { + self.theme = presentationData.theme + self.iconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Back"), color: presentationData.theme.contextMenu.primaryColor) + + self.accessibilityLabel = presentationData.strings.Common_Back + } + + self.highlightBackgroundNode.backgroundColor = presentationData.theme.contextMenu.itemHighlightedBackgroundColor + self.separatorNode.backgroundColor = presentationData.theme.contextMenu.itemSeparatorColor + + self.highlightBackgroundNode.frame = CGRect(origin: CGPoint(), size: size) + + self.titleLabelNode.attributedText = NSAttributedString(string: presentationData.strings.Common_Back, font: Font.regular(17.0), textColor: presentationData.theme.contextMenu.primaryColor) + let titleSize = self.titleLabelNode.updateLayout(CGSize(width: size.width - sideInset - standardIconWidth, height: 100.0)) + self.titleLabelNode.frame = CGRect(origin: CGPoint(x: sideInset + 36.0, y: floor((size.height - titleSize.height) / 2.0)), size: titleSize) + + if let iconImage = self.iconNode.image { + let iconFrame = CGRect(origin: CGPoint(x: iconSideInset, y: floor((size.height - iconImage.size.height) / 2.0)), size: iconImage.size) + self.iconNode.frame = iconFrame + } + + self.separatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: size.height - UIScreenPixel), size: CGSize(width: size.width, height: UIScreenPixel)) + self.separatorNode.isHidden = isLast + } + } + + private final class LanguagesListNode: ASDisplayNode, ASScrollViewDelegate { + private final class ItemNode: HighlightTrackingButtonNode { + let context: AccountContext + let highlightBackgroundNode: ASDisplayNode + let titleLabelNode: ImmediateTextNode + let separatorNode: ASDisplayNode + var iconNode: ASImageNode? + + let action: () -> Void + + private var language: String? + + init(context: AccountContext, action: @escaping () -> Void) { + self.action = action + self.context = context + + self.highlightBackgroundNode = ASDisplayNode() + self.highlightBackgroundNode.isAccessibilityElement = false + self.highlightBackgroundNode.alpha = 0.0 + + self.titleLabelNode = ImmediateTextNode() + self.titleLabelNode.isAccessibilityElement = false + self.titleLabelNode.maximumNumberOfLines = 1 + self.titleLabelNode.isUserInteractionEnabled = false + + self.separatorNode = ASDisplayNode() + self.separatorNode.isAccessibilityElement = false + + super.init() + + self.isAccessibilityElement = true + + self.addSubnode(self.separatorNode) + self.addSubnode(self.highlightBackgroundNode) + self.addSubnode(self.titleLabelNode) + + self.highligthedChanged = { [weak self] highlighted in + guard let strongSelf = self, let language = strongSelf.language, !language.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { + return + } + if highlighted { + strongSelf.highlightBackgroundNode.alpha = 1.0 + } else { + let previousAlpha = strongSelf.highlightBackgroundNode.alpha + strongSelf.highlightBackgroundNode.alpha = 0.0 + strongSelf.highlightBackgroundNode.layer.animateAlpha(from: previousAlpha, to: 0.0, duration: 0.2) + } + } + + self.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) + } + + @objc private func pressed() { + guard let language = self.language, !language.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { + return + } + self.action() + } + + private var displayTitle: String? + func update(size: CGSize, presentationData: PresentationData, language: String, displayTitle: String, isSelected: Bool?, isLast: Bool, syncronousLoad: Bool) { + var sideInset: CGFloat = 16.0 + if let _ = isSelected { + sideInset += 44.0 + } + + if isSelected == true { + let iconNode: ASImageNode + if let current = self.iconNode { + iconNode = current + } else { + iconNode = ASImageNode() + iconNode.displaysAsynchronously = false + iconNode.image = UIImage(bundleImageName: "Chat/Context Menu/Check") + self.iconNode = iconNode + self.addSubnode(iconNode) + } + + if let icon = iconNode.image { + iconNode.frame = CGRect(origin: CGPoint(x: 10.0, y: floorToScreenPixels((44.0 - icon.size.height) / 2.0)), size: icon.size) + } + } else if let iconNode = self.iconNode { + self.iconNode = nil + iconNode.removeFromSupernode() + } + + if self.language != language { + self.language = language + self.displayTitle = displayTitle + + self.accessibilityLabel = "\(displayTitle)" + } + + self.highlightBackgroundNode.backgroundColor = presentationData.theme.contextMenu.itemHighlightedBackgroundColor + + self.highlightBackgroundNode.frame = CGRect(origin: CGPoint(), size: size) + + self.titleLabelNode.attributedText = NSAttributedString(string: self.displayTitle ?? "", font: Font.regular(17.0), textColor: presentationData.theme.contextMenu.primaryColor) + let maxTextWidth: CGFloat = size.width - sideInset + + let titleSize = self.titleLabelNode.updateLayout(CGSize(width: maxTextWidth, height: 100.0)) + let titleFrame = CGRect(origin: CGPoint(x: sideInset, y: floor((size.height - titleSize.height) / 2.0)), size: titleSize) + self.titleLabelNode.frame = titleFrame + + if language.trimmingCharacters(in: .whitespacesAndNewlines) == "" { + self.separatorNode.backgroundColor = presentationData.theme.contextMenu.itemSeparatorColor + self.separatorNode.frame = CGRect(origin: CGPoint(x: 16.0, y: 0.0), size: CGSize(width: size.width - 32.0, height: separatorHeight)) + self.separatorNode.isHidden = false + } else { + self.separatorNode.backgroundColor = presentationData.theme.contextMenu.itemSeparatorColor + self.separatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: size.height), size: CGSize(width: size.width, height: UIScreenPixel)) + self.separatorNode.isHidden = true + } + } + } + + private let context: AccountContext + private let languages: [(String, String)] + private let selectedLanguages: Set? + + private let requestUpdate: (LanguagesListNode, ContainedViewLayoutTransition) -> Void + private let requestUpdateApparentHeight: (LanguagesListNode, ContainedViewLayoutTransition) -> Void + private let selectLanguage: (String) -> Void + + private let scrollNode: ASScrollNode + private var ignoreScrolling: Bool = false + private var animateIn: Bool = false + private var bottomScrollInset: CGFloat = 0.0 + + private var presentationData: PresentationData? + private var currentSize: CGSize? + private var apparentHeight: CGFloat = 0.0 + + private var itemNodes: [Int: ItemNode] = [:] + + init( + context: AccountContext, + languages: [(String, String)], + selectedLanguages: Set?, + requestUpdate: @escaping (LanguagesListNode, ContainedViewLayoutTransition) -> Void, + requestUpdateApparentHeight: @escaping (LanguagesListNode, ContainedViewLayoutTransition) -> Void, + selectLanguage: @escaping (String) -> Void + ) { + self.context = context + self.languages = languages + self.selectedLanguages = selectedLanguages + self.requestUpdate = requestUpdate + self.requestUpdateApparentHeight = requestUpdateApparentHeight + self.selectLanguage = selectLanguage + + self.scrollNode = ASScrollNode() + self.scrollNode.canCancelAllTouchesInViews = true + self.scrollNode.view.delaysContentTouches = false + self.scrollNode.view.showsVerticalScrollIndicator = false + if #available(iOS 11.0, *) { + self.scrollNode.view.contentInsetAdjustmentBehavior = .never + } + self.scrollNode.clipsToBounds = false + + super.init() + + self.addSubnode(self.scrollNode) + self.scrollNode.view.delegate = self.wrappedScrollViewDelegate + + self.clipsToBounds = true + } + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + if self.ignoreScrolling { + return + } + self.updateVisibleItems(animated: false, syncronousLoad: false) + + if let size = self.currentSize { + var apparentHeight = -self.scrollNode.view.contentOffset.y + self.scrollNode.view.contentSize.height + apparentHeight = max(apparentHeight, 44.0) + apparentHeight = min(apparentHeight, size.height) + if self.apparentHeight != apparentHeight { + self.apparentHeight = apparentHeight + + self.requestUpdateApparentHeight(self, .immediate) + } + } + } + + private func updateVisibleItems(animated: Bool, syncronousLoad: Bool) { + guard let size = self.currentSize else { + return + } + guard let presentationData = self.presentationData else { + return + } + let itemHeight: CGFloat = 44.0 + let visibleBounds = self.scrollNode.bounds.insetBy(dx: 0.0, dy: -180.0) + + var validIds = Set() + + let minVisibleIndex = max(0, Int(floor(visibleBounds.minY / itemHeight))) + let maxVisibleIndex = Int(ceil(visibleBounds.maxY / itemHeight)) + + var separatorIndices = Set() + for i in 0 ..< self.languages.count { + if self.languages[i].0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + separatorIndices.insert(i) + } + } + + if minVisibleIndex <= maxVisibleIndex { + for index in minVisibleIndex ... maxVisibleIndex { + if index < self.languages.count { + let height = self.languages[index].0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? separatorHeight : itemHeight + var itemFrame = CGRect(origin: CGPoint(x: 0.0, y: CGFloat(index) * itemHeight), size: CGSize(width: size.width, height: height)) + for i in separatorIndices { + if index > i { + itemFrame.origin.y += separatorHeight - itemHeight + } + } + + let (languageCode, displayTitle) = self.languages[index] + validIds.insert(index) + + let itemNode: ItemNode + if let current = self.itemNodes[index] { + itemNode = current + } else { + let selectLanguage = self.selectLanguage + itemNode = ItemNode(context: self.context, action: { + selectLanguage(languageCode) + }) + self.itemNodes[index] = itemNode + self.scrollNode.addSubnode(itemNode) + } + + var isSelected: Bool? + if let selectedLanguages = self.selectedLanguages { + isSelected = selectedLanguages.contains(languageCode) + } + + itemNode.update(size: itemFrame.size, presentationData: presentationData, language: languageCode, displayTitle: displayTitle, isSelected: isSelected, isLast: false, syncronousLoad: syncronousLoad) + itemNode.frame = itemFrame + } + } + } + + var removeIds: [Int] = [] + for (id, itemNode) in self.itemNodes { + if !validIds.contains(id) { + removeIds.append(id) + itemNode.removeFromSupernode() + } + } + for id in removeIds { + self.itemNodes.removeValue(forKey: id) + } + } + + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + var extendedScrollNodeFrame = self.scrollNode.frame + extendedScrollNodeFrame.size.height += self.bottomScrollInset + + if extendedScrollNodeFrame.contains(point) { + return self.scrollNode.view.hitTest(self.view.convert(point, to: self.scrollNode.view), with: event) + } + + return super.hitTest(point, with: event) + } + + func update(presentationData: PresentationData, constrainedSize: CGSize, bottomInset: CGFloat, transition: ContainedViewLayoutTransition) -> (height: CGFloat, apparentHeight: CGFloat) { + let itemHeight: CGFloat = 44.0 + + self.presentationData = presentationData + + var separatorIndex = 0 + for i in 0 ..< self.languages.count { + if self.languages[i].0.isEmpty { + separatorIndex = i + break + } + } + + var contentHeight: CGFloat + if separatorIndex != 0 { + contentHeight = CGFloat(self.languages.count - 1) * itemHeight + separatorHeight + } else { + contentHeight = CGFloat(self.languages.count) * itemHeight + } + let size = CGSize(width: constrainedSize.width, height: contentHeight) + + let containerSize = CGSize(width: size.width, height: min(constrainedSize.height, size.height)) + self.currentSize = containerSize + + self.ignoreScrolling = true + + if self.scrollNode.frame != CGRect(origin: CGPoint(), size: containerSize) { + self.scrollNode.frame = CGRect(origin: CGPoint(), size: containerSize) + } + if self.scrollNode.view.contentInset.bottom != bottomInset { + self.scrollNode.view.contentInset.bottom = bottomInset + } + self.bottomScrollInset = bottomInset + let scrollContentSize = CGSize(width: size.width, height: size.height) + if self.scrollNode.view.contentSize != scrollContentSize { + self.scrollNode.view.contentSize = scrollContentSize + } + self.ignoreScrolling = false + + self.updateVisibleItems(animated: transition.isAnimated, syncronousLoad: !transition.isAnimated) + + self.animateIn = false + + var apparentHeight = -self.scrollNode.view.contentOffset.y + self.scrollNode.view.contentSize.height + apparentHeight = max(apparentHeight, 44.0) + apparentHeight = min(apparentHeight, containerSize.height) + self.apparentHeight = apparentHeight + + return (containerSize.height, apparentHeight) + } + } + + final class ItemsNode: ASDisplayNode, ContextControllerItemsNode { + private let context: AccountContext + private let languages: [(String, String)] + private let selectedLanguages: Set? + + private let requestUpdate: (ContainedViewLayoutTransition) -> Void + private let requestUpdateApparentHeight: (ContainedViewLayoutTransition) -> Void + + private var presentationData: PresentationData + + private var backButtonNode: BackButtonNode? + private var separatorNode: ASDisplayNode? + + private let currentTabIndex: Int = 0 + private var visibleTabNodes: [Int: LanguagesListNode] = [:] + + private let selectLanguage: (String) -> Void + + private(set) var apparentHeight: CGFloat = 0.0 + + init( + context: AccountContext, + languages: [(String, String)], + selectedLanguages: Set?, + requestUpdate: @escaping (ContainedViewLayoutTransition) -> Void, + requestUpdateApparentHeight: @escaping (ContainedViewLayoutTransition) -> Void, + back: (() -> Void)?, + selectLanguage: @escaping (String) -> Void + ) { + self.context = context + self.languages = languages + self.selectedLanguages = selectedLanguages + self.selectLanguage = selectLanguage + self.presentationData = context.sharedContext.currentPresentationData.with({ $0 }) + + self.requestUpdate = requestUpdate + self.requestUpdateApparentHeight = requestUpdateApparentHeight + + if let back = back { + self.backButtonNode = BackButtonNode() + self.backButtonNode?.action = { + back() + } + } + + super.init() + + if self.backButtonNode != nil { + self.separatorNode = ASDisplayNode() + } + + if let backButtonNode = self.backButtonNode { + self.addSubnode(backButtonNode) + } + if let separatorNode = self.separatorNode { + self.addSubnode(separatorNode) + } + } + + func update(presentationData: PresentationData, constrainedWidth: CGFloat, maxHeight: CGFloat, bottomInset: CGFloat, transition: ContainedViewLayoutTransition) -> (cleanSize: CGSize, apparentHeight: CGFloat) { + let constrainedSize = CGSize(width: min(220.0, constrainedWidth), height: min(604.0, maxHeight)) + + var topContentHeight: CGFloat = 0.0 + if let backButtonNode = self.backButtonNode { + let backButtonFrame = CGRect(origin: CGPoint(x: 0.0, y: topContentHeight), size: CGSize(width: constrainedSize.width, height: 44.0)) + backButtonNode.update(size: backButtonFrame.size, presentationData: self.presentationData, isLast: true) + transition.updateFrame(node: backButtonNode, frame: backButtonFrame) + topContentHeight += backButtonFrame.height + } + if let separatorNode = self.separatorNode { + let separatorFrame = CGRect(origin: CGPoint(x: 16.0, y: topContentHeight), size: CGSize(width: constrainedSize.width - 32.0, height: separatorHeight)) + separatorNode.backgroundColor = self.presentationData.theme.contextMenu.itemSeparatorColor + transition.updateFrame(node: separatorNode, frame: separatorFrame) + topContentHeight += separatorFrame.height + } + + var tabLayouts: [Int: (height: CGFloat, apparentHeight: CGFloat)] = [:] + + var visibleIndices: [Int] = [] + visibleIndices.append(self.currentTabIndex) + + let previousVisibleTabFrames: [(Int, CGRect)] = self.visibleTabNodes.map { key, value -> (Int, CGRect) in + return (key, value.frame) + } + + for index in visibleIndices { + var tabTransition = transition + let tabNode: LanguagesListNode + var initialReferenceFrame: CGRect? + if let current = self.visibleTabNodes[index] { + tabNode = current + } else { + for (previousIndex, previousFrame) in previousVisibleTabFrames { + if index > previousIndex { + initialReferenceFrame = previousFrame.offsetBy(dx: constrainedSize.width, dy: 0.0) + } else { + initialReferenceFrame = previousFrame.offsetBy(dx: -constrainedSize.width, dy: 0.0) + } + break + } + + tabNode = LanguagesListNode( + context: self.context, + languages: self.languages, + selectedLanguages: self.selectedLanguages, + requestUpdate: { [weak self] tab, transition in + guard let strongSelf = self else { + return + } + if strongSelf.visibleTabNodes.contains(where: { $0.value === tab }) { + strongSelf.requestUpdate(transition) + } + }, + requestUpdateApparentHeight: { [weak self] tab, transition in + guard let strongSelf = self else { + return + } + if strongSelf.visibleTabNodes.contains(where: { $0.value === tab }) { + strongSelf.requestUpdateApparentHeight(transition) + } + }, + selectLanguage: self.selectLanguage + ) + self.addSubnode(tabNode) + self.visibleTabNodes[index] = tabNode + tabTransition = .immediate + } + + let tabLayout = tabNode.update(presentationData: presentationData, constrainedSize: CGSize(width: constrainedSize.width, height: constrainedSize.height - topContentHeight), bottomInset: bottomInset, transition: tabTransition) + tabLayouts[index] = tabLayout + let currentFractionalTabIndex = CGFloat(self.currentTabIndex) + let xOffset: CGFloat = (CGFloat(index) - currentFractionalTabIndex) * constrainedSize.width + let tabFrame = CGRect(origin: CGPoint(x: xOffset, y: topContentHeight), size: CGSize(width: constrainedSize.width, height: tabLayout.height)) + tabTransition.updateFrame(node: tabNode, frame: tabFrame) + if let initialReferenceFrame = initialReferenceFrame { + transition.animatePositionAdditive(node: tabNode, offset: CGPoint(x: initialReferenceFrame.minX - tabFrame.minX, y: 0.0)) + } + } + + var contentSize = CGSize(width: constrainedSize.width, height: topContentHeight) + var apparentHeight = topContentHeight + + if let tabLayout = tabLayouts[self.currentTabIndex] { + contentSize.height += tabLayout.height + apparentHeight += tabLayout.apparentHeight + } + + return (contentSize, apparentHeight) + } + } + + let context: AccountContext + let languages: [(String, String)] + let selectedLanguages: Set? + let back: (() -> Void)? + let selectLanguage: (String) -> Void + + public init( + context: AccountContext, + languages: [(String, String)], + selectedLanguages: Set? = nil, + back: (() -> Void)?, + selectLanguage: @escaping (String) -> Void + ) { + self.context = context + self.languages = languages + self.selectedLanguages = selectedLanguages + self.back = back + self.selectLanguage = selectLanguage + } + + public func node( + requestUpdate: @escaping (ContainedViewLayoutTransition) -> Void, + requestUpdateApparentHeight: @escaping (ContainedViewLayoutTransition) -> Void + ) -> ContextControllerItemsNode { + return ItemsNode( + context: self.context, + languages: self.languages, + selectedLanguages: self.selectedLanguages, + requestUpdate: requestUpdate, + requestUpdateApparentHeight: requestUpdateApparentHeight, + back: self.back, + selectLanguage: self.selectLanguage + ) + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Chat/Message/LivePhoto.imageset/Contents.json similarity index 76% rename from submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Chat/Message/LivePhoto.imageset/Contents.json index 53ce79613f..c8137a261e 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Chat/Message/LivePhoto.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "linktochat.pdf", + "filename" : "livecorner.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Message/LivePhoto.imageset/livecorner.pdf b/submodules/TelegramUI/Images.xcassets/Chat/Message/LivePhoto.imageset/livecorner.pdf new file mode 100644 index 0000000000000000000000000000000000000000..51fc7f0ffb347b1fe3036e47de9d083894739a45 GIT binary patch literal 9057 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Add.imageset/Contents.json similarity index 79% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Add.imageset/Contents.json index 8941a63389..76619c6e03 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Add.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "Chat.pdf", + "filename" : "plus.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Add.imageset/plus.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Add.imageset/plus.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7d7d06815d603b5262ae7cf829f875369b9e113e GIT binary patch literal 5467 zcma)Ac|25W_%}((OZDZ5a9=gctCy}!@zcm6n^^FHtMexLn(-sh3S8JQ@el+;D!f}uwQ1t2m0JqBqC_2%ra~?YI3w?@FW@m)P%laGEzndR*yk)*R(M*nPY-h+A^Lj7F`pG^z-vm z@>5l!F+7kcEEbDYRza$$C_)^H%wtp*o})-*%5pL0P>et(kwK=j$TTVdqv8oPHVaaf zXWpCu5|NKjXEP{VbP^E>Qa~S&%3>l>N+{&w6Oa}BBUGjm*9Ijb%?HWB(;;?co*l4L zwMaxw7MVo>VZ(S2*F1d+>lbBCSqd3eNRxu6dT7gV6iJ{vo=suN=7cZbi`HEC{-+8&B9u>10wVbt z2rc*t3{oLI{NN0QzUI;!`htr^1TGL>)u^ke!TVgQDxV71k`>#B2{;4F{19^k?d-a6 zJ-0yeDhh{ZK&fTN06~Zcs;PNgwMDp4Xh8-Q&w@(Q2s}zAf;RgMc$i2NGQ0;MO(@W| z5lEzwU?k|_7d9HBK1ZyS0ZMoV4vmKkrMvm8jP*I0Kh6B4p>Ik{5gZw-ws|1>9kpaNUETbG9y#?arzOr1O7&&^->c{SJZ`KeTyZ?J#T~p ztNlVpXnvat%fdSoYDA}3vFsj6j*G8#teC}3SFGpEtW+vY-dNS?(AO)RsuwRVxw*lh zSV}+(`*W{&U`_e@tzrUI2e$`#%(y6`Ozo2t%+>%6(Y_+7(IIq9)l`8QnQ&?k=-V9d zlPnSby>scQvNbzA_D`BhS!3d)90`s(@&>Whmh0*?B=F0rOP1GdYXvAeZ)TH)C29qH za&vuVt5asZ>zQ$jTq2WCu#RzIBLV4x2 zBP+|7+V)7rhXBIMt%2RwmXQsYMM{taQQHpHN;)kOGQ5Oaxn69=wiR~}?aMakJ;q_} zgj)4=4L@8BZ$f8@m5N2^t!r{?+PO(68oxPrg=AH%^1AV0!5$oE!xpg{)dM{)9Cepv zhpKP%xKGLi2yP9|{ASMCEQH&BS!Dn6$9gDh1v_B3$cD3P(=chn)|pvec7i#gt)Zo% zQRzFZrJEhpHdyXcZF=UZJ1U~K@ydnnQ%Xj083(Q=HFtg7`*F?a`l&r-I`BdCw|0(XxtNX!^3jJL^P!zXQj;fUm@_N& zLyqXtWtOhxoVt5T#y~VJf*!7H62EQt+K4cvM>v9v@1BD5ul33;0!#x8WiGMIE?j%J z9YOvh`#dX=6{BV_Woj>z6y@0GS$L{EDImGitn$DK!!+DV`N7M({){h7ve{Q+bj;#A zurKCzB(Z*|4^w}z7F|D9UlFylRg*P{|r5hrC~MQD{b} zOk7RjquaN`?6jP+-EL^NyVh*IvFOdNPn{LbeDa;b+hy5zO0%aJV+v!{pW<3~Zfp_P zMD{5)xN+Ry3W_>Z+sQf*E1sYtk~Tk2bV{sDBquIMBgs}?*`6ida$Yf>Y)?y1+q8XXP>Mms`s*b zy?V=bIIO#F7FD+`y5ss^*;mLX$*21jRbMxBTO2uBo7=dBIOwUQmXDDpL`rNuZ(*WM zd}Q#LaL)LGaroms=7IIQ>MLTkW8LyT=SJmu<(|ol$^DVX%k(uj?XOgNlV6x`7HbosC0@V5;QhgU z=QD2fy4M`7xo9)#+ZFcQWkEvM0q`*)gU4 z#lD?6T`8plB_o~QU8%?8Ioth{hdJ-a@8pLm!vT#9f)9!9pH?1FF0MD|3&@ZAyDuO0nohyM81F`)kFC5hR_{wyD~d^X}|7osmXGI%)nhPg#tSnM6e z({WSCu6v_zRYJikP%#9ElqyDkvyQaJ`8Va)7u1Kw9#RMrr%07=E8cl(bK#CYQf(Qo zu_?Xj?S?0Nw(lve>Z?w#{#4a{_W0?IXU%05WHBb4VRjeS8x@(nO|MG#%D8^WKfm)n zL!n(s6X{QnY0mk4@Rj||e5=EOCn9DxKTEugijV&mAB{@Ih9rAEV=3${QaSo({XbiK zD*H-C_H)(+Y&?OQJ(g_l;@in7H=n7TJh$}Tsg_e_2y>hg=gP-8&i0`|nRRIZ+G=h%^z``==C4fS zuiPu1mL$~_O;WK1F~w-|01a!8eT=2uJ5BShZ*Ay`+FRP?cRVn~C1n@Q^X$k4*}cts zh4vozQ*39`U%d)A{Bvx{&66!B8&7vu4d^<|;>N2#4;FV-7>^sDoj5WfJh5_+-ElnK zp@8E$^szE?I??>2+;=(JM1EUP-ixBqTEstyIs~~bs_TW`}I+ zlAFUnwsoidtR6fodBJn5yvA^UR?o+Z-EVTo^rg%cT`_}WrzK6dD zST8S-y+<6cD*fa674ntnjlIYVNAvnOSFZQ%r%ntHcGn}~@(&M{FtTehK2#lyyZPl+ z@~tan&&sR*JXW3U#V==R@LxT}-4ph!g>Aw$6c&jLe5*v}0*V-MJJ5)S%t}fanyJB=E>{ad4 z8`}sbp5+5VdA^=3!UW2+L_lQ@-xpz5^@`h z8$maV$~%FglT&mIcyxTP7~$c#d-In(sV`q7Fe|-FH|k!HH4}dhKD!W;n7n&Uvtf&d zi_R7OxP+M5qyy))h4t!>3fM^pgl`i`3~D%Dh}G{&6$(1!x2c45*t_PQgBMz$fh>SK zuCjE9iL$5f`cZ~eKKb1@V2xWC1#R)5ajkIgr5}GBTT%cVG~FoNA0+vFwsPeDfOG1b z@`CtO#gqY6v`?Pt>QvzR?bC!x)7neyM`kH|r7q>xoVUB=0GOd}$Xd0m3O-+KjA5GV zlOD+uQyQLCqLvCATJj(+y{#=Fr>zZHtAMK(VD0}Y6d~L!`yZEGH2?ak0$(5JZ>1PM z*%?5Z85$bknIH*(@2WO{E1yf9&jsI!4QUh_!xrigL2kQghyq{~8|bpT@V=|D=*<6l zsl~z&i|?`spUV%es+Ct8eVyL$9kHdOfH*C@X5XqXq+aaqNCP>~SvN|R|I4(o%#3@9 z2@$rSOXpwZ&9%B?2EDzFV{|i4$C<&>c3F`OMij+k+7{groeq z!#~yVQ&tYq`z0bZT_~({~+hX!WouX%R_YApfz5Bk#NglD%{S1~O zH-hk8BCUjYlrC(jtEpf54zLH6w`?M03b&Su;ks^(JnJ522@hOi4cdozx|z|&g(uXN z_k4a6t&kHIjSXph*<$N>a3sENRl_w0iL$hVLpn{LruI$D+$nMLxW8O-l0}*JNcm`y zKiVK2;&ya(gT{Zv9`-G-(NRUA_(4S}^T}{j&B-LV(?P+r1UUA*mcx+7rm_Ik+-knV z@c@~;P|c?i_Y_YAjHOSd(pV7MJPNNT0=N?AM-nz5lg4HcK_&oa*F4n{B$4q3G!EQz zDJgTGUmvP`(yy<15x-QM*A-7-LW7UFl`V_GCbD>XFz4GjD3hrycn$!-$vT&Pe3O2) zhp~|Uxx*U1*CAot z5}a2aY7%KgHaxQU{|Q*!Yx1myJ5noX>)s{U_0HIy2Zri<~^ zP?&$oP*YKZel5T8siC1T|3*Wr{hNkSg=+CPK6Ug0{a6e{FX-oD8;XpvqVX~ka=7t8XtcDVilQTYG@<06mO!EK$ literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/Contents.json new file mode 100644 index 0000000000..86631f9c01 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "appearance.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/appearance.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Appearance.imageset/appearance.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5d183238997afe1afef086520447e2bee5e9c335 GIT binary patch literal 5695 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Away.imageset/Contents.json similarity index 79% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Away.imageset/Contents.json index 8cb366c891..bb48d06203 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Away.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "Badge.pdf", + "filename" : "away.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Away.imageset/away.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Away.imageset/away.pdf new file mode 100644 index 0000000000000000000000000000000000000000..86f4c267b2d3ffd11fb2511a357cec1198413913 GIT binary patch literal 13492 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 MMJ!!vzR}`8035qu-~a#s literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Backdrop@2x.png b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Backdrop@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5f40a8b6a54b60d6b2d22853139b1fa88d089000 GIT binary patch literal 4799 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 OquW~Vw<@&oJoOK$*g~5C literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Backdrop@3x.png b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Backdrop@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..29bf0b93f528e7bd4f3810cd7a7b3434ff008c5e GIT binary patch literal 5374 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 NMh2$(WxB4H{sH$tSMC4+ literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Contents.json new file mode 100644 index 0000000000..ff2f9e4a15 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Backdrop.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Backdrop@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Backdrop@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Block.imageset/Contents.json similarity index 79% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Block.imageset/Contents.json index d89e9f97b8..f1eba03d05 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Block.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "Files.pdf", + "filename" : "stop.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Block.imageset/stop.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Block.imageset/stop.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8700d5ec8ce476a8b294a3658fcf7ce1585ecf9c GIT binary patch literal 6088 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 O2!sm%&YgyqM*jnBNQNu` literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/Contents.json new file mode 100644 index 0000000000..dbd266c9c1 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "brush.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/brush.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Brush.imageset/brush.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3bccd1c483515bf10a1db866a48a30eb993801d7 GIT binary patch literal 5776 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�=okQGa}F^M9eWD33ea_`3KOl88nrQV|V~O zl8gz#%MT;V#$;Ioe_-s%D_O{u8q1EYj&gM=ECBWq3X+P8{-OaUlD4|B*{L!FNKPWz z3s75;BPI|R1P(>0LfEYh{z6reNM$6{lW$pu05Zw?LRyxos{rNrQ>Oa29t!!Fp0cV6 zu+Ue}RaRB~TTcxR6ygs(wZHLHP)fjpU9G2rLjGj~30DG+NUQabO3HuDMJoS|hg4Al zTKJE-NR<`-(Ww}KNv1-;?l3a~R*;Mm9C-w;ri4&J$*vx-b_f{Quuw3w>?I7dB?RKZ ZLIBmF(SeoBDh*OySsAitkMTj1{{cwi(wYDO literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Channel.imageset/Contents.json similarity index 78% rename from submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Channel.imageset/Contents.json index 4cce7e3466..4fb60ebb2c 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Channel.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "work_30.pdf", + "filename" : "channel.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Channel.imageset/channel.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Channel.imageset/channel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e30af0736012d3a02b5fc706496a3538802f640 GIT binary patch literal 5892 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
@fpy_a*xzK#JM)9`lHV0PuYJO zMs3i~=*3GY9I?z2l*knHlD-;xk+9?P+vH9`)*bS9AW3O=w;0bElB(nh=^f9#-r$k2 zAG{>%NoWnIVi~4iDJ}5+tbip** zuON>Cdz}ghc}1C(1NJcihoTk+d6tvMa7&UO0Br=gJ9Gw^&g`v0A<<~QJ$v+y>i-WG CstlI^ literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Chat.imageset/Bubble.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Chat.imageset/Bubble.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4b77544bb15a4c62c758452773e4757d745f023e GIT binary patch literal 13327 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/Contents.json new file mode 100644 index 0000000000..80df3a5439 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "checkbox.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/checkbox.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Checkbox.imageset/checkbox.pdf new file mode 100644 index 0000000000000000000000000000000000000000..11203d0906e0c13061c28edb2d25f1ad92935bce GIT binary patch literal 5721 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/Contents.json new file mode 100644 index 0000000000..e899d634dd --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "clock.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/clock.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Clock.imageset/clock.pdf new file mode 100644 index 0000000000000000000000000000000000000000..027dba62eb7c081e98e9e08d945891a57f5a43a4 GIT binary patch literal 5913 zcma)Ac|29y+b3x_)zzpZwWCSp>@yFN%#opENGj49HV$WUhMYu{#;cKQ2oV}2k?f3f7Fk09T>DTlaD~ z%rRziQ#oJ6huHu*pC^!*%2yjQIYJg>3bzp$G&D!d6Lb7b-E8bsli=QJ!vLvNWD0^I zAtBfhB33B&2k~?|9mEkp0>K2HVItWfkTT^a0*R4=L&ahPN!VhpNXiuo0ECsv63V2o zsmkT46mZxmzepzLDcCt|5aL06NFbGfcq|?qEdj3r6%k0ViZx)_LOv*Gis0!u>wG+)N%3E4r$W+1Wx z9(PzyiHx8!1HV^?=tl@;O#kmquwwcTQ=ul9FM|aCr>YSm3RR<-mFA3axsqP7-VvzE z>mrVyjEO|dh^=LExqOBD6@#Ea0&+Pce5n#K6*0w9bG#Wis;}_xPfbvQa6rKk2%;ef zchCri1h5?;NQlBMReZxOBwH{@hA7j9N+2WS3Y3VVNHV#|_!3|XfJ66KvC~_8M)p-5 zP?=H;rWlSb4>1J6bKs;>^O8pK!dnZ81xzWNlQz(HE*o-NYo+7_?YPJo0NU~3VH=1o z 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Contents.json similarity index 100% rename from submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Contents.json diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Data.imageset/Contents.json similarity index 78% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Data.imageset/Contents.json index 90677f49b1..be40e90532 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Data.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "AppIcon.pdf", + "filename" : "storage.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Data.imageset/storage.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Data.imageset/storage.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27a5226bdfdb87f947d6e78a7161fd400f6ed688 GIT binary patch literal 5731 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/Contents.json new file mode 100644 index 0000000000..4a1c710eb7 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "emoji.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/emoji.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Emoji.imageset/emoji.pdf new file mode 100644 index 0000000000000000000000000000000000000000..285ae7ea40f48ee5a9cf19b23694658a7e2ad7ff GIT binary patch literal 6333 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 ad=RA5!4pVTynQrKS#ep$lP5JUX#NlX&e%Z! literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/Contents.json new file mode 100644 index 0000000000..44429ce088 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "question.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/question.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Faq.imageset/question.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9d481ac02a94ac309497ca5eb4ae4d9963ea67e2 GIT binary patch literal 5732 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/Contents.json new file mode 100644 index 0000000000..c3fce7b0cd --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "folder.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/folder.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Folder.imageset/folder.pdf new file mode 100644 index 0000000000000000000000000000000000000000..48270f939295b2409685c63278ba788913075ef2 GIT binary patch literal 6049 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/Contents.json new file mode 100644 index 0000000000..861c0c5921 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "gifs.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/gifs.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gif.imageset/gifs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc5e901b8caa10d09e729ccc30bb76854968caaa GIT binary patch literal 6326 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 LIdW9zjPCycQ6MvI literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/Contents.json new file mode 100644 index 0000000000..24f0e9e957 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "gradient.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/gradient.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Gradient.imageset/gradient.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c8bc2dbfa6427321fc8a7900f94ba6908e7cbed5 GIT binary patch literal 10722 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Group.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Group.imageset/Contents.json new file mode 100644 index 0000000000..271bd9a1fd --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Group.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "3members.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/Contents.json new file mode 100644 index 0000000000..0190d881f6 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "hand.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/hand.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Hand.imageset/hand.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e19b248d8b5d30a1e6ce0138a0cf8ea42757f4ca GIT binary patch literal 5975 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 K?_T|52LA)^6G7Dg literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/Contents.json new file mode 100644 index 0000000000..c1996048ff --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "icons.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/icons.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Icons.imageset/icons.pdf new file mode 100644 index 0000000000000000000000000000000000000000..68a007ccf7a29d373acc4e9414c8c73563cf3def GIT binary patch literal 6659 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 iGgF&+$`B%laFkf5=U%F3qp=KllHg}R{t delta 1925 zcmZ{lc~lcu6vmB2E5l+?F?tM#fy!zKd0A!>h!6&+G0!joGae*QfsDd_eMFFd#whAREDs%!ZYHZ&hGw1x?yZ3(Y-I?#TOYcUR zIV|uCa03h!g21UnyUh@Zg}m&C<&v4$rPoTl{HteHUdpb-bAiX+(X5uW^M32uYQ_Fsaf563n%OsZRIFn5KQAw&))fZkR*Ze0k@oyr%(o>!mhOzn zbd$DUP|sPjn9{*232;#2HoSOmoiRpyyX!{KI4t5C0Zb;$B5 zt~Z}_Z(<8Cyw$$SWOC&+)9cy3XwYSP=fX*(_(%F;T8}BJrnv2daas zX#&Fp)wYe|oNW{L<=Z#k*Ok>qFGtEWeT-Y|`cTigdFgwKi$zk#!-JO>l~(Uaj*psU z*^o0PGNn<2R-Jrqw)ajU%QL6xo=&BAd7kfF<9O831C&LIa^H4LKU2J9CO>6dThj7M z^A~I5{iH|LpP38uGd-w#X5)m=|~?x zMk!QLdUy4koOsAMKfC!wM7r>s8Y^iEMp>l2q79O&w>PF1o_`b2cRG3kS#!Yb2lPm2 z>3P``b?5Fqb!SyC(pa#yEROLOHsh01Hq*oJ2k z84Q`m_~)&%P?x+k@wmCkCw|?2O>dfYlh^8d*{86_dv&Xk{1z11eKjMpw&b!o;?p!0 zo>td#8sRYn$K!IRW+=)n&bCj4G(UCkm4>JDJ4>)>Z54JGk`7O9Ra@gNhql~O|BB)n z!A}pqI^d}6JD06_h9uq=Pr(EA7qfR#v?gB)XI0fZ`3pKh^by*WGHTJmSJ7%qlpGZJ zS8Z+-=ts$Mqx(YMWr|^nnTz>1N6up^&#)qMH``*TROYVtEn|xJRa{XoIpkw?eXe-- zNxxN#JuAln>dtNFdIYm&-#2bDZSm7Rnc4-9V$0@^Q_s-;v1w4q6Un=#cah^?AA@fT z((|5m#Jmf)U#{uT9ZUKB#<4zU?+1@E+iV}i9jJ4Q%(9K%(525Tj~sk+r$gJ3Rj1sP zT0Dr`S=w0e5oF|NM~3|Y9r6d>fBFMrk%&U{iYbQ35ZKF$a4q8TuSo%J4rLMp3~M8} zB3X_};vshtfJLE0uNVcC1iAYISgL^BmjKu=0r#<^QVkKq9>`{W$cExU3>zqHT_Og% zFOWzvJd+{x2*DHyU&~`K1q?U_5rhI_xQh~G$(Ssepxlq>0*Rb}Ffg292rhH8!7UhH zj0Pw^nZcm~{zz4UV7LMi&co*bhLQ;}M+S^=xoj@Has&Y;JTwW*{y{8+j~XMC_1P+v zOXx6+kw6ZUMQq&&ad@!uQ-+{KePi@lG6dxtCqwx>Vw0cb=P?26Qv{eOA?cGqyhjo&qyl(9ArdT7?doR#I3>PkfAek{D`a3S&NR^ diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Key.imageset/Contents.json similarity index 80% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Key.imageset/Contents.json index 535c776e40..7ee24619ad 100644 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Key.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "Ads.pdf", + "filename" : "key.pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Key.imageset/key.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Key.imageset/key.pdf new file mode 100644 index 0000000000000000000000000000000000000000..02d031d0a8f9174c55f8724ce207e20ef88717c5 GIT binary patch literal 5558 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 Y;A{v)poljP1}-ix%_tzCdP(hn0IVg;S^xk5 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/Contents.json new file mode 100644 index 0000000000..d3953b5f22 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "lastseen.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/lastseen.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/LastSeen.imageset/lastseen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a1356649b4edf9396a98ac9405efec01be153a7 GIT binary patch literal 5741 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

!(sWi!_C>5lhIH5c zD5O=-914i^o$4>ut`c{hZkgsk5YZ9;A6WoJ8K>k!sVpS{QehE>;@gx+fNDM@)LDVD zfKzmrBJ90kZpm5Qys$D5*HdYRsfyKq~QTN z9Llo=)EpoXae7o1RDH@Tu%D$5rA27zYeB@4Y74sJ+~{B%XnthPpfT|bjvn-d!WPVF z3Ipnjz@fCA&%;HNmI`IaBrF^W)yNBaT7w8!wa>F-J?8zkAe-H3;>a`vJ1-!-tR`j? zEjh~+@;bY9wdi$F82d0)Q!W{#hU<0+E{vcWugQZakOgz{{*lR@eAmd~>oNQ^( z3&B~u)PY+5e^ITKHm=+VGqCdnhZ;)r+G4>j6n$k_a~!1)HW*1%4{+Kt53xY2UqQx>dJY_%1U6s{ehvNWd8$GQT&%&WmV|t_+uVM;a@tV6cm^Fg+ap+ zNdOH7#fFIim_K_J6;zxRR1{H)3NkAP?DGKug)1ELEGK~x*2Dk++6ZuW=nOEA*;|8B NLZV<&Qig|&{s*l7&0PQh literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/Contents.json new file mode 100644 index 0000000000..942d26181d --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "link.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/link.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Link.imageset/link.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cba0d8a65bc78dfa2ba11432604110379dad1ad9 GIT binary patch literal 13774 zcmeHudpwj|)IXs#M@LtsQiD@c%*-?9VkEg=avPTzxVxo-uL~yf0#em`@8pEd#$zC-k-hKTF)w? zskt_Qz{6HWfPxc> zVNsnz?3~FV{$v70ZKDB9pQpzQ2n+zJ!Fd6623wD}L5)OVdQtVjG6W;l3?TMc6mLC8 zQ*&V_u(mjOZLOB4n0MgBa4IlNdf5)Ogwy zsyB&C=cpO1G3I)C(W#pHNJs=aO*~M5NYK(p{x~1R07Q{X^7)YmW0H@Ul!ym|HB`pG zP9-sfKh;#q0(K;HE+EerSOOKQJ&@wfB|#=5v9=@{Er73oej}2>M$#w}$`lUK3nZ~P z27o?tN}aFZU$P(oL5l)S5Gk@jup%;HDg)#r7_w2YBs6fa1Z@`>v_%B_29L%;?R->6 zghIQ?jvK&+yTehUMdmNH`!>nCu!0oqDI$pl8kaMRN(K9XyK0gyW(r+!X{js*i34s* zQ|e9{nd)d^ETD-rr$KFSq&XdIHl>o86o?Y|6K!oQ4lhLP;5vd?grf1%i<4-?1szJY z%;4cTZE5MP)l~;UkeX&$=z$L3}_1bEnX`EDJ zyP#fInKX+rV^+OtE1Yidcp_b1xlStJ;>Cc8nv4nm`g@d&Pe*3JGk-H2(!OkZoUqcQ zfw9EU)Gl`BKaomJGIt`S>5(#lGvD1<_9e=2E==vF-wnChaJhqqO6^i5d-aJ@!;#~s zmM@pap86dVsdGxMC@Q8GRw~Vil13?<-l0$->(r}~vIj0d%K^Uj^h}z`%%jQ_89;SQ z-7>csawhRag@uZi%t9jk)!NYsZ+){I{*ZYfFn9PdEGasyZOXY}v9EWY1b=wed z&~k>ag)NGnpM}f%=x`?2&spaDoYttasAJiy9ac8GViwt2=rrB)-S`QHS$y(v&pw1{ za*q9}wC3)Y>tD|Mv~YCYfxXQ)Qb_42x{d7W6$$(6YmR&Q0k$a(DbkHgo~tOuY`(da zr1ID9c1yb2&J87VL*=^;zP&X}vM6|^hxWE{cd5Y@V`Edsk zw}@V9LF)=)+YKvh!Yso~)Z#f-hfhEILz?zmUM%MXClO;jYU!euc5G|EZ{fa*w6OF? zR#o=9O|pmzn(vOU`7@<3&C%kT=`NeEaErt%N68I?{kVqBb=Zc_4VA|<>Xy}o*5xO8 zYIv@VaQU7zc6x@I=-S)S; zwpBpBTTG`qx2P;{l=WHbbIq&dR*l6iN_xnCM58Cq`-#jP*BWPaS90YYATDj`gA;Bi zs!q^O%)%mRc7A!j*Zf!cCHiuGZGD}Jw-w8EuIgM| zyq1C1)MjkUwyd`LuJy2B+pB4 zE*`t&ck#fb#EavX*cZDlP80&gPdc63A8j+;+JD7&DEpyVe!$=KuO-m|?>ijcCUw63 z>viEbulGBUh0MP)1Dk>m2IX>=c(tS$H5xzPY!RDtuFt!6XYCQYVLPvLI(89yI_U}N z_IgK!{#aL5-CvVk^QyWh zI&}ZyXlr#Xb)5O5gU&}5nwFS9$*#`!%Q?FxB>&NMmR2W14;d1e*nIxY<~ElL`F7jG zcgKw_y?5dYkdpEtB>~7J>`C{#$I)6}g5LRO!_yVLRsGk7Ht`mOE#3`G>`J%x2ztb; zupX=Wa!B^-zLtGf($+)-@8rv5-XDYEjyqZgPj~cx=)bctY?IAhLe?>qRr|^Fi6>5W zCVM9(C9k#(-t;)rU=?g`tGA)@1+?33Ouq%o$xEvPpaj|yt<$1-_Y9FeQbSMcW`KUhDXL4rf>AnVfFRR>*dym25Wb61KZldwtxRTA!4Yh?MDM+VV=_+)FdYo5ck3m?Z-d$PXQyo+9T*ms4d z?#F@L-j|hYAD@5jSM#cc+)hrd&1l`%`f03gtl+XsWyz`GhM*@w1BZGSbaQ{_ay77a zO06}YkBuI3YCgx9=>P2GFO!pX-r-C^FGg3JF#hyKO6IKlvgreQ4f%VBc~QMN`NG?_^vfs9?^X1$YQCEf*_Nl- zUhf!x_>ceNuCRtDF0TV>y8^;vzUhs2k0N^p%h=Bl-`>UTp~{3ut(*CNj+vs>`@wf{ zkL{}_Mvb0Fr9RPC1Qdr>YU-~Izc^SrdZ<3ZJg@T8*ul2Czt5@KM_XLWK}OvFGCt(` zPUr5GmKUA(U*8G1)1?u%nsMFrtJfQ9XG3az#m0pbxnb0?SIHZ@Cn^Yw0PL{ar;y?N zYP=uw@b%*GF02Y>{L8kx<*6fISN>y={-tiLeMocc!BFbO`=$4(o;FoQ;d8!>2I8nY zhu155-5mCAetSvf?OSD>f`8fKjfd5(lpav;9Zo!vzII--NsF$B!AYa!)WnH2`$HS# z4I6e!Ij;bHaG6im+y-o|83Wd0{CXj#qt9Y%N|Tr4PAfjp82?*Be$tTNWC#9yq9b&hw1TLI_P?OJ}1j4d_8v8|0Lx75iQjrXbmS*a~E zZX{=Sbfli|=s?zK5o@G4o4(7%$v3P2;Ol6iW9-^aHN%qi7|;yrNE)P zsv~@xs25(;3%V2k`vp~S19r9d@}rVDQ!lN$5J@3q!D4a)`Hxk>0DfK2#=qzaZo5u! zq%(`eV1sW0DucXhN;`P37IvC^+L|+20Yc1?%4Tv|WGb6Kg$a|+WI2H^TB@K5z#*9( z!K*oRI~PzfHfHjmTRsBC|A`AaB1l|+{VFp$c2|af)$b9H&VB0&Q3>O@d3$(9T-Tn6_%iak z&4hv1i*9#GTWs#H)hhqh@QnFp>X%iajg>wj5x0-Om|ro)c&ace&b&Z=#c)OSB0rTq7z2>f%-$t$H(NuLcSO%8bRloQe7bElMJH-~Fg{cnA9?7`R)L+@&)>kWI@8-5_MtOm%TW*fI%a({k zaVh3zfrYloO>bqCH^0xCDc^UM)|MHX*PKAO`_O|s9@hS0+hGrXt%g&nvm6Q!Y`J^Z z^Q!8cgB+{$c_gRKyfxT*bon!*)8_P~r-hsnSA#b_o1g5qz5mDT8^s^mdXH&pcgkeB zpF-cXH+g)vsM5P~%mJM)qlcZB`O)%{cE;S>(#ky_zL8GIj61ID-c+A)By$J)QdhY- zq1mlref%iC(4Sp*4R_}8&Tepja&)<8f+nS$JsJPm1|J<86+JVn` zDG!smh?pB1j~~c>{Hxj4zD!sc9_QzF205{H8Kld zxmxI-OIYyjwmsdbHctVmA=@s?^4f0mA%}9$MIUQu(;)Rm2|rYrvLZ(Iv5Ed~v#;2u z&W_p8w#v65G_7csM(D#1{2i%;!Pte*u6LEKn!mu^P~+JZixVqGDi>@#?ABpr5!$2P z(xf%)AysJ;S9}v4HhLjWR=##`_7bMI_5fzX`lF3=io!z^K9M%HI9WlK~^_&ft2C6#Z=PmM|zqhFp z?R9)__StKn^#@@LWi?xOq|>|OhoyY?dA7)=ygjw^CGLIvp4Hp~f2m>_u{}kx`UgBb zBOher*UIF&XP)o<+gDoiswQ4}?wO`fX%ZGHD^BT$FSD8D$4q2o~CdjL>4l<1%(h+ycTopusTI|-(p z1k+A}X(z$7lVI9OFzqCmb`nfG3I0c&1OQ5O|D56_0K_3?NjCv>Ta|PZ0OE)mbbbAQ zcmn_^%JzT69l#gvzs(;I1OvmwKX?(eMP7uT+eA&|0GO!!bAe4}h?@aj1Re~M69{mL zF=#Xbk4EX>Kwr%y1858ar;Ea3!DT_yg1Sg!5|~J_ zVoWRp876@WtNxdL#2^xk?i!s!H>5=?3aeiQHm<*A9_){x$z$;5gGC*vo|OmYvVax=+X z=+lD#+yqnKngX$*ym31!k7G^UC0bE&3tUn-K1X~&WC@ZIL6jVsOo$greTfek$Ovpn zEPpG8H28grUY07+9oQ?$F0g29vDMo6}TatJJ5ux67IPF)5Y@S6xY z^r?feFMlUYHEV&IOu!Fc=u985n}mLNpiD3n=v;vboOsY*I1Y=|!NR@gh%o4w=C?3J zn63`Efq%qspwfQ82$-Mx>ELw0<9%vB9nksqGe!V+;naRu)X)8}C|%G{r}o3+aX-<6 z{D438(*>P>Ka3@y&_B&fKw-h7Y04Y`fY$*J%pWn_kMsaQ7xfc{27b~3fJS4$Ei#oJ z8V!0Pf5db!Khwive_SH~jRSp`KaR!!Vyv#DPB|eMLN+!sE|Q{R>tOlrxD-80384We!sQK%-;Mz049s{V*mgE literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/Contents.json new file mode 100644 index 0000000000..8baec95c43 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "location.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/location.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Location.imageset/location.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a14daef5b6dd9ecdb3733fa1e75fc9298558473d GIT binary patch literal 5782 zcma)Ac|26#`zL9c7OhHBH`-L@&NT}o$sSo6OHz?$xfo_MOC}Me^`n(6Awr9!e5gd0 ziV7cED3z^LTBH<;lJdQGHlzBzUcdVX=e*Bz-p_KL=gxi30*bY*0faTeEQmlJ3NCg#Lgb0=gm)@_=q4ns6%*20%|IM;YWUnLEKkDuXJdBA}TWMj+(F zR5r$RrI<&h2f{*t2KzBND|B@MCS!%}I-(QKiDw1-Gwnk7uv>_;J3S*djVlr&rb^wD zDPYhQ{5%n#C1GdKL6`-zVUAD$LRbhKz60?>v4tbRN_@c5xol8Oii0b#d6_!-LAu5FxW{ctfTb0rliK^kuQgf7|E~S^atc1z}&tv$C zsA$qCoi3HhWJ^v!vIuenAd{gKPT3X{9+fXNgG|9;b4iH*YJwC*atcX8P?3emM3KZW z2eBg<%~E6}OL1g`77PY05^3ca85*PO5)`jM(Ry+gu?4_J0H-)+$zgBwR-VfyptPze zR6dek?tBsEPEoSR;^|12b$R2L+ z%)Fwg=HnF;eoPd)-_q{YoU*=Tkn*Esns{J5HZOTbS+i%`t1+qO37XooYAg$MR7}ag zmTQJp6i=I@p;ESXez@O&mjPtwk+jTyGEfr}gh`Fr!6TLR=h`!AyOzR1wV}V5T2bGd zNA4<`ywGp;H#;2{QoPQ3+Ilm6%eZoqw-1t+Q#}|)u zYt>2E0gM^#0xUT-ifJ|Kh!#T)nzyb}d&3BItD}_h(=^7;8+%!`anyA4+Z3|9dcDO; ztG6ek9uPA%u4x=JpZdV(!J?V!G1OVvW3|iTa8r9D)LJRx>9aM?mUpyziH*EQtt&s< z>ibPMRBcYg>CX=0S?ZMe$1tl$-!_L_mbn8%8Ku!tO392Z;s_#C5en-smi%|CBfaZ+e+bVP7d=~jE3HSIFH*ji%#ZAhN(>Gk6o}#4joT+xy z4M(&5FU-tLNcYSXyLKhMESTb4MXB1j|Ln2zLdW*#y2aCN>ND~(z21`oCVVv%9oTbP ztM=(->kXKt zNm%yI=kq2}T2|2#AEM6{7m@kbm|5O;HyYTpb2daZ>WMC2JJ-+uy6kKD`}q1rGwL)= zz&31+kJ$Hx+62#XcRf#f$sOom(yWJx8xl(snTex`Ak#VEoPS~9f`C|mk-w9_+ZFFC z>WvE;XI%Dq5ZgZI3nN6UB+2Y_M%t^hdbQ{3+Ut+k66?Ivk}{eyf7l()taudlaA|Ev zT~ghX$39utEv|1G+@X3if_Y>!@5afB){?ZN)Pffi%Qee`^w#R-*P3L6WbC~&jc)Wx z_$uI4(L&FuXY8Y^=EXFf`S;uj=1%7Bb_4v=nrDuiw^U}|pH1)d#}aZ#b7@Dk<{WUe zT|vKPd7HN1=8#R)?WGQ3)r+f3;#S1@T=);r_ zFYdCz?)ZMN?pm%lH2ws+g^8G9Y{mg$jfoA-=SnSQ9XW7h9Y4VeJ!-^Eu9&!nPkAm~}7l5|oheIUxp0CGSWMxF=k;Jl}B3 zKh-biw3fCN_N*394V|$a8r+)f;1$#?E_N6w{kDJP)m?SF>{T5oSn-K>@#6ViVXm9& zx=uB;eQvumEp)Zxf8?}ioc+@iS+R*H8smNA;^G%N1+RXdYPJ9~sovLI>%8HH+l01N zd^g&%2CP<<@NRbHz>(>3BGN`^V?vnVLVKfkU}{d!`o32oUqU+jFHSJg&gaZ*c$b?S zF!i$j7Plw9C3g#xD)PT^$holvL}mw<>_NUw=3d>+4Xm!OX^CEbttEI{Sc+H5Vy^$* zoAKf>5z$=Af zMtQNm*7KZ8;rZ^L^PZ*sD(~E@eaL@~zHxVZX6w6>CC{_o1eCw8qd%n|uSluiRsUt6 zav=AjM@jz4-s+$iLGAlnr?!YDibRWu&YJb*U!(i?yVaiM47PoB3slQU%W^rL+e$Dt zApd;%HX(KN{gKJ-Ce@}*pQCPqu}+W94ESblW%sx{SVmnY=3V)eJXm;<^fv#DkHPj8 z&n`aP6twAksLSYFy{q)zvTNfWo?xDcnehrdwB?|0l`-)UMDx{!0-^E>SW+*p0Q zs(9tJ!OT#2;C=kcmce53bcooy;Y&zwPMJ{v_t5n#VNFCG!q0Es{}mnY`#$%PS@O5a zfu}wC0}p$SXWuWl5BoTlUJje^t)EANxAZR8pxx~Ct^IgG=i^5$()hq@Ggcnbv)6nG z-#ZkWn7m|ityP_|m)Qx6_~WsINo)467-L?&Ma6w?Xw*DRVtCEAJhDY=s(Sdk;F*Pt zO@S3xJp+g;HB1%CHp7u!0?326_-7FrxAS{Y=wzRLETZF$`%}ieI{I_m))BeDTDuuz z+QYRU4wm*@@7S37yf`-@)gYw=?;J*DPeDKt`L-H03U=?x9Xvl<$}%4L*t72)b%>IcWv>iy+o zm#FysG(&lfVV=*NFjxO6I*dvT)rF9CBl-H(+UDm z7FXnBSNVI_c-S6UUrLq<%DYVv*=*&8LI2SO7|?<*WcpI+Lcr3=3KN7uS}w^0;N$}X z#YnMcge6Lah;ku1duXRZOfeA9IT*zrLj@nQ2f~sFh7g_v455&M6e7u2l`uoOZaQWN zHNrwTBV!T~AY+Y4Mkt>`i9)Xep<{?xL%g9e2?@E}e#Jn+q(C4gjYFWqG&~khL{t-$ zJW!|{a*B@eABq5Cw=8~a#1vx!9wHb42uMKsaI!H#kgq}nEJP$36Y)xrk}*SaI5~-e zjV$GW0EI0w1P9PDWGO8HiI&U`2&XiX7(@b;FeRl*sLVPv=n^vts1Gtih1wwq4S_F) zgK@#wAer`;azPVS+8dGxBt;!SI0cLrf&-I*Hir;;1%sB0v`e$%ia0_5lFj5zp&u-e zc53pZzy`bP@k z70}Q~u42eExvf;10J$%c&D?~15nU*?Lm=;fk>ckF(d!cct#8x>r4|<&>ZnndC;)^u z({elA5Cm!OW$Y9`S={8hC09~Xoi@l7&2P-ZyK)CK>XJJyMbr^xlDC$O4pC;!rHjy; zp8ubM;qAH9YqW`XhQ&e$c&p+(hgJY(=Oh+M0EI=;@Jc;GnOwPC)E4D<4ZW1ncsWt| zf%Y6zXPLMY-at1KEMVeaj8#_RfaWc?@2?xV`3Lo}`k(&oJJ5VxfrhvzyZbgFN zj^0!KMx;#K?p{Y$4)E$WM=auaHk=vS2<2%?*2Nq<$6~;z(XNBSXBgk^b59BW0v zzS=02HOjZrqNHe1p3i4y%nbVee$VrIJV-0Pluj`?IuYXcBT zM9dF|J_HD$0S?s<0RYCv0Lq@h_Tl>i7zlKRAm~H62&nw6feZlU?qDy0Tt#&U2A@Kw z@F@^zVuIlDxeQ7G!g!@HkV5lk@Bu2rhsj={rw1_UEA-ak9ncPe77SmeO$e9a65{Ae z3-PCs=z1$n5XM3yVL)I2L=6xIu-H5!;R-zpokL|9L1h?5>6yUnap~Sh&X(4aPEc)y zo-dytXoNxq2L~gAu}BWr2L+NyBorEh!e9)b9tOOvY(7P3z~|EDGCag`UuW&hVxPSbRN` zMdku3mBms88zP1Pw~J7$6oq$_qac6> zYy{BKMHVgfMo;;=q=FLfDKdo%8J8=U!GQWeyK0awZU|jyX&GELg%52?OU4!^jp4k? zTuc*X&4k+klr;-#wq(#abeIzKNw+qhK$IYk09HJUL^NUY1x`2 zV<%MaCIuC1Fx#FhhgAgc?%@Q_F1QxaoLD*e=M=u{Ev;Vl>FY}e$UjTfg#D9{1YWaop41~xKiM_t{Yn4cAHK^=-u?Yp*#UlK47Z;OrdC(Fo>Vf{rA<3wC!jLk30QJw9MfW4lm=Z1)LmDlwPB31#WC_E zwW$+yClo3+j+<$En@n<5t~Xn0@%nVcLwx4ct5YLQXFT+JxNx>|G(|IKf>wDPdPZ-! zQX5$~bI#Or74OV>nhH*d4JOjRniI1_+%&4R3^`hL98Bs+Z1$K<_au9%-lac zm5}<`DI?R*RVjON{qC!~kEbngnp^9Ro9VC$`|!T+$}b4qtdmDt_aH6f)7P9%s%?3* z{Eg}twI56O?W(W!T)+;e%4p84d|$iN7+b%O4a>5&JJx5!kzpr!eT zpP81}huVZ%=pEzR9y#;RJVoZjti${h{8*g%4;weVq~q&5d<*uJB!wn7+m@}_Zjnl! zw74r~(V>KbBb& zw`itSeR@Hr$6JEmc^e`c z^#z4jvwm>DF8f;XHoku0tU7fgR0r~|m(aUiX|j8TtG+v}^bQ!Ar1|K?h7)Bcm?y^L zQA|g_EZ-~s^ZjCd1-=fxE|)zoD>u$>oK@)cFt$_Y3q3@mG|40*J@w@|{o1U$&ice! ze4S@%QhHP7Pn)Bem5(DHEvaR>XPbzRx+H>zA`H zH#X;2E-$AkXP^MQ+}`N=tl86Yea9u=p0p=cc>(uW-;4GKd~9&~5ZCzO;=6*M)Q_7{ z1)Pg1fe(WZ1ZDDPQ|l7U?wY?^yXtWIxtHFRTPlw__Bv9}VI6lEVUwei*BBi|5jNcQ z^0*{?Z1r^SOXq*|1R2-v6zd3LuXYv(HD|Y+y87-)PqTkZ%C-dIypZJ2!he|mEdI>; z9QuGu4WJ7`QcFThKbMA-#+IxT#&28MTl@83Ushk@=gU2wADcS&cTfD(^p1Gz37yv< zc)xhZ_<_jZEs7oCQQ@D%&)M0>ABZb7*c<-?)$-SucFb-@Im2Kl5T#v=`s5VlL=JhF zSCe0}J8s>w9qKIY65Zm3do&9cbkM7=ksmxvd)Pkn&eC~Hua1He!upq+xa}lO<~(3`!(;M zxCAC7d`gH0Q%F0L{qFOZEib}sIaKpPr>(5xO3!NHjL=!z!GW#Gb{;{^!VW`WkCm?JDHztJfayuJ6{ZsOK z*7v;(`4ZCg07|(piA-R!mlQ@6v z<@nds-)%X*{Ax?^wy;wkrxtO1_xBvpUtYUhdHJ?rgGNE%)2E@Eet#WveplVD2YZ{# z->q~XAoo_h?<#I7wd%Fn-?zC>rEgM~plMs0d%n=K`%PKK&l7fU=6|2h>C0=_k^8vl zOO@ga#cD-n!|{SAyMK)Do73-ciflq|UtjB<<#grz=U=+5slO|__G=yS)md!#xihov zP3e;7*{}R6-qz8c(Gn|9)$ghQ(qGk|f5EM^=yY#QP9yp%E)iS85)p&y?C9FGXBBX3gWt_V!pUp*OIo=VzpZ;5t|d8KZ}|1( zvH$a?(3*C)cL9}60bvn8jefNJK(%&X<^6;F*%i5yp%k`z>9~)Rt)|+3?Cy$uzNT#8 zhuN#$iR}hc!KpoS7aK1L%jquuaj-htI;-?c|AD7f_s;3A*}v*aI%>y*Z@+rnyRd&> zs(an|;N6{oJ538i7qG9pf2Y1@G}a_mm#kD9$P8ulzl~qnGEhRA3F3Pwf7Y|O|4~n3&V%9y3@`h#!m!ETegqO2TY8sI zrQYoIuKkd!{o#WKVUqvVSu2m|+p0fe+&>a~B6*2wtwo)ohsjB^_{7+Oq%{XusF>Dl zQE;6b8lj6gvE%Nx0+Lx(i!LzT>H~CloD;09XrQd;`n!!O&r9+XQVdSL!{P&SZKkCF zXD{ugmf2Jt6Wp>rwOspHPUT_OWA1=0cuwE3Zc6y!Vk-jA&WwIbpLXi*{W5T@!n!dx z;?o)$60;i`P*uyw6$<>-zm+3ZYW4qc*~Lq*pBVW1ICv{1Na2kD%GScdoWf(!0r;-! z40uX=5v9H0JMq6?P{lW3_cc^M28}=T(rO5klt8Pv96_MSSrrcu)x~Y1i>~;#>jI!$ zxfC`J@(CDh+SVcM(7jsHY0$N`=5PZfm@|XN5pZb?o@fdS4vWKefjnA?^w1; z^QNq~zcaQwV&?s7KlptdD}}Z{B`GE(r?iad^@RQF^~cDWTIvgazN-xDd44bN>FWhc z?ay01PHMV8AJy6z_4_oYhQ9uNo!tkdXOGu~f-Sn)iCG`=KAfGyY9tAj3(a~v8q+d9sv1!A{ zQiAap(yioeZkjVscP+EtqhPjZjH$;yZ_SCFkN3=MRoZ1a=Z!ult_T=&&iY%_gb9cJ z1?%P|O}HQ1mY2|cNw1cCv-?1{PV$NRm|LvmmsiY)uO3-sgGp(}Iw3r5+bu zQXJ-aYvPT9bqUmr)hjGorzxFKaSUbo9%^4bJxAwqrRmwHCQMb8pxiCw2=A?HR}=FL z`(G@%y|z$c@4RCH`z|`i*v8hfaUWN!TPU&4UhdD~m(9A9b8-gn?3wq07D25%CRKy) zmZ$&hFw^4XWb6gY7s9@M17l}Dj){Ik!oN1Gv#BRw!S6UF(}E>`FMs0j#`vD`lgTRy z9=Z?CBu+d;eGJ|l|M%F_7u0`!>hc`la)aD?lxr5JZPSEuIPKdW;=9#u{BgdY(xxfh zp3yO}ex@1$x*g$}k>@A2dR{4anyH!h>gI)#i}j35hur(s_$e3PTTBaba6oiz>gm-) zv7hrD^wduk9_!IuU#4o}@7gVBiFPQBxfgQry2<2a7|xrvcD3YFI$vl`X|En?<-bwF zK74laaP3w9w7MihNxtKZteC&hh23|^SRX6$lH0L~+b)$%O`r2*_dgK`%8Is10>Y&w za{0t5XZjL8h9{0KHH<0C_4}L=RSc8qt5N9b35wXjykua&h4mkJL=qyI=BC$&Mk}~bfJGW&FlYh+z>ts_ zED?>vLqqXMEJ(uP3;~%tPefvfBmzWO27w?FBUXhBgQk^oFGE=f8T&F+#=jgU6+oUJ zISHhU%S4cCmC7Km2s!FfjmcqB#mX?53^arsDv=iiSaRqe6eCriOa_UXiI8&T7?&=G zbcG~~Mv_}e$>PH6BGZ`62&C*wAsP2l2wE2DVo5<3Ldv@old>*Fqy{3-#~|ZUc4fvk z*d(<{Inkv=M@}=6l|ha{NO0*unQSbCFTxwaMmQn<;C_n^AhG{V0%bvKa5TC+8eJZZ zE{{f+N2AN5(dE(T@@RBNC#_3k`WGypFL!u zYm@~DShyhIUo;*9Wya+*y(u(4VD4an2tvS$^?_hW|CSuc8L@)UKRG0_&>tQxPflb2Bmc4l85u-vFoS~ZBhj2>IpYoD8XZpdng5&LleL$@&CCAhWeUfvEh7YM~0AZ$Ji=eQCSNhFPw-Y5g@e$ zd5K_3&KwTRi@d&M2MlZk4iv7xE!&$T+VF4%N?L&yfgw922LH7I5ZRnWFgGS6n877; z8Qu&yr$mw=V#(wMvM5_2CAh)~{lf@Jry+AWbO8;@%wA;8^a-FW7SojOZj^ZNU{1e$ zDBw=DB;j$u!nN_0XRip(pR(-hMKilO%~8UY_K>!P&YaK2qBpeXy|bTA%4Vz ze*y$N9*YOOCrdH-m=?9LrI;ZW+Q7px0;IHI7zsC`AC`cHj`yMcu+Zb%NQ?yS!lC_e zMCh?@1O`3y4a0~y+z4KXIKl`yh|v4r@Ueyj=%sNOJwqbA8Q>2X)ByO<74 zs2_18W{8Fk+hJp&mzj|mc0@l68vZ*tbSwsg8Llf3gN0AAVf}D_7>kFVJ*EBlTndxL z;3DAdVrvPV0*f#p#sf{n;Be^0Lo1@A6a{ZO00Zwc(J_j0VTLeZgMzG#$A?ZMk%@sA OLy&}+Ki_JN^?v~8eNxf@ literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/Contents.json new file mode 100644 index 0000000000..777b5e9da4 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "member.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/member.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Member.imageset/member.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c85285bff59570366ebf80a367e4cca4a883784f GIT binary patch literal 5797 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 ShUFVWCQ^x*MT>0L+5HbDoh-Bf literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/MessageEffect.imageset/Bubble-1.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/MessageEffect.imageset/Bubble-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9ba2353f5e002c99f622bcfe8e7c51acaf11171c GIT binary patch literal 17893 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 Y0Y-n8Wd6!Euy4kzT4t|01AL;wg3PC literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/Contents.json new file mode 100644 index 0000000000..ece026d708 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "multiple.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/multiple.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Multiple.imageset/multiple.pdf new file mode 100644 index 0000000000000000000000000000000000000000..53d53b3d4786ca87d97306cb340d3b5d813a0c05 GIT binary patch literal 6491 zcma)Ac|4R|*d}WesT4(+s6-fp8Edjfmc~wz#>`+CGsDat~c-}gO#@SOXcbKUDX&pp>Mgoc(lR6-VX%olh-P_QJJVCx71 zgO!xP5Iqdup6mdY0)$3@2zVgI6kGCTA_fex(AV1(nXHfXF=QkfNk#%fWn~bF?217; zgOpBFiAarZ^eI7en7*VwQ61xe)%I}37<(9)pgf#V@@T=+${;1G z0@a!544{Fj&Nw_tfqF_1i6+=$6o7Y{7$T@lGtU)mr(mR^wYdlwof32)lZgrth`YPH zguAo^!POoDm6w-?NJ>GZq{M+0;-t%XGLkBeCkd@%Y@%pjNGMkd1_=hFp zFd|A2niDweudN%B-_VpGe`}#F`l-Z1C4 zsBgfpyZoDUGw?*T9R*1%n%}aE#A2P-Gq64h!IL0Z^l#zZ+@e54x{{TlN{~Os>mmM6 z6E=iEO#wv+*{(uhuwBF$JYa`AtxAEn%@PORXa@#FJ0u$?M^;LXHoq>F-j>qNlL5t< z1ik>4+)nd)vM*TwKHeNaHck}+=?avWi7N&JtO3r|7Ou=6xIk(#u6QIFIF=e1H!KQc zbVh9h6QYHs&4D3WIAB@>gCd}5NWimwxM6VFO^E?mdPB>mYt-1n2rPoLo2#DSJ{KZR zPj6XWaZNvhF8`W%qQ5ULdEY%c8GS3}&ky+~FJs#UT62F|ZMt29#pdsm+%K9?-lFc~}4fKA# zdB&ZM0rD=zhp>Ymn7nJ;17-;B2lGpV`ySM@FYhLs)bh@8?XxUjLoAo?r>?L`K3R2ET-sL|(alsklE!S7&c zJkklqDSudtWj)kD=bWAGyjByx=G6EG9X}ho1Dvo+Wk&q5#(jAK^(Op56%B)1%pJa5 ztqgU(^f+GzBJ)Hg??Qme9*|&_V#N9H!(uqt3 z0l|ZyVtRZ4y(HViOKfF~#)EuOeqdG>L$K&WW~@5%okM5_=n?Y<-t#+{)bAqL_H*n! zva^7`hxvfYON6`$Q>W@_^^wHjR#-a6bB+)d&Q_aN;e$+JNS^GSywwqsoO8Ymg9z$@ z!yIWfUk0tHvR2IIHEDx(3xZw@{JyD^x>Oz}#L@epvn(%FpoU^5U{TP4>-&=6Nz;a@ z>5e80ne3eb&jaoyA2$?evyeHUe@43Xjl=0#kPLU+?SViEjmVU9i7{>cql%+@XZJ6i zyyo9l8HJ3M#OW~}=MTHuSaaXj5vm{66h+^B@E<;|VACodB;S)O@3nD)Zl{X&c(V2e zeXE^Ap2>SFci4d4{u-%@>64rsRD#2Ok2}bnzAKcs#=A0XvWLoB#-R*?)Q$}5P6QU+&^(MDnG{P zOo_&2y+!bu@TYfBO;f}0CesF3(~qX|d%_L84W13T5jMg$qCRFnBUT>nP_07vrB)ig ze~3sT8X&ci=kI1ZJz zvQwD5ol5~SEYWO3wfo4xZc$?*WPvKLgNDTLyp28|T@j6qW`RMl296mHB~Hg2!yPCN z`VPj0)`d(x$9lL6Y+A#|_-D}`hstA=Q&W^_0A^qh3booYku@qzSujLh?R-;gXKwgk;NZ(*KpOi2$>2MwJD@{q+GAt zkCGiC4>=B%9=G6pq;s$FNLcTqCmC^Af9%yUaq0KX1A3R-8nRmsqb3|AWOCsGws#Kk z-_p}Mg{oD1X?sKSwr23lle*qbCz{G5PDR+{e9gX>#Khm_r$y_OFx{Mcji zzRz02a`>skO!7O;T<6!g#iHxZ-@6UJMf7}o@+E)S_WLDBKH*6MvDH1uC7pcGwmnL< zS?wRwGq+OGhV1Iy>O&3Y3~bY+4SW=&W5Z(4DTG4c=bLS;o>DtByRHryeHNsomev*X zQ^KE*6}$9h_QyZ}QZm!$)SuuPMLp^fJ5BwJ{VXz#oAzpPwRJ{QJd(=1%BRac%EQad zsga(i=h}YUn9rDhFkLuf{k?bW`qZw;-Y>GX@6e=f%2yE|mbH+d{q)1WcYLRP({%MB zgCYvVuSPCG`k&2ylnTI9W5oTycle4SlZJN;5gx6%O?gcL5$0k(TsXe6BgMjjJo(3m z(G8`Dme%Cfj|b{b9zFTIdblRJX1sdfy608y>$*Z>LU66VAd}Gj8bw+kldF>*Qy!Un zG5C#my3E;Bqjt|!tiA|mp*zWdn^3ChPndphk@4rNK5eTpxbN@ZX=l$-U-tkuPCkPJLXKo8A zwka|xdb*4EP>5Y!UKfA<*pcPm?%#5?ulmbri#5bt&DV+I{&LMZ&Fk}*=2_?2CMdn0 z$rgE3>#5O-)a7X1(PN9p2=lq!J~2Zla&ghi zkR?y(8EUTj`L4Hd*tjt6A;@jFoH3q?{Vrqp`RR#)Ci=+Si&G`88TBb6)uxeI-@0NS z$CbV*8*r`psWqct8l(TBd-Yw1(}!NKrjKS{oa=j?y@Qt(mim_<15?jQpCy(jLi{ic z-T^0>zq4y{=zO1=2>EcXVr@zFpMVD+#W|oHGXf$?qTbn4#Y;CD!?ZHWXIFx{8eXRz zId}a`NeaZLWnp#3VnX`W)Ao^`mM?YAb-lt~$MG*L7Hz*`dYT?ImYv?emhOdF8IL^O zzg8xH01BHsKkG4_WrJ`x%jyw=)m2TZ&sS zHhL8W-s}rYL^#H6PLad5YR<0hTMpm1Z-?M)PS3ed-xkv0dW(5;J3Km8bZ?t_yPTDB zoNDBQ@U@t8H%_stG`Z242zUh_0Y&>Xd*;il4kj@9n7bb=L0@#Le`etbqie>}Av~oR zr$|sU;)&H#c}f387q7iGK{%LRWy?O+p}VWQF7L<#n`(2jj`{GuU8|UR@#R9ohqAn= z1o8MU(lF;7?L7(LM^CTXR%kcerPS)gEArjVuD@k+*8;2qO%pO`-|c&=SQAdtRYlhd zq2in0R6rT&%y(2qCU9Q;=*VY(GKH|V3H?X23)^l#rD*NrR#yt&7GD5E zbkx<=kR%KmOzTyRz}DNVWVct*dSZ0~j^Jtx{7S^E|KwDMf@vs5K(qUMzbp60p8vC{ zm8U`c*~`*nBK05l!S@8tE4;JXxV^y1a3DENTx4_4<1G;k(`AAw5mF z&=F>8fs`=|?kWFJ$M>ku4?pnbL_irsdhEFFvxMTtGU8^$IO2;;L`~Uk>8jF&-FBtl zT#Q{PjF95ToHiPN;@MwWmLQ&1SDV-zT{a>V*J&aqiWRs#*H>tRFj%%+ZsSfD$+{$OR%)!`G8osjiGT36d7GK?@Go%lQ;Q73R(ch~gGV0SsCx)HJ zjXU0&bZSziumQ?>X<5-rmwD9QSH9#(wO0{WiWaS*v(#eVcO{FTZpg9uOEs}&`I(yl zIIFShW5m@1(?q;=mg$gY7N1uEYL}6f;VyGGQwcruoIa#<`$S2U6%lojSrFY8L zU$%cwxN}e*ZgTYX<0Ex~`+1^|J1|=+@Sc7qH_$iQW8%EKg$?PeqFKSbZz7k%COMm_ zo4ZS0qFgC0w_`$cAmc;TktW-7nv%yD;^Pou*oe<3Wx`_JL3cx?ueTSx0-H{lo*BMK zJ>0tSaOL3IO9 zIsfm7)3+slb{}+ONd~J}z6RZjWVnyb5S6&q;n~aH zHsSX4qhIt$$M6af(mtKQilT?ZD_Op`65@a2E7uv;c<*nFd zA0q0TGshg}$>uLPcvClhN3tx)G>GNqh$(re1C<=K*?OWgMYV(ki4ukn;=!vf*$Da}&MI4PMzRT`Zmiyf7 zNEiZtZ+_zikDAPXg{ppV9+S{;RD(Dsc1FQ^B#=Y**!)?ZN3UAj&wii$#QbV8y+hCQ z3`MnyPcgsuP*z5*HLOl)5!3CNRRS$VF(vPG>v9}eyqtPtWLF$vk6Pbtq10sbY)V{s z-RQU53aZ}@J3iJvJQ4-E^rd9-*6R30ExaasEx!{ucjf-^x%}Rv36CoHlsenxr%z~I z9Z+n5l^}}Ax0D)!Kbh;CPm{Vk8uFEuH|KDCEQh{Vdmp6t*|+&`=0AN_IkbZZx&PzJ zr(LNV{03B73ch`rLnXK6wA)-4i>5IgP#TX&yYn}w26X}jPXJ%+S#MQ?pR z)^}~_pkb-v@dPq}wuQ36g@D&JZqboO7!rZvio%eldfQU*%d{<9k+vj&^xPa7lU*q&@`fFxEgA>-g5k+D4iHTHNNs*~wq5!~3(;Ic zfT1)-Xv`Hv**&(CIjWJ+SPz2vGsAK$2i69JEo`w7+0D3?>Z& z+p%xUpg~C=)yCShTj4Oy%8#)@m`8gpa zDQhJuDwf^? CU_d$m literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/Contents.json new file mode 100644 index 0000000000..e931b16c1a --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "speaker.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/speaker.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoAds.imageset/speaker.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d262bb944ed2a3417d0405e7a6de52653580ca76 GIT binary patch literal 5984 zcma)Ac|25K*r(DmEm9JR29;Ed!3;x|?6Qp|QKVTehFO?}2@^%Dr6RisEr|T6WUr|3 zBU`B~m7=mlS+XVGduI^!dq3}c|G1xfzUQ3pvz+HS_nc=3R^Lz_sh|qm5ePmoBwP_r z!@I-a@O}H>2s41{%5;M(fuJ=Afe*rlg=Zf31mFmJbF*2;dsE6MAej*hLebz(uYvyisqhrfE&r!mk!wYTG$eNJqQ@0w6+#( zA6uPG@uYxka5jZZWvH_?rEx?W9#99rAs8X81*u0Tx~N<08_o^_Tbj~tOs1zg0^#H1 zqu`^gK%=`NkQfXGp{RsVQj!Np$TN;pnK-sQl_A6Bm}Sui7z8@WlS!gc;SehhPh&Ab zRe9#k3Lp~Z`8`>5GMAl5KmcTb0#KO@1X2NsSUdx?Vtxvhp}@64fk2}m*f>vcxFXLE z$f^5?1a&5fNd_Rpcn{aS{bc5EWL8-+2~tR%jH9}0O0(sOfD4XAW=d=AVt4{L4}dPW z4*}UgCjFktLl%(jL;NWa(g31l;avYzLKo-yn`&MOtz7{1e-*W03Rl!(W}Z3=oX(@? zTD$nUtmy<@DfK=NfqknqRR6qlui~b3Il!wt~kHS z+_gU9w6HzfK=6_Zi=%_lWlIMDa15AMbG#~xc)_Iw=u{jN%u0R0n?wMtjdXdO2tyLo z2S*r^!ESwkKqEp-;4`1wD75M`%uoihnd9zoZiH?FG)XBX80~qm+C9hZ>)Tpdd%6>F}7?~br8m@ zK#bJ!UVu~K6EsZo5zQ+OX^*R1`*R)B_KEnY$Oebf8SKweVfNG-g}lVgqyIEXEM%g6S#Yt?PS*qD#u8TO7zqcwgO;3bbcOlGYBe$33hI&-)l$uHvex^V z#Fb)Ie3Yy#%1lMlj7N1HF=^!D5_s}zoniSq`d2X9^lGT0I{Fr&%U=eHG%S4<$WIPj z>bZR2k@$F!&U%>iWA{e_tKb6XbVT0p<)7Mz4~p zeI1T$RmbIrDsFYSj7$43l?=S`-ITpW0K5GP?7)hrI!LR%w(#AsO=mZxpi_pdZlt^0 zF3nuq98?q(k-F1rTcf?oCUYa@hB`Ox5tz#6tKsj074&1$EUzUrzU|iN78((r+;iqs z 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoForward.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoForward.imageset/Contents.json similarity index 100% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/NoForward.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/NoForward.imageset/Contents.json diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoForward.imageset/spy.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/NoForward.imageset/spy.pdf similarity index 73% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/NoForward.imageset/spy.pdf rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/NoForward.imageset/spy.pdf index 35358aa34725aaba7324ffdefb3b21e29ef4a8be..17eff0090f9625e2ea8373d4e342b1a01d64ac86 100644 GIT binary patch delta 1714 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 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/Contents.json new file mode 100644 index 0000000000..45f609bc71 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "bell.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/bell.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Notifications.imageset/bell.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5121caf08e4a655ed50887180847c11dc80bba7d GIT binary patch literal 6519 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/Contents.json new file mode 100644 index 0000000000..7a89bd061f --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "phone.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/phone.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Phone.imageset/phone.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3adf3ee3098452d4cc5a05325a12ee983be5aef0 GIT binary patch literal 5734 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 A6#xJL literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/Contents.json new file mode 100644 index 0000000000..ae4d136d77 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "piechart.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/piechart.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Pie.imageset/piechart.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b08f634fa1242a4dcab1b951e5e538e20fec8fc3 GIT binary patch literal 5712 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/Contents.json new file mode 100644 index 0000000000..27336116c3 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "music.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/music.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Play.imageset/music.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c4c4563da897081f9ed48f9d292c2b98c4d55bd GIT binary patch literal 5782 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

W?E1Udxx=94K z-ZrdDx*Wwm8r|uTjBeavrv`Exx8$7LWqaVTT?;}XDY+DNc-Y{`bXh7#uq&DB1T`ve z0PXdX%F%iXBCi;#kKVLz{vvpc@pX-ljybCLVKT?w_Y;oX_Li4bC49>A;)pF1eN;Df zzHI5(+eK4cm>cl6hy!_1vZ2e4i8Y!{4S%awP#bpGX3Rf466O6cbZ16`pyp(T+F(uj z&E$Drhl<3{>7&kN`E9I%y(hr?^}DT9Bh~efv~cUQ^ZIo-f>@s?`pmQGbL!lBlBP48 z;l@;I?kYEY-Ko#=T&@k$Jj?kVUz2a}Ks-;aAcwMkVe~nJRso-V5Y^Q{*)kj(cTyhP z*aYm*@R+7|{4V9I*E9QC*%-?6i6v`Kq46>2qgcFxB(B6TYo|Px-Kok_b#-trdq9^V zTKt1b+Z1<%y>w;Tr+WoE50?#-cb`~GH|fw>VbIU8T6BYTR~Rr9w5Ud@^6#E^98XD3 zWxc4;hZd@-Gk2P>I}fqF)fb<%q;2r&{@&DuMNXZW$A0r+hc%3)vbbucICJ$J&kQs3 zUO4+vQu&<*t?+SC!T|Ml8XxO<5q`E^`2ml=wYr4XH&;PVO-e>X#)tAxXbuZsO7BWT zKbDb3oyjS-EH7yiYN1t2#eOorIDW{_r64s<=hd3!_ou1VP317T=O;0@i`{HOlGDLy zxyll^-|p9kp-Or3j3pZV9!5eR^zW1J9}y(z3LS2AlP%omTNuD4I<%njkm4c zq%7V}09Pc$YKBL>ch@!^ikTBd=#PD@lT>F2YDJ?Ys>77-S5g5#?*O-JW1dV<74wW zZ-*2p!JL7;&7j(p8jbi%@lJPh;-!#FZE~vr&$Hhgz7&ciN2vlBi z`$~eyZOiF*k`We7=V>5xGL(LEZ4xFr1S*~af^3a`@-r?N^5#YJ^Ag{6 zC;-||lubqlw4w1Qr)rKN6R0EkBU!nP=hutEw&>T}PZhsR z`)MlzNd}nPt&s(VL`6|H?I8aoqkwxDPoWc;Ao^9ib$4#N^o!i0y95V8=)BfXJ1qbS zz_e|l!(F!G_EYx;IlQS;4K>RcwptuMqDxGuv z|0(#BDckg#&Zn7TXcQxi_x5@IngRXp+=fLPf^Ca7!@KDb9m$+Ppxg4hSHJordb~^! zBzHr+Ghw5_p$~wj2si@_eamKQ{p8L;8yUAHw8mn*FeEq$V-60+hf%)+zlP4>0y$>!1qCzzP1j z7pe&TmtH6g_V2w)|AD6r{Z|a2DoVfkOCce!I1GuMo*IU_K>0|>%gLXW12||!$v@sV pz8t{xTm{kNx>>zo3#<=@ehk3bkSRbBZyXFv9tL3-7uP$j|3AY>kmdjY literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/Contents.json new file mode 100644 index 0000000000..512a55f715 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "premium.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/premium.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Premium.imageset/premium.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d310638c1f1327b7f8f28b16dbb9b8653dadf118 GIT binary patch literal 5929 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 D$6P03 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/Contents.json new file mode 100644 index 0000000000..c6b56e0023 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "lock.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/lock.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Privacy.imageset/lock.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4658b55174a6e00bfa0f3d90928b0b59f84b057c GIT binary patch literal 5635 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 U7MR1_qd_YwU}4+0>mAbnAMxj(tpET3 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/Contents.json new file mode 100644 index 0000000000..0e9b66a206 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "profile.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/profile.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Profile.imageset/profile.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fe1b2c1638d2a508b02ebda27437e183ace6e9a3 GIT binary patch literal 6284 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 F{s(4zBWeHu literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/Contents.json new file mode 100644 index 0000000000..f73ef9e84b --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "bookmark.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/bookmark.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/SavedMessages.imageset/bookmark.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5831e40cdb29f18370b4f71ded2a0f16e45d9ad8 GIT binary patch literal 5656 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 n5KySXA+K_i7vV?>2B1vGxFmP{f_>(xq@5TQj< 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/Contents.json new file mode 100644 index 0000000000..aa5fb57e2c --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "shuffle.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/shuffle.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Shuffle.imageset/shuffle.pdf new file mode 100644 index 0000000000000000000000000000000000000000..732e316443c053dd5a17242121752a9143a84648 GIT binary patch literal 6368 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 PL8DPf;ceUW4;cIpzPB_o literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/Contents.json new file mode 100644 index 0000000000..9eee5ba9ec --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stars.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/stars.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stars.imageset/stars.pdf new file mode 100644 index 0000000000000000000000000000000000000000..750c778e893bf8ee47979c0696fdd703d1eadcea GIT binary patch literal 5980 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 IbkO*J0DV15U;qFB literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/Contents.json new file mode 100644 index 0000000000..53ceea1638 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "stats.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/stats.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stats.imageset/stats.pdf new file mode 100644 index 0000000000000000000000000000000000000000..63139b491df54e9e6c15cfefb365467a97278dcd GIT binary patch literal 5982 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/Contents.json new file mode 100644 index 0000000000..a7f2634f5d --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "sticker.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/sticker.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Sticker.imageset/sticker.pdf new file mode 100644 index 0000000000000000000000000000000000000000..104617d67aaebf6562723aac38080f725e586795 GIT binary patch literal 6951 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 II%jnM2ktly#Q*>R literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stories.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stories.imageset/Contents.json similarity index 100% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/Stories.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/Stories.imageset/Contents.json diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stories.imageset/stories.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Stories.imageset/stories.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c4ee3480b637683b2b15a4907d5d762bd165df12 GIT binary patch literal 7016 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 F-2e(i+7|!- diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Contents.json new file mode 100644 index 0000000000..8b8f3cbb55 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Tag.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Tag.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tag.imageset/Tag.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c4c8e8289c3a7a99c03dea44e93b9fdccd8eb5e GIT binary patch literal 5938 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/Contents.json new file mode 100644 index 0000000000..ff7bc2c867 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "lamp.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/lamp.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Tips.imageset/lamp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c2e653174868ecc270b6808fef5f7dc7275249fc GIT binary patch literal 5583 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 N6x6`oWpvp1e*hoqgYEzT literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/Contents.json new file mode 100644 index 0000000000..3bc8fbe27a --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "translation.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/translation.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Translation.imageset/translation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..781aac5dcea5b201c4d8aa2c2df948cc169bff00 GIT binary patch literal 6189 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/Contents.json new file mode 100644 index 0000000000..88634a301c --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "eye.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/eye.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/View.imageset/eye.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fa51c26700e053fc749e431b6f1ae874541355e6 GIT binary patch literal 5733 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 S6lNa{N(}+Fm3NyQHvJ#h`o+uu literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/Contents.json new file mode 100644 index 0000000000..0dd6796240 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "wallpaper.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/wallpaper.pdf b/submodules/TelegramUI/Images.xcassets/Item List/Icons/Wallpaper.imageset/wallpaper.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cbd68f741396e37761b5218f761e4561b8b64474 GIT binary patch literal 6548 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�G){I1iiZ~?H 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Limits.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Item List/Icons/X2.imageset/Contents.json similarity index 100% rename from submodules/TelegramUI/Images.xcassets/Premium/Perk/Limits.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Item List/Icons/X2.imageset/Contents.json diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Away.imageset/bubble_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Away.imageset/bubble_30.pdf deleted file mode 100644 index 23cc2b43c6..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Away.imageset/bubble_30.pdf +++ /dev/null @@ -1,191 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 4.484373 cm -1.000000 1.000000 1.000000 scn -10.000000 20.135622 m -15.522848 20.135622 20.000000 16.065483 20.000000 11.044713 c -20.000000 6.023943 15.522848 1.953804 10.000000 1.953804 c -9.153261 1.953804 8.331102 2.049475 7.545889 2.229576 c -7.397357 2.263645 7.228708 2.107862 6.947171 1.847807 c -6.606689 1.533304 6.101101 1.066292 5.266314 0.598133 c -4.199766 0.000000 2.722059 0.051891 2.471971 0.156792 c -2.232201 0.257364 2.416753 0.457279 2.741760 0.809345 c -2.966608 1.052914 3.258681 1.369303 3.523984 1.775997 c -4.172771 2.770552 3.904685 3.954582 3.613619 4.167679 c -1.337573 5.834023 0.000000 8.181211 0.000000 11.044713 c -0.000000 16.065483 4.477152 20.135622 10.000000 20.135622 c -h -4.495019 14.850605 m -4.127750 14.850605 3.830019 15.148335 3.830019 15.515605 c -3.830019 15.882874 4.127750 16.180605 4.495019 16.180605 c -9.495019 16.180605 l -9.763987 16.180605 10.006470 16.018583 10.109399 15.770090 c -10.212329 15.521596 10.155434 15.235567 9.965245 15.045379 c -6.100471 11.180605 l -9.495019 11.180605 l -9.862288 11.180605 10.160019 10.882874 10.160019 10.515605 c -10.160019 10.148335 9.862288 9.850605 9.495019 9.850605 c -4.495019 9.850605 l -4.226052 9.850605 3.983569 10.012627 3.880640 10.261120 c -3.777710 10.509614 3.834605 10.795643 4.024793 10.985830 c -7.889567 14.850605 l -4.495019 14.850605 l -h -11.495019 9.850605 m -11.127749 9.850605 10.830019 10.148335 10.830019 10.515605 c -10.830019 10.882874 11.127749 11.180605 11.495019 11.180605 c -15.495020 11.180605 l -15.763987 11.180605 16.006470 11.018583 16.109400 10.770090 c -16.212328 10.521596 16.155434 10.235567 15.965245 10.045380 c -13.100471 7.180605 l -15.495020 7.180605 l -15.862289 7.180605 16.160019 6.882874 16.160019 6.515605 c -16.160019 6.148335 15.862289 5.850605 15.495020 5.850605 c -11.495019 5.850605 l -11.226052 5.850605 10.983569 6.012627 10.880639 6.261120 c -10.777710 6.509614 10.834604 6.795643 11.024794 6.985831 c -13.889567 9.850605 l -11.495019 9.850605 l -h -f* -n -Q - -endstream -endobj - -2 0 obj - 2037 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000002295 00000 n -0000002318 00000 n -0000003510 00000 n -0000003532 00000 n -0000003830 00000 n -0000003932 00000 n -0000003953 00000 n -0000004126 00000 n -0000004200 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -4260 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/linktochat.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/linktochat.pdf deleted file mode 100644 index ff94f7e126..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/ChatLinks.imageset/linktochat.pdf +++ /dev/null @@ -1,195 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 4.484375 cm -0.000000 0.000000 0.000000 scn -10.000000 20.135742 m -15.522848 20.135742 20.000000 16.065603 20.000000 11.044833 c -20.000000 6.024063 15.522848 1.953924 10.000000 1.953924 c -9.153261 1.953924 8.331102 2.049595 7.545889 2.229696 c -7.397357 2.263765 7.228708 2.107983 6.947171 1.847927 c -6.606689 1.533424 6.101101 1.066412 5.266314 0.598253 c -4.199766 0.000120 2.722059 0.052011 2.471971 0.156912 c -2.232201 0.257484 2.416753 0.457399 2.741760 0.809465 c -2.966608 1.053034 3.258681 1.369423 3.523984 1.776117 c -4.172771 2.770672 3.904685 3.954702 3.613619 4.167799 c -1.337573 5.834144 0.000000 8.181331 0.000000 11.044833 c -0.000000 16.065603 4.477152 20.135742 10.000000 20.135742 c -h -14.116262 15.129036 m -13.242537 16.002762 11.825946 16.002762 10.952220 15.129036 c -9.618887 13.795702 l -9.388043 13.564859 9.013773 13.564859 8.782929 13.795702 c -8.552086 14.026546 8.552086 14.400816 8.782929 14.631660 c -10.116262 15.964993 l -11.451675 17.300406 13.616807 17.300406 14.952219 15.964993 c -16.287632 14.629580 16.287632 12.464449 14.952219 11.129036 c -13.618887 9.795703 l -12.283474 8.460291 10.118341 8.460291 8.782929 9.795703 c -8.606529 9.972102 8.453041 10.163509 8.322783 10.366060 c -8.146202 10.640644 8.225649 11.006386 8.500233 11.182966 c -8.774817 11.359548 9.140558 11.280101 9.317140 11.005517 c -9.402049 10.873483 9.502523 10.748023 9.618887 10.631660 c -10.492613 9.757934 11.909203 9.757934 12.782929 10.631660 c -14.116262 11.964993 l -14.989988 12.838720 14.989988 14.255310 14.116262 15.129036 c -h -5.886345 6.898323 m -6.760071 6.024597 8.176661 6.024597 9.050387 6.898323 c -10.383720 8.231657 l -10.614564 8.462500 10.988834 8.462500 11.219678 8.231657 c -11.450521 8.000813 11.450521 7.626543 11.219679 7.395700 c -9.886345 6.062366 l -8.550932 4.726954 6.385800 4.726954 5.050388 6.062366 c -3.714975 7.397779 3.714975 9.562910 5.050388 10.898323 c -6.383721 12.231657 l -7.719133 13.567070 9.884266 13.567070 11.219678 12.231657 c -11.396078 12.055257 11.549566 11.863850 11.679824 11.661299 c -11.856405 11.386715 11.776958 11.020973 11.502375 10.844393 c -11.227790 10.667811 10.862049 10.747258 10.685468 11.021843 c -10.600558 11.153877 10.500084 11.279336 10.383720 11.395700 c -9.509995 12.269425 8.093405 12.269425 7.219678 11.395700 c -5.886345 10.062366 l -5.012619 9.188640 5.012619 7.772050 5.886345 6.898323 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 2424 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000002682 00000 n -0000002705 00000 n -0000003897 00000 n -0000003919 00000 n -0000004217 00000 n -0000004319 00000 n -0000004340 00000 n -0000004513 00000 n -0000004587 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -4647 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Chatbots.imageset/bots_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Chatbots.imageset/bots_30.pdf deleted file mode 100644 index 34b8eee230..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Chatbots.imageset/bots_30.pdf +++ /dev/null @@ -1,219 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 6.116440 6.694427 cm -1.000000 1.000000 1.000000 scn -9.064154 18.416666 m -13.152596 18.416666 16.466932 15.102329 16.466932 11.013888 c -16.466932 3.783070 l -16.466932 1.693737 14.773193 0.000000 12.683863 0.000000 c -0.541667 0.000000 l -0.242512 0.000000 0.000000 0.242512 0.000000 0.541666 c -0.000000 0.653757 0.034775 0.763088 0.099529 0.854584 c -1.130555 2.311378 l -1.475911 2.799352 1.661376 3.382448 1.661376 3.980268 c -1.661376 11.013888 l -1.661376 15.102329 4.975713 18.416666 9.064154 18.416666 c -h -9.064154 16.611111 m -5.873175 16.611111 3.466932 14.024311 3.466932 10.833333 c -3.466932 9.750000 l -3.466932 8.553383 4.436981 7.583333 5.633598 7.583333 c -12.494710 7.583333 l -13.691326 7.583333 14.661376 8.553383 14.661376 9.750000 c -14.661376 10.833333 l -14.661376 14.024311 12.255133 16.611111 9.064154 16.611111 c -h -f* -n -Q -q -1.000000 0.000000 -0.000000 1.000000 24.027679 10.305583 cm -1.000000 1.000000 1.000000 scn -1.263889 7.583333 m -1.961915 7.583333 2.527778 7.017471 2.527778 6.319444 c -2.527778 1.263889 l -2.527778 0.565862 1.961915 0.000000 1.263889 0.000000 c -0.565862 0.000000 0.000000 0.565862 0.000000 1.263889 c -0.000000 6.319444 l -0.000000 7.017471 0.565862 7.583333 1.263889 7.583333 c -h -f* -n -Q -q -1.000000 0.000000 -0.000000 1.000000 3.805634 10.305583 cm -1.000000 1.000000 1.000000 scn -1.263889 7.583333 m -1.961915 7.583333 2.527778 7.017471 2.527778 6.319444 c -2.527778 1.263889 l -2.527778 0.565862 1.961915 0.000000 1.263889 0.000000 c -0.565862 0.000000 0.000000 0.565862 0.000000 1.263889 c -0.000000 6.319444 l --0.000000 7.017471 0.565862 7.583333 1.263889 7.583333 c -h -f* -n -Q -q -1.000000 0.000000 -0.000000 1.000000 16.444336 16.805582 cm -1.000000 1.000000 1.000000 scn -1.083333 0.000000 m -1.681642 0.000000 2.166667 0.606281 2.166667 1.354167 c -2.166667 2.102052 1.681642 2.708333 1.083333 2.708333 c -0.485025 2.708333 0.000000 2.102052 0.000000 1.354167 c -0.000000 0.606281 0.485025 0.000000 1.083333 0.000000 c -h -f -n -Q -q -1.000000 0.000000 -0.000000 1.000000 11.749985 16.805582 cm -1.000000 1.000000 1.000000 scn -1.083333 0.000000 m -1.681642 0.000000 2.166667 0.606281 2.166667 1.354167 c -2.166667 2.102052 1.681642 2.708333 1.083333 2.708333 c -0.485025 2.708333 0.000000 2.102052 0.000000 1.354167 c -0.000000 0.606281 0.485025 0.000000 1.083333 0.000000 c -h -f -n -Q - -endstream -endobj - -2 0 obj - 2362 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000002620 00000 n -0000002643 00000 n -0000003835 00000 n -0000003857 00000 n -0000004155 00000 n -0000004257 00000 n -0000004278 00000 n -0000004451 00000 n -0000004525 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -4585 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Greetings.imageset/hand_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Greetings.imageset/hand_30.pdf deleted file mode 100644 index f0f8b10547..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Greetings.imageset/hand_30.pdf +++ /dev/null @@ -1,179 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 -1.000000 4.320007 27.950363 cm -1.000000 1.000000 1.000000 scn -10.373090 22.946411 m -8.050101 21.317602 6.380871 19.247253 3.543569 16.667921 c -2.650327 15.855877 1.641354 14.993408 0.459726 14.078381 c --0.718856 13.199763 0.605010 11.424451 1.780190 12.300733 c -4.284061 14.316495 l -6.457295 16.066059 l -6.992327 16.464846 7.617038 15.710186 7.164680 15.251328 c -4.466011 12.361161 l -1.629065 9.322921 l -0.624206 8.311307 2.149370 6.786903 3.158343 7.802631 c -5.809480 10.646939 l -8.512617 13.547057 l -8.970664 14.011757 9.717809 13.382321 9.318110 12.852367 c -6.570284 9.038799 l -3.620909 4.945528 l -2.785100 3.800510 4.518925 2.518438 5.364432 3.676554 c -8.200414 7.617077 l -10.914721 11.388600 l -11.343113 11.956994 12.225388 11.391698 11.897746 10.766022 c -10.236183 7.393740 l -8.358699 3.583269 l -7.680109 2.287586 9.637981 1.253119 10.320378 2.555761 c -11.154462 4.237940 11.866668 5.668703 12.507628 6.913046 c -13.583075 9.000764 14.458188 10.563708 15.372758 11.909208 c -13.810371 13.033404 13.260308 15.011283 13.271937 16.524057 c -13.275494 17.002668 13.960785 17.091639 14.085300 16.628412 c -14.549137 14.900733 15.014801 13.949447 16.730040 13.483326 c -17.129435 11.600307 17.395174 10.225099 17.659185 9.251877 c -17.974030 8.091170 19.216747 7.441628 20.352520 7.854834 c -20.763288 8.004285 20.978806 8.471420 20.833063 8.896205 c -19.358934 13.192146 19.128235 15.167385 19.061663 19.011932 c -18.995647 23.248255 13.450435 25.104208 10.373090 22.946411 c -h -f -n -Q - -endstream -endobj - -2 0 obj - 1535 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001793 00000 n -0000001816 00000 n -0000003008 00000 n -0000003030 00000 n -0000003328 00000 n -0000003430 00000 n -0000003451 00000 n -0000003624 00000 n -0000003698 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3758 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Hours.imageset/clock_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Hours.imageset/clock_30.pdf deleted file mode 100644 index 0f46a28840..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Hours.imageset/clock_30.pdf +++ /dev/null @@ -1,163 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 6.000000 6.000000 cm -1.000000 1.000000 1.000000 scn -9.000000 0.000000 m -13.970563 0.000000 18.000000 4.029437 18.000000 9.000000 c -18.000000 13.970563 13.970563 18.000000 9.000000 18.000000 c -4.029437 18.000000 0.000000 13.970563 0.000000 9.000000 c -0.000000 4.029437 4.029437 0.000000 9.000000 0.000000 c -h -9.830000 14.500002 m -9.830000 14.958399 9.458396 15.330002 9.000000 15.330002 c -8.541604 15.330002 8.170000 14.958399 8.170000 14.500002 c -8.170000 9.000048 l -8.170000 8.779921 8.257444 8.568808 8.413097 8.413153 c -11.913097 4.913105 l -12.237230 4.588968 12.762757 4.588964 13.086895 4.913097 c -13.411032 5.237230 13.411036 5.762757 13.086903 6.086895 c -9.830000 9.343842 l -9.830000 14.500002 l -h -f* -n -Q - -endstream -endobj - -2 0 obj - 779 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001037 00000 n -0000001059 00000 n -0000002251 00000 n -0000002273 00000 n -0000002571 00000 n -0000002673 00000 n -0000002694 00000 n -0000002867 00000 n -0000002941 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3001 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/Contents.json deleted file mode 100644 index ee672ca436..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "introsetting_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/introsetting_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/introsetting_30.pdf deleted file mode 100644 index 4d8c9f9751..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Intro.imageset/introsetting_30.pdf +++ /dev/null @@ -1,182 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 4.484375 cm -0.000000 0.000000 0.000000 scn -10.000000 20.135742 m -15.522848 20.135742 20.000000 16.065603 20.000000 11.044833 c -20.000000 6.024063 15.522848 1.953924 10.000000 1.953924 c -9.153261 1.953924 8.331102 2.049595 7.545889 2.229696 c -7.397357 2.263765 7.228708 2.107983 6.947171 1.847927 c -6.606689 1.533424 6.101101 1.066412 5.266314 0.598253 c -4.199766 0.000120 2.722059 0.052011 2.471971 0.156912 c -2.232201 0.257484 2.416753 0.457399 2.741760 0.809465 c -2.966608 1.053034 3.258681 1.369423 3.523984 1.776117 c -4.172771 2.770672 3.904685 3.954702 3.613619 4.167799 c -1.337573 5.834144 0.000000 8.181331 0.000000 11.044833 c -0.000000 16.065603 4.477152 20.135742 10.000000 20.135742 c -h -9.999961 15.265625 m -10.690317 15.265625 11.249961 15.825269 11.249961 16.515625 c -11.249961 17.205980 10.690317 17.765625 9.999961 17.765625 c -9.309605 17.765625 8.749961 17.205980 8.749961 16.515625 c -8.749961 15.825269 9.309605 15.265625 9.999961 15.265625 c -h -8.499961 13.680625 m -8.132691 13.680625 7.834961 13.382895 7.834961 13.015625 c -7.834961 12.648355 8.132691 12.350625 8.499961 12.350625 c -9.834961 12.350625 l -9.834961 7.180625 l -8.999961 7.180625 l -8.632691 7.180625 8.334961 6.882895 8.334961 6.515625 c -8.334961 6.148355 8.632691 5.850625 8.999961 5.850625 c -10.499961 5.850625 l -11.999961 5.850625 l -12.367230 5.850625 12.664961 6.148355 12.664961 6.515625 c -12.664961 6.882895 12.367230 7.180625 11.999961 7.180625 c -11.164961 7.180625 l -11.164961 13.015625 l -11.164961 13.382895 10.867230 13.680625 10.499961 13.680625 c -8.499961 13.680625 l -h -f* -n -Q - -endstream -endobj - -2 0 obj - 1644 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001902 00000 n -0000001925 00000 n -0000003117 00000 n -0000003139 00000 n -0000003437 00000 n -0000003539 00000 n -0000003560 00000 n -0000003733 00000 n -0000003807 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3867 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/Contents.json deleted file mode 100644 index 53ce79613f..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "linktochat.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/linktochat.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/linktochat.pdf deleted file mode 100644 index ff94f7e126..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Links.imageset/linktochat.pdf +++ /dev/null @@ -1,195 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 4.484375 cm -0.000000 0.000000 0.000000 scn -10.000000 20.135742 m -15.522848 20.135742 20.000000 16.065603 20.000000 11.044833 c -20.000000 6.024063 15.522848 1.953924 10.000000 1.953924 c -9.153261 1.953924 8.331102 2.049595 7.545889 2.229696 c -7.397357 2.263765 7.228708 2.107983 6.947171 1.847927 c -6.606689 1.533424 6.101101 1.066412 5.266314 0.598253 c -4.199766 0.000120 2.722059 0.052011 2.471971 0.156912 c -2.232201 0.257484 2.416753 0.457399 2.741760 0.809465 c -2.966608 1.053034 3.258681 1.369423 3.523984 1.776117 c -4.172771 2.770672 3.904685 3.954702 3.613619 4.167799 c -1.337573 5.834144 0.000000 8.181331 0.000000 11.044833 c -0.000000 16.065603 4.477152 20.135742 10.000000 20.135742 c -h -14.116262 15.129036 m -13.242537 16.002762 11.825946 16.002762 10.952220 15.129036 c -9.618887 13.795702 l -9.388043 13.564859 9.013773 13.564859 8.782929 13.795702 c -8.552086 14.026546 8.552086 14.400816 8.782929 14.631660 c -10.116262 15.964993 l -11.451675 17.300406 13.616807 17.300406 14.952219 15.964993 c -16.287632 14.629580 16.287632 12.464449 14.952219 11.129036 c -13.618887 9.795703 l -12.283474 8.460291 10.118341 8.460291 8.782929 9.795703 c -8.606529 9.972102 8.453041 10.163509 8.322783 10.366060 c -8.146202 10.640644 8.225649 11.006386 8.500233 11.182966 c -8.774817 11.359548 9.140558 11.280101 9.317140 11.005517 c -9.402049 10.873483 9.502523 10.748023 9.618887 10.631660 c -10.492613 9.757934 11.909203 9.757934 12.782929 10.631660 c -14.116262 11.964993 l -14.989988 12.838720 14.989988 14.255310 14.116262 15.129036 c -h -5.886345 6.898323 m -6.760071 6.024597 8.176661 6.024597 9.050387 6.898323 c -10.383720 8.231657 l -10.614564 8.462500 10.988834 8.462500 11.219678 8.231657 c -11.450521 8.000813 11.450521 7.626543 11.219679 7.395700 c -9.886345 6.062366 l -8.550932 4.726954 6.385800 4.726954 5.050388 6.062366 c -3.714975 7.397779 3.714975 9.562910 5.050388 10.898323 c -6.383721 12.231657 l -7.719133 13.567070 9.884266 13.567070 11.219678 12.231657 c -11.396078 12.055257 11.549566 11.863850 11.679824 11.661299 c -11.856405 11.386715 11.776958 11.020973 11.502375 10.844393 c -11.227790 10.667811 10.862049 10.747258 10.685468 11.021843 c -10.600558 11.153877 10.500084 11.279336 10.383720 11.395700 c -9.509995 12.269425 8.093405 12.269425 7.219678 11.395700 c -5.886345 10.062366 l -5.012619 9.188640 5.012619 7.772050 5.886345 6.898323 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 2424 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000002682 00000 n -0000002705 00000 n -0000003897 00000 n -0000003919 00000 n -0000004217 00000 n -0000004319 00000 n -0000004340 00000 n -0000004513 00000 n -0000004587 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -4647 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/Contents.json deleted file mode 100644 index 904d28263a..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "location_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/location_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/location_30.pdf deleted file mode 100644 index 07360fc322..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Location.imageset/location_30.pdf +++ /dev/null @@ -1,158 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 7.500000 5.000000 cm -1.000000 1.000000 1.000000 scn -7.500000 0.000002 m -9.767136 0.000002 15.000000 7.107865 15.000000 12.500000 c -15.000000 16.642136 11.642136 20.000000 7.500000 20.000000 c -3.357864 20.000000 0.000000 16.642136 0.000000 12.500000 c -0.000000 7.107865 5.232864 0.000002 7.500000 0.000002 c -h -7.500003 9.500000 m -9.156857 9.500000 10.500003 10.843146 10.500003 12.500000 c -10.500003 14.156855 9.156857 15.500000 7.500003 15.500000 c -5.843149 15.500000 4.500003 14.156855 4.500003 12.500000 c -4.500003 10.843146 5.843149 9.500000 7.500003 9.500000 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 641 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000000899 00000 n -0000000921 00000 n -0000002113 00000 n -0000002135 00000 n -0000002433 00000 n -0000002535 00000 n -0000002556 00000 n -0000002729 00000 n -0000002803 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -2863 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/Contents.json deleted file mode 100644 index ac64efccdb..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "stories_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/stories_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/stories_30.pdf deleted file mode 100644 index ba64f0a754..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Replies.imageset/stories_30.pdf +++ /dev/null @@ -1,158 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q --1.000000 -0.000000 -0.000000 1.000000 24.973145 8.079893 cm -1.000000 1.000000 1.000000 scn -10.631250 11.165106 m -10.631250 14.481874 l -10.631250 15.357313 11.676526 15.810160 12.315191 15.211411 c -19.853075 8.144644 l -20.274487 7.749570 20.274487 7.080643 19.853075 6.685569 c -12.315193 -0.381197 l -11.676527 -0.979946 10.631250 -0.527102 10.631250 0.348337 c -10.631250 3.665106 l -5.508641 3.665106 2.621962 1.429175 1.188047 -0.223289 c -0.842637 -0.621346 0.038047 -0.381472 0.089413 0.143045 c -0.452566 3.851353 2.233306 11.165106 10.631250 11.165106 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 595 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000000853 00000 n -0000000875 00000 n -0000002067 00000 n -0000002089 00000 n -0000002387 00000 n -0000002489 00000 n -0000002510 00000 n -0000002683 00000 n -0000002757 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -2817 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/work_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/work_30.pdf deleted file mode 100644 index 0710349e36..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Status.imageset/work_30.pdf +++ /dev/null @@ -1,183 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 7.990967 cm -1.000000 1.000000 1.000000 scn -6.954644 14.453503 m -6.954644 13.675965 l -13.036717 13.675965 l -13.036717 14.453503 l -13.036717 15.110090 12.656588 15.481581 11.982721 15.481581 c -8.017279 15.481581 l -7.343412 15.481581 6.954644 15.110090 6.954644 14.453503 c -h -9.995681 8.578773 m -6.470842 8.578773 3.231102 9.079853 0.000000 10.496700 c -0.000000 11.040976 l -0.000000 12.812035 0.889849 13.675965 2.669546 13.675965 c -5.615551 13.675965 l -5.615551 14.358471 l -5.615551 15.982660 6.557235 16.742920 8.034557 16.742920 c -11.956803 16.742920 l -13.520518 16.742920 14.375810 15.982660 14.375810 14.358471 c -14.375810 13.675965 l -17.330454 13.675965 l -19.118790 13.675965 20.000000 12.812035 20.000000 11.040976 c -20.000000 10.496700 l -16.768898 9.079853 13.529158 8.578773 9.995681 8.578773 c -h -2.669546 -0.000061 m -0.889849 -0.000061 0.000000 0.863871 0.000000 2.634929 c -0.000000 9.071214 l -2.626350 8.077693 5.157667 7.559335 7.697624 7.386548 c -7.697624 6.686765 l -7.697624 6.082013 8.051836 5.745080 8.656588 5.745080 c -11.343412 5.745080 l -11.948164 5.745080 12.302376 6.082013 12.302376 6.686765 c -12.302376 7.386548 l -14.842333 7.559335 17.373650 8.077693 20.000000 9.071214 c -20.000000 2.634929 l -20.000000 0.863871 19.118790 -0.000061 17.330454 -0.000061 c -2.669546 -0.000061 l -h -f -n -Q - -endstream -endobj - -2 0 obj - 1380 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001638 00000 n -0000001661 00000 n -0000002853 00000 n -0000002875 00000 n -0000003173 00000 n -0000003275 00000 n -0000003296 00000 n -0000003469 00000 n -0000003543 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3603 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/Contents.json deleted file mode 100644 index 81d7a4af90..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "tag_30 (3).pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/tag_30 (3).pdf b/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/tag_30 (3).pdf deleted file mode 100644 index f487557273..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/BusinessPerk/Tag.imageset/tag_30 (3).pdf +++ /dev/null @@ -1,164 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.406738 8.000000 cm -1.000000 1.000000 1.000000 scn -16.973253 11.854660 m -19.015503 9.069774 l -19.918947 7.837805 19.918947 6.162195 19.015503 4.930227 c -16.973253 2.145341 l -15.984283 0.796747 14.411980 0.000000 12.739626 0.000000 c -3.500002 0.000000 l -1.567005 0.000000 0.000000 1.567004 0.000000 3.500001 c -0.000000 10.500000 l -0.000000 12.432997 1.567003 14.000000 3.500000 14.000000 c -12.739625 14.000000 l -14.411979 14.000000 15.984283 13.203254 16.973253 11.854660 c -h -14.350163 5.250000 m -15.316662 5.250000 16.100163 6.033502 16.100163 7.000000 c -16.100163 7.966498 15.316662 8.750000 14.350163 8.750000 c -13.383665 8.750000 12.600163 7.966498 12.600163 7.000000 c -12.600163 6.033502 13.383665 5.250000 14.350163 5.250000 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 809 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001067 00000 n -0000001089 00000 n -0000002281 00000 n -0000002303 00000 n -0000002601 00000 n -0000002703 00000 n -0000002724 00000 n -0000002897 00000 n -0000002971 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3031 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/AppIcon.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/AppIcon.pdf deleted file mode 100644 index f44283f77f..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/AppIcon.imageset/AppIcon.pdf +++ /dev/null @@ -1,159 +0,0 @@ -%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 6.000000 6.000000 cm -1.000000 1.000000 1.000000 scn -9.000000 15.600000 m -9.000000 16.440079 9.000000 16.860119 9.163490 17.180986 c -9.307301 17.463228 9.536771 17.692699 9.819015 17.836510 c -10.139882 18.000000 10.559921 18.000000 11.400000 18.000000 c -16.600000 18.000000 l -17.440079 18.000000 17.860119 18.000000 18.180984 17.836510 c -18.463230 17.692699 18.692699 17.463228 18.836510 17.180986 c -19.000000 16.860119 19.000000 16.440079 19.000000 15.600000 c -19.000000 10.400000 l -19.000000 9.559921 19.000000 9.139882 18.836510 8.819015 c -18.692699 8.536771 18.463230 8.307301 18.180984 8.163490 c -17.860119 8.000000 17.440079 8.000000 16.600000 8.000000 c -11.400000 8.000000 l -10.559921 8.000000 10.139882 8.000000 9.819015 8.163490 c -9.536771 8.307301 9.307301 8.536771 9.163490 8.819015 c -9.000000 9.139882 9.000000 9.559921 9.000000 10.400000 c -9.000000 15.600000 l -h -13.877289 10.424780 m -13.972101 10.481474 14.090399 10.481474 14.185211 10.424780 c -15.566299 9.598953 l -16.097145 9.281532 16.748672 9.758140 16.606907 10.360182 c -16.243755 11.902411 l -16.218065 12.011508 16.255333 12.125828 16.340385 12.198824 c -17.543976 13.231811 l -18.015240 13.636273 17.765560 14.408524 17.146713 14.460539 c -15.554527 14.594366 l -15.443923 14.603662 15.347490 14.673266 15.303833 14.775314 c -14.674830 16.245621 l -14.432594 16.811852 13.629906 16.811852 13.387671 16.245621 c -12.758666 14.775314 l -12.715010 14.673266 12.618577 14.603662 12.507973 14.594366 c -10.915787 14.460539 l -10.296938 14.408524 10.047261 13.636274 10.518523 13.231811 c -11.722115 12.198824 l -11.807166 12.125828 11.844435 12.011508 11.818745 11.902411 c -11.455591 10.360182 l -11.313828 9.758140 11.965354 9.281531 12.496199 9.598952 c -13.877289 10.424780 l -h -0.163490 14.180985 m -0.000000 13.860119 0.000000 13.440079 0.000000 12.600000 c -0.000000 10.400000 l -0.000000 9.559921 0.000000 9.139882 0.163490 8.819015 c -0.307300 8.536771 0.536771 8.307301 0.819014 8.163490 c -1.139882 8.000000 1.559921 8.000000 2.400000 8.000000 c -4.600000 8.000000 l -5.440079 8.000000 5.860118 8.000000 6.180986 8.163490 c -6.463229 8.307301 6.692700 8.536771 6.836510 8.819015 c -7.000000 9.139882 7.000000 9.559921 7.000000 10.400000 c -7.000000 12.600000 l -7.000000 13.440079 7.000000 13.860119 6.836510 14.180985 c -6.692700 14.463229 6.463229 14.692699 6.180986 14.836510 c -5.860118 15.000000 5.440079 15.000000 4.600000 15.000000 c -2.400000 15.000000 l -1.559921 15.000000 1.139882 15.000000 0.819014 14.836510 c -0.536771 14.692699 0.307300 14.463229 0.163490 14.180985 c -h -2.163490 5.180985 m -2.000000 4.860118 2.000000 4.440079 2.000000 3.600000 c -2.000000 3.400000 l -2.000000 2.559921 2.000000 2.139882 2.163490 1.819014 c -2.307300 1.536772 2.536771 1.307301 2.819014 1.163490 c -3.139882 1.000000 3.559921 1.000000 4.400000 1.000000 c -4.600000 1.000000 l -5.440079 1.000000 5.860118 1.000000 6.180986 1.163490 c -6.463229 1.307301 6.692700 1.536772 6.836510 1.819014 c -7.000000 2.139882 7.000000 2.559921 7.000000 3.400000 c -7.000000 3.600000 l -7.000000 4.440079 7.000000 4.860118 6.836510 5.180985 c -6.692700 5.463229 6.463229 5.692699 6.180986 5.836510 c -5.860118 6.000000 5.440079 6.000000 4.600000 6.000000 c -4.400000 6.000000 l -3.559921 6.000000 3.139882 6.000000 2.819014 5.836510 c -2.536771 5.692699 2.307300 5.463229 2.163490 5.180985 c -h -9.000000 3.599999 m -9.000000 4.440079 9.000000 4.860118 9.163490 5.180985 c -9.307301 5.463229 9.536771 5.692699 9.819015 5.836510 c -10.139882 6.000000 10.559921 6.000000 11.400000 6.000000 c -12.599999 6.000000 l -13.440079 6.000000 13.860118 6.000000 14.180985 5.836510 c -14.463229 5.692699 14.692699 5.463229 14.836510 5.180985 c -15.000000 4.860118 15.000000 4.440079 15.000000 3.600000 c -15.000000 2.400001 l -15.000000 1.559921 15.000000 1.139881 14.836510 0.819014 c -14.692699 0.536772 14.463229 0.307301 14.180985 0.163490 c -13.860118 0.000000 13.440079 0.000000 12.600000 0.000000 c -11.400001 0.000000 l -10.559921 0.000000 10.139882 0.000000 9.819015 0.163490 c -9.536771 0.307301 9.307301 0.536772 9.163490 0.819014 c -9.000000 1.139881 9.000000 1.559921 9.000000 2.400000 c -9.000000 3.599999 l -h -f* -n -Q - -endstream -endobj - -3 0 obj - 4178 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000004268 00000 n -0000004291 00000 n -0000004464 00000 n -0000004538 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -4597 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Contents.json deleted file mode 100644 index 3b3fd8aee4..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Profile.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Profile.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Profile.pdf deleted file mode 100644 index 8d6de21a15..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Avatar.imageset/Profile.pdf +++ /dev/null @@ -1,79 +0,0 @@ -%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 5.000000 5.000000 cm -1.000000 1.000000 1.000000 scn -10.000000 0.000000 m -15.522847 0.000000 20.000000 4.477153 20.000000 10.000000 c -20.000000 15.522848 15.522847 20.000000 10.000000 20.000000 c -4.477152 20.000000 0.000000 15.522848 0.000000 10.000000 c -0.000000 4.477153 4.477152 0.000000 10.000000 0.000000 c -h -14.751925 9.167950 m -8.554701 5.036467 l -7.890146 4.593431 7.000000 5.069821 7.000000 5.868517 c -7.000000 14.131483 l -7.000000 14.930179 7.890145 15.406569 8.554700 14.963533 c -14.751925 10.832050 l -15.345657 10.436228 15.345657 9.563771 14.751925 9.167950 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 648 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000000738 00000 n -0000000760 00000 n -0000000933 00000 n -0000001007 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -1066 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Badge.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Badge.pdf deleted file mode 100644 index fe2136f94c..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Badge.imageset/Badge.pdf +++ /dev/null @@ -1,97 +0,0 @@ -%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 4.575439 5.396620 cm -1.000000 1.000000 1.000000 scn -9.882595 3.317793 m -5.183871 0.439333 l -4.695292 0.140028 4.056584 0.293465 3.757279 0.782043 c -3.611097 1.020666 3.567514 1.308224 3.636422 1.579445 c -4.363782 4.442359 l -4.626348 5.475822 5.333547 6.339716 6.294793 6.801228 c -11.420868 9.262346 l -11.659848 9.377085 11.760565 9.663830 11.645826 9.902809 c -11.552907 10.096345 11.342772 10.204644 11.131233 10.168021 c -5.425255 9.180172 l -4.265362 8.979365 3.075904 9.299660 2.173681 10.055747 c -0.371115 11.566348 l --0.068036 11.934370 -0.125698 12.588713 0.242323 13.027864 c -0.421316 13.241451 0.678710 13.374050 0.956533 13.395792 c -6.463908 13.826798 l -6.852990 13.857248 7.192065 14.103476 7.341429 14.464033 c -9.466071 19.592789 l -9.685358 20.122133 10.292245 20.373486 10.821590 20.154200 c -11.075765 20.048904 11.277706 19.846962 11.383000 19.592789 c -13.507643 14.464033 l -13.657007 14.103476 13.996081 13.857248 14.385163 13.826798 c -19.922800 13.393423 l -20.494022 13.348721 20.920851 12.849413 20.876146 12.278191 c -20.854641 12.003400 20.724669 11.748462 20.514915 11.569643 c -16.291594 7.969165 l -15.994287 7.715703 15.864580 7.316709 15.956014 6.936873 c -17.254391 1.543129 l -17.388485 0.986073 17.045605 0.425785 16.488548 0.291691 c -16.220879 0.227257 15.938575 0.271862 15.703809 0.415680 c -10.966477 3.317793 l -10.633905 3.521528 10.215167 3.521528 9.882595 3.317793 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 1468 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000001558 00000 n -0000001581 00000 n -0000001754 00000 n -0000001828 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -1887 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Chat.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Chat.pdf deleted file mode 100644 index 8c08ed90ad..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Chat.imageset/Chat.pdf +++ /dev/null @@ -1,76 +0,0 @@ -%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 5.000000 4.484375 cm -1.000000 1.000000 1.000000 scn -20.000000 11.044711 m -20.000000 16.065481 15.522848 20.135620 10.000000 20.135620 c -4.477152 20.135620 0.000000 16.065481 0.000000 11.044711 c -0.000000 8.181209 1.337573 5.834022 3.613619 4.167677 c -3.904685 3.954580 4.172771 2.770550 3.523984 1.775995 c -2.875197 0.781441 2.066323 0.326941 2.471971 0.156790 c -2.722059 0.051889 4.199766 -0.000002 5.266314 0.598131 c -6.791368 1.453400 7.217727 2.304844 7.545889 2.229574 c -8.331102 2.049473 9.153261 1.953802 10.000000 1.953802 c -15.522848 1.953802 20.000000 6.023941 20.000000 11.044711 c -h -f -n -Q - -endstream -endobj - -3 0 obj - 668 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000000758 00000 n -0000000780 00000 n -0000000953 00000 n -0000001027 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -1086 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/Contents.json deleted file mode 100644 index c581600204..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "brush_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/brush_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/brush_30.pdf deleted file mode 100644 index 474ad798d8..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Colors.imageset/brush_30.pdf +++ /dev/null @@ -1,169 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 3.864258 cm -1.000000 1.000000 1.000000 scn -17.269485 19.786890 m -18.869095 20.947046 20.890579 18.978296 19.730423 17.325953 c -19.405228 16.877710 16.109329 12.034937 13.402297 8.967554 c -12.690383 11.103296 11.038039 12.755640 8.911086 13.458765 c -11.978469 16.165796 16.821243 19.461695 17.269485 19.786890 c -h -8.867141 8.932398 m -8.164016 9.635523 7.267532 10.136499 6.476516 10.285913 c -6.590774 10.927515 6.889602 11.481226 7.408157 12.034937 c -7.496047 12.131617 7.583938 12.219507 7.680618 12.307398 c -9.965775 11.982203 11.908156 10.022242 12.242141 7.737085 c -12.154250 7.640406 12.066360 7.552515 11.960891 7.464624 c -11.415969 6.954859 10.879836 6.664820 10.229445 6.541773 c -10.071242 7.332788 9.570266 8.229273 8.867141 8.932398 c -h -0.385696 3.527124 m --0.062546 4.072046 -0.141648 4.564234 0.262649 4.889429 c -0.746047 5.267359 1.378860 4.915796 2.081985 5.460718 c -2.864211 6.058374 2.310500 7.394312 3.690383 8.466578 c -5.043899 9.565210 7.074172 9.204859 8.287063 7.666773 c -9.623000 5.961695 9.368118 3.869898 7.592727 2.481226 c -5.465774 0.811304 2.064407 1.400171 0.385696 3.527124 c -h -f -n -Q - -endstream -endobj - -2 0 obj - 1188 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001446 00000 n -0000001469 00000 n -0000002661 00000 n -0000002683 00000 n -0000002981 00000 n -0000003083 00000 n -0000003104 00000 n -0000003277 00000 n -0000003351 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3411 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Contents.json deleted file mode 100644 index 95aadc5988..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Emoji (1).pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Emoji (1).pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Emoji (1).pdf deleted file mode 100644 index 761a468d96..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Emoji.imageset/Emoji (1).pdf +++ /dev/null @@ -1,120 +0,0 @@ -%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 5.000000 5.000000 cm -1.000000 1.000000 1.000000 scn -0.000000 10.000000 m -0.000000 5.332758 3.197396 1.412308 7.521235 0.309603 c -7.192342 0.790955 7.000000 1.373016 7.000000 2.000000 c -7.000000 3.113091 l -5.212887 3.938812 4.297566 5.421120 3.859255 6.432051 c -3.686586 6.830300 4.118104 7.180214 4.520657 7.017826 c -5.607882 6.579245 7.514322 6.000000 10.000001 6.000000 c -12.485676 6.000000 14.392107 6.579244 15.479328 7.017824 c -15.881880 7.180212 16.313400 6.830300 16.140732 6.432050 c -15.702424 5.421119 14.787108 3.938814 13.000000 3.113092 c -13.000000 2.000000 l -13.000000 1.373016 12.807658 0.790955 12.478765 0.309603 c -16.802603 1.412308 20.000000 5.332758 20.000000 10.000000 c -20.000000 15.522848 15.522847 20.000000 10.000000 20.000000 c -4.477152 20.000000 0.000000 15.522848 0.000000 10.000000 c -h -14.000001 9.250000 m -15.242641 9.250000 16.250000 10.257360 16.250000 11.500000 c -16.250000 12.742640 15.242641 13.750000 14.000001 13.750000 c -12.757360 13.750000 11.750001 12.742640 11.750001 11.500000 c -11.750001 10.257360 12.757360 9.250000 14.000001 9.250000 c -h -14.000001 8.250000 m -15.794927 8.250000 17.250000 9.705074 17.250000 11.500000 c -17.250000 13.294926 15.794927 14.750000 14.000001 14.750000 c -12.205075 14.750000 10.750001 13.294926 10.750001 11.500000 c -10.750001 9.705074 12.205075 8.250000 14.000001 8.250000 c -h -15.000001 11.500000 m -15.000001 10.947716 14.552285 10.500000 14.000001 10.500000 c -13.447717 10.500000 13.000001 10.947716 13.000001 11.500000 c -13.000001 12.052284 13.447717 12.500000 14.000001 12.500000 c -14.552285 12.500000 15.000001 12.052284 15.000001 11.500000 c -h -8.982612 10.447145 m -8.552257 10.964127 7.794065 11.500000 6.500000 11.500000 c -5.205936 11.500000 4.447744 10.964127 4.017390 10.447145 c -3.744092 10.118834 4.103591 9.767232 4.509996 9.898819 c -5.063556 10.078053 5.781778 10.250000 6.500000 10.250000 c -7.218223 10.250000 7.936446 10.078053 8.490005 9.898819 c -8.896410 9.767232 9.255910 10.118834 8.982612 10.447145 c -h -9.000000 5.000000 m -8.447716 5.000000 8.000000 4.552284 8.000000 4.000000 c -8.000000 2.000000 l -8.000000 0.895432 8.895431 0.000000 10.000000 0.000000 c -11.104569 0.000000 12.000000 0.895432 12.000000 2.000000 c -12.000000 4.000000 l -12.000000 4.552284 11.552284 5.000000 11.000000 5.000000 c -10.714355 5.000000 10.473413 4.787300 10.437983 4.503861 c -10.137049 2.096386 l -10.116884 1.935076 9.883116 1.935074 9.862951 2.096386 c -9.562017 4.503861 l -9.526587 4.787299 9.285645 5.000000 9.000000 5.000000 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 2574 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000002664 00000 n -0000002687 00000 n -0000002860 00000 n -0000002934 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -2993 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/Contents.json deleted file mode 100644 index 443d8f2b1f..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "lastseen_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/lastseen_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/lastseen_30.pdf deleted file mode 100644 index 2087b89da7..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/LastSeen.imageset/lastseen_30.pdf +++ /dev/null @@ -1,169 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.320312 4.036133 cm -0.000000 0.000000 0.000000 scn -15.718013 7.249816 m -15.405374 7.990487 12.549557 9.993635 11.723054 10.108183 c -11.210857 10.179170 10.094700 8.757028 9.820968 7.139155 c -9.652993 6.146357 9.900538 5.153749 10.575783 4.550840 c -12.351411 2.965429 16.030653 6.509145 15.718013 7.249816 c -h -20.036879 19.735321 m -18.253841 20.338758 14.037626 18.223207 12.869061 12.033148 c -12.869061 11.732358 15.300022 9.989953 16.974861 9.388252 c -17.829952 9.081054 20.971378 12.265821 21.642756 15.454392 c -22.042732 17.354000 20.948334 19.426855 20.036879 19.735321 c -h -5.331334 5.154034 m -4.841030 5.573311 1.180003 6.640569 0.478038 6.303137 c --0.223926 5.965705 -0.489510 1.657463 2.111791 1.081186 c -4.713092 0.504911 5.821639 4.734756 5.331334 5.154034 c -h -1.053483 8.698494 m -1.543788 8.279216 5.287134 6.983948 5.989099 7.321380 c -6.691063 7.658812 11.170075 16.921753 6.587785 17.884901 c -5.138152 18.189598 2.305758 16.301899 1.450079 13.825531 c -0.615815 11.411140 0.811438 8.905476 1.053483 8.698494 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 1098 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001356 00000 n -0000001379 00000 n -0000002571 00000 n -0000002593 00000 n -0000002891 00000 n -0000002993 00000 n -0000003014 00000 n -0000003187 00000 n -0000003261 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3321 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Limits.imageset/2x.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Limits.imageset/2x.pdf deleted file mode 100644 index 3838d738e7..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Limits.imageset/2x.pdf +++ /dev/null @@ -1,107 +0,0 @@ -%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 5.500000 8.728230 cm -1.000000 1.000000 1.000000 scn -0.426623 12.091039 m -0.879073 12.407753 1.502603 12.297718 1.819318 11.845269 c -4.500086 8.015600 l -7.180854 11.845269 l -7.497569 12.297718 8.121099 12.407753 8.573548 12.091039 c -9.025997 11.774324 9.136032 11.150794 8.819318 10.698344 c -5.720742 6.271807 l -8.819318 1.845269 l -9.136032 1.392819 9.025997 0.769289 8.573548 0.452575 c -8.121099 0.135860 7.497569 0.245895 7.180854 0.698344 c -4.500086 4.528013 l -1.819318 0.698344 l -1.502603 0.245895 0.879073 0.135860 0.426623 0.452575 c --0.025826 0.769289 -0.135861 1.392819 0.180854 1.845269 c -3.279430 6.271807 l -0.180854 10.698344 l --0.135861 11.150794 -0.025826 11.774324 0.426623 12.091039 c -h -15.000086 10.271807 m -13.895516 10.271807 13.000086 9.376376 13.000086 8.271807 c -13.000086 7.771807 l -13.000086 7.219522 12.552371 6.771807 12.000086 6.771807 c -11.447801 6.771807 11.000086 7.219522 11.000086 7.771807 c -11.000086 8.271807 l -11.000086 10.480946 12.790947 12.271807 15.000086 12.271807 c -17.209225 12.271807 19.000086 10.480946 19.000086 8.271807 c -19.000086 8.125909 l -19.000086 6.610820 18.144077 5.225768 16.788940 4.548200 c -13.552872 2.930165 l -13.286202 2.796831 13.096846 2.553910 13.028315 2.271807 c -18.000086 2.271807 l -18.552370 2.271807 19.000086 1.824092 19.000086 1.271807 c -19.000086 0.719522 18.552370 0.271807 18.000086 0.271807 c -12.000086 0.271807 l -11.447801 0.271807 11.000086 0.719522 11.000086 1.271807 c -11.000086 2.035739 l -11.000086 3.172054 11.642092 4.210844 12.658444 4.719020 c -15.894513 6.337054 l -16.572081 6.675838 17.000086 7.368365 17.000086 8.125909 c -17.000086 8.271807 l -17.000086 9.376376 16.104656 10.271807 15.000086 10.271807 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 1763 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000001853 00000 n -0000001876 00000 n -0000002049 00000 n -0000002123 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -2182 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/Contents.json deleted file mode 100644 index 5f59e21e04..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "msgeffects.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/msgeffects.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageEffects.imageset/msgeffects.pdf deleted file mode 100644 index d16df31a0c3327f60e5b17384f470e794b22cbf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7485 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 diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/Contents.json deleted file mode 100644 index fe71658b83..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "messageprivacy_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/messageprivacy_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/messageprivacy_30.pdf deleted file mode 100644 index 7a037b9846..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessagePrivacy.imageset/messageprivacy_30.pdf +++ /dev/null @@ -1,185 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.000000 4.484375 cm -0.000000 0.000000 0.000000 scn -10.000000 20.135742 m -15.522848 20.135742 20.000000 16.065603 20.000000 11.044833 c -20.000000 6.024063 15.522848 1.953924 10.000000 1.953924 c -9.153261 1.953924 8.331102 2.049595 7.545889 2.229696 c -7.397357 2.263765 7.228708 2.107983 6.947171 1.847927 c -6.606689 1.533424 6.101101 1.066412 5.266314 0.598253 c -4.199766 0.000120 2.722059 0.052011 2.471971 0.156912 c -2.232201 0.257484 2.416753 0.457399 2.741760 0.809465 c -2.966608 1.053034 3.258681 1.369423 3.523984 1.776117 c -4.172771 2.770672 3.904685 3.954702 3.613619 4.167799 c -1.337573 5.834144 0.000000 8.181331 0.000000 11.044833 c -0.000000 16.065603 4.477152 20.135742 10.000000 20.135742 c -h -6.335000 14.010747 m -6.335000 16.034870 7.975876 17.675747 10.000000 17.675747 c -12.024124 17.675747 13.665000 16.034870 13.665000 14.010747 c -13.665000 12.722709 l -14.121655 12.482201 14.492952 12.106080 14.727516 11.645723 c -15.000000 11.110944 15.000000 10.410878 15.000000 9.010747 c -15.000000 7.610616 15.000000 6.910550 14.727516 6.375771 c -14.487833 5.905365 14.105381 5.522914 13.634976 5.283231 c -13.100197 5.010747 12.400131 5.010747 11.000000 5.010747 c -9.000000 5.010747 l -7.599869 5.010747 6.899803 5.010747 6.365024 5.283231 c -5.894619 5.522914 5.512167 5.905365 5.272484 6.375771 c -5.000000 6.910550 5.000000 7.610616 5.000000 9.010747 c -5.000000 10.410878 5.000000 11.110944 5.272484 11.645723 c -5.507047 12.106080 5.878345 12.482201 6.335000 12.722709 c -6.335000 14.010747 l -h -12.335000 14.010747 m -12.335000 12.995256 l -11.973238 13.010747 11.538372 13.010747 11.000000 13.010747 c -9.000000 13.010747 l -8.461628 13.010747 8.026762 13.010747 7.665000 12.995256 c -7.665000 14.010747 l -7.665000 15.300332 8.710415 16.345747 10.000000 16.345747 c -11.289585 16.345747 12.335000 15.300332 12.335000 14.010747 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 1905 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000002163 00000 n -0000002186 00000 n -0000003378 00000 n -0000003400 00000 n -0000003698 00000 n -0000003800 00000 n -0000003821 00000 n -0000003994 00000 n -0000004068 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -4128 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/Contents.json deleted file mode 100644 index 1e34c1570c..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "tag_30 (2).pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/tag_30 (2).pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/tag_30 (2).pdf deleted file mode 100644 index a815495248..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/tag_30 (2).pdf +++ /dev/null @@ -1,164 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.406738 8.000000 cm -0.000000 0.000000 0.000000 scn -16.973253 11.854660 m -19.015503 9.069774 l -19.918947 7.837805 19.918947 6.162195 19.015503 4.930227 c -16.973253 2.145341 l -15.984283 0.796747 14.411980 0.000000 12.739626 0.000000 c -3.500002 0.000000 l -1.567005 0.000000 0.000000 1.567004 0.000000 3.500001 c -0.000000 10.500000 l -0.000000 12.432997 1.567003 14.000000 3.500000 14.000000 c -12.739625 14.000000 l -14.411979 14.000000 15.984283 13.203254 16.973253 11.854660 c -h -14.350163 5.250000 m -15.316662 5.250000 16.100163 6.033502 16.100163 7.000000 c -16.100163 7.966498 15.316662 8.750000 14.350163 8.750000 c -13.383665 8.750000 12.600163 7.966498 12.600163 7.000000 c -12.600163 6.033502 13.383665 5.250000 14.350163 5.250000 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 809 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000001067 00000 n -0000001089 00000 n -0000002281 00000 n -0000002303 00000 n -0000002601 00000 n -0000002703 00000 n -0000002724 00000 n -0000002897 00000 n -0000002971 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -3031 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Ads.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Ads.pdf deleted file mode 100644 index db109152b7..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/NoAds.imageset/Ads.pdf +++ /dev/null @@ -1,127 +0,0 @@ -%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 7.000000 4.804735 cm -1.000000 1.000000 1.000000 scn -0.707107 18.902372 m -0.316583 19.292896 -0.316583 19.292896 -0.707107 18.902372 c --1.097631 18.511847 -1.097631 17.878683 -0.707107 17.488157 c -0.707107 18.902372 l -h -15.292893 1.488157 m -15.683417 1.097633 16.316582 1.097633 16.707108 1.488157 c -17.097631 1.878683 17.097631 2.511847 16.707108 2.902371 c -15.292893 1.488157 l -h --0.707107 17.488157 m -15.292893 1.488157 l -16.707108 2.902371 l -0.707107 18.902372 l --0.707107 17.488157 l -h -f -n -Q -q -1.000000 0.000000 -0.000000 1.000000 6.000000 5.493464 cm -1.000000 1.000000 1.000000 scn -6.634244 6.005881 m -4.000000 6.005881 l -1.790861 6.005881 0.000000 7.796742 0.000000 10.005881 c -0.000000 11.259813 0.576984 12.378983 1.479941 13.112381 c -10.638983 3.953340 l -9.078063 5.167388 l -8.815662 5.371477 8.684463 5.473521 8.546436 5.558720 c -8.166211 5.793416 7.738360 5.940215 7.294138 5.988393 c -7.132880 6.005881 6.966668 6.005881 6.634244 6.005881 c -h -16.036222 1.384529 m -3.452085 13.968666 l -3.631217 13.993204 3.814128 14.005881 4.000000 14.005881 c -6.634244 14.005881 l -6.966668 14.005881 7.132880 14.005881 7.294138 14.023371 c -7.738360 14.071548 8.166211 14.218346 8.546436 14.453043 c -8.684463 14.538241 8.815662 14.640285 9.078062 14.844374 c -11.835389 16.988962 l -11.835398 16.988970 l -11.835412 16.988979 l -13.492673 18.277960 14.321305 18.922451 15.017017 18.916531 c -15.622235 18.911381 16.192566 18.632441 16.568199 18.157871 c -17.000000 17.612343 17.000000 16.562572 17.000000 14.463034 c -17.000000 5.548728 l -17.000000 3.449189 17.000000 2.399420 16.568199 1.853891 c -16.418444 1.664694 16.237743 1.506588 16.036222 1.384529 c -h -4.000000 3.119659 m -4.000000 3.639083 4.000000 3.898794 4.094136 4.100118 c -4.193412 4.312436 4.364113 4.483137 4.576432 4.582415 c -4.777756 4.676550 5.037467 4.676550 5.556890 4.676550 c -6.443110 4.676550 l -6.962533 4.676550 7.222244 4.676550 7.423568 4.582415 c -7.635887 4.483137 7.806588 4.312436 7.905864 4.100118 c -8.000000 3.898794 8.000000 3.639083 8.000000 3.119659 c -8.000000 2.005878 l -8.000000 0.901310 7.104569 0.005878 6.000000 0.005878 c -4.895431 0.005878 4.000000 0.901310 4.000000 2.005878 c -4.000000 3.119659 l -h -f* -n -Q - -endstream -endobj - -3 0 obj - 2250 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000002340 00000 n -0000002363 00000 n -0000002536 00000 n -0000002610 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -2669 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/PaidMessages.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/PaidMessages.imageset/Contents.json deleted file mode 100644 index 2b5437edde..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/PaidMessages.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "paidmessages.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Contents.json deleted file mode 100644 index 89bcf20292..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Reactions.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Reactions.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Reactions.pdf deleted file mode 100644 index 5575250238..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Reactions.imageset/Reactions.pdf +++ /dev/null @@ -1,75 +0,0 @@ -%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 6.000000 6.327723 cm -1.000000 1.000000 1.000000 scn -9.000000 0.000000 m -9.231684 0.000000 9.561386 0.169308 9.828713 0.338614 c -14.809901 3.546535 18.000000 7.306931 18.000000 11.120792 c -18.000000 14.391089 15.745544 16.672277 12.902970 16.672277 c -11.129704 16.672277 9.801980 15.692080 9.000000 14.221783 c -8.215841 15.683168 6.879208 16.672277 5.105941 16.672277 c -2.263366 16.672277 0.000000 14.391089 0.000000 11.120792 c -0.000000 7.306931 3.190099 3.546535 8.171288 0.338614 c -8.447525 0.169308 8.777228 0.000000 9.000000 0.000000 c -h -f -n -Q - -endstream -endobj - -3 0 obj - 615 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000000705 00000 n -0000000727 00000 n -0000000900 00000 n -0000000974 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -1033 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Speed.imageset/Speed.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Speed.imageset/Speed.pdf deleted file mode 100644 index f297be3520..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Speed.imageset/Speed.pdf +++ /dev/null @@ -1,112 +0,0 @@ -%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 12.294678 9.000013 cm -1.000000 1.000000 1.000000 scn -2.804684 0.000000 m -4.353669 0.000000 5.609368 1.274049 5.609368 2.845666 c -5.609368 4.417284 4.353669 5.691332 2.804684 5.691332 c -1.255700 5.691332 0.000000 4.417284 0.000000 2.845666 c -0.000000 1.274049 1.255700 0.000000 2.804684 0.000000 c -h -f -n -Q -q -1.000000 0.000000 -0.000000 1.000000 17.217842 12.915028 cm -1.000000 1.000000 1.000000 scn -0.202088 2.121548 m -0.590437 1.919203 0.904981 1.668863 1.145721 1.370527 c -1.385267 1.073672 1.586731 0.733007 1.750114 0.348534 c -1.831343 0.157340 2.052196 0.068219 2.243381 0.149469 c -2.291679 0.169995 2.335148 0.200401 2.369815 0.239834 c -9.410900 7.784840 l -9.694361 8.088588 9.677914 8.564614 9.374166 8.848076 c -9.108430 9.096064 8.703391 9.118585 8.411800 8.901587 c -0.153150 2.755597 l --0.014851 2.633397 -0.049773 2.397816 0.073990 2.230975 c -0.107876 2.185294 0.151681 2.147893 0.202088 2.121548 c -h -f* -n -Q -q -1.000000 0.000000 -0.000000 1.000000 4.000000 9.669685 cm -1.000000 1.000000 1.000000 scn -22.003891 1.104424 m -22.003891 0.423388 21.718653 -0.000001 20.321684 0.037580 c -18.924715 0.075160 18.613684 0.350485 18.613684 1.031520 c -18.613684 2.190733 18.463017 3.313196 18.169523 4.353136 c -20.529579 7.033363 l -21.472769 5.266989 22.003891 3.231236 22.003891 1.104424 c -h -11.001945 12.973248 m -13.460424 12.973248 15.679217 12.126817 17.469568 10.716667 c -15.011708 9.067489 l -13.884562 9.852736 12.507846 10.307699 10.902919 10.307699 c -5.969246 10.307699 2.068742 6.093097 2.068742 1.116306 c -2.068742 0.101034 1.795549 0.039256 1.200545 0.035501 c -0.968838 0.035501 l -0.363240 0.039256 0.000000 0.101034 0.000000 1.116306 c -0.000000 7.455166 4.718006 12.973248 11.001945 12.973248 c -h -f -n -Q - -endstream -endobj - -3 0 obj - 1778 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000001868 00000 n -0000001891 00000 n -0000002064 00000 n -0000002138 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -2197 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Status.imageset/status.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Status.imageset/status.pdf deleted file mode 100644 index 77f0866344..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Status.imageset/status.pdf +++ /dev/null @@ -1,98 +0,0 @@ -%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 4.320007 2.144306 cm -1.000000 1.000000 1.000000 scn -10.373089 2.859669 m -8.050100 4.488478 6.380870 6.558828 3.543569 9.138160 c -2.650327 9.950203 1.641354 10.812672 0.459726 11.727699 c --0.718856 12.606317 0.605010 14.381629 1.780190 13.505348 c -4.284061 11.489586 l -6.457295 9.740021 l -6.992327 9.341235 7.617038 10.095894 7.164679 10.554753 c -4.466011 13.444919 l -1.629065 16.483160 l -0.624206 17.494774 2.149370 19.019176 3.158343 18.003448 c -5.809479 15.159142 l -8.512616 12.259024 l -8.970663 11.794324 9.717808 12.423758 9.318109 12.953712 c -6.570284 16.767281 l -3.620909 20.860554 l -2.785100 22.005569 4.518925 23.287643 5.364432 22.129528 c -8.200413 18.189003 l -10.914721 14.417480 l -11.343112 13.849086 12.225386 14.414383 11.897745 15.040059 c -10.236182 18.412340 l -8.358698 22.222813 l -7.680108 23.518496 9.637980 24.552961 10.320377 23.250320 c -11.154460 21.568140 11.866667 20.137379 12.507627 18.893036 c -13.583073 16.805317 14.458187 15.242372 15.372757 13.896872 c -13.810370 12.772676 13.260306 10.794797 13.271935 9.282023 c -13.275491 8.803411 13.960783 8.714442 14.085299 9.177669 c -14.549135 10.905348 15.014800 11.856633 16.730038 12.322754 c -17.129433 14.205773 17.395172 15.580981 17.659184 16.554203 c -17.974028 17.714911 19.216745 18.364452 20.352518 17.951246 c -20.763287 17.801796 20.978804 17.334660 20.833061 16.909876 c -19.358932 12.613934 19.128233 10.638695 19.061661 6.794147 c -18.995644 2.557825 13.450433 0.701872 10.373089 2.859669 c -h -f -n -Q - -endstream -endobj - -3 0 obj - 1544 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000001634 00000 n -0000001657 00000 n -0000001830 00000 n -0000001904 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -1963 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Contents.json deleted file mode 100644 index 8537b89c0b..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Stickers.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Stickers.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Stickers.pdf deleted file mode 100644 index f22c436ff8..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stickers.imageset/Stickers.pdf +++ /dev/null @@ -1,149 +0,0 @@ -%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 6.000000 6.000000 cm -1.000000 1.000000 1.000000 scn -0.435974 15.815962 m -0.000000 14.960315 0.000000 13.840210 0.000000 11.600000 c -0.000000 5.538462 l -0.000000 4.106961 0.000000 3.391212 0.181116 2.809988 c -0.572199 1.554960 1.554961 0.572199 2.809988 0.181116 c -3.391211 0.000000 4.106961 0.000000 5.538461 0.000000 c -7.132836 0.000000 8.332593 0.000000 9.296358 0.049431 c -9.392109 0.065231 9.458178 0.084789 9.510882 0.106621 c -9.837995 0.242115 10.097885 0.502007 10.233379 0.829117 c -10.269915 0.917324 10.300633 1.046162 10.317467 1.296604 c -10.334650 1.552246 10.335000 1.881901 10.335000 2.365276 c -10.335000 2.390583 l -10.334996 3.020454 10.334994 3.541773 10.356327 3.976810 c -9.927901 3.881188 9.474939 3.834996 8.999999 3.834996 c -7.566772 3.834998 6.432307 4.408777 5.671366 4.962191 c -5.289614 5.239828 4.994541 5.517408 4.793315 5.727383 c -4.692429 5.832656 4.614337 5.921766 4.559963 5.986553 c -4.532754 6.018972 4.511416 6.045382 4.496066 6.064772 c -4.477521 6.088497 l -4.471629 6.096197 l -4.469531 6.098966 l -4.468694 6.100076 l -4.468329 6.100561 l -4.468162 6.100784 4.468000 6.101000 5.000000 6.500000 c -5.532000 6.899000 l -5.531705 6.899393 l -5.538846 6.890306 l -5.546690 6.880400 5.560019 6.863840 5.578709 6.841572 c -5.616131 6.796984 5.674759 6.729844 5.753560 6.647617 c -5.911709 6.482592 6.147886 6.260172 6.453634 6.037808 c -7.067693 5.591221 7.933228 5.164998 9.000001 5.164996 c -9.630135 5.164996 10.171014 5.264124 10.633532 5.448587 c -10.639013 5.461485 10.644600 5.474353 10.650297 5.487185 c -11.018882 6.317377 11.682623 6.981118 12.512815 7.349703 c -12.904016 7.523386 13.325486 7.596285 13.811561 7.631045 c -14.286482 7.665009 14.873948 7.665005 15.609417 7.665000 c -15.634724 7.665000 l -16.118099 7.665000 16.447754 7.665350 16.703396 7.682533 c -16.953838 7.699367 17.082676 7.730085 17.170883 7.766621 c -17.497993 7.902115 17.757885 8.162005 17.893379 8.489118 c -17.915211 8.541822 17.934769 8.607892 17.950569 8.703643 c -18.000000 9.667408 18.000000 10.867164 18.000000 12.461538 c -18.000000 13.893039 18.000000 14.608788 17.818884 15.190012 c -17.427801 16.445040 16.445040 17.427801 15.190012 17.818884 c -14.608788 18.000000 13.893039 18.000000 12.461538 18.000000 c -6.400000 18.000000 l -4.159790 18.000000 3.039685 18.000000 2.184038 17.564026 c -1.431390 17.180532 0.819467 16.568611 0.435974 15.815962 c -h -17.652130 6.526627 m -17.381193 6.419186 17.097967 6.376053 16.792589 6.355527 c -16.487034 6.334990 16.112497 6.334994 15.657384 6.335000 c -15.634724 6.335000 l -14.868204 6.335000 14.328320 6.334603 13.906430 6.304433 c -13.490259 6.274672 13.242615 6.218527 13.052504 6.134122 c -12.523582 5.899294 12.100706 5.476418 11.865878 4.947496 c -11.781473 4.757385 11.725328 4.509741 11.695567 4.093570 c -11.665397 3.671680 11.665000 3.131796 11.665000 2.365276 c -11.665000 2.342616 l -11.665006 1.887503 11.665010 1.512966 11.644473 1.207411 c -11.623947 0.902033 11.580814 0.618807 11.473373 0.347870 c -11.542342 0.366713 11.610334 0.386574 11.677527 0.407513 c -14.501338 1.287447 16.712553 3.498662 17.592487 6.322473 c -17.613426 6.389666 17.633287 6.457658 17.652130 6.526627 c -h -5.531581 6.899558 m -5.311111 7.192892 4.894629 7.252222 4.601000 7.032000 c -4.307185 6.811639 4.247638 6.394815 4.468000 6.101000 c -5.000000 6.500000 l -5.532000 6.899000 5.531850 6.899200 5.531705 6.899393 c -5.531581 6.899558 l -h -7.500000 11.187500 m -7.500000 10.324555 6.940356 9.625000 6.250000 9.625000 c -5.559644 9.625000 5.000000 10.324555 5.000000 11.187500 c -5.000000 12.050446 5.559644 12.750000 6.250000 12.750000 c -6.940356 12.750000 7.500000 12.050446 7.500000 11.187500 c -h -13.000000 11.187500 m -13.000000 10.324555 12.440355 9.625000 11.750000 9.625000 c -11.059645 9.625000 10.500000 10.324555 10.500000 11.187500 c -10.500000 12.050446 11.059645 12.750000 11.750000 12.750000 c -12.440355 12.750000 13.000000 12.050446 13.000000 11.187500 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 3949 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000004039 00000 n -0000004062 00000 n -0000004235 00000 n -0000004309 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -4368 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stories.imageset/stories.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stories.imageset/stories.pdf deleted file mode 100644 index 73eb08d6b7..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Stories.imageset/stories.pdf +++ /dev/null @@ -1,245 +0,0 @@ -%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 4.000000 2.000000 cm -1.000000 1.000000 1.000000 scn -8.000000 1.000000 m -8.552285 1.000000 9.000000 1.447716 9.000000 2.000000 c -9.000000 2.552284 8.552285 3.000000 8.000000 3.000000 c -8.000000 1.000000 l -h -8.000000 17.000000 m -8.552285 17.000000 9.000000 17.447716 9.000000 18.000000 c -9.000000 18.552284 8.552285 19.000000 8.000000 19.000000 c -8.000000 17.000000 l -h -8.000000 3.000000 m -4.134007 3.000000 1.000000 6.134007 1.000000 10.000000 c --1.000000 10.000000 l --1.000000 5.029437 3.029437 1.000000 8.000000 1.000000 c -8.000000 3.000000 l -h -1.000000 10.000000 m -1.000000 13.865993 4.134007 17.000000 8.000000 17.000000 c -8.000000 19.000000 l -3.029437 19.000000 -1.000000 14.970563 -1.000000 10.000000 c -1.000000 10.000000 l -h -f -n -Q -q -1.000000 0.000000 -0.000000 1.000000 4.000000 2.000000 cm -1.000000 1.000000 1.000000 scn -16.962595 10.825375 m -16.912516 11.375383 16.426048 11.780659 15.876040 11.730579 c -15.326030 11.680502 14.920755 11.194035 14.970834 10.644025 c -16.962595 10.825375 l -h -13.383688 14.474234 m -13.736948 14.049704 14.367471 13.991926 14.792002 14.345186 c -15.216533 14.698445 15.274309 15.328969 14.921049 15.753500 c -13.383688 14.474234 l -h -13.753499 16.921051 m -13.328968 17.274309 12.698444 17.216534 12.345185 16.792002 c -11.991926 16.367472 12.049703 15.736948 12.474234 15.383689 c -13.753499 16.921051 l -h -8.644025 16.970833 m -9.194035 16.920755 9.680502 17.326031 9.730579 17.876040 c -9.780658 18.426048 9.375383 18.912516 8.825374 18.962595 c -8.644025 16.970833 l -h -7.174626 18.962595 m -6.624616 18.912516 6.219342 18.426048 6.269420 17.876040 c -6.319498 17.326031 6.805965 16.920755 7.355975 16.970833 c -7.174626 18.962595 l -h -3.525766 15.383688 m -3.950296 15.736948 4.008073 16.367472 3.654814 16.792002 c -3.301554 17.216532 2.671031 17.274309 2.246500 16.921049 c -3.525766 15.383688 l -h -1.078950 15.753498 m -0.725690 15.328968 0.783467 14.698444 1.207998 14.345185 c -1.632528 13.991926 2.263052 14.049703 2.616311 14.474234 c -1.078950 15.753498 l -h -1.029166 10.644024 m -1.079245 11.194035 0.673970 11.680502 0.123960 11.730579 c --0.426049 11.780659 -0.912517 11.375383 -0.962595 10.825375 c -1.029166 10.644024 l -h --0.962595 9.174625 m --0.912516 8.624616 -0.426049 8.219341 0.123961 8.269420 c -0.673970 8.319498 1.079245 8.805965 1.029166 9.355975 c --0.962595 9.174625 l -h -2.616312 5.525765 m -2.263052 5.950296 1.632529 6.008073 1.207998 5.654814 c -0.783468 5.301555 0.725691 4.671031 1.078950 4.246500 c -2.616312 5.525765 l -h -2.246501 3.078950 m -2.671032 2.725690 3.301555 2.783467 3.654815 3.207997 c -4.008074 3.632528 3.950297 4.263052 3.525767 4.616311 c -2.246501 3.078950 l -h -7.355976 3.029166 m -6.805966 3.079245 6.319499 2.673970 6.269420 2.123960 c -6.219342 1.573952 6.624617 1.087484 7.174626 1.037405 c -7.355976 3.029166 l -h -8.825375 1.037405 m -9.375384 1.087484 9.780659 1.573952 9.730580 2.123960 c -9.680502 2.673970 9.194035 3.079245 8.644025 3.029166 c -8.825375 1.037405 l -h -12.474235 4.616312 m -12.049704 4.263052 11.991927 3.632529 12.345186 3.207998 c -12.698445 2.783467 13.328969 2.725691 13.753500 3.078951 c -12.474235 4.616312 l -h -14.921050 4.246501 m -15.274310 4.671032 15.216533 5.301556 14.792003 5.654815 c -14.367472 6.008074 13.736948 5.950297 13.383689 5.525766 c -14.921050 4.246501 l -h -14.970834 9.355975 m -14.920755 8.805965 15.326030 8.319498 15.876040 8.269421 c -16.426048 8.219342 16.912516 8.624617 16.962595 9.174626 c -14.970834 9.355975 l -h -17.000000 10.000000 m -17.000000 10.278004 16.987366 10.553321 16.962595 10.825375 c -14.970834 10.644025 l -14.990122 10.432182 15.000000 10.217377 15.000000 10.000000 c -17.000000 10.000000 l -h -14.921049 15.753500 m -14.568322 16.177391 14.177390 16.568323 13.753499 16.921051 c -12.474234 15.383689 l -12.804405 15.108947 13.108946 14.804406 13.383688 14.474234 c -14.921049 15.753500 l -h -8.825374 18.962595 m -8.553321 18.987366 8.278004 19.000000 8.000000 19.000000 c -8.000000 17.000000 l -8.217377 17.000000 8.432181 16.990122 8.644025 16.970833 c -8.825374 18.962595 l -h -8.000000 19.000000 m -7.721996 19.000000 7.446679 18.987366 7.174626 18.962595 c -7.355975 16.970833 l -7.567818 16.990122 7.782623 17.000000 8.000000 17.000000 c -8.000000 19.000000 l -h -2.246500 16.921049 m -1.822609 16.568323 1.431677 16.177389 1.078950 15.753498 c -2.616311 14.474234 l -2.891053 14.804405 3.195594 15.108946 3.525766 15.383688 c -2.246500 16.921049 l -h --0.962595 10.825375 m --0.987365 10.553320 -1.000000 10.278004 -1.000000 10.000000 c -1.000000 10.000000 l -1.000000 10.217377 1.009878 10.432181 1.029166 10.644024 c --0.962595 10.825375 l -h --1.000000 10.000000 m --1.000000 9.721996 -0.987365 9.446679 -0.962595 9.174625 c -1.029166 9.355975 l -1.009878 9.567819 1.000000 9.782623 1.000000 10.000000 c --1.000000 10.000000 l -h -1.078950 4.246500 m -1.431678 3.822609 1.822610 3.431677 2.246501 3.078950 c -3.525767 4.616311 l -3.195595 4.891053 2.891054 5.195594 2.616312 5.525765 c -1.078950 4.246500 l -h -7.174626 1.037405 m -7.446680 1.012634 7.721996 1.000000 8.000000 1.000000 c -8.000000 3.000000 l -7.782624 3.000000 7.567819 3.009878 7.355976 3.029166 c -7.174626 1.037405 l -h -8.000000 1.000000 m -8.278004 1.000000 8.553321 1.012634 8.825375 1.037405 c -8.644025 3.029166 l -8.432181 3.009878 8.217377 3.000000 8.000000 3.000000 c -8.000000 1.000000 l -h -13.753500 3.078951 m -14.177391 3.431678 14.568323 3.822610 14.921050 4.246501 c -13.383689 5.525766 l -13.108947 5.195595 12.804406 4.891054 12.474235 4.616312 c -13.753500 3.078951 l -h -16.962595 9.174626 m -16.987366 9.446679 17.000000 9.721996 17.000000 10.000000 c -15.000000 10.000000 l -15.000000 9.782623 14.990122 9.567819 14.970834 9.355975 c -16.962595 9.174626 l -h -f -n -Q - -endstream -endobj - -3 0 obj - 5677 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 24.000000 24.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000005767 00000 n -0000005790 00000 n -0000005963 00000 n -0000006037 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -6096 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Todo.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Todo.imageset/Contents.json deleted file mode 100644 index 2f8a451be0..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Todo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "checks.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/Contents.json deleted file mode 100644 index 2d7643cb2c..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "translatepremium.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/translatepremium.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/translatepremium.pdf deleted file mode 100644 index eb8899318f..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Translation.imageset/translatepremium.pdf +++ /dev/null @@ -1,125 +0,0 @@ -%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 10.920044 10.255630 cm -1.000000 1.000000 1.000000 scn -5.750232 15.581270 m -5.426097 15.905405 4.900570 15.905405 4.576435 15.581270 c -4.252300 15.257134 4.252300 14.731607 4.576435 14.407473 c -6.743102 12.240807 l -7.067237 11.916671 7.592764 11.916671 7.916899 12.240807 c -8.241034 12.564941 8.241034 13.090468 7.916899 13.414603 c -5.750232 15.581270 l -h -12.746666 11.491037 m -10.580000 11.491037 l -4.080000 11.491037 l -1.913333 11.491037 l -1.454937 11.491037 1.083333 11.119434 1.083333 10.661037 c -1.083333 10.202641 1.454937 9.831038 1.913333 9.831038 c -3.267690 9.831038 l -3.397668 6.842636 4.247280 4.446305 5.928415 2.763829 c -4.622104 2.096912 2.938897 1.741038 0.830000 1.741038 c -0.371604 1.741038 0.000000 1.369434 0.000000 0.911038 c -0.000000 0.452641 0.371604 0.081038 0.830000 0.081038 c -3.431095 0.081038 5.621857 0.582098 7.330002 1.650631 c -9.038148 0.582098 11.228905 0.081038 13.830000 0.081038 c -14.288396 0.081038 14.660000 0.452641 14.660000 0.911038 c -14.660000 1.369434 14.288396 1.741038 13.830000 1.741038 c -11.721103 1.741038 10.037899 2.096912 8.731588 2.763829 c -10.412724 4.446305 11.262332 6.842636 11.392309 9.831038 c -12.746666 9.831038 l -13.205063 9.831038 13.576666 10.202641 13.576666 10.661037 c -13.576666 11.119434 13.205063 11.491037 12.746666 11.491037 c -h -7.104398 3.935437 m -5.818785 5.221051 5.057345 7.146626 4.929302 9.831038 c -9.730699 9.831038 l -9.602655 7.146626 8.841215 5.221051 7.555602 3.935437 c -7.482480 3.862315 7.407287 3.790889 7.330002 3.721178 c -7.252717 3.790889 7.177521 3.862315 7.104398 3.935437 c -h -f* -n -Q -q -1.000000 0.000000 -0.000000 1.000000 4.419800 5.891495 cm -1.000000 1.000000 1.000000 scn -6.473423 13.172696 m -6.345813 13.484631 6.042246 13.688431 5.705219 13.688431 c -5.368191 13.688431 5.064625 13.484631 4.937015 13.172696 c -0.062015 1.256029 l --0.111549 0.831761 0.091686 0.347124 0.515953 0.173560 c -0.940221 -0.000004 1.424859 0.203231 1.598423 0.627499 c -3.160168 4.445098 l -8.250270 4.445098 l -9.812015 0.627499 l -9.985579 0.203231 10.470217 -0.000004 10.894484 0.173560 c -11.318751 0.347124 11.521987 0.831761 11.348423 1.256029 c -6.473423 13.172696 l -h -7.571179 6.105098 m -5.705219 10.666334 l -3.839258 6.105098 l -7.571179 6.105098 l -h -f* -n -Q - -endstream -endobj - -3 0 obj - 2291 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000002381 00000 n -0000002404 00000 n -0000002577 00000 n -0000002651 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -2710 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Files.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Files.pdf deleted file mode 100644 index 3029b60167..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Upload.imageset/Files.pdf +++ /dev/null @@ -1,119 +0,0 @@ -%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 7.000000 6.000000 cm -1.000000 1.000000 1.000000 scn -5.330000 18.000000 m -5.807298 18.000000 6.123703 17.999550 6.367812 17.982895 c -6.604466 17.966749 6.711959 17.938187 6.777740 17.910938 c -7.064423 17.792191 7.292191 17.564423 7.410939 17.277740 c -7.438186 17.211960 7.466748 17.104465 7.482895 16.867813 c -7.499550 16.623703 7.500000 16.307299 7.500000 15.830000 c -7.500000 13.530003 l -7.500000 13.496872 l -7.499987 12.965037 7.499976 12.516354 7.530005 12.148819 c -7.561447 11.763987 7.629904 11.395631 7.808452 11.045210 c -8.079773 10.512712 8.512709 10.079777 9.045207 9.808455 c -9.395627 9.629908 9.763983 9.561451 10.148815 9.530008 c -10.516351 9.499980 10.965034 9.499990 11.496870 9.500004 c -11.530001 9.500004 l -13.829997 9.500004 l -14.307296 9.500004 14.623703 9.499555 14.867812 9.482899 c -15.104466 9.466752 15.211960 9.438190 15.277740 9.410942 c -15.564423 9.292194 15.792191 9.064426 15.910938 8.777744 c -15.938186 8.711964 15.966748 8.604470 15.982895 8.367816 c -15.999551 8.123706 16.000000 7.807300 16.000000 7.330000 c -16.000000 4.800000 l -16.000000 3.119843 16.000000 2.279763 15.673019 1.638029 c -15.385400 1.073542 14.926457 0.614601 14.361972 0.326981 c -13.720237 0.000000 12.880157 0.000000 11.200000 0.000000 c -4.800000 0.000000 l -3.119843 0.000000 2.279764 0.000000 1.638029 0.326981 c -1.073542 0.614601 0.614601 1.073542 0.326980 1.638029 c -0.000000 2.279763 0.000000 3.119843 0.000000 4.800000 c -0.000000 13.200001 l -0.000000 14.880157 0.000000 15.720236 0.326980 16.361971 c -0.614601 16.926458 1.073542 17.385399 1.638029 17.673019 c -2.279764 18.000000 3.119843 18.000000 4.800000 18.000000 c -5.330000 18.000000 l -h -15.621112 11.042418 m -15.558301 11.176268 15.488032 11.306717 15.410561 11.433140 c -15.163194 11.836806 14.817290 12.182710 14.125484 12.874516 c -10.874516 16.125484 l -10.182710 16.817291 9.836806 17.163193 9.433140 17.410561 c -9.306716 17.488033 9.176266 17.558304 9.042415 17.621115 c -9.097363 17.412268 9.124138 17.199299 9.139045 16.980810 c -9.160017 16.673437 9.160009 16.300030 9.160000 15.857494 c -9.160000 15.830000 l -9.160000 13.530003 l -9.160000 12.956255 9.160645 12.575861 9.184492 12.283996 c -9.207546 12.001820 9.248083 11.876238 9.287522 11.798835 c -9.399694 11.578686 9.578682 11.399698 9.798831 11.287526 c -9.876234 11.248087 10.001816 11.207550 10.283993 11.184496 c -10.575858 11.160649 10.956251 11.160004 11.530001 11.160004 c -13.829997 11.160004 l -13.857491 11.160004 l -14.300028 11.160013 14.673436 11.160021 14.980811 11.139048 c -15.199297 11.124141 15.412265 11.097366 15.621112 11.042418 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 2637 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000002727 00000 n -0000002750 00000 n -0000002923 00000 n -0000002997 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -3056 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Contents.json deleted file mode 100644 index 8065bf20cd..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Voice.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Voice.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Voice.pdf deleted file mode 100644 index c18024241d..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Voice.imageset/Voice.pdf +++ /dev/null @@ -1,91 +0,0 @@ -%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 7.000000 4.400036 cm -1.000000 1.000000 1.000000 scn -4.000000 16.599964 m -4.000000 18.809103 5.790861 20.599964 8.000000 20.599964 c -10.209139 20.599964 12.000000 18.809103 12.000000 16.599964 c -12.000000 11.599964 l -12.000000 9.390825 10.209139 7.599964 8.000000 7.599964 c -5.790861 7.599964 4.000000 9.390825 4.000000 11.599964 c -4.000000 16.599964 l -h -1.000000 12.699940 m -1.552285 12.699940 2.000000 12.252225 2.000000 11.699940 c -2.000000 11.599937 l -2.000000 8.286230 4.686291 5.599939 8.000000 5.599939 c -11.313708 5.599939 14.000000 8.286230 14.000000 11.599938 c -14.000000 11.699940 l -14.000000 12.252225 14.447715 12.699940 15.000000 12.699940 c -15.552285 12.699940 16.000000 12.252225 16.000000 11.699940 c -16.000000 11.599938 l -16.000000 7.520320 12.946311 4.153931 9.000000 3.661833 c -9.000000 1.000000 l -9.000000 0.447716 8.552285 0.000000 8.000000 0.000000 c -7.447715 0.000000 7.000000 0.447716 7.000000 1.000000 c -7.000000 3.661833 l -3.053689 4.153931 0.000000 7.520320 0.000000 11.599937 c -0.000000 11.699940 l -0.000000 12.252225 0.447715 12.699940 1.000000 12.699940 c -h -f* -n -Q - -endstream -endobj - -3 0 obj - 1162 -endobj - -4 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.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 - << /Pages 5 0 R - /Type /Catalog - >> -endobj - -xref -0 7 -0000000000 65535 f -0000000010 00000 n -0000000034 00000 n -0000001252 00000 n -0000001275 00000 n -0000001448 00000 n -0000001522 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 6 0 R - /Size 7 ->> -startxref -1581 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/Contents.json deleted file mode 100644 index 3bcc9458d1..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "wallpapers_30.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/wallpapers_30.pdf b/submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/wallpapers_30.pdf deleted file mode 100644 index c612692389..0000000000 --- a/submodules/TelegramUI/Images.xcassets/Premium/Perk/Wallpapers.imageset/wallpapers_30.pdf +++ /dev/null @@ -1,227 +0,0 @@ -%PDF-1.7 - -1 0 obj - << /Type /XObject - /Length 2 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 5.169983 5.500000 cm -1.000000 1.000000 1.000000 scn -5.329998 14.199999 m -5.329998 15.880157 5.329998 16.720236 5.656979 17.361971 c -5.944599 17.926458 6.403540 18.385399 6.968027 18.673019 c -7.609762 19.000000 8.449841 19.000000 10.129998 19.000000 c -14.529998 19.000000 l -16.210155 19.000000 17.050236 19.000000 17.691971 18.673019 c -18.256454 18.385399 18.715397 17.926458 19.003017 17.361971 c -19.329998 16.720236 19.329998 15.880157 19.329998 14.200001 c -19.329998 4.800000 l -19.329998 4.459455 19.329998 4.153422 19.327274 3.876557 c -16.610687 6.802114 l -16.590633 6.823712 l -16.590622 6.823724 l -16.590593 6.823752 l -16.404222 7.024496 16.230936 7.211143 16.073156 7.354791 c -15.903043 7.509670 15.694090 7.669102 15.421208 7.762256 c -15.037927 7.893097 14.622069 7.893097 14.238788 7.762256 c -13.965906 7.669102 13.756953 7.509670 13.586840 7.354791 c -13.429056 7.211139 13.255768 7.024489 13.069391 6.823743 c -13.069365 6.823714 l -13.049310 6.802114 l -12.294284 5.989010 l -10.610686 7.802114 l -10.590632 7.823713 l -10.590609 7.823739 l -10.404230 8.024488 10.230940 8.211139 10.073156 8.354791 c -9.903043 8.509670 9.694090 8.669102 9.421208 8.762256 c -9.037927 8.893097 8.622069 8.893097 8.238788 8.762256 c -7.965906 8.669102 7.756953 8.509670 7.586840 8.354791 c -7.429063 8.211146 7.255784 8.024508 7.069416 7.823771 c -7.069391 7.823745 l -7.069364 7.823713 l -7.049310 7.802114 l -5.329998 5.950548 l -5.329998 14.199999 l -h -13.426936 4.769231 m -17.594881 0.280674 l -17.627785 0.295330 17.660122 0.310753 17.691971 0.326981 c -18.256454 0.614601 18.715397 1.073542 19.003017 1.638029 c -19.019379 1.670141 19.034924 1.702751 19.049690 1.735937 c -15.394249 5.672565 l -15.180903 5.902323 15.055449 6.036421 14.955612 6.127316 c -14.910778 6.168135 14.884727 6.187207 14.873613 6.194696 c -14.845034 6.202283 14.814962 6.202283 14.786383 6.194696 c -14.775269 6.187207 14.749218 6.168135 14.704384 6.127316 c -14.604548 6.036421 14.479093 5.902323 14.265747 5.672565 c -13.426936 4.769231 l -h -9.394249 6.672565 m -15.586230 0.004278 l -15.275205 0.000000 14.925926 0.000000 14.529998 0.000000 c -10.129999 0.000000 l -8.449841 0.000000 7.609762 0.000000 6.968027 0.326981 c -6.403540 0.614601 5.944599 1.073542 5.656979 1.638029 c -5.426104 2.091145 5.358245 2.643147 5.338301 3.519931 c -8.265747 6.672565 l -8.479093 6.902323 8.604548 7.036421 8.704384 7.127316 c -8.749217 7.168135 8.775269 7.187207 8.786383 7.194696 c -8.814962 7.202284 8.845034 7.202284 8.873613 7.194696 c -8.884727 7.187207 8.910779 7.168135 8.955612 7.127316 c -9.055449 7.036421 9.180903 6.902323 9.394249 6.672565 c -h -17.329998 15.500000 m -17.329998 14.671573 16.658424 14.000000 15.829998 14.000000 c -15.001571 14.000000 14.329998 14.671573 14.329998 15.500000 c -14.329998 16.328426 15.001571 17.000000 15.829998 17.000000 c -16.658424 17.000000 17.329998 16.328426 17.329998 15.500000 c -h -3.330000 17.830000 m -1.490892 17.830000 0.000000 16.339108 0.000000 14.500000 c -0.000000 4.500000 l -0.000000 2.660892 1.490892 1.170000 3.330000 1.170000 c -3.788396 1.170000 4.160000 1.541603 4.160000 2.000000 c -4.160000 2.458397 3.788396 2.830000 3.330000 2.830000 c -2.407685 2.830000 1.660000 3.577684 1.660000 4.500000 c -1.660000 14.500000 l -1.660000 15.422316 2.407685 16.170000 3.330000 16.170000 c -3.788396 16.170000 4.160000 16.541603 4.160000 17.000000 c -4.160000 17.458397 3.788396 17.830000 3.330000 17.830000 c -h -f* -n -Q - -endstream -endobj - -2 0 obj - 3449 -endobj - -3 0 obj - << /Type /XObject - /Length 4 0 R - /Group << /Type /Group - /S /Transparency - >> - /Subtype /Form - /Resources << >> - /BBox [ 0.000000 0.000000 30.000000 30.000000 ] - >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm -0.000000 0.000000 0.000000 scn -0.000000 18.799999 m -0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c -1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c -5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c -18.799999 30.000000 l -22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c -27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c -30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c -30.000000 11.200001 l -30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c -28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c -24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c -11.200000 0.000000 l -7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c -2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c -0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c -0.000000 18.799999 l -h -f -n -Q - -endstream -endobj - -4 0 obj - 944 -endobj - -5 0 obj - << /XObject << /X1 1 0 R >> - /ExtGState << /E1 << /SMask << /Type /Mask - /G 3 0 R - /S /Alpha - >> - /Type /ExtGState - >> >> - >> -endobj - -6 0 obj - << /Length 7 0 R >> -stream -/DeviceRGB CS -/DeviceRGB cs -q -/E1 gs -/X1 Do -Q - -endstream -endobj - -7 0 obj - 46 -endobj - -8 0 obj - << /Annots [] - /Type /Page - /MediaBox [ 0.000000 0.000000 30.000000 30.000000 ] - /Resources 5 0 R - /Contents 6 0 R - /Parent 9 0 R - >> -endobj - -9 0 obj - << /Kids [ 8 0 R ] - /Count 1 - /Type /Pages - >> -endobj - -10 0 obj - << /Pages 9 0 R - /Type /Catalog - >> -endobj - -xref -0 11 -0000000000 65535 f -0000000010 00000 n -0000003707 00000 n -0000003730 00000 n -0000004922 00000 n -0000004944 00000 n -0000005242 00000 n -0000005344 00000 n -0000005365 00000 n -0000005538 00000 n -0000005612 00000 n -trailer -<< /ID [ (some) (id) ] - /Root 10 0 R - /Size 11 ->> -startxref -5672 -%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift b/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift index 6e84242fbf..c53d8b004d 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift @@ -4469,6 +4469,33 @@ extension ChatControllerImpl { return } self.controllerInteraction?.displayUndo(content) + }, presentInputTextTranslation: { [weak self] text, replace in + let _ = self + guard let self else { + return + } + let (_, language) = canTranslateText(context: context, text: text.string, showTranslate: true, ignoredLanguages: nil) + + let entities = generateChatInputTextEntities(text) + presentTranslateScreen( + context: self.context, + text: text.string, + entities: entities, + canCopy: true, + fromLanguage: language, + replaceText: { text, entities in + replace(chatInputStateStringWithAppliedEntities(text, entities: entities)) + }, + pushController: { [weak self] c in + self?.push(c) + }, + presentController: { [weak self] c in + self?.present(c, in: .window(.root)) + }, + display: { [weak self] c in + self?.push(c) + } + ) }, sendEmoji: { [weak self] text, attribute, immediately in guard let self else { return diff --git a/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift b/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift index 25fa726887..d28ce57345 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift @@ -530,14 +530,14 @@ private func chatReplyOptions(selfController: ChatControllerImpl, sourceView: UI let items = generateChatReplyOptionItems(selfController: selfController, chatController: chatController) - chatController.performTextSelectionAction = { [weak selfController] message, canCopy, text, action in + chatController.performTextSelectionAction = { [weak selfController] message, canCopy, text, entities, action in guard let selfController, let contextController = getContextController() else { return } contextController.dismiss() - selfController.controllerInteraction?.performTextSelectionAction(message, canCopy, text, action) + selfController.controllerInteraction?.performTextSelectionAction(message, canCopy, text, entities, action) } return ContextController.Source( diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 329fe46866..ddd63f9677 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -577,7 +577,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G var avatarNode: ChatAvatarNavigationNode? - var performTextSelectionAction: ((Message?, Bool, NSAttributedString, TextSelectionAction) -> Void)? + var performTextSelectionAction: ((Message?, Bool, NSAttributedString, [MessageTextEntity]?, TextSelectionAction) -> Void)? var performOpenURL: ((Message?, String, Promise?) -> Void)? var networkSpeedEventsDisposable: Disposable? @@ -3890,13 +3890,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G }) }, delay: true) } - }, performTextSelectionAction: { [weak self] message, canCopy, text, action in + }, performTextSelectionAction: { [weak self] message, canCopy, text, entities, action in guard let strongSelf = self else { return } if let performTextSelectionAction = strongSelf.performTextSelectionAction { - performTextSelectionAction(message, canCopy, text, action) + performTextSelectionAction(message, canCopy, text, entities, action) return } @@ -3963,9 +3963,14 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G presentTranslateScreen( context: context, text: text.string, + entities: entities ?? [], canCopy: canCopy, fromLanguage: language, ignoredLanguages: translationSettings.ignoredLanguages, + translateChat: { [weak self] _, toLang in + self?.interfaceInteraction?.changeTranslationLanguage(toLang) + self?.interfaceInteraction?.toggleTranslation(.translated) + }, pushController: { [weak self] c in self?.effectiveNavigationController?._keepModalDismissProgress = true self?.push(c) @@ -3974,7 +3979,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self?.present(c, in: .window(.root)) }, display: { [weak self] c in - self?.present(c, in: .window(.root)) + self?.push(c) } ) }) diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index 51902108d4..db6c25aa35 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -1359,7 +1359,14 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState actions.append(.action(ContextMenuActionItem(text: chatPresentationInterfaceState.strings.Conversation_ContextMenuTranslate, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Translate"), color: theme.actionSheet.primaryTextColor) }, action: { _, f in - controllerInteraction.performTextSelectionAction(message, !isCopyProtected, NSAttributedString(string: messageText), .translate) + var messageEntities: [MessageTextEntity]? + for attribute in message.attributes { + if let attribute = attribute as? TextEntitiesMessageAttribute { + messageEntities = attribute.entities + } + } + + controllerInteraction.performTextSelectionAction(message, !isCopyProtected, NSAttributedString(string: messageText), messageEntities, .translate) f(.default) }))) } @@ -1380,7 +1387,7 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState text = translation.text } - controllerInteraction.performTextSelectionAction(message, !isCopyProtected, NSAttributedString(string: text), .speak) + controllerInteraction.performTextSelectionAction(message, !isCopyProtected, NSAttributedString(string: text), nil, .speak) f(.default) }))) } diff --git a/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift b/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift index af415a12a1..879170fee8 100644 --- a/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift +++ b/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift @@ -170,7 +170,7 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, ASGestu }, scheduleCurrentMessage: { _ in }, sendScheduledMessagesNow: { _ in }, editScheduledMessagesTime: { _ in - }, performTextSelectionAction: { _, _, _, _ in + }, performTextSelectionAction: { _, _, _, _, _ in }, displayImportedMessageTooltip: { _ in }, displaySwipeToReplyHint: { }, dismissReplyMarkupMessage: { _ in diff --git a/submodules/TelegramUI/Sources/PollResultsController.swift b/submodules/TelegramUI/Sources/PollResultsController.swift index c1b17478d2..ae6a433669 100644 --- a/submodules/TelegramUI/Sources/PollResultsController.swift +++ b/submodules/TelegramUI/Sources/PollResultsController.swift @@ -364,7 +364,7 @@ private func pollResultsControllerEntries(presentationData: PresentationData, me let optionExpandedAtCount = state.expandedOptions[option.opaqueIdentifier] let peers = optionState.peers - let count = optionState.count + let count = optionState.count ?? 0 let displayCount: Int if peers.count > collapsedInitialLimit { diff --git a/submodules/TelegramUI/Sources/SharedAccountContext.swift b/submodules/TelegramUI/Sources/SharedAccountContext.swift index 99a409a84b..73f6119a36 100644 --- a/submodules/TelegramUI/Sources/SharedAccountContext.swift +++ b/submodules/TelegramUI/Sources/SharedAccountContext.swift @@ -2452,7 +2452,7 @@ public final class SharedAccountContextImpl: SharedAccountContext { }, editScheduledMessagesTime: { _ in }, - performTextSelectionAction: { _, _, _, _ in + performTextSelectionAction: { _, _, _, _, _ in }, displayImportedMessageTooltip: { _ in }, @@ -3542,10 +3542,7 @@ public final class SharedAccountContextImpl: SharedAccountContext { } public func makeGiftStoreController(context: AccountContext, peerId: EnginePeer.Id, gift: StarGift.Gift) -> ViewController { - guard let starsContext = context.starsContext else { - fatalError() - } - let controller = GiftStoreScreen(context: context, starsContext: starsContext, peerId: peerId, gift: gift) + let controller = GiftStoreScreen(context: context, peerId: peerId, gift: gift) return controller } diff --git a/submodules/TelegramUI/Sources/TransformOutgoingMessageMedia.swift b/submodules/TelegramUI/Sources/TransformOutgoingMessageMedia.swift index 51b7b85aac..90bb9a516b 100644 --- a/submodules/TelegramUI/Sources/TransformOutgoingMessageMedia.swift +++ b/submodules/TelegramUI/Sources/TransformOutgoingMessageMedia.swift @@ -175,7 +175,7 @@ public func transformOutgoingMessageMedia(postbox: Postbox, network: Network, me let thumbnailResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) postbox.mediaBox.storeResourceData(thumbnailResource.id, data: smallestData) representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(smallestSize), resource: thumbnailResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false)) - let updatedImage = TelegramMediaImage(imageId: image.imageId, representations: representations, immediateThumbnailData: image.immediateThumbnailData, reference: image.reference, partialReference: image.partialReference, flags: []) + let updatedImage = TelegramMediaImage(imageId: image.imageId, representations: representations, immediateThumbnailData: image.immediateThumbnailData, reference: image.reference, partialReference: image.partialReference, flags: [], video: image.video) return .single(media.withUpdatedMedia(updatedImage)) } } diff --git a/submodules/TranslateUI/BUILD b/submodules/TranslateUI/BUILD index fb3aaf6cac..b559ed1036 100644 --- a/submodules/TranslateUI/BUILD +++ b/submodules/TranslateUI/BUILD @@ -34,6 +34,13 @@ swift_library( "//submodules/ShimmerEffect:ShimmerEffect", "//submodules/Components/ResizableSheetComponent", "//submodules/TelegramUI/Components/GlassBarButtonComponent", + "//submodules/TelegramUI/Components/ListSectionComponent", + "//submodules/TelegramUI/Components/ListActionItemComponent", + "//submodules/TelegramUI/Components/PlainButtonComponent", + "//submodules/TelegramUI/Components/ButtonComponent", + "//submodules/TextFormat", + "//submodules/Pasteboard", + "//submodules/TelegramUI/Components/TranslationLanguagesContextMenuContent", ], visibility = [ "//visibility:public", diff --git a/submodules/TranslateUI/Sources/TranslateScreen.swift b/submodules/TranslateUI/Sources/TranslateScreen.swift index a7d9db798d..be003b82da 100644 --- a/submodules/TranslateUI/Sources/TranslateScreen.swift +++ b/submodules/TranslateUI/Sources/TranslateScreen.swift @@ -17,6 +17,18 @@ import UndoUI import SwiftUI import ResizableSheetComponent import GlassBarButtonComponent +import ListSectionComponent +import ListActionItemComponent +import PlainButtonComponent +import ButtonComponent +import TextFormat +import Pasteboard +import ContextUI +import TranslationLanguagesContextMenuContent +import TelegramUIPreferences +import Markdown + +private let translateToTag = GenericComponentViewTag() private func generateExpandBackground(size: CGSize, color: UIColor) -> UIImage { return generateImage(size, rotatedContext: { size, context in @@ -42,19 +54,37 @@ private final class SheetContent: CombinedComponent { let entities: [MessageTextEntity] let fromLanguage: String? let toLanguage: String - let copyTranslation: ((String) -> Void)? + let copyTranslation: ((String, [MessageTextEntity]) -> Void)? + let replaceText: ((String, [MessageTextEntity]) -> Void)? + let translateChat: ((String, String) -> Void)? let changeLanguage: (String, String, @escaping (String, String) -> Void) -> Void let expand: () -> Void + let dismiss: () -> Void - init(context: AccountContext, text: String, entities: [MessageTextEntity], fromLanguage: String?, toLanguage: String, copyTranslation: ((String) -> Void)?, changeLanguage: @escaping (String, String, @escaping (String, String) -> Void) -> Void, expand: @escaping () -> Void) { + init( + context: AccountContext, + text: String, + entities: [MessageTextEntity], + fromLanguage: String?, + toLanguage: String, + copyTranslation: ((String, [MessageTextEntity]) -> Void)?, + replaceText: ((String, [MessageTextEntity]) -> Void)?, + translateChat: ((String, String) -> Void)?, + changeLanguage: @escaping (String, String, @escaping (String, String) -> Void) -> Void, + expand: @escaping () -> Void, + dismiss: @escaping () -> Void + ) { self.context = context self.text = text self.entities = entities self.fromLanguage = fromLanguage self.toLanguage = toLanguage self.copyTranslation = copyTranslation + self.replaceText = replaceText + self.translateChat = translateChat self.changeLanguage = changeLanguage self.expand = expand + self.dismiss = dismiss } static func ==(lhs: SheetContent, rhs: SheetContent) -> Bool { @@ -81,10 +111,13 @@ private final class SheetContent: CombinedComponent { var fromLanguage: String? let text: String + let entities: [MessageTextEntity] var textExpanded: Bool = false var toLanguage: String - var translatedText: String? + var tone: TranslationTone = .neutral + + var translatedText: (String, [MessageTextEntity])? private let expand: () -> Void @@ -99,9 +132,12 @@ private final class SheetContent: CombinedComponent { private let useAlternativeTranslation: Bool - init(context: AccountContext, fromLanguage: String?, text: String, toLanguage: String, expand: @escaping () -> Void) { + weak var controller: TranslateScreen? + + init(context: AccountContext, fromLanguage: String?, text: String, entities: [MessageTextEntity], toLanguage: String, expand: @escaping () -> Void) { self.context = context self.text = text + self.entities = entities self.fromLanguage = fromLanguage self.toLanguage = toLanguage self.expand = expand @@ -119,11 +155,11 @@ private final class SheetContent: CombinedComponent { super.init() - self.translationDisposable.set((self.translate(text: text, fromLang: fromLanguage, toLang: toLanguage) |> deliverOnMainQueue).start(next: { [weak self] text in + self.translationDisposable.set((self.translate(text: text, entities: entities, fromLang: fromLanguage, toLang: toLanguage) |> deliverOnMainQueue).start(next: { [weak self] text in guard let strongSelf = self else { return } - strongSelf.translatedText = text?.0 + strongSelf.translatedText = text strongSelf.updated(transition: .immediate) }, error: { error in @@ -135,14 +171,33 @@ private final class SheetContent: CombinedComponent { self.translationDisposable.dispose() } - func translate(text: String, fromLang: String?, toLang: String) -> Signal<(String, [MessageTextEntity])?, TranslationError> { + func translate(text: String, entities: [MessageTextEntity], fromLang: String?, toLang: String) -> Signal<(String, [MessageTextEntity])?, TranslationError> { if self.useAlternativeTranslation { return alternativeTranslateText(text: text, fromLang: fromLang, toLang: toLang) } else { - return self.context.engine.messages.translate(text: text, toLang: toLang) + return self.context.engine.messages.translate(text: text, toLang: toLang, entities: entities, tone: self.tone) } } + func changeTone(_ tone: TranslationTone) { + guard self.tone != tone else { + return + } + self.tone = tone + self.translatedText = nil + self.updated(transition: .immediate) + + self.translationDisposable.set((self.translate(text: self.text, entities: self.entities, fromLang: self.fromLanguage, toLang: self.toLanguage) |> deliverOnMainQueue).start(next: { [weak self] text in + guard let strongSelf = self else { + return + } + strongSelf.translatedText = text + strongSelf.updated(transition: .immediate) + }, error: { error in + + })) + } + func changeLanguage(fromLanguage: String, toLanguage: String) { guard self.fromLanguage != fromLanguage || self.toLanguage != toLanguage else { return @@ -152,11 +207,11 @@ private final class SheetContent: CombinedComponent { self.translatedText = nil self.updated(transition: .immediate) - self.translationDisposable.set((self.translate(text: text, fromLang: fromLanguage, toLang: toLanguage) |> deliverOnMainQueue).start(next: { [weak self] text in + self.translationDisposable.set((self.translate(text: self.text, entities: self.entities, fromLang: fromLanguage, toLang: toLanguage) |> deliverOnMainQueue).start(next: { [weak self] text in guard let strongSelf = self else { return } - strongSelf.translatedText = text?.0 + strongSelf.translatedText = text strongSelf.updated(transition: .immediate) }, error: { error in @@ -210,7 +265,7 @@ private final class SheetContent: CombinedComponent { self.isSpeakingOriginalText = false self.isSpeakingTranslatedText = true - self.speechHolder = speakText(context: self.context, text: translatedText) + self.speechHolder = speakText(context: self.context, text: translatedText.0) self.speechHolder?.completion = { [weak self] in guard let strongSelf = self else { return @@ -221,16 +276,154 @@ private final class SheetContent: CombinedComponent { } self.updated(transition: .immediate) } + + func presentLanguageSelection() { + guard let controller = self.controller else { + return + } + + guard let sourceView = controller.node.hostView.findTaggedView(tag: translateToTag) else { + return + } + + let presentationData = self.context.sharedContext.currentPresentationData.with { $0 } + var languageCode = presentationData.strings.baseLanguageCode + let rawSuffix = "-raw" + if languageCode.hasSuffix(rawSuffix) { + languageCode = String(languageCode.dropLast(rawSuffix.count)) + } + + let _ = (self.context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.translationSettings]) + |> take(1) + |> deliverOnMainQueue).start(next: { [weak self] sharedData in + guard let self else { + return + } + let settings: TranslationSettings + if let current = sharedData.entries[ApplicationSpecificSharedDataKeys.translationSettings]?.get(TranslationSettings.self) { + settings = current + } else { + settings = TranslationSettings.defaultSettings + } + + var addedLanguages = Set() + + var topLanguages: [String] = [] + let langCode = normalizeTranslationLanguage(languageCode) + + topLanguages.append("tone_formal") + topLanguages.append("tone_neutral") + topLanguages.append("tone_casual") + + topLanguages.append("") + + var ignoredLanguages: Set + if let current = settings.ignoredLanguages { + ignoredLanguages = Set(current) + } else { + ignoredLanguages = Set([langCode]) + for language in systemLanguageCodes() { + ignoredLanguages.insert(language) + } + } + for code in supportedTranslationLanguages { + if ignoredLanguages.contains(code) { + topLanguages.append(code) + } + } + + topLanguages.append(" ") + + var languages: [(String, String)] = [] + let languageLocale = Locale(identifier: langCode) + + for code in topLanguages { + if !addedLanguages.contains(code) { + let displayTitle: String + if code.hasPrefix("tone_") { + switch code { + case "tone_formal": + displayTitle = "Formal" + case "tone_neutral": + displayTitle = "Neutral" + case "tone_casual": + displayTitle = "Casual" + default: + displayTitle = "" + } + } else { + displayTitle = languageLocale.localizedString(forLanguageCode: code) ?? "" + } + + let value = (code, displayTitle) + if code == languageCode { + languages.insert(value, at: 4) + } else { + languages.append(value) + } + addedLanguages.insert(code) + } + } + + for code in supportedTranslationLanguages { + if !addedLanguages.contains(code) { + let displayTitle = languageLocale.localizedString(forLanguageCode: code) ?? "" + let value = (code, displayTitle) + if code == languageCode { + languages.insert(value, at: 4) + } else { + languages.append(value) + } + addedLanguages.insert(code) + } + } + + var selectedLanguages = Set() + selectedLanguages.insert("tone_\(self.tone.rawValue)") + selectedLanguages.insert(self.toLanguage) + + var dismissImpl: (() -> Void)? + let items = ContextController.Items( + content: .custom( + TranslationLanguagesContextMenuContent( + context: self.context, + languages: languages, + selectedLanguages: selectedLanguages, + back: nil, + selectLanguage: { [weak self] language in + guard let self else { + return + } + if language.hasPrefix("tone_") { + let tone = String(language.dropFirst(5)) + self.changeTone(TranslationTone(rawValue: tone)!) + } else { + self.changeLanguage(fromLanguage: self.fromLanguage ?? "", toLanguage: language) + } + dismissImpl?() + } + ) + ) + ) + + let contextController = makeContextController(presentationData: presentationData, source: .reference(GiftViewContextReferenceContentSource(controller: controller, sourceView: sourceView)), items: .single(items), gesture: nil) + controller.presentInGlobalOverlay(contextController) + + dismissImpl = { [weak contextController] in + contextController?.dismiss() + } + }) + } } func makeState() -> State { - return State(context: self.context, fromLanguage: self.fromLanguage, text: self.text, toLanguage: self.toLanguage, expand: self.expand) + return State(context: self.context, fromLanguage: self.fromLanguage, text: self.text, entities: self.entities, toLanguage: self.toLanguage, expand: self.expand) } static var body: Body { let textBackground = Child(RoundedRectangle.self) - let originalTitle = Child(MultilineTextComponent.self) + let originalTitle = Child(PlainButtonComponent.self) let originalText = Child(MultilineTextComponent.self) let originalMoreBackground = Child(Image.self) @@ -238,29 +431,43 @@ private final class SheetContent: CombinedComponent { let originalSpeakButton = Child(Button.self) - let translationTitle = Child(MultilineTextComponent.self) + let translationTitle = Child(PlainButtonComponent.self) let translationText = Child(MultilineTextComponent.self) let translationPlaceholder = Child(RoundedRectangle.self) let translationSpeakButton = Child(Button.self) - let copyButton = Child(TranslateButtonComponent.self) - let changeLanguageButton = Child(TranslateButtonComponent.self) - let textStripe = Child(Rectangle.self) +// let textSection = Child(ListSectionComponent.self) + let actionsSection = Child(ListSectionComponent.self) return { context in let environment = context.environment[ViewControllerComponentContainer.Environment.self].value let state = context.state let theme = environment.theme.withModalBlocksBackground() let strings = environment.strings + let presentationData = context.component.context.sharedContext.currentPresentationData.with { $0 } + let component = context.component + + if state.controller == nil { + state.controller = environment.controller() as? TranslateScreen + } + + let sideInset: CGFloat = 16.0 + - let topInset: CGFloat = environment.navigationHeight - 35.0 - let sideInset: CGFloat = 20.0 + environment.safeInsets.left let textTopInset: CGFloat = 16.0 - let textSideInset: CGFloat = 20.0 let textSpacing: CGFloat = 5.0 let itemSpacing: CGFloat = 20.0 - let itemHeight: CGFloat = 52.0 + let textSideInset: CGFloat = 16.0 + + + var contentHeight: CGFloat = 82.0 + + let textFont = Font.regular(20.0) + let boldTextFont = Font.semibold(20.0) + let italicTextFont = Font.with(size: 20.0, weight: .regular, traits: .italic) + let boldItalicTextFont = Font.semiboldItalic(20.0) + let fixedTextFont = Font.with(size: 20.0, design: .monospace) var languageCode = environment.strings.baseLanguageCode let rawSuffix = "-raw" @@ -274,19 +481,44 @@ private final class SheetContent: CombinedComponent { } else { fromLanguage = "" } + + let _ = sideInset + let _ = fromLanguage + + let originalTitleString = parseMarkdownIntoAttributedString("Detected as **\(fromLanguage)**", attributes: MarkdownAttributes(body: MarkdownAttributeSet(font: Font.semibold(13.0), textColor: theme.list.itemSecondaryTextColor), bold: MarkdownAttributeSet(font: Font.semibold(13.0), textColor: theme.list.itemAccentColor), link: MarkdownAttributeSet(font: Font.semibold(13.0), textColor: theme.list.itemPrimaryTextColor), linkAttribute: { _ in return nil })) + let originalTitle = originalTitle.update( - component: MultilineTextComponent( - text: .plain(NSAttributedString(string: fromLanguage, font: Font.medium(13.0), textColor: theme.list.itemPrimaryTextColor, paragraphAlignment: .natural)), - horizontalAlignment: .natural, - maximumNumberOfLines: 1 + component: PlainButtonComponent( + content: AnyComponent( + HStack([ + AnyComponentWithIdentity(id: "label", component: AnyComponent( + MultilineTextComponent( + text: .plain(originalTitleString), + horizontalAlignment: .natural, + maximumNumberOfLines: 1 + ) + )), + AnyComponentWithIdentity(id: "icon", component: AnyComponent( + BundleIconComponent(name: "Item List/ContextDisclosureArrow", tintColor: theme.list.itemAccentColor, maxSize: CGSize(width: 8.0, height: 11.0)) + )) + ], spacing: 3.0) + ), + action: { + component.changeLanguage(state.fromLanguage ?? "", state.toLanguage, { fromLang, toLang in + state.changeLanguage(fromLanguage: fromLang, toLanguage: toLang) + }) + }, + animateScale: false ), availableSize: CGSize(width: context.availableSize.width - (sideInset + textSideInset) * 2.0, height: CGFloat.greatestFiniteMagnitude), transition: .immediate ) + + let originalAttributedText = stringWithAppliedEntities(state.text, entities: state.entities, baseColor: theme.list.itemPrimaryTextColor, linkColor: theme.list.itemPrimaryTextColor, baseFont: textFont, linkFont: textFont, boldFont: boldTextFont, italicFont: italicTextFont, boldItalicFont: boldItalicTextFont, fixedFont: fixedTextFont, blockQuoteFont: textFont, message: nil) let originalText = originalText.update( component: MultilineTextComponent( - text: .plain(NSAttributedString(string: state.text, font: Font.medium(20.0), textColor: theme.list.itemPrimaryTextColor, paragraphAlignment: .natural)), + text: .plain(originalAttributedText), horizontalAlignment: .natural, maximumNumberOfLines: state.textExpanded ? 0 : 1, lineSpacing: 0.1 @@ -295,12 +527,34 @@ private final class SheetContent: CombinedComponent { transition: .immediate ) - let toLanguage = locale.localizedString(forLanguageCode: state.toLanguage) ?? "" + var toLanguage = locale.localizedString(forLanguageCode: state.toLanguage) ?? "" + if state.tone != .neutral { + toLanguage += " (\(state.tone.rawValue.capitalized))" + } let translationTitle = translationTitle.update( - component: MultilineTextComponent( - text: .plain(NSAttributedString(string: toLanguage, font: Font.medium(13.0), textColor: theme.list.itemAccentColor, paragraphAlignment: .natural)), - horizontalAlignment: .natural, - maximumNumberOfLines: 1 + component: PlainButtonComponent( + content: AnyComponent( + HStack([ + AnyComponentWithIdentity(id: "label", component: AnyComponent( + MultilineTextComponent( + text: .plain(NSAttributedString(string: toLanguage, font: Font.semibold(13.0), textColor: theme.list.itemAccentColor, paragraphAlignment: .natural)), + horizontalAlignment: .natural, + maximumNumberOfLines: 1 + ) + )), + AnyComponentWithIdentity(id: "icon", component: AnyComponent( + BundleIconComponent(name: "Item List/ContextDisclosureArrow", tintColor: theme.list.itemAccentColor, maxSize: CGSize(width: 8.0, height: 11.0)) + )) + ], spacing: 3.0) + ), + action: { [weak state] in + state?.presentLanguageSelection() +// component.changeLanguage(state.fromLanguage ?? "", state.toLanguage, { fromLang, toLang in +// state.changeLanguage(fromLanguage: fromLang, toLanguage: toLang) +// }) + }, + animateScale: false, + tag: translateToTag ), availableSize: CGSize(width: context.availableSize.width - (sideInset + textSideInset) * 2.0, height: CGFloat.greatestFiniteMagnitude), transition: .immediate @@ -311,9 +565,11 @@ private final class SheetContent: CombinedComponent { var maybeTranslationText: _UpdatedChildComponent? = nil var maybeTranslationPlaceholder: _UpdatedChildComponent? = nil if let translatedText = state.translatedText { + let attributedText = stringWithAppliedEntities(translatedText.0, entities: translatedText.1, baseColor: theme.list.itemAccentColor, linkColor: theme.list.itemAccentColor, baseFont: textFont, linkFont: textFont, boldFont: boldTextFont, italicFont: italicTextFont, boldItalicFont: boldItalicTextFont, fixedFont: fixedTextFont, blockQuoteFont: textFont, message: nil) + maybeTranslationText = translationText.update( component: MultilineTextComponent( - text: .plain(NSAttributedString(string: translatedText, font: Font.medium(20.0), textColor: theme.list.itemAccentColor, paragraphAlignment: .natural)), + text: .plain(attributedText), horizontalAlignment: .natural, maximumNumberOfLines: 0, lineSpacing: 0.1 @@ -331,6 +587,7 @@ private final class SheetContent: CombinedComponent { translationTextHeight = 22.0 } + let topInset = contentHeight let textBackgroundOrigin = CGPoint(x: sideInset, y: topInset) let textStripe = textStripe.update( @@ -428,11 +685,11 @@ private final class SheetContent: CombinedComponent { ) context.add(originalMoreBackground - .position(CGPoint(x: context.availableSize.width - sideInset - textSideInset - originalMoreBackground.size.width / 2.0, y: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalMoreBackground.size.height / 2.0 - 1.0)) + .position(CGPoint(x: context.availableSize.width - sideInset - textSideInset - originalMoreBackground.size.width / 2.0, y: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalMoreBackground.size.height / 2.0 + 2.0)) ) context.add(originalMoreButton - .position(CGPoint(x: context.availableSize.width - sideInset - textSideInset - originalMoreButton.size.width / 2.0, y: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalText.size.height / 2.0 - 1.0)) + .position(CGPoint(x: context.availableSize.width - sideInset - textSideInset - originalMoreButton.size.width / 2.0, y: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalText.size.height / 2.0 + 1.0 - UIScreenPixel)) ) } @@ -482,56 +739,123 @@ private final class SheetContent: CombinedComponent { ) } - let buttonsSpacing: CGFloat = 20.0 - let smallSectionSpacing: CGFloat = 20.0 + contentHeight += textBackgroundSize.height + contentHeight += 24.0 - var buttonsHeight: CGFloat = 0.0 +// let textSectionItems: [AnyComponentWithIdentity] = [] +// let textSection = textSection.update( +// component: ListSectionComponent( +// theme: theme, +// style: .glass, +// header: nil, +// footer: nil, +// items: textSectionItems +// ), +// availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: context.availableSize.height), +// transition: context.transition +// ) +// context.add(textSection +// .position(CGPoint(x: context.availableSize.width / 2.0, y: contentHeight + textSection.size.height / 2.0)) +// ) +// contentHeight += textSection.size.height +// contentHeight += 24.0 - let component = context.component - if component.copyTranslation != nil { - let copyButton = copyButton.update( - component: TranslateButtonComponent( - theme: theme, - title: strings.Translate_CopyTranslation, - icon: "Chat/Context Menu/Copy", - isEnabled: state.translatedText != nil, - action: { [weak component] in - component?.copyTranslation?(state.translatedText ?? "") - } + var actionsSectionItems: [AnyComponentWithIdentity] = [] + if let replaceText = component.replaceText { + //TODO:localize + actionsSectionItems.append(AnyComponentWithIdentity(id: "replace", component: AnyComponent(ListActionItemComponent( + theme: theme, + style: .glass, + title: AnyComponent( + MultilineTextComponent( + text: .plain(NSAttributedString( + string: "Replace with Translation", + font: Font.regular(presentationData.listsFontSize.itemListBaseFontSize), + textColor: theme.list.itemAccentColor + )), + maximumNumberOfLines: 1 + ) ), - availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: itemHeight), - transition: context.transition - ) - context.add(copyButton - .position(CGPoint(x: context.availableSize.width / 2.0, y: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalText.size.height + itemSpacing + textTopInset + translationTitle.size.height + textSpacing + translationTextHeight + itemSpacing + buttonsSpacing + copyButton.size.height / 2.0)) - ) - buttonsHeight += copyButton.size.height + smallSectionSpacing + leftIcon: .custom(AnyComponentWithIdentity(id: "icon", component: AnyComponent(BundleIconComponent(name: "Chat/Context Menu/Replace", tintColor: theme.list.itemAccentColor))), false), + action: { [weak state] _ in + guard let state else { + return + } + replaceText(state.translatedText?.0 ?? state.text, state.translatedText?.1 ?? state.entities) + component.dismiss() + } + )))) + } + if let copyTranslation = component.copyTranslation { + actionsSectionItems.append(AnyComponentWithIdentity(id: "copy", component: AnyComponent(ListActionItemComponent( + theme: theme, + style: .glass, + title: AnyComponent( + MultilineTextComponent( + text: .plain(NSAttributedString( + string: strings.Translate_CopyTranslation, + font: Font.regular(presentationData.listsFontSize.itemListBaseFontSize), + textColor: theme.list.itemAccentColor + )), + maximumNumberOfLines: 1 + ) + ), + leftIcon: .custom(AnyComponentWithIdentity(id: "icon", component: AnyComponent(BundleIconComponent(name: "Chat/Context Menu/Copy", tintColor: theme.list.itemAccentColor))), false), + action: { [weak state] _ in + guard let state else { + return + } + copyTranslation(state.translatedText?.0 ?? "", state.translatedText?.1 ?? []) + } + )))) + } + if let translateChat = component.translateChat { + actionsSectionItems.append(AnyComponentWithIdentity(id: "translate", component: AnyComponent(ListActionItemComponent( + theme: theme, + style: .glass, + title: AnyComponent( + MultilineTextComponent( + text: .plain(NSAttributedString( + string: "Translate Entire Chat", + font: Font.regular(presentationData.listsFontSize.itemListBaseFontSize), + textColor: theme.list.itemAccentColor + )), + maximumNumberOfLines: 1 + ) + ), + leftIcon: .custom(AnyComponentWithIdentity(id: "icon", component: AnyComponent(BundleIconComponent(name: "Chat/Context Menu/Translate", tintColor: theme.list.itemAccentColor))), false), + action: { [weak state] _ in + guard let state else { + return + } + translateChat(state.fromLanguage ?? "", state.toLanguage) + component.dismiss() + } + )))) } - let changeLanguageButton = changeLanguageButton.update( - component: TranslateButtonComponent( - theme: theme, - title: strings.Translate_ChangeLanguage, - icon: "Chat/Context Menu/Translate", - isEnabled: true, - action: { [weak component] in - component?.changeLanguage(state.fromLanguage ?? "", state.toLanguage, { fromLang, toLang in - state.changeLanguage(fromLanguage: fromLang, toLanguage: toLang) - }) - } - ), - availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: itemHeight), - transition: context.transition - ) + if !actionsSectionItems.isEmpty { + let actionsSection = actionsSection.update( + component: ListSectionComponent( + theme: theme, + style: .glass, + header: nil, + footer: nil, + items: actionsSectionItems + ), + availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: context.availableSize.height), + transition: context.transition + ) + context.add(actionsSection + .position(CGPoint(x: context.availableSize.width / 2.0, y: contentHeight + actionsSection.size.height / 2.0)) + ) + contentHeight += actionsSection.size.height + } + + contentHeight += 32.0 + contentHeight += 52.0 + 30.0 - context.add(changeLanguageButton - .position(CGPoint(x: context.availableSize.width / 2.0, y: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalText.size.height + itemSpacing + textTopInset + translationTitle.size.height + textSpacing + translationTextHeight + itemSpacing + buttonsSpacing + buttonsHeight + changeLanguageButton.size.height / 2.0)) - ) - buttonsHeight += changeLanguageButton.size.height - - let contentSize = CGSize(width: context.availableSize.width, height: textBackgroundOrigin.y + textTopInset + originalTitle.size.height + textSpacing + originalText.size.height + itemSpacing + textTopInset + translationTitle.size.height + textSpacing + translationTextHeight + itemSpacing + buttonsSpacing + buttonsHeight + environment.safeInsets.bottom + 44.0) - - return contentSize + return CGSize(width: context.availableSize.width, height: contentHeight) } } } @@ -544,8 +868,11 @@ private final class TranslateSheetComponent: CombinedComponent { private let entities: [MessageTextEntity] private let fromLanguage: String? private let toLanguage: String - private let copyTranslation: ((String) -> Void)? + private let copyTranslation: ((String, [MessageTextEntity]) -> Void)? + private let replaceText: ((String, [MessageTextEntity]) -> Void)? + private let translateChat: ((String, String) -> Void)? private let changeLanguage: (String, String, @escaping (String, String) -> Void) -> Void + private let openCocoonInfo: () -> Void init( context: AccountContext, @@ -553,8 +880,11 @@ private final class TranslateSheetComponent: CombinedComponent { entities: [MessageTextEntity], fromLanguage: String?, toLanguage: String, - copyTranslation: ((String) -> Void)?, - changeLanguage: @escaping (String, String, @escaping (String, String) -> Void) -> Void + copyTranslation: ((String, [MessageTextEntity]) -> Void)?, + replaceText: ((String, [MessageTextEntity]) -> Void)?, + translateChat: ((String, String) -> Void)? = nil, + changeLanguage: @escaping (String, String, @escaping (String, String) -> Void) -> Void, + openCocoonInfo: @escaping () -> Void ) { self.context = context self.text = text @@ -562,7 +892,10 @@ private final class TranslateSheetComponent: CombinedComponent { self.fromLanguage = fromLanguage self.toLanguage = toLanguage self.copyTranslation = copyTranslation + self.replaceText = replaceText + self.translateChat = translateChat self.changeLanguage = changeLanguage + self.openCocoonInfo = openCocoonInfo } static func ==(lhs: TranslateSheetComponent, rhs: TranslateSheetComponent) -> Bool { @@ -593,6 +926,9 @@ private final class TranslateSheetComponent: CombinedComponent { } let theme = environment.theme.withModalBlocksBackground() + let strings = environment.strings + + let openCocoonInfo = context.component.openCocoonInfo let sheet = sheet.update( component: ResizableSheetComponent( @@ -603,11 +939,24 @@ private final class TranslateSheetComponent: CombinedComponent { fromLanguage: context.component.fromLanguage, toLanguage: context.component.toLanguage, copyTranslation: context.component.copyTranslation, + replaceText: context.component.replaceText, + translateChat: context.component.translateChat, changeLanguage: context.component.changeLanguage, - expand: {} + expand: {}, + dismiss: { + dismiss(true) + } )), titleItem: AnyComponent( - MultilineTextComponent(text: .plain(NSAttributedString(string: environment.strings.Translate_Title, font: Font.semibold(17.0), textColor: theme.list.itemPrimaryTextColor))) + VStack([ + //TODO:localize + AnyComponentWithIdentity(id: "title", component: AnyComponent( + MultilineTextComponent(text: .plain(NSAttributedString(string: "Translation", font: Font.semibold(17.0), textColor: theme.list.itemPrimaryTextColor))) + )), + AnyComponentWithIdentity(id: "subtitle", component: AnyComponent( + MultilineTextComponent(text: .plain(NSAttributedString(string: "powered by Cocoon", font: Font.regular(13.0), textColor: theme.list.itemSecondaryTextColor))) + )) + ], spacing: 1.0) ), leftItem: AnyComponent( GlassBarButtonComponent( @@ -626,7 +975,48 @@ private final class TranslateSheetComponent: CombinedComponent { } ) ), - bottomItem: nil, + rightItem: AnyComponent( + GlassBarButtonComponent( + size: CGSize(width: 44.0, height: 44.0), + backgroundColor: nil, + isDark: theme.overallDarkAppearance, + state: .glass, + component: AnyComponentWithIdentity(id: "info", component: AnyComponent( + BundleIconComponent( + name: "Navigation/Question", + tintColor: theme.chat.inputPanel.panelControlColor + ) + )), + action: { _ in + openCocoonInfo() + } + ) + ), + bottomItem: AnyComponent( + ButtonComponent( + background: ButtonComponent.Background( + style: .glass, + color: theme.list.itemCheckColors.fillColor, + foreground: theme.list.itemCheckColors.foregroundColor, + pressedColor: theme.list.itemCheckColors.fillColor.withMultipliedAlpha(0.9) + ), + content: AnyComponentWithIdentity( + id: AnyHashable(0), + component: AnyComponent( + ButtonTextContentComponent( + text: strings.Common_OK, + badge: 0, + textColor: theme.list.itemCheckColors.foregroundColor, + badgeBackground: theme.list.itemCheckColors.foregroundColor, + badgeForeground: theme.list.itemCheckColors.fillColor + ) + ) + ), + action: { + dismiss(true) + } + ) + ), backgroundColor: .color(theme.list.modalBlocksBackgroundColor), animateOut: animateOut ), @@ -674,7 +1064,9 @@ public final class TranslateScreen: ViewControllerComponentContainer { canCopy: Bool, fromLanguage: String?, toLanguage: String? = nil, - ignoredLanguages: [String]? = nil + ignoredLanguages: [String]? = nil, + replaceText: ((String, [MessageTextEntity]) -> Void)? = nil, + translateChat: ((String, String) -> Void)? = nil ) { self.context = context @@ -701,12 +1093,18 @@ public final class TranslateScreen: ViewControllerComponentContainer { } else { toLanguage = "en" } + if toLanguage == "en" && fromLanguage == "en" { + if let anyOtherLanguage = NSLocale.preferredLanguages.first(where: { !$0.hasPrefix("en-") }) { + toLanguage = anyOtherLanguage + } + } } toLanguage = normalizeTranslationLanguage(toLanguage) - var copyTranslationImpl: ((String) -> Void)? + var copyTranslationImpl: ((String, [MessageTextEntity]) -> Void)? var changeLanguageImpl: ((String, String, @escaping (String, String) -> Void) -> Void)? + var openCocoonInfoImpl: (() -> Void)? super.init( context: context, @@ -716,11 +1114,16 @@ public final class TranslateScreen: ViewControllerComponentContainer { entities: entities, fromLanguage: fromLanguage, toLanguage: toLanguage, - copyTranslation: !canCopy ? nil : { text in - copyTranslationImpl?(text) + copyTranslation: !canCopy ? nil : { text, entities in + copyTranslationImpl?(text, entities) }, + replaceText: replaceText, + translateChat: translateChat, changeLanguage: { fromLang, toLang, completion in changeLanguageImpl?(fromLang, toLang, completion) + }, + openCocoonInfo: { + openCocoonInfoImpl?() } ), navigationBarAppearance: .none, @@ -733,18 +1136,19 @@ public final class TranslateScreen: ViewControllerComponentContainer { self.blocksBackgroundWhenInOverlay = true self.supportedOrientations = ViewControllerSupportedOrientations(regularSize: .all, compactSize: .portrait) - copyTranslationImpl = { [weak self] text in - UIPasteboard.general.string = text + copyTranslationImpl = { [weak self] text, entities in + storeMessageTextInPasteboard(text, entities: entities) + let content = UndoOverlayContent.copy(text: presentationData.strings.Conversation_TextCopied) self?.present(UndoOverlayController(presentationData: presentationData, content: content, elevatedLayout: true, animateInAsReplacement: false, action: { _ in return false }), in: .window(.root)) - self?.dismiss(animated: true, completion: nil) + self?.dismissAnimated() } - + changeLanguageImpl = { [weak self] fromLang, toLang, completion in let pushController = self?.pushController let presentController = self?.presentController let controller = languageSelectionController(context: context, forceTheme: forceTheme, fromLanguage: fromLang, toLanguage: toLang, completion: { fromLang, toLang in - let controller = TranslateScreen(context: context, forceTheme: forceTheme, text: text, canCopy: canCopy, fromLanguage: fromLang, toLanguage: toLang, ignoredLanguages: ignoredLanguages) + let controller = TranslateScreen(context: context, forceTheme: forceTheme, text: text, entities: entities, canCopy: canCopy, fromLanguage: fromLang, toLanguage: toLang, ignoredLanguages: ignoredLanguages, replaceText: replaceText) controller.pushController = pushController ?? { _ in } controller.presentController = presentController ?? { _ in } presentController?(controller) @@ -754,6 +1158,11 @@ public final class TranslateScreen: ViewControllerComponentContainer { pushController?(controller) } + + openCocoonInfoImpl = { [weak self] in + let controller = context.sharedContext.makeCocoonInfoScreen(context: context) + self?.pushController(controller) + } } required public init(coder aDecoder: NSCoder) { @@ -776,6 +1185,8 @@ public func presentTranslateScreen( toLanguage: String? = nil, isExpanded: Bool = false, ignoredLanguages: [String]? = nil, + replaceText: ((String, [MessageTextEntity]) -> Void)? = nil, + translateChat: ((String, String) -> Void)? = nil, pushController: @escaping (ViewController) -> Void = { _ in }, presentController: @escaping (ViewController) -> Void = { _ in }, wasDismissed: (() -> Void)? = nil, @@ -795,7 +1206,7 @@ public func presentTranslateScreen( if useSystemTranslation { presentSystemTranslateScreen(context: context, text: text) } else { - let controller = TranslateScreen(context: context, text: text, canCopy: canCopy, fromLanguage: fromLanguage, toLanguage: toLanguage, ignoredLanguages: ignoredLanguages) + let controller = TranslateScreen(context: context, text: text, entities: entities, canCopy: canCopy, fromLanguage: fromLanguage, toLanguage: toLanguage, ignoredLanguages: ignoredLanguages, replaceText: replaceText, translateChat: translateChat) controller.pushController = pushController controller.presentController = presentController controller.wasDismissed = wasDismissed @@ -848,3 +1259,17 @@ struct TranslateScreenHostingView: View { } } } + +private final class GiftViewContextReferenceContentSource: ContextReferenceContentSource { + private let controller: ViewController + private let sourceView: UIView + + init(controller: ViewController, sourceView: UIView) { + self.controller = controller + self.sourceView = sourceView + } + + func transitionInfo() -> ContextControllerReferenceViewInfo? { + return ContextControllerReferenceViewInfo(referenceView: self.sourceView, contentAreaInScreenSpace: UIScreen.main.bounds) + } +}