From b090612e53af85b0245055f86fc4a00edef2a350 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 14 Sep 2018 15:25:48 +0100 Subject: [PATCH] no message --- .../CloseButton.imageset/Contents.json | 0 .../ReplyPanelClose@2x.png | Bin .../Contents.json | 0 .../Contents.json | 22 +++ .../ModernConversationTitlePanelClose@2x.png | Bin 0 -> 732 bytes .../ModernConversationTitlePanelClose@3x.png | Bin 0 -> 982 bytes .../ActionsWhiteIcon@2x.png | Bin .../ActionsWhiteIcon@3x.png | Bin .../Contents.json | 0 .../Contents.json | 0 .../ModernConversationActionForward@2x.png | Bin .../Contents.json | 0 .../ic_report.pdf | Bin .../Contents.json | 0 .../ModernConversationActionDelete@2x.png | Bin .../AvatarGalleryItemFooterContentNode.swift | 4 +- .../ChatItemGalleryFooterContentNode.swift | 4 +- .../ChatMessageSelectionInputPanelNode.swift | 24 +-- .../ChatRecordingPreviewInputPanelNode.swift | 2 +- TelegramUI/ChatReportPeerTitlePanelNode.swift | 2 +- TelegramUI/FormControllerTextInputItem.swift | 6 +- .../InstantPageGalleryFooterContentNode.swift | 2 +- TelegramUI/LegacyInstantVideoController.swift | 2 +- TelegramUI/LegacySecureIdAttachmentMenu.swift | 10 +- TelegramUI/PresentationResourceKey.swift | 1 + TelegramUI/PresentationResourcesChat.swift | 6 + TelegramUI/SecureIdAuthControllerState.swift | 1 + .../SecureIdDocumentFormControllerNode.swift | 102 ++++++---- ...reIdDocumentGalleryFooterContentNode.swift | 2 +- .../SecureIdPlaintextFormControllerNode.swift | 187 +++++++++++++----- TelegramUI/WebEmbedVideoContent.swift | 20 +- 31 files changed, 268 insertions(+), 129 deletions(-) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/CloseButton.imageset/Contents.json (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/CloseButton.imageset/ReplyPanelClose@2x.png (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/Contents.json (100%) create mode 100644 Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/Contents.json create mode 100644 Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/ModernConversationTitlePanelClose@2x.png create mode 100644 Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/ModernConversationTitlePanelClose@3x.png rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionAction.imageset/ActionsWhiteIcon@2x.png (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionAction.imageset/ActionsWhiteIcon@3x.png (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionAction.imageset/Contents.json (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionForward.imageset/Contents.json (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionForward.imageset/ModernConversationActionForward@2x.png (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionReport.imageset/Contents.json (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionReport.imageset/ic_report.pdf (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionThrash.imageset/Contents.json (100%) rename Images.xcassets/Chat/Input/{Acessory Panels => Accessory Panels}/MessageSelectionThrash.imageset/ModernConversationActionDelete@2x.png (100%) diff --git a/Images.xcassets/Chat/Input/Acessory Panels/CloseButton.imageset/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/CloseButton.imageset/Contents.json similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/CloseButton.imageset/Contents.json rename to Images.xcassets/Chat/Input/Accessory Panels/CloseButton.imageset/Contents.json diff --git a/Images.xcassets/Chat/Input/Acessory Panels/CloseButton.imageset/ReplyPanelClose@2x.png b/Images.xcassets/Chat/Input/Accessory Panels/CloseButton.imageset/ReplyPanelClose@2x.png similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/CloseButton.imageset/ReplyPanelClose@2x.png rename to Images.xcassets/Chat/Input/Accessory Panels/CloseButton.imageset/ReplyPanelClose@2x.png diff --git a/Images.xcassets/Chat/Input/Acessory Panels/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/Contents.json similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/Contents.json rename to Images.xcassets/Chat/Input/Accessory Panels/Contents.json diff --git a/Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/Contents.json new file mode 100644 index 0000000000..5effe061f3 --- /dev/null +++ b/Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ModernConversationTitlePanelClose@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ModernConversationTitlePanelClose@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/ModernConversationTitlePanelClose@2x.png b/Images.xcassets/Chat/Input/Accessory Panels/EncircledCloseButton.imageset/ModernConversationTitlePanelClose@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cdfedb7ca9bc6cb204e91d77393ac5df06f6fa23 GIT binary patch literal 732 zcmV<20wev2P)W%)a8!cMadGjbd7Hzl%@pMb;j_t`{L(z=a5cL8%9Kj|` z#c(xMe|7{pEi3A^wly?1*dknnsPm}DFu0V4pr~S0n}!K+o^P zHo?V(3lF6>LU7HQWnwB^M7Ur05gJNO$uAqGu@P`_;le|y;Sl_=!G^;HSc9Js^$Qzg zgW0Z}5*W&kse&;V-j#OnZ;T98UC^yRu`y=wcLgjLNwY6JT)}eD3PCnLRCGAIz!q*v z;h|!}6>dpBoA@X^P7IYC?iD8ZY~l`?6vv*Wc!RGtRLXE4@devb9D6e54vIAimDic0 zi;sEOS>dWEcvE;#w5N=_1LaEdn(k{1eTG_$OAvJiwE@piwOUuyB`of#hr7204|iD{#s*Bq zFf~-Qpu2hg%CChkq*jINTcgIQ$PpFc+N}xJsP> O0000Nkl~9{tUN3jw<$ZGB&G5UUP=A;E?){$c5&8TN5A#^YU9{1~ zF8+qv`!2d@<1Usl56O;~T+ZPRde9^2;SSDKC2|@|*oHdT#uBE-71=-+ny`lrG;tM+ zn8Pf@-siB0t7u{ad(ea~8pj!V7F*CrA5U=!as-#~6n$usSw{QyL=oDJe$Qp`Vku|iTftRR5j!_*ip@BAPM~ys*=g`19WQ^9K zf#*0mYGi>Qp@G|w3b+jo{DfkZ$cNCtO-O~@ga#g#jl2#GdP07@J5Ah524>TK4^S;3eleT}5XyoOMfI zT{ofTvUA`R1ch^G{5u(+c-#Zw9vYu`;2h4=@0hsJjy>HA6lK)28f zP}3_v8E^=62wjavC&?L4zvPVPNvXi{p${M>q-Q*4JHxat4$Ki+W?J_l)VvrtcP;S* z`5q4NRT!8d^lKd8ixKCp9}F`=Z$TzVYv2UkG$!;}NPXb5kVt33o@y1*Uts6I{(N#D z3!^@1{sdA%A43E0{=YMjP~hi^?hbqg4g7*4_a4tIWDI8UO_n{LNG-9?(;L%9Ru3B3 zM9q7*t~JKpx<}b|>mt`GvL$&9?)$EtG48v*UB%7iD_F!CyamBOvutXv*l zgFd>OfbxAI(a_<}_0Z(@6sgeq2<2ae%6Ed)(`sJ`0QLDz{3aqq2><{907*qoM6N<$ Ef*F_0f&c&j literal 0 HcmV?d00001 diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@2x.png b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@2x.png similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@2x.png rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@2x.png diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@3x.png b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@3x.png similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@3x.png rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionAction.imageset/ActionsWhiteIcon@3x.png diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionAction.imageset/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionAction.imageset/Contents.json similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionAction.imageset/Contents.json rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionAction.imageset/Contents.json diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionForward.imageset/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionForward.imageset/Contents.json similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionForward.imageset/Contents.json rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionForward.imageset/Contents.json diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionForward.imageset/ModernConversationActionForward@2x.png b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionForward.imageset/ModernConversationActionForward@2x.png similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionForward.imageset/ModernConversationActionForward@2x.png rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionForward.imageset/ModernConversationActionForward@2x.png diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionReport.imageset/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionReport.imageset/Contents.json similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionReport.imageset/Contents.json rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionReport.imageset/Contents.json diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionReport.imageset/ic_report.pdf b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionReport.imageset/ic_report.pdf similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionReport.imageset/ic_report.pdf rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionReport.imageset/ic_report.pdf diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionThrash.imageset/Contents.json b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionThrash.imageset/Contents.json similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionThrash.imageset/Contents.json rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionThrash.imageset/Contents.json diff --git a/Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionThrash.imageset/ModernConversationActionDelete@2x.png b/Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionThrash.imageset/ModernConversationActionDelete@2x.png similarity index 100% rename from Images.xcassets/Chat/Input/Acessory Panels/MessageSelectionThrash.imageset/ModernConversationActionDelete@2x.png rename to Images.xcassets/Chat/Input/Accessory Panels/MessageSelectionThrash.imageset/ModernConversationActionDelete@2x.png diff --git a/TelegramUI/AvatarGalleryItemFooterContentNode.swift b/TelegramUI/AvatarGalleryItemFooterContentNode.swift index 48f7d31c37..8c1c8857f0 100644 --- a/TelegramUI/AvatarGalleryItemFooterContentNode.swift +++ b/TelegramUI/AvatarGalleryItemFooterContentNode.swift @@ -6,8 +6,8 @@ import TelegramCore import SwiftSignalKit import Photos -private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: .white) -private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionAction"), color: .white) +private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: .white) +private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionAction"), color: .white) final class AvatarGalleryItemFooterContentNode: GalleryFooterContentNode { private let account: Account diff --git a/TelegramUI/ChatItemGalleryFooterContentNode.swift b/TelegramUI/ChatItemGalleryFooterContentNode.swift index 9a007a3298..5633310210 100644 --- a/TelegramUI/ChatItemGalleryFooterContentNode.swift +++ b/TelegramUI/ChatItemGalleryFooterContentNode.swift @@ -6,8 +6,8 @@ import TelegramCore import SwiftSignalKit import Photos -private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: .white) -private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionAction"), color: .white) +private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: .white) +private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionAction"), color: .white) private let backwardImage = UIImage(bundleImageName: "Media Gallery/BackwardButton") private let forwardImage = UIImage(bundleImageName: "Media Gallery/ForwardButton") diff --git a/TelegramUI/ChatMessageSelectionInputPanelNode.swift b/TelegramUI/ChatMessageSelectionInputPanelNode.swift index 8ab22eb6c4..91ff32206c 100644 --- a/TelegramUI/ChatMessageSelectionInputPanelNode.swift +++ b/TelegramUI/ChatMessageSelectionInputPanelNode.swift @@ -56,12 +56,12 @@ final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode { self.shareButton = UIButton() self.shareButton.isEnabled = false - self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) - self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) - self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) - self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) - self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) - self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) + self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) + self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) + self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) + self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) + self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) + self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) self.shareButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat List/NavigationShare"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) self.shareButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat List/NavigationShare"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) @@ -88,12 +88,12 @@ final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode { if self.theme !== theme { self.theme = theme - self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) - self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) - self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) - self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) - self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) - self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) + self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) + self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) + self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) + self.reportButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionReport"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) + self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlAccentColor), for: [.normal]) + self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionForward"), color: theme.chat.inputPanel.panelControlDisabledColor), for: [.disabled]) } } diff --git a/TelegramUI/ChatRecordingPreviewInputPanelNode.swift b/TelegramUI/ChatRecordingPreviewInputPanelNode.swift index 462473b38b..71ba268cea 100644 --- a/TelegramUI/ChatRecordingPreviewInputPanelNode.swift +++ b/TelegramUI/ChatRecordingPreviewInputPanelNode.swift @@ -35,7 +35,7 @@ final class ChatRecordingPreviewInputPanelNode: ChatInputPanelNode { init(theme: PresentationTheme) { self.deleteButton = HighlightableButtonNode() self.deleteButton.displaysAsynchronously = false - self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Acessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlAccentColor), for: []) + self.deleteButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: theme.chat.inputPanel.panelControlAccentColor), for: []) self.sendButton = HighlightableButtonNode() self.sendButton.displaysAsynchronously = false diff --git a/TelegramUI/ChatReportPeerTitlePanelNode.swift b/TelegramUI/ChatReportPeerTitlePanelNode.swift index 0ee802dc97..75b439a5d0 100644 --- a/TelegramUI/ChatReportPeerTitlePanelNode.swift +++ b/TelegramUI/ChatReportPeerTitlePanelNode.swift @@ -55,7 +55,7 @@ final class ChatReportPeerTitlePanelNode: ChatTitleAccessoryPanelNode { if interfaceState.theme !== self.theme { self.theme = interfaceState.theme - self.closeButton.setImage(PresentationResourcesChat.chatInputPanelCloseIconImage(interfaceState.theme), for: []) + self.closeButton.setImage(PresentationResourcesChat.chatInputPanelEncircledCloseIconImage(interfaceState.theme), for: []) self.backgroundColor = interfaceState.theme.rootController.navigationBar.backgroundColor self.separatorNode.backgroundColor = interfaceState.theme.rootController.navigationBar.separatorColor } diff --git a/TelegramUI/FormControllerTextInputItem.swift b/TelegramUI/FormControllerTextInputItem.swift index 7b901e21cd..022ba5eb92 100644 --- a/TelegramUI/FormControllerTextInputItem.swift +++ b/TelegramUI/FormControllerTextInputItem.swift @@ -7,7 +7,7 @@ private let errorFont = Font.regular(13.0) enum FormControllerTextInputItemType: Equatable { case regular(capitalization: UITextAutocapitalizationType, autocorrection: Bool) - case latin + case latin(capitalization: UITextAutocapitalizationType) case email case number } @@ -99,8 +99,8 @@ final class FormControllerTextInputItemNode: FormBlockItemNode UIImage? { + return theme.image(PresentationResourceKey.chatInputPanelEncircledCloseIconImage.rawValue, { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/EncircledCloseButton"), color: theme.chat.serviceMessage.serviceMessagePrimaryTextColor) + }) + } + static func chatInputPanelVerticalSeparatorLineImage(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.chatInputPanelVerticalSeparatorLineImage.rawValue, { theme in return generateVerticallyStretchableFilledCircleImage(radius: 1.0, color: theme.chat.inputPanel.panelControlAccentColor) diff --git a/TelegramUI/SecureIdAuthControllerState.swift b/TelegramUI/SecureIdAuthControllerState.swift index 42337e7e4d..70cd106e1b 100644 --- a/TelegramUI/SecureIdAuthControllerState.swift +++ b/TelegramUI/SecureIdAuthControllerState.swift @@ -57,6 +57,7 @@ struct SecureIdAuthControllerFormState: Equatable { } struct SecureIdAuthControllerListState: Equatable { + let accountPeer: Peer var verificationState: SecureIdAuthControllerVerificationState? var encryptedValues: EncryptedAllSecureIdValues? var primaryLanguageByCountry: [String: String]? diff --git a/TelegramUI/SecureIdDocumentFormControllerNode.swift b/TelegramUI/SecureIdDocumentFormControllerNode.swift index d2dcb5b704..b9e35ad6cd 100644 --- a/TelegramUI/SecureIdDocumentFormControllerNode.swift +++ b/TelegramUI/SecureIdDocumentFormControllerNode.swift @@ -39,8 +39,8 @@ private enum SecureIdDocumentFormSelectionField { private enum AddFileTarget { case scan case selfie - case frontSide - case backSide + case frontSide(SecureIdRequestedIdentityDocument?) + case backSide(SecureIdRequestedIdentityDocument?) case translation } @@ -459,6 +459,8 @@ struct SecureIdDocumentFormState: FormControllerInnerState { } if self.selfieRequired || self.frontSideRequired || self.backSideRequired { + let type = identity.document?.type + if let last = result.last, case .spacer = last { } else { result.append(.spacer) @@ -486,9 +488,9 @@ struct SecureIdDocumentFormState: FormControllerInnerState { break } } - result.append(.entry(SecureIdDocumentFormEntry.frontSide(1, document, error))) + result.append(.entry(SecureIdDocumentFormEntry.frontSide(1, type, document, error))) } else { - result.append(.entry(SecureIdDocumentFormEntry.frontSide(1, nil, nil))) + result.append(.entry(SecureIdDocumentFormEntry.frontSide(1, type, nil, nil))) } } if self.backSideRequired { @@ -513,9 +515,9 @@ struct SecureIdDocumentFormState: FormControllerInnerState { break } } - result.append(.entry(SecureIdDocumentFormEntry.backSide(2, document, error))) + result.append(.entry(SecureIdDocumentFormEntry.backSide(2, type, document, error))) } else { - result.append(.entry(SecureIdDocumentFormEntry.backSide(2, nil, nil))) + result.append(.entry(SecureIdDocumentFormEntry.backSide(2, type, nil, nil))) } } @@ -546,6 +548,8 @@ struct SecureIdDocumentFormState: FormControllerInnerState { result.append(.entry(SecureIdDocumentFormEntry.selfie(0, nil, nil))) } } + + result.append(.entry(SecureIdDocumentFormEntry.scansInfo(.identity))) } if let document = identity.document, self.translationsRequired { @@ -1231,9 +1235,9 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { case deleteDocument case requestedDocumentsHeader case selfie(Int, SecureIdVerificationDocument?, String?) - case frontSide(Int, SecureIdVerificationDocument?, String?) - case backSide(Int, SecureIdVerificationDocument?, String?) - case documentsInfo + case frontSide(Int, SecureIdRequestedIdentityDocument?, SecureIdVerificationDocument?, String?) + case backSide(Int, SecureIdRequestedIdentityDocument?, SecureIdVerificationDocument?, String?) + case documentsInfo(SecureIdDocumentFormEntryCategory) case translationsHeader case translation(Int, SecureIdVerificationDocument, String?) case addTranslation(Bool) @@ -1485,20 +1489,20 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { } else { return false } - case let .frontSide(index, document, error): - if case .frontSide(index, document, error) = to { + case let .frontSide(index, type, document, error): + if case .frontSide(index, type, document, error) = to { return true } else { return false } - case let .backSide(index, document, error): - if case .backSide(index, document, error) = to { + case let .backSide(index, type, document, error): + if case .backSide(index, type, document, error) = to { return true } else { return false } - case .documentsInfo: - if case .documentsInfo = to { + case let .documentsInfo(category): + if case .documentsInfo(category) = to { return true } else { return false @@ -1571,15 +1575,15 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { params.updateText(.identifier, text) }) case let .firstName(value, error): - return FormControllerTextInputItem(title: strings.Passport_Identity_Name, text: value, placeholder: strings.Passport_Identity_NamePlaceholder, type: .latin, error: error, textUpdated: { text in + return FormControllerTextInputItem(title: strings.Passport_Identity_Name, text: value, placeholder: strings.Passport_Identity_NamePlaceholder, type: .latin(capitalization: .words), error: error, textUpdated: { text in params.updateText(.firstName, text) }) case let .middleName(value, error): - return FormControllerTextInputItem(title: strings.Passport_Identity_MiddleName, text: value, placeholder: strings.Passport_Identity_MiddleNamePlaceholder, type: .latin, error: error, textUpdated: { text in + return FormControllerTextInputItem(title: strings.Passport_Identity_MiddleName, text: value, placeholder: strings.Passport_Identity_MiddleNamePlaceholder, type: .latin(capitalization: .words), error: error, textUpdated: { text in params.updateText(.middleName, text) }) case let .lastName(value, error): - return FormControllerTextInputItem(title: strings.Passport_Identity_Surname, text: value, placeholder: strings.Passport_Identity_SurnamePlaceholder, type: .latin, error: error, textUpdated: { text in + return FormControllerTextInputItem(title: strings.Passport_Identity_Surname, text: value, placeholder: strings.Passport_Identity_SurnamePlaceholder, type: .latin(capitalization: .words), error: error, textUpdated: { text in params.updateText(.lastName, text) }) case let .nativeInfoHeader(language): @@ -1671,7 +1675,7 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { params.updateText(.state, text) }) case let .postcode(value, error): - return FormControllerTextInputItem(title: strings.Passport_Address_Postcode, text: value, placeholder: strings.Passport_Address_PostcodePlaceholder, type: .regular(capitalization: .allCharacters, autocorrection: false), error: error, textUpdated: { text in + return FormControllerTextInputItem(title: strings.Passport_Address_Postcode, text: value, placeholder: strings.Passport_Address_PostcodePlaceholder, type: .latin(capitalization: .allCharacters), error: error, textUpdated: { text in params.updateText(.postcode, text) }) case .requestedDocumentsHeader: @@ -1692,23 +1696,41 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { params.addFile(.selfie) } }) - case let .frontSide(_, document, error): + case let .frontSide(_, type, document, error): let label: SecureIdValueFormFileItemLabel if let error = error { label = .error(error) } else if document != nil { label = .timestamp } else { - label = .text(strings.Passport_Identity_FrontSideHelp) + switch type { + case .passport?, .internalPassport?: + label = .text(strings.Passport_Identity_MainPageHelp) + default: + label = .text(strings.Passport_Identity_FrontSideHelp) + } } - return SecureIdValueFormFileItem(account: params.account, context: params.context, document: document, placeholder: UIImage(bundleImageName: "Secure ID/PassportInputFrontSide"), title: strings.Passport_Identity_FrontSide, label: label, activated: { + let title: String + let placeholder: UIImage? + switch type { + case .passport?, .internalPassport?: + title = strings.Passport_Identity_MainPage + placeholder = UIImage(bundleImageName: "Secure ID/PassportInputFrontSide") + case .driversLicense?: + title = strings.Passport_Identity_FrontSide + placeholder = UIImage(bundleImageName: "Secure ID/DriversLicenseInputFrontSide") + default: + title = strings.Passport_Identity_FrontSide + placeholder = UIImage(bundleImageName: "Secure ID/IdCardInputFrontSide") + } + return SecureIdValueFormFileItem(account: params.account, context: params.context, document: document, placeholder: placeholder, title: title, label: label, activated: { if let document = document { params.openDocument(document) } else { - params.addFile(.frontSide) + params.addFile(.frontSide(type)) } }) - case let .backSide(_, document, error): + case let .backSide(_, type, document, error): let label: SecureIdValueFormFileItemLabel if let error = error { label = .error(error) @@ -1721,11 +1743,18 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { if let document = document { params.openDocument(document) } else { - params.addFile(.backSide) + params.addFile(.backSide(type)) } }) - case .documentsInfo: - return FormControllerTextItem(text: "") + case let .documentsInfo(category): + let text: String + switch category { + case .identity: + text = strings.Passport_Identity_ScansHelp + case .address: + text = strings.Passport_Address_ScansHelp + } + return FormControllerTextItem(text: text) case .translationsHeader: return FormControllerHeaderItem(text: strings.Passport_Identity_Translations) case let .translation(index, document, error): @@ -1737,7 +1766,7 @@ enum SecureIdDocumentFormEntry: FormControllerEntry { params.addFile(.translation) }) case .translationsInfo: - return FormControllerTextItem(text: strings.Passport_Identity_TranslationHelp) + return FormControllerTextItem(text: strings.Passport_Identity_TranslationsHelp) case let .error(_, text, _): return FormControllerTextItem(text: text, color: .error) } @@ -1912,6 +1941,10 @@ final class SecureIdDocumentFormControllerNode: FormControllerNode Void fileprivate let updateTextField: (SecureIdPlaintextFormTextField, String) -> Void fileprivate let usePhone: (String) -> Void + fileprivate let useEmailAddress: (String) -> Void - fileprivate init(openCountrySelection: @escaping () -> Void, updateTextField: @escaping (SecureIdPlaintextFormTextField, String) -> Void, usePhone: @escaping (String) -> Void) { + fileprivate init(openCountrySelection: @escaping () -> Void, updateTextField: @escaping (SecureIdPlaintextFormTextField, String) -> Void, usePhone: @escaping (String) -> Void, useEmailAddress: @escaping (String) -> Void) { self.openCountrySelection = openCountrySelection self.updateTextField = updateTextField self.usePhone = usePhone + self.useEmailAddress = useEmailAddress } } @@ -278,8 +280,9 @@ struct SecureIdPlaintextFormInnerState: FormControllerInnerState { result.append(.entry(SecureIdPlaintextFormEntry.immediatelyAvailablePhone(phone.phone))) result.append(.entry(SecureIdPlaintextFormEntry.immediatelyAvailablePhoneInfo)) result.append(.spacer) + result.append(.entry(SecureIdPlaintextFormEntry.numberInputHeader)) } - + result.append(.entry(SecureIdPlaintextFormEntry.numberInput(countryCode: input.countryCode, number: input.number))) result.append(.entry(SecureIdPlaintextFormEntry.numberInputInfo)) case let .verify(verify): @@ -293,12 +296,20 @@ struct SecureIdPlaintextFormInnerState: FormControllerInnerState { switch email { case let .input(input): result.append(.spacer) + + if let value = self.previousValue, case let .email(email) = value { + result.append(.entry(SecureIdPlaintextFormEntry.immediatelyAvailableEmail(email.email))) + result.append(.entry(SecureIdPlaintextFormEntry.immediatelyAvailableEmailInfo)) + result.append(.spacer) + result.append(.entry(SecureIdPlaintextFormEntry.emailInputHeader)) + } + result.append(.entry(SecureIdPlaintextFormEntry.emailAddress(input.email))) - result.append(.entry(SecureIdPlaintextFormEntry.numberInputInfo)) + result.append(.entry(SecureIdPlaintextFormEntry.emailInputInfo)) case let .verify(verify): result.append(.spacer) result.append(.entry(SecureIdPlaintextFormEntry.numberCode(verify.code))) - result.append(.entry(SecureIdPlaintextFormEntry.emailVerifyInfo)) + result.append(.entry(SecureIdPlaintextFormEntry.emailVerifyInfo(verify.email))) } return result } @@ -383,26 +394,35 @@ extension SecureIdPlaintextFormInnerState { enum SecureIdPlaintextFormEntryId: Hashable { case immediatelyAvailablePhone case immediatelyAvailablePhoneInfo + case numberInputHeader case numberInput case numberInputInfo case numberCode case numberVerifyInfo - case emailVerifyInfo + case immediatelyAvailableEmail + case immediatelyAvailableEmailInfo + case emailInputHeader case emailAddress + case emailInputInfo case emailCode + case emailVerifyInfo } enum SecureIdPlaintextFormEntry: FormControllerEntry { case immediatelyAvailablePhone(String) case immediatelyAvailablePhoneInfo - + case numberInputHeader case numberInput(countryCode: String, number: String) case numberInputInfo case numberCode(String) case numberVerifyInfo + case immediatelyAvailableEmail(String) + case immediatelyAvailableEmailInfo + case emailInputHeader case emailAddress(String) + case emailInputInfo case emailCode(String) - case emailVerifyInfo + case emailVerifyInfo(String) var stableId: SecureIdPlaintextFormEntryId { switch self { @@ -410,6 +430,8 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { return .immediatelyAvailablePhone case .immediatelyAvailablePhoneInfo: return .immediatelyAvailablePhoneInfo + case .numberInputHeader: + return .numberInputHeader case .numberInput: return .numberInput case .numberInputInfo: @@ -418,8 +440,16 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { return .numberCode case .numberVerifyInfo: return .numberVerifyInfo + case .immediatelyAvailableEmail: + return .immediatelyAvailableEmail + case .immediatelyAvailableEmailInfo: + return .immediatelyAvailableEmailInfo + case .emailInputHeader: + return .emailInputHeader case .emailAddress: return .emailAddress + case .emailInputInfo: + return .emailInputInfo case .emailCode: return .emailCode case .emailVerifyInfo: @@ -441,6 +471,12 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { } else { return false } + case .numberInputHeader: + if case .numberInputHeader = to { + return true + } else { + return false + } case let .numberInput(countryCode, number): if case .numberInput(countryCode, number) = to { return true @@ -465,8 +501,20 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { } else { return false } - case .emailVerifyInfo: - if case .emailVerifyInfo = to { + case let .immediatelyAvailableEmail(value): + if case .immediatelyAvailableEmail(value) = to { + return true + } else { + return false + } + case .immediatelyAvailableEmailInfo: + if case .immediatelyAvailableEmailInfo = to { + return true + } else { + return false + } + case .emailInputHeader: + if case .emailInputHeader = to { return true } else { return false @@ -477,12 +525,24 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { } else { return false } + case .emailInputInfo: + if case .emailInputInfo = to { + return true + } else { + return false + } case let .emailCode(code): if case .emailCode(code) = to { return true } else { return false } + case let .emailVerifyInfo(address): + if case .emailVerifyInfo(address) = to { + return true + } else { + return false + } } } @@ -494,6 +554,8 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { }) case .immediatelyAvailablePhoneInfo: return FormControllerTextItem(text: strings.Passport_Phone_UseTelegramNumberHelp) + case .numberInputHeader: + return FormControllerHeaderItem(text: strings.Passport_Phone_EnterOtherNumber) case let .numberInput(countryCode, number): var countryName = "" if let codeNumber = Int(countryCode), let codeId = AuthorizationSequenceCountrySelectionController.lookupCountryIdByCode(codeNumber) { @@ -514,16 +576,26 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { }) case .numberVerifyInfo: return FormControllerTextItem(text: strings.ChangePhoneNumberCode_Help) + case let .immediatelyAvailableEmail(value): + return FormControllerActionItem(type: .accent, title: strings.Passport_Email_UseTelegramEmail(value).0, activated: { + params.useEmailAddress(value) + }) + case .immediatelyAvailableEmailInfo: + return FormControllerTextItem(text: strings.Passport_Email_UseTelegramEmailHelp) + case .emailInputHeader: + return FormControllerHeaderItem(text: strings.Passport_Email_EnterOtherEmail) case let .emailAddress(address): - return FormControllerTextInputItem(title: strings.TwoStepAuth_Email, text: address, placeholder: strings.TwoStepAuth_Email, type: .email, textUpdated: { value in + return FormControllerTextInputItem(title: strings.TwoStepAuth_Email, text: address, placeholder: strings.Passport_Email_EmailPlaceholder, type: .email, textUpdated: { value in params.updateTextField(.email, value) }) + case .emailInputInfo: + return FormControllerTextItem(text: strings.Passport_Email_Help) case let .emailCode(code): return FormControllerTextInputItem(title: strings.TwoStepAuth_RecoveryCode, text: code, placeholder: strings.TwoStepAuth_RecoveryCode, type: .number, textUpdated: { value in params.updateTextField(.code, value) }) - case .emailVerifyInfo: - return FormControllerTextItem(text: strings.TwoStepAuth_EmailSent) + case let .emailVerifyInfo(address): + return FormControllerTextItem(text: strings.Passport_Email_CodeHelp(address).0) } } } @@ -583,6 +655,8 @@ final class SecureIdPlaintextFormControllerNode: FormControllerNode deliverOnMainQueue).start(next: { [weak self] result in if let strongSelf = self { - guard var innerState = strongSelf.innerState else { + guard let innerState = strongSelf.innerState else { return } guard case .saving = innerState.actionState else { @@ -661,45 +735,7 @@ final class SecureIdPlaintextFormControllerNode: FormControllerNode deliverOnMainQueue).start(next: { [weak self] result in - if let strongSelf = self { - guard var innerState = strongSelf.innerState else { - return - } - guard case .saving = innerState.actionState else { - return - } - innerState.actionState = .none - innerState.data = .email(.verify(EmailVerifyState(email: input.email, payload: result, code: ""))) - strongSelf.updateInnerState(transition: .immediate, with: innerState) - } - }, error: { [weak self] error in - if let strongSelf = self { - guard var innerState = strongSelf.innerState else { - return - } - guard case .saving = innerState.actionState else { - return - } - innerState.actionState = .none - strongSelf.updateInnerState(transition: .immediate, with: innerState) - let errorText: String - switch error { - case .generic: - errorText = strongSelf.strings.Login_UnknownError - case .flood: - errorText = strongSelf.strings.Login_CodeFloodError - } - strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.theme), title: nil, text: errorText, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.strings.Common_OK, action: {})]), nil) - } - })) + self.saveEmailAddress(input.email) return case let .verify(verify): guard case .saveAvailable = innerState.actionInputState() else { @@ -711,7 +747,7 @@ final class SecureIdPlaintextFormControllerNode: FormControllerNode deliverOnMainQueue).start(next: { [weak self] result in if let strongSelf = self { - guard var innerState = strongSelf.innerState else { + guard let innerState = strongSelf.innerState else { return } guard case .saving = innerState.actionState else { @@ -794,6 +830,51 @@ final class SecureIdPlaintextFormControllerNode: FormControllerNode deliverOnMainQueue).start(next: { [weak self] result in + if let strongSelf = self { + guard var innerState = strongSelf.innerState else { + return + } + guard case .saving = innerState.actionState else { + return + } + innerState.actionState = .none + innerState.data = .email(.verify(EmailVerifyState(email: value, payload: result, code: ""))) + strongSelf.updateInnerState(transition: .immediate, with: innerState) + } + }, error: { [weak self] error in + if let strongSelf = self { + guard var innerState = strongSelf.innerState else { + return + } + guard case .saving = innerState.actionState else { + return + } + innerState.actionState = .none + strongSelf.updateInnerState(transition: .immediate, with: innerState) + let errorText: String + switch error { + case .generic: + errorText = strongSelf.strings.Login_UnknownError + case .flood: + errorText = strongSelf.strings.Login_CodeFloodError + } + strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.theme), title: nil, text: errorText, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.strings.Common_OK, action: {})]), nil) + } + })) + } + func deleteValue() { guard var innerState = self.innerState, let previousValue = innerState.previousValue else { return diff --git a/TelegramUI/WebEmbedVideoContent.swift b/TelegramUI/WebEmbedVideoContent.swift index a6a3eb943a..52c529870d 100644 --- a/TelegramUI/WebEmbedVideoContent.swift +++ b/TelegramUI/WebEmbedVideoContent.swift @@ -93,28 +93,14 @@ private final class WebEmbedVideoContentNode: ASDisplayNode, UniversalVideoConte super.init() - self.addSubnode(self.playerNode) + //self.addSubnode(self.playerNode) self.addSubnode(self.imageNode) -// let nativeLoadProgress = nil //self.playerView.loadProgress() -// let loadProgress: Signal = Signal { subscriber in -// let disposable = nativeLoadProgress?.start(next: { value in -// subscriber.putNext((value as! NSNumber).floatValue) -// }) -// return ActionDisposable { -// disposable?.dispose() -// } -// } - self._preloadCompleted.set(true) -// self.loadProgressDisposable = (loadProgress |> deliverOnMainQueue).start(next: { [weak self] value in -// if let strongSelf = self { -// strongSelf._preloadCompleted.set(value.isEqual(to: 1.0)) -// } -// }) - if let image = webpageContent.image { + self.imageNode.setSignal(chatMessagePhoto(postbox: postbox, photoReference: .webPage(webPage: WebpageReference(webPage), media: image))) + self.thumbnailDisposable = (rawMessagePhoto(postbox: postbox, photoReference: .webPage(webPage: WebpageReference(webPage), media: image)) |> deliverOnMainQueue).start(next: { [weak self] image in if let strongSelf = self {