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 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 collation = UILocalizedIndexedCollation.current()
private let contactStore = CNContactStore() private let contactStore = CNContactStore()

@ -596,6 +596,28 @@ typedef enum : NSUInteger {
[self markVisibleMessagesAsRead]; [self markVisibleMessagesAsRead];
[self.cellMediaCache removeAllObjects]; [self.cellMediaCache removeAllObjects];
[self cancelReadTimer]; [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 - (void)viewWillAppear:(BOOL)animated

@ -220,7 +220,10 @@ class MediaGalleryViewController: UINavigationController, MediaGalleryDataSource
fatalError("init(coder:) has not been implemented") 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)") Logger.debug("\(self.logTag) in \(#function)")
return true return true
} }

Loading…
Cancel
Save