Dr0ptp4kt has submitted this change and it was merged.
Change subject: Improve performance while scrolling by optimizing keyboard
hiding. Bug:T91601
......................................................................
Improve performance while scrolling by optimizing keyboard hiding. Bug:T91601
Use notifications to determine when the keyboard is visible.
Use more performant responder chain method of dismissing keyboard.
Change-Id: I734773e2bc2e43036db7955db7df498fbe4e659a
---
M wikipedia/Categories/UIViewController+HideKeyboard.h
M wikipedia/Categories/UIViewController+HideKeyboard.m
M wikipedia/View Controllers/WebView/WebViewController.m
M wikipedia/View Controllers/WebView/WebViewController_Private.h
4 files changed, 33 insertions(+), 36 deletions(-)
Approvals:
Dr0ptp4kt: Verified; Looks good to me, approved
diff --git a/wikipedia/Categories/UIViewController+HideKeyboard.h
b/wikipedia/Categories/UIViewController+HideKeyboard.h
index 1bb1b7f..595db25 100644
--- a/wikipedia/Categories/UIViewController+HideKeyboard.h
+++ b/wikipedia/Categories/UIViewController+HideKeyboard.h
@@ -1,13 +1,12 @@
-// Created by Monte Hurd on 2/3/14.
-// Copyright (c) 2013 Wikimedia Foundation. Provided under MIT-style license;
please copy and modify!
#import <UIKit/UIKit.h>
@interface UIViewController (HideKeyboard)
-// Checks every controller's subviews recursively to determine which view may
-// be responsible for the keyboard being onscreen - then sends message to that
-// view to hide the keyboard.
+/**
+ * Uses the responder chain to make all UIResponders
+ * in the view hierarchy resignFirstResponder.
+ */
- (void)hideKeyboard;
@end
diff --git a/wikipedia/Categories/UIViewController+HideKeyboard.m
b/wikipedia/Categories/UIViewController+HideKeyboard.m
index 52361d6..d91f251 100644
--- a/wikipedia/Categories/UIViewController+HideKeyboard.m
+++ b/wikipedia/Categories/UIViewController+HideKeyboard.m
@@ -1,40 +1,13 @@
-// Created by Monte Hurd on 2/3/14.
-// Copyright (c) 2013 Wikimedia Foundation. Provided under MIT-style license;
please copy and modify!
#import "UIViewController+HideKeyboard.h"
-#import "AppDelegate.h"
@implementation UIViewController (HideKeyboard)
- (void)hideKeyboard {
- AppDelegate* appDelegate = (AppDelegate*)[[UIApplication
sharedApplication] delegate];
- UIViewController* rootVC = appDelegate.window.rootViewController;
- [rootVC recurseSubVCs];
-}
+
+
//http://stackoverflow.com/questions/11879745/an-utility-method-for-hiding-the-keyboard
+ [[UIApplication sharedApplication]
sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
-- (void)recurseSubVCs {
- [self recurseSubviewsOfView:self.view];
- for (UIViewController* subVC in self.childViewControllers.copy) {
- if (subVC.presentedViewController) {
- [subVC.presentedViewController recurseSubVCs];
- }
- [subVC recurseSubVCs];
- }
-}
-
-- (void)recurseSubviewsOfView:(UIView*)view {
- if ([view respondsToSelector:@selector(isFirstResponder)]) {
- if (view.isFirstResponder) {
- if ([view respondsToSelector:@selector(resignFirstResponder)]) {
- if (view.canResignFirstResponder) {
- [view resignFirstResponder];
- }
- }
- }
- }
- for (UIView* subView in view.subviews.copy) {
- [self recurseSubviewsOfView:subView];
- }
}
@end
diff --git a/wikipedia/View Controllers/WebView/WebViewController.m
b/wikipedia/View Controllers/WebView/WebViewController.m
index 7759115..ef1f615 100644
--- a/wikipedia/View Controllers/WebView/WebViewController.m
+++ b/wikipedia/View Controllers/WebView/WebViewController.m
@@ -95,6 +95,15 @@
selector:@selector(zeroStateChanged:)
name:@"ZeroStateChanged"
object:nil];
+
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+
selector:@selector(keyboardDidShow:)
+
name:UIKeyboardDidShowNotification object:nil];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+
selector:@selector(keyboardWillHide:)
+
name:UIKeyboardWillHideNotification object:nil];
[self fadeAlert];
@@ -779,6 +788,7 @@
- (void)dealloc {
[self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark Webview obj-c to javascript bridge
@@ -1089,6 +1099,16 @@
}
}
+- (void)keyboardDidShow:(NSNotification*)note{
+
+ self.keyboardIsVisible = YES;
+}
+
+- (void)keyboardWillHide:(NSNotification*)note{
+
+ self.keyboardIsVisible = NO;
+}
+
#pragma mark Scroll hiding keyboard threshold
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
@@ -1103,7 +1123,7 @@
CGFloat distanceScrolled = scrollViewDragBeganVerticalOffset_ -
scrollView.contentOffset.y;
CGFloat fabsDistanceScrolled = fabs(distanceScrolled);
- if (fabsDistanceScrolled > HIDE_KEYBOARD_ON_SCROLL_THRESHOLD) {
+ if (self.keyboardIsVisible && fabsDistanceScrolled >
HIDE_KEYBOARD_ON_SCROLL_THRESHOLD) {
[self hideKeyboard];
//NSLog(@"Keyboard Hidden!");
}
diff --git a/wikipedia/View Controllers/WebView/WebViewController_Private.h
b/wikipedia/View Controllers/WebView/WebViewController_Private.h
index d490900..6177828 100644
--- a/wikipedia/View Controllers/WebView/WebViewController_Private.h
+++ b/wikipedia/View Controllers/WebView/WebViewController_Private.h
@@ -153,6 +153,11 @@
@property (nonatomic) BOOL didLastNavigateByBackOrForward;
+@property (nonatomic) BOOL isCurrentArticleMain;
+
+@property (nonatomic) BOOL keyboardIsVisible;
+
+
- (void)cancelArticleLoading;
- (void)cancelSearchLoading;
--
To view, visit https://gerrit.wikimedia.org/r/194434
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I734773e2bc2e43036db7955db7df498fbe4e659a
Gerrit-PatchSet: 2
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Fjalapeno <[email protected]>
Gerrit-Reviewer: Bgerstle <[email protected]>
Gerrit-Reviewer: Dr0ptp4kt <[email protected]>
Gerrit-Reviewer: Fjalapeno <[email protected]>
Gerrit-Reviewer: Mhurd <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits