Prevent input toolbar from appearing over camera view, contact view or actionsheet

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent 353abfc13e
commit 7e22d9e900

@ -44,6 +44,24 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView
return Environment.current().contactsManager
}
// HACK: Though we don't have an input accessory view, the VC we are presented above (ConversationVC) does.
// If the app is backgrounded and then foregrounded, when OWSWindowManager calls mainWindow.makeKeyAndVisible
// the ConversationVC's inputAccessoryView will appear *above* us unless we'd previously become first responder.
override public 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()
}
private let collation = UILocalizedIndexedCollation.current()
private let contactStore = CNContactStore()

@ -596,6 +596,28 @@ typedef enum : NSUInteger {
[self markVisibleMessagesAsRead];
[self.cellMediaCache removeAllObjects];
[self cancelReadTimer];
[self dismissPresentedViewControllerIfNecessary];
}
- (void)dismissPresentedViewControllerIfNecessary
{
UIViewController *_Nullable presentedViewController = self.presentedViewController;
if (!presentedViewController) {
DDLogDebug(@"%@ presentedViewController was nil", self.logTag);
return;
}
if ([presentedViewController isKindOfClass:[UIAlertController class]]) {
DDLogDebug(@"%@ dismissing presentedViewController: %@", self.logTag, presentedViewController);
[self dismissViewControllerAnimated:NO completion:nil];
return;
}
if ([presentedViewController isKindOfClass:[UIImagePickerController class]]) {
DDLogDebug(@"%@ dismissing presentedViewController: %@", self.logTag, presentedViewController);
[self dismissViewControllerAnimated:NO completion:nil];
return;
}
}
- (void)viewWillAppear:(BOOL)animated

@ -220,7 +220,10 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource
fatalError("init(coder:) has not been implemented")
}
override var canBecomeFirstResponder: Bool {
// HACK: Though we don't have an input accessory view, the VC we are presented above (ConversationVC) does.
// If the app is backgrounded and then foregrounded, when OWSWindowManager calls mainWindow.makeKeyAndVisible
// the ConversationVC's inputAccessoryView will appear *above* us unless we'd previously become first responder.
override public var canBecomeFirstResponder: Bool {
Logger.debug("\(self.logTag) in \(#function)")
return true
}

Loading…
Cancel
Save