|
|
|
@ -52,6 +52,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.updateTitle(item: newValue)
|
|
|
|
|
self.setViewControllers([galleryPage], direction: .forward, animated: false, completion: nil)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -61,6 +62,8 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
private let showAllMediaButton: Bool
|
|
|
|
|
private let sliderEnabled: Bool
|
|
|
|
|
|
|
|
|
|
private let navItemTitleView: ConversationHeaderView!
|
|
|
|
|
|
|
|
|
|
init(initialItem: MediaGalleryItem, mediaGalleryDataSource: MediaGalleryDataSource, uiDatabaseConnection: YapDatabaseConnection, options: MediaGalleryOption) {
|
|
|
|
|
assert(uiDatabaseConnection.isInLongLivedReadTransaction())
|
|
|
|
|
self.uiDatabaseConnection = uiDatabaseConnection
|
|
|
|
@ -68,6 +71,9 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
self.sliderEnabled = options.contains(.sliderEnabled)
|
|
|
|
|
self.mediaGalleryDataSource = mediaGalleryDataSource
|
|
|
|
|
|
|
|
|
|
let headerView = ConversationHeaderView()
|
|
|
|
|
self.navItemTitleView = headerView
|
|
|
|
|
|
|
|
|
|
let kSpacingBetweenItems: CGFloat = 20
|
|
|
|
|
|
|
|
|
|
super.init(transitionStyle: .scroll,
|
|
|
|
@ -109,6 +115,15 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
let backButton = OWSViewController.createOWSBackButton(withTarget: self, selector: #selector(didPressDismissButton))
|
|
|
|
|
self.navigationItem.leftBarButtonItem = backButton
|
|
|
|
|
|
|
|
|
|
navItemTitleView.titleLabel = headerNameLabel
|
|
|
|
|
navItemTitleView.subtitleLabel = headerDateLabel
|
|
|
|
|
navItemTitleView.addSubview(headerNameLabel)
|
|
|
|
|
navItemTitleView.addSubview(headerDateLabel)
|
|
|
|
|
navItemTitleView.frame = CGRect(origin: .zero, size: CGSize(width: 150, height: 35))
|
|
|
|
|
navItemTitleView.layoutSubviews()
|
|
|
|
|
self.navigationItem.titleView = navItemTitleView
|
|
|
|
|
self.updateTitle()
|
|
|
|
|
|
|
|
|
|
if showAllMediaButton {
|
|
|
|
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: MediaStrings.allMedia, style: .plain, target: self, action: #selector(didPressAllMediaButton))
|
|
|
|
|
}
|
|
|
|
@ -132,7 +147,6 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
// one "Page" so the bounce doesn't make sense.
|
|
|
|
|
pagerScrollView.isScrollEnabled = sliderEnabled
|
|
|
|
|
|
|
|
|
|
// FIXME dynamic title with sender/date
|
|
|
|
|
self.title = "Attachment"
|
|
|
|
|
|
|
|
|
|
// Views
|
|
|
|
@ -337,6 +351,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
|
|
|
|
|
// Do any cleanup for the no-longer visible view controller
|
|
|
|
|
if transitionCompleted {
|
|
|
|
|
updateTitle()
|
|
|
|
|
previousPage.zoomOut(animated: false)
|
|
|
|
|
previousPage.stopAnyVideo()
|
|
|
|
|
updateFooterBarButtonItems(isPlayingVideo: false)
|
|
|
|
@ -450,4 +465,69 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|
|
|
|
self.shouldHideToolbars = isPlayingVideo
|
|
|
|
|
self.updateFooterBarButtonItems(isPlayingVideo: isPlayingVideo)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: Dynamic Header
|
|
|
|
|
|
|
|
|
|
private var contactsManager: OWSContactsManager {
|
|
|
|
|
return Environment.current().contactsManager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func senderName(message: TSMessage) -> String {
|
|
|
|
|
switch message {
|
|
|
|
|
case let incomingMessage as TSIncomingMessage:
|
|
|
|
|
return self.contactsManager.displayName(forPhoneIdentifier: incomingMessage.authorId)
|
|
|
|
|
case is TSOutgoingMessage:
|
|
|
|
|
return NSLocalizedString("MEDIA_GALLERY_SENDER_NAME_YOU", comment: "Short sender label for media sent by you")
|
|
|
|
|
default:
|
|
|
|
|
owsFail("\(logTag) Unknown message type: \(type(of: message))")
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private lazy var dateFormatter: DateFormatter = {
|
|
|
|
|
let formatter = DateFormatter()
|
|
|
|
|
formatter.dateStyle = .short
|
|
|
|
|
formatter.timeStyle = .short
|
|
|
|
|
|
|
|
|
|
return formatter
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
lazy private var headerNameLabel: UILabel = {
|
|
|
|
|
let label = UILabel()
|
|
|
|
|
label.textColor = .white
|
|
|
|
|
label.font = .ows_dynamicTypeBody()
|
|
|
|
|
label.textAlignment = .center
|
|
|
|
|
label.adjustsFontSizeToFitWidth = true
|
|
|
|
|
label.minimumScaleFactor = 0.8
|
|
|
|
|
|
|
|
|
|
return label
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
lazy private var headerDateLabel: UILabel = {
|
|
|
|
|
let label = UILabel()
|
|
|
|
|
label.textColor = .white
|
|
|
|
|
label.font = UIFont.preferredFont(forTextStyle: .caption1)
|
|
|
|
|
label.textAlignment = .center
|
|
|
|
|
label.adjustsFontSizeToFitWidth = true
|
|
|
|
|
|
|
|
|
|
return label
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
private func updateTitle() {
|
|
|
|
|
guard let currentItem = self.currentItem else {
|
|
|
|
|
owsFail("\(logTag) currentItem was unexpectedly nil")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
updateTitle(item: currentItem)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func updateTitle(item: MediaGalleryItem) {
|
|
|
|
|
let name = senderName(message: item.message)
|
|
|
|
|
headerNameLabel.text = name
|
|
|
|
|
|
|
|
|
|
// use sent date
|
|
|
|
|
let date = Date(timeIntervalSince1970: Double(item.message.timestamp) / 1000)
|
|
|
|
|
let formattedDate = dateFormatter.string(from: date)
|
|
|
|
|
headerDateLabel.text = formattedDate
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|