From 00b531697621234acb054cf36f314dcfc45b6a14 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Tue, 20 Mar 2018 09:56:39 -0400 Subject: [PATCH] Don't show the "All Media" button when viewing the slider from the gallery via settings. In this context it makes more sense for the user to hit the "dismiss" button to get "back" to "All Media" // FREEBIE --- .../ConversationViewController.m | 12 ++++++++---- .../MediaDetailViewController.h | 5 +++++ .../MediaGalleryViewController.swift | 12 ++++-------- .../MediaPageViewController.swift | 18 +++++++----------- .../MessageDetailViewController.swift | 2 +- .../OWSConversationSettingsViewController.m | 4 +++- 6 files changed, 28 insertions(+), 25 deletions(-) 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.