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

Reply via email to