Resolve conflict between keyboard and call view.

pull/1/head
Matthew Chen 7 years ago
parent bc35a38592
commit ae61b44a99

@ -71,6 +71,10 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
weak var remoteVideoTrack: RTCVideoTrack?
var localVideoConstraints: [NSLayoutConstraint] = []
override public var canBecomeFirstResponder: Bool {
return true
}
var shouldRemoteVideoControlsBeHidden = false {
didSet {
updateCallUI(callState: call.state)
@ -174,6 +178,14 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
super.viewWillAppear(animated)
UIDevice.current.isProximityMonitoringEnabled = true
updateCallUI(callState: call.state)
self.becomeFirstResponder()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.becomeFirstResponder()
}
override func loadView() {

@ -78,6 +78,7 @@ const UIWindowLevel UIWindowLevel_Background = -1.f;
@property (nonatomic) UIWindow *rootWindow;
@property (nonatomic, nullable) UIResponder *rootWindowResponder;
@property (nonatomic, nullable, weak) UIViewController *rootFrontmostViewController;
@end
@ -485,7 +486,11 @@ const UIWindowLevel UIWindowLevel_Background = -1.f;
// When we hide the root window, its first responder will resign.
if (shouldShowBlockWindow && !self.rootWindow.hidden) {
self.rootWindowResponder = [UIResponder currentFirstResponder];
DDLogInfo(@"%@ trying to capture self.rootWindowResponder: %@", self.logTag, self.rootWindowResponder);
self.rootFrontmostViewController = [UIApplication.sharedApplication frontmostViewControllerIgnoringAlerts];
DDLogInfo(@"%@ trying to capture self.rootWindowResponder: %@ (%@)",
self.logTag,
self.rootWindowResponder,
[self.rootFrontmostViewController class]);
}
// * Show/hide the app's root window as necessary.
@ -508,11 +513,25 @@ const UIWindowLevel UIWindowLevel_Background = -1.f;
// the user needs it, saving them a tap.
// But in the case of an inputAccessoryView, like the ConversationViewController,
// failing to restore firstResponder could hide the input toolbar.
DDLogInfo(@"%@ trying to restore self.rootWindowResponder: %@", self.logTag, self.rootWindowResponder);
[self.rootWindowResponder becomeFirstResponder];
UIViewController *rootFrontmostViewController =
[UIApplication.sharedApplication frontmostViewControllerIgnoringAlerts];
DDLogInfo(@"%@ trying to restore self.rootWindowResponder: %@ (%@ ? %@ == %d)",
self.logTag,
self.rootWindowResponder,
[self.rootFrontmostViewController class],
rootFrontmostViewController,
self.rootFrontmostViewController == rootFrontmostViewController);
if (self.rootFrontmostViewController == rootFrontmostViewController) {
[self.rootWindowResponder becomeFirstResponder];
}
self.rootWindowResponder = nil;
self.rootFrontmostViewController = nil;
}
self.screenBlockingImageView.hidden = !shouldShowBlockWindow;
UIView *rootView = self.screenBlockingViewController.view;
[NSLayoutConstraint deactivateConstraints:self.screenBlockingConstraints];

Loading…
Cancel
Save