Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios

This commit is contained in:
overtake 2020-07-15 17:19:35 +03:00
commit 2a610b46b9
7 changed files with 50 additions and 21 deletions

View File

@ -250,10 +250,10 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll
} }
} }
override func setVisibilityAlpha(_ alpha: CGFloat) { override func setVisibilityAlpha(_ alpha: CGFloat, animated: Bool) {
self.visibilityAlpha = alpha self.visibilityAlpha = alpha
self.contentNode.alpha = alpha self.contentNode.alpha = alpha
self.scrubberView?.setCollapsed(alpha < 1.0 ? true : false, animated: true) self.scrubberView?.setCollapsed(alpha < 1.0 ? true : false, animated: animated)
} }
init(context: AccountContext, presentationData: PresentationData, present: @escaping (ViewController, Any?) -> Void = { _, _ in }) { init(context: AccountContext, presentationData: PresentationData, present: @escaping (ViewController, Any?) -> Void = { _, _ in }) {

View File

@ -120,13 +120,32 @@ final class ChatVideoGalleryItemScrubberView: UIView {
self.fetchStatusDisposable.dispose() self.fetchStatusDisposable.dispose()
} }
var collapsed: Bool = false
func setCollapsed(_ collapsed: Bool, animated: Bool) { func setCollapsed(_ collapsed: Bool, animated: Bool) {
let alpha: CGFloat = collapsed ? 0.0 : 1.0 guard self.collapsed != collapsed else {
return
}
self.scrubberNode.setCollapsed(collapsed, animated: animated) self.collapsed = collapsed
let alpha: CGFloat = collapsed ? 0.0 : 1.0
self.leftTimestampNode.alpha = alpha self.leftTimestampNode.alpha = alpha
self.rightTimestampNode.alpha = alpha self.rightTimestampNode.alpha = alpha
self.infoNode.alpha = alpha self.infoNode.alpha = alpha
self.updateScrubberVisibility(animated: animated)
}
private func updateScrubberVisibility(animated: Bool) {
var collapsed = self.collapsed
var alpha: CGFloat = 1.0
if let playbackStatus = self.playbackStatus, playbackStatus.duration <= 30.0 {
} else {
alpha = self.collapsed ? 0.0 : 1.0
collapsed = false
}
self.scrubberNode.setCollapsed(collapsed, animated: animated)
let transition: ContainedViewLayoutTransition = animated ? .animated(duration: 0.3, curve: .linear) : .immediate
transition.updateAlpha(node: self.scrubberNode, alpha: alpha)
} }
func setStatusSignal(_ status: Signal<MediaPlayerStatus, NoError>?) { func setStatusSignal(_ status: Signal<MediaPlayerStatus, NoError>?) {
@ -232,7 +251,7 @@ final class ChatVideoGalleryItemScrubberView: UIView {
self.containerLayout = (size, leftInset, rightInset) self.containerLayout = (size, leftInset, rightInset)
let scrubberHeight: CGFloat = 14.0 let scrubberHeight: CGFloat = 14.0
let scrubberInset: CGFloat var scrubberInset: CGFloat
let leftTimestampOffset: CGFloat let leftTimestampOffset: CGFloat
let rightTimestampOffset: CGFloat let rightTimestampOffset: CGFloat
let infoOffset: CGFloat let infoOffset: CGFloat
@ -257,7 +276,7 @@ final class ChatVideoGalleryItemScrubberView: UIView {
let infoSize = self.infoNode.measure(infoConstrainedSize) let infoSize = self.infoNode.measure(infoConstrainedSize)
self.infoNode.bounds = CGRect(origin: CGPoint(), size: infoSize) self.infoNode.bounds = CGRect(origin: CGPoint(), size: infoSize)
transition.updatePosition(node: self.infoNode, position: CGPoint(x: size.width / 2.0, y: infoOffset + infoSize.height / 2.0)) transition.updatePosition(node: self.infoNode, position: CGPoint(x: size.width / 2.0, y: infoOffset + infoSize.height / 2.0))
self.infoNode.alpha = size.width < size.height ? 1.0 : 0.0 self.infoNode.alpha = size.width < size.height && !self.collapsed ? 1.0 : 0.0
self.scrubberNode.frame = CGRect(origin: CGPoint(x: scrubberInset, y: 6.0), size: CGSize(width: size.width - leftInset - rightInset - scrubberInset * 2.0, height: scrubberHeight)) self.scrubberNode.frame = CGRect(origin: CGPoint(x: scrubberInset, y: 6.0), size: CGSize(width: size.width - leftInset - rightInset - scrubberInset * 2.0, height: scrubberHeight))
} }

View File

@ -253,7 +253,7 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture
if displayThumbnailPanel { if displayThumbnailPanel {
thumbnailPanelHeight = 52.0 thumbnailPanelHeight = 52.0
} }
let thumbnailsFrame = CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - 40.0 - panelHeight + 4.0 - layout.intrinsicInsets.bottom + (self.areControlsHidden ? 54.0 : 0.0)), size: CGSize(width: layout.size.width, height: panelHeight - 4.0)) let thumbnailsFrame = CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - 40.0 - panelHeight + 4.0 - layout.intrinsicInsets.bottom + (self.areControlsHidden ? 106.0 : 0.0)), size: CGSize(width: layout.size.width, height: panelHeight - 4.0))
transition.updateFrame(node: currentThumbnailContainerNode, frame: thumbnailsFrame) transition.updateFrame(node: currentThumbnailContainerNode, frame: thumbnailsFrame)
currentThumbnailContainerNode.updateLayout(size: thumbnailsFrame.size, transition: transition) currentThumbnailContainerNode.updateLayout(size: thumbnailsFrame.size, transition: transition)
@ -279,6 +279,9 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture
} }
open func setControlsHidden(_ hidden: Bool, animated: Bool) { open func setControlsHidden(_ hidden: Bool, animated: Bool) {
guard self.areControlsHidden != hidden else {
return
}
self.areControlsHidden = hidden self.areControlsHidden = hidden
self.controlsVisibilityChanged?(!hidden) self.controlsVisibilityChanged?(!hidden)
if animated { if animated {
@ -286,7 +289,7 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture
let alpha: CGFloat = self.areControlsHidden ? 0.0 : 1.0 let alpha: CGFloat = self.areControlsHidden ? 0.0 : 1.0
self.navigationBar?.alpha = alpha self.navigationBar?.alpha = alpha
self.statusBar?.updateAlpha(alpha, transition: .animated(duration: 0.3, curve: .easeInOut)) self.statusBar?.updateAlpha(alpha, transition: .animated(duration: 0.3, curve: .easeInOut))
self.footerNode.setVisibilityAlpha(alpha) self.footerNode.setVisibilityAlpha(alpha, animated: animated)
self.updateThumbnailContainerNodeAlpha(.immediate) self.updateThumbnailContainerNodeAlpha(.immediate)
}) })
@ -297,7 +300,7 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture
let alpha: CGFloat = self.areControlsHidden ? 0.0 : 1.0 let alpha: CGFloat = self.areControlsHidden ? 0.0 : 1.0
self.navigationBar?.alpha = alpha self.navigationBar?.alpha = alpha
self.statusBar?.updateAlpha(alpha, transition: .immediate) self.statusBar?.updateAlpha(alpha, transition: .immediate)
self.footerNode.setVisibilityAlpha(alpha) self.footerNode.setVisibilityAlpha(alpha, animated: animated)
self.updateThumbnailContainerNodeAlpha(.immediate) self.updateThumbnailContainerNodeAlpha(.immediate)
if let (navigationBarHeight, layout) = self.containerLayout { if let (navigationBarHeight, layout) = self.containerLayout {

View File

@ -21,7 +21,7 @@ open class GalleryFooterContentNode: ASDisplayNode {
public var controllerInteraction: GalleryControllerInteraction? public var controllerInteraction: GalleryControllerInteraction?
var visibilityAlpha: CGFloat = 1.0 var visibilityAlpha: CGFloat = 1.0
open func setVisibilityAlpha(_ alpha: CGFloat) { open func setVisibilityAlpha(_ alpha: CGFloat, animated: Bool) {
self.visibilityAlpha = alpha self.visibilityAlpha = alpha
self.alpha = alpha self.alpha = alpha
} }

View File

@ -24,10 +24,10 @@ public final class GalleryFooterNode: ASDisplayNode {
} }
private var visibilityAlpha: CGFloat = 1.0 private var visibilityAlpha: CGFloat = 1.0
public func setVisibilityAlpha(_ alpha: CGFloat) { public func setVisibilityAlpha(_ alpha: CGFloat, animated: Bool) {
self.visibilityAlpha = alpha self.visibilityAlpha = alpha
self.backgroundNode.alpha = alpha self.backgroundNode.alpha = alpha
self.currentFooterContentNode?.setVisibilityAlpha(alpha) self.currentFooterContentNode?.setVisibilityAlpha(alpha, animated: true)
self.currentOverlayContentNode?.setVisibilityAlpha(alpha) self.currentOverlayContentNode?.setVisibilityAlpha(alpha)
} }
@ -43,7 +43,7 @@ public final class GalleryFooterNode: ASDisplayNode {
} }
self.currentFooterContentNode = footerContentNode self.currentFooterContentNode = footerContentNode
if let footerContentNode = footerContentNode { if let footerContentNode = footerContentNode {
footerContentNode.setVisibilityAlpha(self.visibilityAlpha) footerContentNode.setVisibilityAlpha(self.visibilityAlpha, animated: transition.isAnimated)
footerContentNode.controllerInteraction = self.controllerInteraction footerContentNode.controllerInteraction = self.controllerInteraction
footerContentNode.requestLayout = { [weak self] transition in footerContentNode.requestLayout = { [weak self] transition in
if let strongSelf = self, let (currentLayout, currentThumbnailPanelHeight, isHidden) = strongSelf.currentLayout { if let strongSelf = self, let (currentLayout, currentThumbnailPanelHeight, isHidden) = strongSelf.currentLayout {
@ -67,7 +67,7 @@ public final class GalleryFooterNode: ASDisplayNode {
} }
var backgroundHeight: CGFloat = 0.0 var backgroundHeight: CGFloat = 0.0
let verticalOffset: CGFloat = isHidden ? (layout.size.width > layout.size.height ? 44.0 : 54.0) : 0.0 let verticalOffset: CGFloat = isHidden ? (layout.size.width > layout.size.height ? 44.0 : (thumbnailPanelHeight > 0.0 ? 106.0 : 54.0)) : 0.0
if let footerContentNode = self.currentFooterContentNode { if let footerContentNode = self.currentFooterContentNode {
backgroundHeight = footerContentNode.updateLayout(size: layout.size, metrics: layout.metrics, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: cleanInsets.bottom, contentInset: thumbnailPanelHeight, transition: transition) backgroundHeight = footerContentNode.updateLayout(size: layout.size, metrics: layout.metrics, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: cleanInsets.bottom, contentInset: thumbnailPanelHeight, transition: transition)
transition.updateFrame(node: footerContentNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - backgroundHeight + verticalOffset), size: CGSize(width: layout.size.width, height: backgroundHeight))) transition.updateFrame(node: footerContentNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - backgroundHeight + verticalOffset), size: CGSize(width: layout.size.width, height: backgroundHeight)))

View File

@ -5069,11 +5069,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
self.keepPeerInfoScreenDataHotDisposable.set(keepPeerInfoScreenDataHot(context: context, peerId: peerId).start()) self.keepPeerInfoScreenDataHotDisposable.set(keepPeerInfoScreenDataHot(context: context, peerId: peerId).start())
self.preloadAvatarDisposable.set((peerInfoProfilePhotosWithCache(context: context, peerId: peerId) self.preloadAvatarDisposable.set((peerInfoProfilePhotosWithCache(context: context, peerId: peerId)
|> mapToSignal { result -> Signal<Never, NoError> in |> mapToSignal { result -> Signal<Never, NoError> in
if let video = result.first?.videoRepresentations.first { var signals: [Signal<Never, NoError>] = [.complete()]
let duration: Double = (video.representation.startTimestamp ?? 0.0) + 4.0 for i in 0 ..< min(5, result.count) {
return preloadVideoResource(postbox: context.account.postbox, resourceReference: video.reference, duration: duration) if let video = result[i].videoRepresentations.first {
let duration: Double = (video.representation.startTimestamp ?? 0.0) + (i == 0 ? 4.0 : 2.0)
signals.append(preloadVideoResource(postbox: context.account.postbox, resourceReference: video.reference, duration: duration))
}
}
return combineLatest(signals) |> mapToSignal { _ in
return .never()
} }
return .complete()
}).start()) }).start())
} }
} }

View File

@ -1002,7 +1002,8 @@ final class PeerInfoAvatarListContainerNode: ASDisplayNode {
var additiveTransitionOffset: CGFloat = 0.0 var additiveTransitionOffset: CGFloat = 0.0
var itemsAdded = false var itemsAdded = false
if self.currentIndex >= 0 && self.currentIndex < self.items.count { if self.currentIndex >= 0 && self.currentIndex < self.items.count {
for i in max(0, self.currentIndex - 1) ... min(self.currentIndex + 1, self.items.count - 1) { let preloadSpan: Int = 2
for i in max(0, self.currentIndex - preloadSpan) ... min(self.currentIndex + preloadSpan, self.items.count - 1) {
validIds.append(self.items[i].id) validIds.append(self.items[i].id)
var itemNode: PeerInfoAvatarListItemNode? var itemNode: PeerInfoAvatarListItemNode?
var wasAdded = false var wasAdded = false
@ -2576,8 +2577,9 @@ final class PeerInfoHeaderNode: ASDisplayNode {
func initiateAvatarExpansion(gallery: Bool) { func initiateAvatarExpansion(gallery: Bool) {
if self.isAvatarExpanded || gallery { if self.isAvatarExpanded || gallery {
if let currentEntry = self.avatarListNode.listContainerNode.currentEntry { if let currentEntry = self.avatarListNode.listContainerNode.currentEntry, let firstEntry = self.avatarListNode.listContainerNode.galleryEntries.first {
self.requestAvatarExpansion?(true, self.avatarListNode.listContainerNode.galleryEntries, self.avatarListNode.listContainerNode.currentEntry, self.avatarTransitionArguments(entry: currentEntry)) let entry = gallery ? firstEntry : currentEntry
self.requestAvatarExpansion?(true, self.avatarListNode.listContainerNode.galleryEntries, entry, self.avatarTransitionArguments(entry: currentEntry))
} }
} else if let entry = self.avatarListNode.listContainerNode.galleryEntries.first { } else if let entry = self.avatarListNode.listContainerNode.galleryEntries.first {
let _ = self.avatarListNode.avatarContainerNode.avatarNode let _ = self.avatarListNode.avatarContainerNode.avatarNode