From 7ceab4e1a9cf05fdfd00f96ed6998a64e5d9759f Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Sat, 26 Nov 2022 20:08:39 +0400 Subject: [PATCH] Improve iPad authorization layout --- .../Telegram-iOS/en.lproj/Localizable.strings | 3 +- ...ationSequenceCodeEntryControllerNode.swift | 17 ++++++---- ...tionSequenceEmailEntryControllerNode.swift | 23 +++++++------ ...nSequencePasswordEntryControllerNode.swift | 21 ++++++------ ...tionSequencePhoneEntryControllerNode.swift | 32 +++++++++++++------ ...rizationSequenceSignUpControllerNode.swift | 12 ++++--- .../Sources/AuthorizationOptionText.swift | 2 +- .../platform/ios/RMIntroViewController.m | 2 +- .../TelegramUI/Resources/PhoneCountries.txt | 1 + .../TelegramUI/Sources/ChatLoadingNode.swift | 7 ++-- 10 files changed, 73 insertions(+), 47 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index d6603ed30f..4a1b120f3c 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -8321,7 +8321,8 @@ Sorry for the inconvenience."; "AutoremoveSetup.AdditionalGlobalSettingsInfo" = "You can also set your default [self-destruct timer]() for all chats in Settings."; "Login.EnterCodeFragmentTitle" = "Enter Code"; -"Login.EnterCodeFragmentText" = "Check the Anonymous Numbers section on **Fragment** to get the code."; +"Login.EnterCodeFragmentText" = "Get the code for **%@** in the Anonymous Numbers section on **Fragment**."; + "Login.OpenFragment" = "Open Fragment"; "Login.AnonymousNumbers" = "Anonymous Numbers"; diff --git a/submodules/AuthorizationUI/Sources/AuthorizationSequenceCodeEntryControllerNode.swift b/submodules/AuthorizationUI/Sources/AuthorizationSequenceCodeEntryControllerNode.swift index 6f12e27e79..1b99dceaa9 100644 --- a/submodules/AuthorizationUI/Sources/AuthorizationSequenceCodeEntryControllerNode.swift +++ b/submodules/AuthorizationUI/Sources/AuthorizationSequenceCodeEntryControllerNode.swift @@ -272,6 +272,9 @@ final class AuthorizationSequenceCodeEntryControllerNode: ASDisplayNode, UITextF func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.layoutArguments = (layout, navigationBarHeight) + let maximumWidth: CGFloat = min(430.0, layout.size.width) + let inset: CGFloat = 24.0 + var insets = layout.insets(options: []) insets.top = layout.statusBarHeight ?? 20.0 @@ -314,14 +317,14 @@ final class AuthorizationSequenceCodeEntryControllerNode: ASDisplayNode, UITextF } let animationSize = CGSize(width: 100.0, height: 100.0) - let titleSize = self.titleNode.updateLayout(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) + let titleSize = self.titleNode.updateLayout(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) - let currentOptionSize = self.currentOptionNode.updateLayout(CGSize(width: layout.size.width - 48.0, height: CGFloat.greatestFiniteMagnitude)) - let currentOptionInfoSize = self.currentOptionInfoNode.measure(CGSize(width: layout.size.width - 48.0, height: CGFloat.greatestFiniteMagnitude)) - let nextOptionSize = self.nextOptionTitleNode.updateLayout(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) + let currentOptionSize = self.currentOptionNode.updateLayout(CGSize(width: maximumWidth - 48.0, height: CGFloat.greatestFiniteMagnitude)) + let currentOptionInfoSize = self.currentOptionInfoNode.measure(CGSize(width: maximumWidth - 48.0, height: CGFloat.greatestFiniteMagnitude)) + let nextOptionSize = self.nextOptionTitleNode.updateLayout(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) - let proceedHeight = self.proceedNode.updateLayout(width: layout.size.width - 48.0, transition: transition) - let proceedSize = CGSize(width: layout.size.width - 48.0, height: proceedHeight) + let proceedHeight = self.proceedNode.updateLayout(width: maximumWidth - inset * 2.0, transition: transition) + let proceedSize = CGSize(width: maximumWidth - inset * 2.0, height: proceedHeight) let codeLength: Int var codePrefix: String = "" @@ -362,7 +365,7 @@ final class AuthorizationSequenceCodeEntryControllerNode: ASDisplayNode, UITextF ), prefix: codePrefix, count: codeLength, - width: layout.size.width - 28.0, + width: maximumWidth - 28.0, compact: layout.size.width <= 320.0 ) diff --git a/submodules/AuthorizationUI/Sources/AuthorizationSequenceEmailEntryControllerNode.swift b/submodules/AuthorizationUI/Sources/AuthorizationSequenceEmailEntryControllerNode.swift index d6814dacf2..b8a0c98882 100644 --- a/submodules/AuthorizationUI/Sources/AuthorizationSequenceEmailEntryControllerNode.swift +++ b/submodules/AuthorizationUI/Sources/AuthorizationSequenceEmailEntryControllerNode.swift @@ -199,7 +199,7 @@ final class AuthorizationSequenceEmailEntryControllerNode: ASDisplayNode, UIText func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.layoutArguments = (layout, navigationBarHeight) - + var insets = layout.insets(options: []) insets.top = layout.statusBarHeight ?? 20.0 if let inputHeight = layout.inputHeight { @@ -210,20 +210,24 @@ final class AuthorizationSequenceEmailEntryControllerNode: ASDisplayNode, UIText self.titleNode.attributedText = NSAttributedString(string: self.mode == .setup ? self.strings.Login_AddEmailTitle : self.strings.Login_EnterNewEmailTitle, font: Font.bold(28.0), textColor: self.theme.list.itemPrimaryTextColor) - let animationSize = CGSize(width: 100.0, height: 100.0) - let titleSize = self.titleNode.measure(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) - let noticeSize = self.noticeNode.measure(CGSize(width: layout.size.width - 80.0, height: CGFloat.greatestFiniteMagnitude)) - let proceedHeight = self.proceedNode.updateLayout(width: layout.size.width - 48.0, transition: transition) - let proceedSize = CGSize(width: layout.size.width - 48.0, height: proceedHeight) + let inset: CGFloat = 24.0 + let maximumWidth: CGFloat = min(430.0, layout.size.width) + + let animationSize = CGSize(width: 100.0, height: 100.0) + let titleSize = self.titleNode.measure(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) + + let noticeSize = self.noticeNode.measure(CGSize(width: maximumWidth - 80.0, height: CGFloat.greatestFiniteMagnitude)) + let proceedHeight = self.proceedNode.updateLayout(width: maximumWidth - 48.0, transition: transition) + let proceedSize = CGSize(width: maximumWidth - 48.0, height: proceedHeight) var items: [AuthorizationLayoutItem] = [] items.append(AuthorizationLayoutItem(node: self.titleNode, size: titleSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: titleInset, maxValue: titleInset), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) items.append(AuthorizationLayoutItem(node: self.noticeNode, size: noticeSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 18.0, maxValue: 18.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) - items.append(AuthorizationLayoutItem(node: self.codeField, size: CGSize(width: layout.size.width - 88.0, height: 44.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 18.0, maxValue: 30.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) - items.append(AuthorizationLayoutItem(node: self.codeSeparatorNode, size: CGSize(width: layout.size.width - 48.0, height: UIScreenPixel), spacingBefore: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) + items.append(AuthorizationLayoutItem(node: self.codeField, size: CGSize(width: maximumWidth - 88.0, height: 44.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 18.0, maxValue: 30.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) + items.append(AuthorizationLayoutItem(node: self.codeSeparatorNode, size: CGSize(width: maximumWidth - 48.0, height: UIScreenPixel), spacingBefore: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) if layout.size.width > 320.0 { items.insert(AuthorizationLayoutItem(node: self.animationNode, size: animationSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 10.0, maxValue: 10.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)), at: 0) @@ -237,11 +241,10 @@ final class AuthorizationSequenceEmailEntryControllerNode: ASDisplayNode, UIText self.animationNode.isHidden = true } - let inset: CGFloat = 24.0 let buttonFrame = CGRect(origin: CGPoint(x: floorToScreenPixels((layout.size.width - proceedSize.width) / 2.0), y: layout.size.height - insets.bottom - proceedSize.height - inset), size: proceedSize) transition.updateFrame(node: self.proceedNode, frame: buttonFrame) - let dividerSize = self.dividerNode.updateLayout(width: layout.size.width) + let dividerSize = self.dividerNode.updateLayout(width: maximumWidth) transition.updateFrame(node: self.dividerNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((layout.size.width - dividerSize.width) / 2.0), y: buttonFrame.minY - dividerSize.height), size: dividerSize)) if let _ = self.signInWithAppleButton, self.appleSignInAllowed { diff --git a/submodules/AuthorizationUI/Sources/AuthorizationSequencePasswordEntryControllerNode.swift b/submodules/AuthorizationUI/Sources/AuthorizationSequencePasswordEntryControllerNode.swift index 968adc3235..919d044efe 100644 --- a/submodules/AuthorizationUI/Sources/AuthorizationSequencePasswordEntryControllerNode.swift +++ b/submodules/AuthorizationUI/Sources/AuthorizationSequencePasswordEntryControllerNode.swift @@ -149,6 +149,9 @@ final class AuthorizationSequencePasswordEntryControllerNode: ASDisplayNode, UIT func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.layoutArguments = (layout, navigationBarHeight) + let inset: CGFloat = 24.0 + let maximumWidth: CGFloat = min(430.0, layout.size.width) + var insets = layout.insets(options: []) insets.top = layout.statusBarHeight ?? 20.0 if let inputHeight = layout.inputHeight, !inputHeight.isZero { @@ -160,23 +163,21 @@ final class AuthorizationSequencePasswordEntryControllerNode: ASDisplayNode, UIT self.titleNode.attributedText = NSAttributedString(string: self.strings.LoginPassword_Title, font: Font.semibold(28.0), textColor: self.theme.list.itemPrimaryTextColor) - let inset: CGFloat = 24.0 - let animationSize = CGSize(width: 100.0, height: 100.0) - let titleSize = self.titleNode.measure(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) + let titleSize = self.titleNode.measure(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) - let noticeSize = self.noticeNode.measure(CGSize(width: layout.size.width - 28.0, height: CGFloat.greatestFiniteMagnitude)) - let forgotSize = self.forgotNode.measure(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) - let resetSize = self.resetNode.measure(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) - let proceedHeight = self.proceedNode.updateLayout(width: layout.size.width - inset * 2.0, transition: transition) - let proceedSize = CGSize(width: layout.size.width - inset * 2.0, height: proceedHeight) + let noticeSize = self.noticeNode.measure(CGSize(width: maximumWidth - 28.0, height: CGFloat.greatestFiniteMagnitude)) + let forgotSize = self.forgotNode.measure(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) + let resetSize = self.resetNode.measure(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) + let proceedHeight = self.proceedNode.updateLayout(width: maximumWidth - inset * 2.0, transition: transition) + let proceedSize = CGSize(width: maximumWidth - inset * 2.0, height: proceedHeight) var items: [AuthorizationLayoutItem] = [] items.append(AuthorizationLayoutItem(node: self.titleNode, size: titleSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: titleInset, maxValue: titleInset), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) items.append(AuthorizationLayoutItem(node: self.noticeNode, size: noticeSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 18.0, maxValue: 18.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) - items.append(AuthorizationLayoutItem(node: self.codeField, size: CGSize(width: layout.size.width - 80.0, height: 44.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 32.0, maxValue: 60.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) - items.append(AuthorizationLayoutItem(node: self.codeSeparatorNode, size: CGSize(width: layout.size.width - 48.0, height: UIScreenPixel), spacingBefore: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) + items.append(AuthorizationLayoutItem(node: self.codeField, size: CGSize(width: maximumWidth - 80.0, height: 44.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 32.0, maxValue: 60.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) + items.append(AuthorizationLayoutItem(node: self.codeSeparatorNode, size: CGSize(width: maximumWidth - 48.0, height: UIScreenPixel), spacingBefore: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) items.append(AuthorizationLayoutItem(node: self.forgotNode, size: forgotSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 48.0, maxValue: 100.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) diff --git a/submodules/AuthorizationUI/Sources/AuthorizationSequencePhoneEntryControllerNode.swift b/submodules/AuthorizationUI/Sources/AuthorizationSequencePhoneEntryControllerNode.swift index b0ce85923f..f224bf656c 100644 --- a/submodules/AuthorizationUI/Sources/AuthorizationSequencePhoneEntryControllerNode.swift +++ b/submodules/AuthorizationUI/Sources/AuthorizationSequencePhoneEntryControllerNode.swift @@ -532,17 +532,18 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { self.titleNode.attributedText = NSAttributedString(string: strings.Login_PhoneTitle, font: Font.bold(28.0), textColor: self.theme.list.itemPrimaryTextColor) let inset: CGFloat = 24.0 + let maximumWidth: CGFloat = min(430.0, layout.size.width) let animationSize = CGSize(width: 100.0, height: 100.0) - let titleSize = self.titleNode.measure(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) - let noticeSize = self.noticeNode.measure(CGSize(width: min(274.0, layout.size.width - 28.0), height: CGFloat.greatestFiniteMagnitude)) - let proceedHeight = self.proceedNode.updateLayout(width: layout.size.width - inset * 2.0, transition: transition) - let proceedSize = CGSize(width: layout.size.width - inset * 2.0, height: proceedHeight) + let titleSize = self.titleNode.measure(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) + let noticeSize = self.noticeNode.measure(CGSize(width: min(274.0, maximumWidth - 28.0), height: CGFloat.greatestFiniteMagnitude)) + let proceedHeight = self.proceedNode.updateLayout(width: maximumWidth - inset * 2.0, transition: transition) + let proceedSize = CGSize(width: maximumWidth - inset * 2.0, height: proceedHeight) var items: [AuthorizationLayoutItem] = [ AuthorizationLayoutItem(node: self.titleNode, size: titleSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: titleInset, maxValue: titleInset), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)), AuthorizationLayoutItem(node: self.noticeNode, size: noticeSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 18.0, maxValue: 18.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)), - AuthorizationLayoutItem(node: self.phoneAndCountryNode, size: CGSize(width: layout.size.width, height: 115.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 30.0, maxValue: 30.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)), + AuthorizationLayoutItem(node: self.phoneAndCountryNode, size: CGSize(width: maximumWidth, height: 115.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 30.0, maxValue: 30.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)), ] if layout.size.width > 320.0 { @@ -557,7 +558,7 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { self.managedAnimationNode.isHidden = true } - let contactSyncSize = self.contactSyncNode.updateLayout(width: layout.size.width) + let contactSyncSize = self.contactSyncNode.updateLayout(width: maximumWidth) if self.hasOtherAccounts { self.contactSyncNode.isHidden = false items.append(AuthorizationLayoutItem(node: self.contactSyncNode, size: contactSyncSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 14.0, maxValue: 14.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) @@ -871,7 +872,8 @@ final class PhoneConfirmationController: ViewController { self.phoneTargetNode.layer.animatePosition(from: self.phoneSourceNode.position, to: self.phoneTargetNode.position, duration: duration) self.backgroundNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1) - self.backgroundNode.layer.animateFrame(from: CGRect(origin: CGPoint(x: 14.0, y: codeFrame.minY), size: CGSize(width: self.backgroundNode.frame.width - 12.0, height: buttonFrame.maxY + 18.0 - codeFrame.minY)), to: self.backgroundNode.frame, duration: duration) + + self.backgroundNode.layer.animateFrame(from: CGRect(origin: CGPoint(x: self.backgroundNode.frame.origin.x + 6.0, y: codeFrame.minY), size: CGSize(width: self.backgroundNode.frame.width - 12.0, height: buttonFrame.maxY + 18.0 - codeFrame.minY)), to: self.backgroundNode.frame, duration: duration) self.textNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: duration) self.textNode.layer.animateScale(from: 0.5, to: 1.0, duration: duration) @@ -927,7 +929,7 @@ final class PhoneConfirmationController: ViewController { self.phoneTargetNode.layer.animatePosition(from: self.phoneTargetNode.position, to: self.phoneSourceNode.position, duration: duration) self.backgroundNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, delay: 0.1, removeOnCompletion: false) - self.backgroundNode.layer.animateFrame(from: self.backgroundNode.frame, to: CGRect(origin: CGPoint(x: 14.0, y: codeFrame.minY), size: CGSize(width: self.backgroundNode.frame.width - 12.0, height: buttonFrame.maxY + 18.0 - codeFrame.minY)), duration: duration) + self.backgroundNode.layer.animateFrame(from: self.backgroundNode.frame, to: CGRect(origin: CGPoint(x: self.backgroundNode.frame.origin.x + 6.0, y: codeFrame.minY), size: CGSize(width: self.backgroundNode.frame.width - 12.0, height: buttonFrame.maxY + 18.0 - codeFrame.minY)), duration: duration) self.textNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) self.textNode.layer.animateScale(from: 1.0, to: 0.5, duration: duration, removeOnCompletion: false) @@ -947,10 +949,20 @@ final class PhoneConfirmationController: ViewController { let sideInset: CGFloat = 8.0 let innerInset: CGFloat = 18.0 + let maximumWidth: CGFloat = min(430.0, layout.size.width) + transition.updateFrame(node: self.dimNode, frame: CGRect(origin: CGPoint(x: -layout.size.width, y: 0.0), size: CGSize(width: layout.size.width * 3.0, height: layout.size.height))) - let backgroundSize = CGSize(width: layout.size.width - sideInset * 2.0, height: 243.0) - let backgroundFrame = CGRect(origin: CGPoint(x: floorToScreenPixels((layout.size.width - backgroundSize.width) / 2.0), y: layout.size.height - backgroundSize.height - 260.0), size: backgroundSize) + let backgroundSize = CGSize(width: maximumWidth - sideInset * 2.0, height: 243.0) + + let originY: CGFloat + if case .regular = layout.metrics.widthClass { + originY = floorToScreenPixels((layout.size.height - backgroundSize.height) / 2.0) + } else { + originY = layout.size.height - backgroundSize.height - 260.0 + } + + let backgroundFrame = CGRect(origin: CGPoint(x: floorToScreenPixels((layout.size.width - backgroundSize.width) / 2.0), y: originY), size: backgroundSize) transition.updateFrame(node: self.backgroundNode, frame: backgroundFrame) let maxWidth = layout.size.width - 20.0 diff --git a/submodules/AuthorizationUI/Sources/AuthorizationSequenceSignUpControllerNode.swift b/submodules/AuthorizationUI/Sources/AuthorizationSequenceSignUpControllerNode.swift index 0aa2f62cf8..660d80a0eb 100644 --- a/submodules/AuthorizationUI/Sources/AuthorizationSequenceSignUpControllerNode.swift +++ b/submodules/AuthorizationUI/Sources/AuthorizationSequenceSignUpControllerNode.swift @@ -211,6 +211,8 @@ final class AuthorizationSequenceSignUpControllerNode: ASDisplayNode, UITextFiel func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.layoutArguments = (layout, navigationBarHeight) + let maximumWidth: CGFloat = min(430.0, layout.size.width) + var insets = layout.insets(options: [.statusBar]) if let inputHeight = layout.inputHeight { insets.bottom = max(inputHeight, layout.standardInputHeight) @@ -219,15 +221,15 @@ final class AuthorizationSequenceSignUpControllerNode: ASDisplayNode, UITextFiel let additionalBottomInset: CGFloat = layout.size.width > 320.0 ? 90.0 : 10.0 self.titleNode.attributedText = NSAttributedString(string: self.strings.Login_InfoTitle, font: Font.semibold(28.0), textColor: self.theme.list.itemPrimaryTextColor) - let titleSize = self.titleNode.measure(CGSize(width: layout.size.width, height: CGFloat.greatestFiniteMagnitude)) + let titleSize = self.titleNode.measure(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude)) let fieldHeight: CGFloat = 54.0 let sideInset: CGFloat = 24.0 let innerInset: CGFloat = 16.0 - let noticeSize = self.currentOptionNode.measure(CGSize(width: layout.size.width - 28.0, height: CGFloat.greatestFiniteMagnitude)) - let termsSize = self.termsNode.updateLayout(CGSize(width: layout.size.width - 28.0, height: CGFloat.greatestFiniteMagnitude)) + let noticeSize = self.currentOptionNode.measure(CGSize(width: maximumWidth - 28.0, height: CGFloat.greatestFiniteMagnitude)) + let termsSize = self.termsNode.updateLayout(CGSize(width: maximumWidth - 28.0, height: CGFloat.greatestFiniteMagnitude)) let avatarSize: CGSize = CGSize(width: 110.0, height: 110.0) var items: [AuthorizationLayoutItem] = [] @@ -249,8 +251,8 @@ final class AuthorizationSequenceSignUpControllerNode: ASDisplayNode, UITextFiel self.proceedNode.isHidden = false let inset: CGFloat = 24.0 - let proceedHeight = self.proceedNode.updateLayout(width: layout.size.width - 48.0, transition: transition) - let proceedSize = CGSize(width: layout.size.width - 48.0, height: proceedHeight) + let proceedHeight = self.proceedNode.updateLayout(width: maximumWidth - 48.0, transition: transition) + let proceedSize = CGSize(width: maximumWidth - 48.0, height: proceedHeight) transition.updateFrame(node: self.proceedNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((layout.size.width - proceedSize.width) / 2.0), y: layout.size.height - insets.bottom - proceedSize.height - inset), size: proceedSize)) } else { insets.top = navigationBarHeight diff --git a/submodules/AuthorizationUtils/Sources/AuthorizationOptionText.swift b/submodules/AuthorizationUtils/Sources/AuthorizationOptionText.swift index f7dafe0666..914b9d94c5 100644 --- a/submodules/AuthorizationUtils/Sources/AuthorizationOptionText.swift +++ b/submodules/AuthorizationUtils/Sources/AuthorizationOptionText.swift @@ -42,7 +42,7 @@ public func authorizationCurrentOptionText(_ type: SentAuthorizationCodeType, ph return mutableString case .fragment: - return parseMarkdownIntoAttributedString(strings.Login_EnterCodeFragmentText, attributes: attributes, textAlignment: .center) + return parseMarkdownIntoAttributedString(strings.Login_EnterCodeFragmentText(phoneNumber).string, attributes: attributes, textAlignment: .center) } } diff --git a/submodules/RMIntro/Sources/platform/ios/RMIntroViewController.m b/submodules/RMIntro/Sources/platform/ios/RMIntroViewController.m index 3610c76e62..8f2a8d80db 100644 --- a/submodules/RMIntro/Sources/platform/ios/RMIntroViewController.m +++ b/submodules/RMIntro/Sources/platform/ios/RMIntroViewController.m @@ -509,7 +509,7 @@ typedef enum { _pageControl.frame = CGRectMake(0, pageControlY, self.view.bounds.size.width, 7); _glkView.frame = CGRectChangedOriginY(_glkView.frame, glViewY - statusBarHeight); - CGFloat startButtonWidth = self.view.bounds.size.width - 48.0f; + CGFloat startButtonWidth = MIN(430.0 - 48.0, self.view.bounds.size.width - 48.0f); UIView *startButton = self.createStartButton(startButtonWidth); if (startButton.superview == nil) { [self.view addSubview:startButton]; diff --git a/submodules/TelegramUI/Resources/PhoneCountries.txt b/submodules/TelegramUI/Resources/PhoneCountries.txt index b87d74df83..1f30a9c3c8 100644 --- a/submodules/TelegramUI/Resources/PhoneCountries.txt +++ b/submodules/TelegramUI/Resources/PhoneCountries.txt @@ -233,3 +233,4 @@ 27;ZA;XX XXX XXXX;South Africa 260;ZM;XX XXX XXXX;Zambia 263;ZW;XX XXX XXXX;Zimbabwe +888;FT;XXXX XXXX;Fragment diff --git a/submodules/TelegramUI/Sources/ChatLoadingNode.swift b/submodules/TelegramUI/Sources/ChatLoadingNode.swift index 1766a1fc64..aa31b4e38b 100644 --- a/submodules/TelegramUI/Sources/ChatLoadingNode.swift +++ b/submodules/TelegramUI/Sources/ChatLoadingNode.swift @@ -161,7 +161,7 @@ final class ChatLoadingPlaceholderNode: ASDisplayNode { let bubbleBorderImage = messageBubbleImage(maxCornerRadius: bubbleCorners.mainRadius, minCornerRadius: bubbleCorners.auxiliaryRadius, incoming: true, fillColor: .clear, strokeColor: .red, neighbors: .none, theme: theme.chat, wallpaper: .color(0xffffff), knockout: true, mask: true, extendedEdges: true, onlyOutline: true) var messageContainers: [ChatLoadingPlaceholderMessageContainer] = [] - for _ in 0 ..< 11 { + for _ in 0 ..< 14 { let container = ChatLoadingPlaceholderMessageContainer(bubbleImage: bubbleImage, bubbleBorderImage: bubbleBorderImage) container.setup(maskNode: self.maskNode, borderMaskNode: self.borderMaskNode) messageContainers.append(container) @@ -436,6 +436,9 @@ final class ChatLoadingPlaceholderNode: ASDisplayNode { CGSize(width: floorToScreenPixels(0.58 * size.width), height: tallHeight), CGSize(width: floorToScreenPixels(0.69 * size.width), height: tallHeight), CGSize(width: floorToScreenPixels(0.58 * size.width), height: tallHeight), + CGSize(width: floorToScreenPixels(0.36 * size.width), height: shortHeight), + CGSize(width: floorToScreenPixels(0.47 * size.width), height: tallHeight), + CGSize(width: floorToScreenPixels(0.58 * size.width), height: tallHeight) ].map { if self.chatType == .channel { return CGSize(width: floor($0.width * 1.3), height: floor($0.height * 1.8)) @@ -448,7 +451,7 @@ final class ChatLoadingPlaceholderNode: ASDisplayNode { var index = 0 for messageContainer in self.messageContainers { - let messageSize = dimensions[index % 11] + let messageSize = dimensions[index % 14] messageContainer.update(size: bounds.size, hasAvatar: self.chatType != .channel, rect: CGRect(origin: CGPoint(x: 0.0, y: bounds.size.height - insets.bottom - offset - messageSize.height), size: messageSize), transition: transition) offset += messageSize.height index += 1