diff --git a/submodules/AvatarNode/BUCK b/submodules/AvatarNode/BUCK index 6e813eee49..b4aa0ab0df 100644 --- a/submodules/AvatarNode/BUCK +++ b/submodules/AvatarNode/BUCK @@ -14,6 +14,7 @@ static_library( "//submodules/AnimationUI:AnimationUI", "//submodules/AppBundle:AppBundle", "//submodules/AccountContext:AccountContext", + "//submodules/Emoji:Emoji", ], frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", diff --git a/submodules/AvatarNode/BUILD b/submodules/AvatarNode/BUILD index df2c2c6837..2afd25db42 100644 --- a/submodules/AvatarNode/BUILD +++ b/submodules/AvatarNode/BUILD @@ -15,6 +15,7 @@ swift_library( "//submodules/AnimationUI:AnimationUI", "//submodules/AppBundle:AppBundle", "//submodules/AccountContext:AccountContext", + "//submodules/Emoji:Emoji", ], visibility = [ "//visibility:public", diff --git a/submodules/AvatarNode/Sources/AvatarNode.swift b/submodules/AvatarNode/Sources/AvatarNode.swift index 870c620e68..063a7ad1af 100644 --- a/submodules/AvatarNode/Sources/AvatarNode.swift +++ b/submodules/AvatarNode/Sources/AvatarNode.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import AnimationUI import AppBundle import AccountContext +import Emoji private let deletedIcon = UIImage(bundleImageName: "Avatar/DeletedIcon")?.precomposed() private let savedMessagesIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/SavedMessagesIcon"), color: .white) @@ -522,7 +523,11 @@ public final class AvatarNode: ASDisplayNode { context.draw(archivedChatsIcon.cgImage!, in: CGRect(origin: CGPoint(x: floor((bounds.size.width - archivedChatsIcon.size.width) / 2.0), y: floor((bounds.size.height - archivedChatsIcon.size.height) / 2.0)), size: archivedChatsIcon.size)) } } else { - let letters = parameters.letters + var letters = parameters.letters + if letters.count == 2 && letters[0].isSingleEmoji && letters[1].isSingleEmoji { + letters = [letters[0]] + } + let string = letters.count == 0 ? "" : (letters[0] + (letters.count == 1 ? "" : letters[1])) let attributedString = NSAttributedString(string: string, attributes: [NSAttributedString.Key.font: parameters.font, NSAttributedString.Key.foregroundColor: UIColor.white]) diff --git a/submodules/SettingsUI/Sources/SettingsController.swift b/submodules/SettingsUI/Sources/SettingsController.swift index 896fa3bb4f..2190ebae9a 100644 --- a/submodules/SettingsUI/Sources/SettingsController.swift +++ b/submodules/SettingsUI/Sources/SettingsController.swift @@ -38,6 +38,7 @@ import WalletUI import PhoneNumberFormat import AccountUtils import AuthTransferUI +import Emoji private let avatarFont = avatarPlaceholderFont(size: 13.0) @@ -789,21 +790,6 @@ private final class SettingsControllerImpl: ItemListController, SettingsControll //self.contextValue.set(.single(context)) } - /*func presentTabBarPreviewingController(sourceNodes: [ASDisplayNode]) { - guard let (maybePrimary, other) = self.accountsAndPeersValue, let primary = maybePrimary else { - return - } - let controller = TabBarAccountSwitchController(sharedContext: self.sharedContext, accounts: (primary, other), canAddAccounts: other.count + 1 < maximumNumberOfAccounts, switchToAccount: { [weak self] id in - self?.switchToAccount?(id) - }, addAccount: { [weak self] in - self?.addAccount?() - }, sourceNodes: sourceNodes) - self.sharedContext.mainWindow?.present(controller, on: .root) - } - - func updateTabBarPreviewingControllerPresentation(_ update: TabBarContainedControllerPresentationUpdate) { - }*/ - override public func tabBarItemContextAction(sourceNode: ContextExtractedContentContainingNode, gesture: ContextGesture) { guard let (maybePrimary, other) = self.accountsAndPeersValue, let primary = maybePrimary else { return @@ -834,7 +820,10 @@ private final class SettingsControllerImpl: ItemListController, SettingsControll } } else { let peerId = peer.id - let displayLetters = peer.displayLetters + var displayLetters = peer.displayLetters + if displayLetters.count == 2 && displayLetters[0].isSingleEmoji && displayLetters[1].isSingleEmoji { + displayLetters = [displayLetters[0]] + } iconSignal = Signal { subscriber in let image = generateImage(size, rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) @@ -1656,16 +1645,21 @@ public func settingsController(context: AccountContext, accountManager: AccountM } } else { return Signal { subscriber in + var displayLetters = primary.1.displayLetters + if displayLetters.count == 2 && displayLetters[0].isSingleEmoji && displayLetters[1].isSingleEmoji { + displayLetters = [displayLetters[0]] + } let image = generateImage(size, rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) context.translateBy(x: inset, y: inset) - drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: primary.1.displayLetters, peerId: primary.1.id) + + drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: displayLetters, peerId: primary.1.id) })?.withRenderingMode(.alwaysOriginal) let selectedImage = generateImage(size, rotatedContext: { size, context in context.clear(CGRect(origin: CGPoint(), size: size)) context.translateBy(x: inset, y: inset) - drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: primary.1.displayLetters, peerId: primary.1.id) + drawPeerAvatarLetters(context: context, size: CGSize(width: size.width - inset * 2.0, height: size.height - inset * 2.0), font: avatarFont, letters: displayLetters, peerId: primary.1.id) context.translateBy(x: -inset, y: -inset) context.setLineWidth(1.0) context.setStrokeColor(primary.2.rootController.tabBar.selectedIconColor.cgColor)