diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 32be79e0c4..9c69517469 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -5957,7 +5957,7 @@ Sorry for the inconvenience."; "ChatImportActivity.InProgress" = "Please keep this window open\nduring the import."; "ChatImportActivity.ErrorNotAdmin" = "You need to be an admin."; "ChatImportActivity.ErrorInvalidChatType" = "You can't import this history in this type of chat."; -"ChatImportActivity.ErrorUserBlocked" = "You need to be an admin."; +"ChatImportActivity.ErrorUserBlocked" = "This user is blocked."; "ChatImportActivity.ErrorGeneric" = "An error occurred."; "ChatImportActivity.Success" = "Chat imported\nsuccessfully."; diff --git a/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift b/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift index eead72c488..a5101d6516 100644 --- a/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift +++ b/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift @@ -56,6 +56,7 @@ private final class ImportManager { case generic case chatAdminRequired case invalidChatType + case userBlocked } enum State { @@ -116,6 +117,8 @@ private final class ImportManager { return .invalidChatType case .generic: return .generic + case .userBlocked: + return .userBlocked } } |> deliverOnMainQueue).start(next: { [weak self] session in @@ -449,12 +452,39 @@ public final class ChatImportActivityScreen: ViewController { let isFirstLayout = self.validLayout == nil self.validLayout = (layout, navigationHeight) - let iconSize = CGSize(width: 190.0, height: 190.0) - let radialStatusSize = CGSize(width: 186.0, height: 186.0) - let maxIconStatusSpacing: CGFloat = 46.0 - let maxProgressTextSpacing: CGFloat = 33.0 - let progressStatusSpacing: CGFloat = 14.0 - let statusButtonSpacing: CGFloat = 19.0 + let availableHeight = layout.size.height - navigationHeight + + var iconSize = CGSize(width: 190.0, height: 190.0) + var radialStatusSize = CGSize(width: 186.0, height: 186.0) + var maxIconStatusSpacing: CGFloat = 46.0 + var maxProgressTextSpacing: CGFloat = 33.0 + var progressStatusSpacing: CGFloat = 14.0 + var statusButtonSpacing: CGFloat = 19.0 + + var maxK: CGFloat = availableHeight / (iconSize.height + maxIconStatusSpacing + 30.0 + maxProgressTextSpacing + 320.0) + maxK = max(0.5, min(1.0, maxK)) + + iconSize.width = floor(iconSize.width * maxK) + iconSize.height = floor(iconSize.height * maxK) + radialStatusSize.width = floor(radialStatusSize.width * maxK) + radialStatusSize.height = floor(radialStatusSize.height * maxK) + maxIconStatusSpacing = floor(maxIconStatusSpacing * maxK) + maxProgressTextSpacing = floor(maxProgressTextSpacing * maxK) + progressStatusSpacing = floor(progressStatusSpacing * maxK) + statusButtonSpacing = floor(statusButtonSpacing * maxK) + + var updateRadialBackround = false + if let width = self.radialStatusBackground.image?.size.width { + if abs(width - radialStatusSize.width) > 0.01 { + updateRadialBackround = true + } + } else { + updateRadialBackround = true + } + + if updateRadialBackround { + self.radialStatusBackground.image = generateCircleImage(diameter: radialStatusSize.width, lineWidth: 6.0, color: self.presentationData.theme.list.itemAccentColor.withMultipliedAlpha(0.2)) + } let effectiveProgress: CGFloat switch state { @@ -470,7 +500,7 @@ public final class ChatImportActivityScreen: ViewController { effectiveProgress = 1.0 } - self.radialStatusText.attributedText = NSAttributedString(string: "\(Int(effectiveProgress * 100.0))%", font: Font.with(size: 36.0, design: .round, weight: .semibold), textColor: self.presentationData.theme.list.itemPrimaryTextColor) + self.radialStatusText.attributedText = NSAttributedString(string: "\(Int(effectiveProgress * 100.0))%", font: Font.with(size: floor(36.0 * maxK), design: .round, weight: .semibold), textColor: self.presentationData.theme.list.itemPrimaryTextColor) let radialStatusTextSize = self.radialStatusText.updateLayout(CGSize(width: 200.0, height: .greatestFiniteMagnitude)) self.progressText.attributedText = NSAttributedString(string: "\(dataSizeString(Int(effectiveProgress * CGFloat(self.totalBytes)))) of \(dataSizeString(Int(1.0 * CGFloat(self.totalBytes))))", font: Font.semibold(17.0), textColor: self.presentationData.theme.list.itemPrimaryTextColor) @@ -496,6 +526,8 @@ public final class ChatImportActivityScreen: ViewController { errorText = self.presentationData.strings.ChatImportActivity_ErrorInvalidChatType case .generic: errorText = self.presentationData.strings.ChatImportActivity_ErrorGeneric + case .userBlocked: + errorText = self.presentationData.strings.ChatImportActivity_ErrorUserBlocked } self.statusText.attributedText = NSAttributedString(string: errorText, font: Font.regular(17.0), textColor: self.presentationData.theme.list.itemDestructiveColor) case .done: @@ -510,7 +542,7 @@ public final class ChatImportActivityScreen: ViewController { hideIcon = true contentHeight = progressTextSize.height + progressStatusSpacing + 160.0 } else { - contentHeight = iconSize.height + maxIconStatusSpacing + radialStatusSize.height + maxProgressTextSpacing + progressTextSize.height + progressStatusSpacing + 100.0 + contentHeight = iconSize.height + maxIconStatusSpacing + radialStatusSize.height + maxProgressTextSpacing + progressTextSize.height + progressStatusSpacing + 140.0 } transition.updateAlpha(node: self.radialStatus, alpha: hideIcon ? 0.0 : 1.0) diff --git a/submodules/TelegramCore/Sources/ChatHistoryImport.swift b/submodules/TelegramCore/Sources/ChatHistoryImport.swift index 971e63ca83..48f455b609 100644 --- a/submodules/TelegramCore/Sources/ChatHistoryImport.swift +++ b/submodules/TelegramCore/Sources/ChatHistoryImport.swift @@ -2,7 +2,6 @@ import Foundation import SwiftSignalKit import Postbox import SyncCore -import TelegramCore import TelegramApi public enum ChatHistoryImport { @@ -16,6 +15,7 @@ public enum ChatHistoryImport { case generic case chatAdminRequired case invalidChatType + case userBlocked } public enum ParsedInfo { @@ -71,6 +71,8 @@ public enum ChatHistoryImport { return .chatAdminRequired case "IMPORT_PEER_TYPE_INVALID": return .invalidChatType + case "USER_IS_BLOCKED": + return .userBlocked default: return .generic } diff --git a/submodules/TelegramUI/Sources/ShareExtensionContext.swift b/submodules/TelegramUI/Sources/ShareExtensionContext.swift index 4846204af6..84b47ebdfe 100644 --- a/submodules/TelegramUI/Sources/ShareExtensionContext.swift +++ b/submodules/TelegramUI/Sources/ShareExtensionContext.swift @@ -542,7 +542,7 @@ public class ShareRootControllerImpl { super.containerLayoutUpdated(layout, transition: transition) let indicatorSize = self.activityIndicator.measure(CGSize(width: 100.0, height: 100.0)) - transition.updateFrame(node: self.activityIndicator, frame: CGRect(origin: CGPoint(x: floor((layout.size.width - indicatorSize.width) / 2.0), y: floor((layout.size.height - indicatorSize.height - 50.0) / 2.0)), size: indicatorSize)) + transition.updateFrame(node: self.activityIndicator, frame: CGRect(origin: CGPoint(x: floor((layout.size.width - indicatorSize.width) / 2.0), y: self.navigationHeight + floor((layout.size.height - self.navigationHeight - indicatorSize.height) / 2.0)), size: indicatorSize)) } }