diff --git a/Signal/src/ViewControllers/MediaGalleryViewController.swift b/Signal/src/ViewControllers/MediaGalleryViewController.swift index 7a92d52c3..2be5f25c0 100644 --- a/Signal/src/ViewControllers/MediaGalleryViewController.swift +++ b/Signal/src/ViewControllers/MediaGalleryViewController.swift @@ -220,6 +220,21 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource fatalError("init(coder:) has not been implemented") } + override var canBecomeFirstResponder: Bool { + Logger.debug("\(self.logTag) in \(#function)") + return true + } + + override public func becomeFirstResponder() -> Bool { + Logger.debug("\(self.logTag) in \(#function)") + return super.becomeFirstResponder() + } + + override public func resignFirstResponder() -> Bool { + Logger.debug("\(self.logTag) in \(#function)") + return super.resignFirstResponder() + } + // MARK: View Lifecyle override func viewDidLoad() { @@ -296,7 +311,7 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource self.applyInitialMediaViewConstraints() // Restore presentationView.alpha in case a previous dismiss left us in a bad state. - pageViewController.navigationController?.setNavigationBarHidden(false, animated: false) + self.setNavigationBarHidden(false, animated: false) self.presentationView.alpha = 1 // We want to animate the tapped media from it's position in the previous VC @@ -362,6 +377,15 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource self.view.isUserInteractionEnabled = true pageViewController.wasPresented() + + // Since we're presenting *over* the ConversationVC, we need to `becomeFirstResponder`. + // + // Otherwise, the `ConversationVC.inputAccessoryView` will appear over top of us whenever + // OWSWindowManager window juggling calls `[rootWindow makeKeyAndVisible]`. + // + // We don't need to do this when pushing VCs onto the SignalsNavigationController - only when + // presenting directly from ConversationVC. + _ = self.becomeFirstResponder() }) } } diff --git a/Signal/src/util/OWSWindowManager.m b/Signal/src/util/OWSWindowManager.m index e9d8d999a..beda29b7e 100644 --- a/Signal/src/util/OWSWindowManager.m +++ b/Signal/src/util/OWSWindowManager.m @@ -346,8 +346,8 @@ const UIWindowLevel UIWindowLevel_ScreenBlocking(void) } // By calling makeKeyAndVisible we ensure the rootViewController becomes firt responder. - // In the normal case, that means the SignalViewController will call `becomeFirstResponder` on the vc on top of it's - // navigation stack. + // In the normal case, that means the SignalViewController will call `becomeFirstResponder` + // on the vc on top of its navigation stack. [self.rootWindow makeKeyAndVisible]; }