Shared media improvements

This commit is contained in:
Ali 2021-10-28 12:45:08 +04:00
parent 04bcafaac7
commit d0a56bf7ca
3 changed files with 62 additions and 5 deletions

View File

@ -246,8 +246,8 @@ public final class DirectMediaImageCache {
selectedSize = progressiveSizes[0] selectedSize = progressiveSizes[0]
} else if progressiveSizes.count > 1 && width <= 160 { } else if progressiveSizes.count > 1 && width <= 160 {
selectedSize = progressiveSizes[2] selectedSize = progressiveSizes[2]
} else if progressiveSizes.count > 2 && width <= 400 { } else if progressiveSizes.count > 4 && width <= 400 {
selectedSize = progressiveSizes[3] selectedSize = progressiveSizes[4]
} else { } else {
selectedSize = Int32.max selectedSize = Int32.max
} }

View File

@ -719,6 +719,36 @@ public final class SparseItemGrid: ASDisplayNode {
self.scrollView.setContentOffset(CGPoint(x: 0.0, y: contentOffset), animated: false) self.scrollView.setContentOffset(CGPoint(x: 0.0, y: contentOffset), animated: false)
} }
func ensureItemVisible(index: Int) {
guard let layout = self.layout, let _ = self.items else {
return
}
if layout.containerLayout.lockScrollingAtTop {
return
}
let itemFrame = layout.frame(at: index)
let visibleBounds = self.scrollView.bounds
if itemFrame.intersects(visibleBounds) {
return
}
var contentOffset: CGFloat
if itemFrame.midY >= visibleBounds.maxY {
contentOffset = itemFrame.maxY - self.scrollView.bounds.height + layout.containerLayout.insets.bottom
} else {
contentOffset = itemFrame.minY - layout.containerLayout.insets.top
}
if contentOffset > self.scrollView.contentSize.height - self.scrollView.bounds.height {
contentOffset = self.scrollView.contentSize.height - self.scrollView.bounds.height
}
if contentOffset < 0.0 {
contentOffset = 0.0
}
self.scrollView.setContentOffset(CGPoint(x: 0.0, y: contentOffset), animated: false)
}
func scrollToTop() -> Bool { func scrollToTop() -> Bool {
if self.scrollView.contentOffset.y > 0.0 { if self.scrollView.contentOffset.y > 0.0 {
self.scrollView.setContentOffset(CGPoint(), animated: true) self.scrollView.setContentOffset(CGPoint(), animated: true)
@ -1569,6 +1599,13 @@ public final class SparseItemGrid: ASDisplayNode {
currentViewport.scrollToItem(at: index) currentViewport.scrollToItem(at: index)
} }
public func ensureItemVisible(index: Int) {
guard let currentViewport = self.currentViewport else {
return
}
currentViewport.ensureItemVisible(index: index)
}
public func scrollToTop() -> Bool { public func scrollToTop() -> Bool {
guard let currentViewport = self.currentViewport else { guard let currentViewport = self.currentViewport else {
return false return false
@ -1615,15 +1652,23 @@ public final class SparseItemGrid: ASDisplayNode {
} }
} }
private var brieflyDisabledTouchActions = false
public func brieflyDisableTouchActions() { public func brieflyDisableTouchActions() {
if self.brieflyDisabledTouchActions {
return
}
self.brieflyDisabledTouchActions = true
let tapEnabled = self.tapRecognizer?.isEnabled ?? true let tapEnabled = self.tapRecognizer?.isEnabled ?? true
self.tapRecognizer?.isEnabled = false self.tapRecognizer?.isEnabled = false
let pinchEnabled = self.pinchRecognizer?.isEnabled ?? true let pinchEnabled = self.pinchRecognizer?.isEnabled ?? true
self.pinchRecognizer?.isEnabled = false self.pinchRecognizer?.isEnabled = false
DispatchQueue.main.async { DispatchQueue.main.async { [weak self] in
self.tapRecognizer?.isEnabled = tapEnabled self?.tapRecognizer?.isEnabled = tapEnabled
self.pinchRecognizer?.isEnabled = pinchEnabled self?.pinchRecognizer?.isEnabled = pinchEnabled
self?.brieflyDisabledTouchActions = false
} }
} }

View File

@ -1709,6 +1709,18 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro
} }
} }
strongSelf.itemInteraction.hiddenMedia = hiddenMedia strongSelf.itemInteraction.hiddenMedia = hiddenMedia
if let items = strongSelf.items {
for item in items.items {
if let item = item as? VisualMediaItem {
if hiddenMedia[item.message.id] != nil {
strongSelf.itemGrid.ensureItemVisible(index: item.index)
break
}
}
}
}
strongSelf.updateHiddenMedia() strongSelf.updateHiddenMedia()
}) })