diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 68bcc733c..b22b8787b 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2033,8 +2033,10 @@ typedef enum : NSUInteger { } TSMessage *mediaMessage = (TSMessage *)viewItem.interaction; - MediaGalleryViewController *vc = [[MediaGalleryViewController alloc] initWithThread:self.thread - uiDatabaseConnection:self.uiDatabaseConnection]; + MediaGalleryViewController *vc = [[MediaGalleryViewController alloc] + initWithThread:self.thread + uiDatabaseConnection:self.uiDatabaseConnection + options:MediaGalleryOptionSliderEnabled | MediaGalleryOptionShowAllMediaButton]; [vc presentDetailViewFromViewController:self mediaMessage:mediaMessage replacingView:imageView]; } @@ -2055,8 +2057,10 @@ typedef enum : NSUInteger { } TSMessage *mediaMessage = (TSMessage *)viewItem.interaction; - MediaGalleryViewController *vc = [[MediaGalleryViewController alloc] initWithThread:self.thread - uiDatabaseConnection:self.uiDatabaseConnection]; + MediaGalleryViewController *vc = [[MediaGalleryViewController alloc] + initWithThread:self.thread + uiDatabaseConnection:self.uiDatabaseConnection + options:MediaGalleryOptionSliderEnabled | MediaGalleryOptionShowAllMediaButton]; [vc presentDetailViewFromViewController:self mediaMessage:mediaMessage replacingView:imageView]; } diff --git a/Signal/src/ViewControllers/MediaDetailViewController.h b/Signal/src/ViewControllers/MediaDetailViewController.h index 188be791e..7d0ba9482 100644 --- a/Signal/src/ViewControllers/MediaDetailViewController.h +++ b/Signal/src/ViewControllers/MediaDetailViewController.h @@ -10,6 +10,11 @@ NS_ASSUME_NONNULL_BEGIN @class GalleryItemBox; @class MediaDetailViewController; +typedef NS_OPTIONS(NSInteger, MediaGalleryOption) { + MediaGalleryOptionSliderEnabled = 1 << 0, + MediaGalleryOptionShowAllMediaButton = 1 << 1 +}; + @protocol MediaDetailViewControllerDelegate - (void)dismissSelfAnimated:(BOOL)isAnimated completion:(void (^_Nullable)(void))completionBlock; diff --git a/Signal/src/ViewControllers/MediaGalleryViewController.swift b/Signal/src/ViewControllers/MediaGalleryViewController.swift index 205774cdf..2a17bae05 100644 --- a/Signal/src/ViewControllers/MediaGalleryViewController.swift +++ b/Signal/src/ViewControllers/MediaGalleryViewController.swift @@ -178,7 +178,7 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource private var initialDetailItem: MediaGalleryItem? private let thread: TSThread - private let includeGallery: Bool + private let options: MediaGalleryOption // we start with a small range size for quick loading. private let fetchRangeSize: UInt = 10 @@ -187,15 +187,11 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource Logger.debug("\(logTag) deinit") } - convenience init(thread: TSThread, uiDatabaseConnection: YapDatabaseConnection) { - self.init(thread: thread, uiDatabaseConnection: uiDatabaseConnection, includeGallery: true) - } - - init(thread: TSThread, uiDatabaseConnection: YapDatabaseConnection, includeGallery: Bool) { + init(thread: TSThread, uiDatabaseConnection: YapDatabaseConnection, options: MediaGalleryOption = []) { self.thread = thread assert(uiDatabaseConnection.isInLongLivedReadTransaction()) self.uiDatabaseConnection = uiDatabaseConnection - self.includeGallery = includeGallery + self.options = options self.mediaGalleryFinder = OWSMediaGalleryFinder(thread: thread) super.init(nibName: nil, bundle: nil) @@ -264,7 +260,7 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource ensureGalleryItemsLoaded(.around, item: initialDetailItem, amount: 10) self.initialDetailItem = initialDetailItem - let pageViewController = MediaPageViewController(initialItem: initialDetailItem, mediaGalleryDataSource: self, uiDatabaseConnection: self.uiDatabaseConnection, includeGallery: self.includeGallery) + let pageViewController = MediaPageViewController(initialItem: initialDetailItem, mediaGalleryDataSource: self, uiDatabaseConnection: self.uiDatabaseConnection, options: self.options) self.pageViewController = pageViewController self.setViewControllers([pageViewController], animated: false) diff --git a/Signal/src/ViewControllers/MediaPageViewController.swift b/Signal/src/ViewControllers/MediaPageViewController.swift index d35ba59fb..06476c183 100644 --- a/Signal/src/ViewControllers/MediaPageViewController.swift +++ b/Signal/src/ViewControllers/MediaPageViewController.swift @@ -58,16 +58,14 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou private let uiDatabaseConnection: YapDatabaseConnection - private let includeGallery: Bool + private let showAllMediaButton: Bool + private let sliderEnabled: Bool - convenience init(initialItem: MediaGalleryItem, mediaGalleryDataSource: MediaGalleryDataSource, uiDatabaseConnection: YapDatabaseConnection) { - self.init(initialItem: initialItem, mediaGalleryDataSource: mediaGalleryDataSource, uiDatabaseConnection: uiDatabaseConnection, includeGallery: true) - } - - init(initialItem: MediaGalleryItem, mediaGalleryDataSource: MediaGalleryDataSource, uiDatabaseConnection: YapDatabaseConnection, includeGallery: Bool) { + init(initialItem: MediaGalleryItem, mediaGalleryDataSource: MediaGalleryDataSource, uiDatabaseConnection: YapDatabaseConnection, options: MediaGalleryOption) { assert(uiDatabaseConnection.isInLongLivedReadTransaction()) self.uiDatabaseConnection = uiDatabaseConnection - self.includeGallery = includeGallery + self.showAllMediaButton = options.contains(.showAllMediaButton) + self.sliderEnabled = options.contains(.sliderEnabled) self.mediaGalleryDataSource = mediaGalleryDataSource let kSpacingBetweenItems: CGFloat = 20 @@ -108,7 +106,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(didPressDismissButton)) - if includeGallery { + if showAllMediaButton { self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: MediaStrings.allMedia, style: .plain, target: self, action: #selector(didPressAllMediaButton)) } @@ -129,9 +127,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou // Hack to avoid "page" bouncing when not in gallery view. // e.g. when getting to media details via message details screen, there's only // one "Page" so the bounce doesn't make sense. - if !self.includeGallery { - pagerScrollView.isScrollEnabled = false - } + pagerScrollView.isScrollEnabled = sliderEnabled // FIXME dynamic title with sender/date self.title = "Attachment" diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index 43ed95227..c9409e1ca 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -762,7 +762,7 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate, Medi return } - let mediaGalleryViewController = MediaGalleryViewController(thread: self.thread, uiDatabaseConnection: self.uiDatabaseConnection, includeGallery: false) + let mediaGalleryViewController = MediaGalleryViewController(thread: self.thread, uiDatabaseConnection: self.uiDatabaseConnection) mediaGalleryViewController.presentDetailView(fromViewController: self, mediaMessage: self.message, replacingView: fromView) } } diff --git a/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m b/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m index 3c25918a0..068a0e11a 100644 --- a/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m +++ b/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m @@ -1166,7 +1166,9 @@ NS_ASSUME_NONNULL_BEGIN DDLogDebug(@"%@ in showMediaGallery", self.logTag); MediaGalleryViewController *vc = - [[MediaGalleryViewController alloc] initWithThread:self.thread uiDatabaseConnection:self.uiDatabaseConnection]; + [[MediaGalleryViewController alloc] initWithThread:self.thread + uiDatabaseConnection:self.uiDatabaseConnection + options:MediaGalleryOptionSliderEnabled]; // although we don't present the mediaGalleryViewController directly, we need to maintain a strong // reference to it until we're dismissed.