From 1bcdf64ebe20631e40ed394e116c8b10d5b8270f Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 9 Jul 2020 02:26:26 +0300 Subject: [PATCH] Video avatar fixes --- .../Sources/AvatarGalleryController.swift | 34 +++++++++---------- .../Sources/PeerInfo/PeerInfoHeaderNode.swift | 12 ++++--- .../Sources/PeerInfo/PeerInfoScreen.swift | 5 ++- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/submodules/PeerAvatarGalleryUI/Sources/AvatarGalleryController.swift b/submodules/PeerAvatarGalleryUI/Sources/AvatarGalleryController.swift index 0877620b0f..e0f1d05b99 100644 --- a/submodules/PeerAvatarGalleryUI/Sources/AvatarGalleryController.swift +++ b/submodules/PeerAvatarGalleryUI/Sources/AvatarGalleryController.swift @@ -96,6 +96,22 @@ public final class AvatarGalleryControllerPresentationArguments { } } +public func normalizeEntries(_ entries: [AvatarGalleryEntry]) -> [AvatarGalleryEntry] { + var updatedEntries: [AvatarGalleryEntry] = [] + let count: Int32 = Int32(entries.count) + var index: Int32 = 0 + for entry in entries { + let indexData = GalleryItemIndexData(position: index, totalCount: count) + if case let .topImage(representations, _, immediateThumbnailData) = entry { + updatedEntries.append(.topImage(representations, indexData, immediateThumbnailData)) + } else if case let .image(id, reference, representations, videoRepresentations, peer, date, _, messageId, immediateThumbnailData) = entry { + updatedEntries.append(.image(id, reference, representations, videoRepresentations, peer, date, indexData, messageId, immediateThumbnailData)) + } + index += 1 + } + return updatedEntries + } + public func initialAvatarGalleryEntries(peer: Peer) -> [AvatarGalleryEntry] { var initialEntries: [AvatarGalleryEntry] = [] if !peer.profileImageRepresentations.isEmpty, let peerReference = PeerReference(peer) { @@ -540,22 +556,6 @@ public class AvatarGalleryController: ViewController, StandalonePresentableContr } } - private func normalizeEntries(_ entries: [AvatarGalleryEntry]) -> [AvatarGalleryEntry] { - var updatedEntries: [AvatarGalleryEntry] = [] - let count: Int32 = Int32(entries.count) - var index: Int32 = 0 - for entry in entries { - let indexData = GalleryItemIndexData(position: index, totalCount: count) - if case let .topImage(representations, _, immediateThumbnailData) = entry { - updatedEntries.append(.topImage(representations, indexData, immediateThumbnailData)) - } else if case let .image(id, reference, representations, videoRepresentations, peer, date, _, messageId, immediateThumbnailData) = entry { - updatedEntries.append(.image(id, reference, representations, videoRepresentations, peer, date, indexData, messageId, immediateThumbnailData)) - } - index += 1 - } - return updatedEntries - } - private func setMainEntry(_ rawEntry: AvatarGalleryEntry) { var entry = rawEntry if case .topImage = entry, !self.entries.isEmpty { @@ -600,7 +600,7 @@ public class AvatarGalleryController: ViewController, StandalonePresentableContr canDelete = false } - entries = self.normalizeEntries(entries) + entries = normalizeEntries(entries) self.galleryNode.pager.replaceItems(entries.map({ entry in PeerAvatarImageGalleryItem(context: self.context, peer: peer, presentationData: presentationData, entry: entry, sourceHasRoundCorners: self.sourceHasRoundCorners, delete: canDelete ? { [weak self] in self?.deleteEntry(entry) diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift index a7fa4f0dc3..7a054683e1 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift @@ -738,7 +738,7 @@ final class PeerInfoAvatarListContainerNode: ASDisplayNode { } } } - self.galleryEntries = entries + self.galleryEntries = normalizeEntries(entries) self.items = items self.itemsUpdated?(items) self.currentIndex = 0 @@ -767,7 +767,7 @@ final class PeerInfoAvatarListContainerNode: ASDisplayNode { } } } - self.galleryEntries = entries + self.galleryEntries = normalizeEntries(entries) self.items = items self.itemsUpdated?(items) self.currentIndex = max(0, previousIndex - 1) @@ -2072,6 +2072,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { private let videoCallsEnabled: Bool private(set) var isAvatarExpanded: Bool + private(set) var twoLineInfo = false let avatarListNode: PeerInfoAvatarListNode @@ -2332,7 +2333,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { if self.isSettings, let user = peer as? TelegramUser { let formattedPhone = formatPhoneNumber(user.phone ?? "") subtitleString = NSAttributedString(string: formattedPhone, font: Font.regular(15.0), textColor: presentationData.theme.list.itemSecondaryTextColor) - usernameString = NSAttributedString(string: user.addressName.flatMap { "@superlongusernamehere\($0)" } ?? "", font: Font.regular(15.0), textColor: presentationData.theme.list.itemAccentColor) + usernameString = NSAttributedString(string: user.addressName.flatMap { "@\($0)" } ?? "", font: Font.regular(15.0), textColor: presentationData.theme.list.itemAccentColor) } else if let statusData = statusData { let subtitleColor: UIColor if statusData.isActivity { @@ -2414,6 +2415,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { usernameFrame = CGRect(origin: CGPoint(x: subtitleFrame.maxX + usernameSpacing, y: titleFrame.maxY + 1.0), size: usernameSize) } } + self.twoLineInfo = twoLineInfo let singleTitleLockOffset: CGFloat = (peer?.id == self.context.account.peerId || subtitleSize.height.isZero) ? 8.0 : 0.0 @@ -2556,7 +2558,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { var panelWithAvatarHeight: CGFloat = (self.isSettings ? 40.0 : 112.0) + avatarSize if twoLineInfo { - panelWithAvatarHeight += 7.0 + panelWithAvatarHeight += 17.0 } let buttonsCollapseStart = titleCollapseOffset let buttonsCollapseEnd = panelWithAvatarHeight - (navigationHeight - statusBarHeight) + 10.0 @@ -2816,7 +2818,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { if self.isAvatarExpanded { resolvedRegularHeight = expandedAvatarListSize.height + expandedAvatarControlsHeight } else { - resolvedRegularHeight = (self.isSettings ? 40.0 : 112.0) + avatarSize + navigationHeight + resolvedRegularHeight = panelWithAvatarHeight + navigationHeight } let backgroundFrame: CGRect diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index af3c10a8c0..771705c682 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -5372,7 +5372,10 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD guard let (_, navigationHeight) = self.validLayout else { return } - let height: CGFloat = self.isSettings ? 140.0 : 212.0 + var height: CGFloat = self.isSettings ? 140.0 : 212.0 + if self.headerNode.twoLineInfo { + height += 17.0 + } if !self.state.isEditing { if targetContentOffset.pointee.y < height { if targetContentOffset.pointee.y < height / 2.0 {