Video avatar fixes

This commit is contained in:
Ilya Laktyushin 2020-07-09 02:26:26 +03:00
parent 6f4d9df1a3
commit 1bcdf64ebe
3 changed files with 28 additions and 23 deletions

View File

@ -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] { public func initialAvatarGalleryEntries(peer: Peer) -> [AvatarGalleryEntry] {
var initialEntries: [AvatarGalleryEntry] = [] var initialEntries: [AvatarGalleryEntry] = []
if !peer.profileImageRepresentations.isEmpty, let peerReference = PeerReference(peer) { 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) { private func setMainEntry(_ rawEntry: AvatarGalleryEntry) {
var entry = rawEntry var entry = rawEntry
if case .topImage = entry, !self.entries.isEmpty { if case .topImage = entry, !self.entries.isEmpty {
@ -600,7 +600,7 @@ public class AvatarGalleryController: ViewController, StandalonePresentableContr
canDelete = false 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.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) self?.deleteEntry(entry)

View File

@ -738,7 +738,7 @@ final class PeerInfoAvatarListContainerNode: ASDisplayNode {
} }
} }
} }
self.galleryEntries = entries self.galleryEntries = normalizeEntries(entries)
self.items = items self.items = items
self.itemsUpdated?(items) self.itemsUpdated?(items)
self.currentIndex = 0 self.currentIndex = 0
@ -767,7 +767,7 @@ final class PeerInfoAvatarListContainerNode: ASDisplayNode {
} }
} }
} }
self.galleryEntries = entries self.galleryEntries = normalizeEntries(entries)
self.items = items self.items = items
self.itemsUpdated?(items) self.itemsUpdated?(items)
self.currentIndex = max(0, previousIndex - 1) self.currentIndex = max(0, previousIndex - 1)
@ -2072,6 +2072,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
private let videoCallsEnabled: Bool private let videoCallsEnabled: Bool
private(set) var isAvatarExpanded: Bool private(set) var isAvatarExpanded: Bool
private(set) var twoLineInfo = false
let avatarListNode: PeerInfoAvatarListNode let avatarListNode: PeerInfoAvatarListNode
@ -2332,7 +2333,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
if self.isSettings, let user = peer as? TelegramUser { if self.isSettings, let user = peer as? TelegramUser {
let formattedPhone = formatPhoneNumber(user.phone ?? "") let formattedPhone = formatPhoneNumber(user.phone ?? "")
subtitleString = NSAttributedString(string: formattedPhone, font: Font.regular(15.0), textColor: presentationData.theme.list.itemSecondaryTextColor) 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 { } else if let statusData = statusData {
let subtitleColor: UIColor let subtitleColor: UIColor
if statusData.isActivity { 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) 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 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 var panelWithAvatarHeight: CGFloat = (self.isSettings ? 40.0 : 112.0) + avatarSize
if twoLineInfo { if twoLineInfo {
panelWithAvatarHeight += 7.0 panelWithAvatarHeight += 17.0
} }
let buttonsCollapseStart = titleCollapseOffset let buttonsCollapseStart = titleCollapseOffset
let buttonsCollapseEnd = panelWithAvatarHeight - (navigationHeight - statusBarHeight) + 10.0 let buttonsCollapseEnd = panelWithAvatarHeight - (navigationHeight - statusBarHeight) + 10.0
@ -2816,7 +2818,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
if self.isAvatarExpanded { if self.isAvatarExpanded {
resolvedRegularHeight = expandedAvatarListSize.height + expandedAvatarControlsHeight resolvedRegularHeight = expandedAvatarListSize.height + expandedAvatarControlsHeight
} else { } else {
resolvedRegularHeight = (self.isSettings ? 40.0 : 112.0) + avatarSize + navigationHeight resolvedRegularHeight = panelWithAvatarHeight + navigationHeight
} }
let backgroundFrame: CGRect let backgroundFrame: CGRect

View File

@ -5372,7 +5372,10 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
guard let (_, navigationHeight) = self.validLayout else { guard let (_, navigationHeight) = self.validLayout else {
return 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 !self.state.isEditing {
if targetContentOffset.pointee.y < height { if targetContentOffset.pointee.y < height {
if targetContentOffset.pointee.y < height / 2.0 { if targetContentOffset.pointee.y < height / 2.0 {