|
|
|
@ -4,8 +4,8 @@
|
|
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
|
|
@objc(OWSMediaAlbumGalleryCellView)
|
|
|
|
|
public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
@objc(OWSMediaAlbumCellView)
|
|
|
|
|
public class MediaAlbumCellView: UIStackView {
|
|
|
|
|
private let items: [ConversationMediaAlbumItem]
|
|
|
|
|
|
|
|
|
|
@objc
|
|
|
|
@ -24,7 +24,7 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
items: [ConversationMediaAlbumItem],
|
|
|
|
|
maxMessageWidth: CGFloat) {
|
|
|
|
|
self.items = items
|
|
|
|
|
self.itemViews = MediaAlbumGalleryCellView.itemsToDisplay(forItems: items).map {
|
|
|
|
|
self.itemViews = MediaAlbumCellView.itemsToDisplay(forItems: items).map {
|
|
|
|
|
ConversationMediaView(mediaCache: mediaCache,
|
|
|
|
|
attachment: $0.attachment)
|
|
|
|
|
}
|
|
|
|
@ -55,19 +55,19 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
case 2:
|
|
|
|
|
// X X
|
|
|
|
|
// side-by-side.
|
|
|
|
|
let imageSize = (maxMessageWidth - MediaAlbumGalleryCellView.kSpacingPts) / 2
|
|
|
|
|
let imageSize = (maxMessageWidth - MediaAlbumCellView.kSpacingPts) / 2
|
|
|
|
|
autoSet(viewSize: imageSize, ofViews: itemViews)
|
|
|
|
|
for itemView in itemViews {
|
|
|
|
|
addArrangedSubview(itemView)
|
|
|
|
|
}
|
|
|
|
|
self.axis = .horizontal
|
|
|
|
|
self.spacing = MediaAlbumGalleryCellView.kSpacingPts
|
|
|
|
|
self.spacing = MediaAlbumCellView.kSpacingPts
|
|
|
|
|
case 3:
|
|
|
|
|
// x
|
|
|
|
|
// X x
|
|
|
|
|
// Big on left, 2 small on right.
|
|
|
|
|
let smallImageSize = (maxMessageWidth - MediaAlbumGalleryCellView.kSpacingPts * 2) / 3
|
|
|
|
|
let bigImageSize = smallImageSize * 2 + MediaAlbumGalleryCellView.kSpacingPts
|
|
|
|
|
let smallImageSize = (maxMessageWidth - MediaAlbumCellView.kSpacingPts * 2) / 3
|
|
|
|
|
let bigImageSize = smallImageSize * 2 + MediaAlbumCellView.kSpacingPts
|
|
|
|
|
|
|
|
|
|
guard let leftItemView = itemViews.first else {
|
|
|
|
|
owsFailDebug("Missing view")
|
|
|
|
@ -81,12 +81,12 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
axis: .vertical,
|
|
|
|
|
viewSize: smallImageSize))
|
|
|
|
|
self.axis = .horizontal
|
|
|
|
|
self.spacing = MediaAlbumGalleryCellView.kSpacingPts
|
|
|
|
|
self.spacing = MediaAlbumCellView.kSpacingPts
|
|
|
|
|
case 4:
|
|
|
|
|
// X X
|
|
|
|
|
// X X
|
|
|
|
|
// Square
|
|
|
|
|
let imageSize = (maxMessageWidth - MediaAlbumGalleryCellView.kSpacingPts) / 2
|
|
|
|
|
let imageSize = (maxMessageWidth - MediaAlbumCellView.kSpacingPts) / 2
|
|
|
|
|
|
|
|
|
|
let topViews = Array(itemViews[0..<2])
|
|
|
|
|
addArrangedSubview(newRow(rowViews: topViews,
|
|
|
|
@ -99,13 +99,13 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
viewSize: imageSize))
|
|
|
|
|
|
|
|
|
|
self.axis = .vertical
|
|
|
|
|
self.spacing = MediaAlbumGalleryCellView.kSpacingPts
|
|
|
|
|
self.spacing = MediaAlbumCellView.kSpacingPts
|
|
|
|
|
default:
|
|
|
|
|
// X X
|
|
|
|
|
// xxx
|
|
|
|
|
// 2 big on top, 3 small on bottom.
|
|
|
|
|
let bigImageSize = (maxMessageWidth - MediaAlbumGalleryCellView.kSpacingPts) / 2
|
|
|
|
|
let smallImageSize = (maxMessageWidth - MediaAlbumGalleryCellView.kSpacingPts * 2) / 3
|
|
|
|
|
let bigImageSize = (maxMessageWidth - MediaAlbumCellView.kSpacingPts) / 2
|
|
|
|
|
let smallImageSize = (maxMessageWidth - MediaAlbumCellView.kSpacingPts * 2) / 3
|
|
|
|
|
|
|
|
|
|
let topViews = Array(itemViews[0..<2])
|
|
|
|
|
addArrangedSubview(newRow(rowViews: topViews,
|
|
|
|
@ -118,9 +118,9 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
viewSize: smallImageSize))
|
|
|
|
|
|
|
|
|
|
self.axis = .vertical
|
|
|
|
|
self.spacing = MediaAlbumGalleryCellView.kSpacingPts
|
|
|
|
|
self.spacing = MediaAlbumCellView.kSpacingPts
|
|
|
|
|
|
|
|
|
|
if items.count > MediaAlbumGalleryCellView.kMaxItems {
|
|
|
|
|
if items.count > MediaAlbumCellView.kMaxItems {
|
|
|
|
|
guard let lastView = bottomViews.last else {
|
|
|
|
|
owsFailDebug("Missing lastView")
|
|
|
|
|
return
|
|
|
|
@ -133,7 +133,7 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
lastView.addSubview(tintView)
|
|
|
|
|
tintView.autoPinEdgesToSuperviewEdges()
|
|
|
|
|
|
|
|
|
|
let moreCount = max(1, items.count - MediaAlbumGalleryCellView.kMaxItems)
|
|
|
|
|
let moreCount = max(1, items.count - MediaAlbumCellView.kMaxItems)
|
|
|
|
|
let moreCountText = OWSFormat.formatInt(Int32(moreCount))
|
|
|
|
|
let moreText = String(format: NSLocalizedString("MEDIA_GALLERY_MORE_ITEMS_FORMAT",
|
|
|
|
|
comment: "Format for the 'more items' indicator for media galleries. Embeds {{the number of additional items}}."), moreCountText)
|
|
|
|
@ -195,7 +195,7 @@ public class MediaAlbumGalleryCellView: UIStackView {
|
|
|
|
|
axis: UILayoutConstraintAxis) -> UIStackView {
|
|
|
|
|
let stackView = UIStackView(arrangedSubviews: rowViews)
|
|
|
|
|
stackView.axis = axis
|
|
|
|
|
stackView.spacing = MediaAlbumGalleryCellView.kSpacingPts
|
|
|
|
|
stackView.spacing = MediaAlbumCellView.kSpacingPts
|
|
|
|
|
return stackView
|
|
|
|
|
}
|
|
|
|
|
|