Brion VIBBER has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/144735

Change subject: Work in progress: pull to refresh refactor
......................................................................

Work in progress: pull to refresh refactor

Refactored pull-to-refresh logic out of WebViewController into
PullToRefreshViewController, which can be subclassed and reused.

Child class needs to override methods to get the scroll view,
return appropriate strings for the label, and perform action
on completion.

Note that this sets the scroll view's delegate to the view controller,
so if doing additional scroll view delegate stuff you may need to
call a parent method to avoid losing the pull to refresh behavior.

Change-Id: I7c4a69f5598f9bd359567074992ce4253d4df6ee
---
M Wikipedia.xcodeproj/project.pbxproj
A wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.h
A wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.m
M wikipedia/View Controllers/SavedPages/SavedPagesViewController.h
M wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
M wikipedia/View Controllers/WebView/WebViewController.h
M wikipedia/View Controllers/WebView/WebViewController.m
7 files changed, 320 insertions(+), 127 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/ios/wikipedia 
refs/changes/35/144735/1

diff --git a/Wikipedia.xcodeproj/project.pbxproj 
b/Wikipedia.xcodeproj/project.pbxproj
index e5a637d..3071683 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -169,6 +169,7 @@
                D4991449181D51DE00E6073C /* AppDelegate.m in Sources */ = {isa 
= PBXBuildFile; fileRef = D4991448181D51DE00E6073C /* AppDelegate.m */; };
                D499144C181D51DE00E6073C /* Main_iPhone.storyboard in Resources 
*/ = {isa = PBXBuildFile; fileRef = D499144A181D51DE00E6073C /* 
Main_iPhone.storyboard */; };
                D4991454181D51DE00E6073C /* Images.xcassets in Resources */ = 
{isa = PBXBuildFile; fileRef = D4991453181D51DE00E6073C /* Images.xcassets */; 
};
+               D49B2ED2196C687C002F035D /* PullToRefreshViewController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = D49B2ED1196C687C002F035D /* 
PullToRefreshViewController.m */; };
                D4B0AE0219365F7C00F0AC90 /* EventLoggingFunnel.m in Sources */ 
= {isa = PBXBuildFile; fileRef = D4B0AE0119365F7C00F0AC90 /* 
EventLoggingFunnel.m */; };
                D4B0AE051936604700F0AC90 /* EditFunnel.m in Sources */ = {isa = 
PBXBuildFile; fileRef = D4B0AE041936604700F0AC90 /* EditFunnel.m */; };
                D4B0AE0819366A0A00F0AC90 /* CreateAccountFunnel.m in Sources */ 
= {isa = PBXBuildFile; fileRef = D4B0AE0719366A0A00F0AC90 /* 
CreateAccountFunnel.m */; };
@@ -669,6 +670,8 @@
                D4991462181D51DF00E6073C /* Wikipedia-Tests-Info.plist */ = 
{isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = 
"Wikipedia-Tests-Info.plist"; sourceTree = "<group>"; };
                D4991464181D51DF00E6073C /* en */ = {isa = PBXFileReference; 
lastKnownFileType = text.plist.strings; name = en; path = 
en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
                D4991466181D51DF00E6073C /* Wikipedia_Tests.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
Wikipedia_Tests.m; sourceTree = "<group>"; };
+               D49B2ED0196C687C002F035D /* PullToRefreshViewController.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
name = PullToRefreshViewController.h; path = 
PullToRefresh/PullToRefreshViewController.h; sourceTree = "<group>"; };
+               D49B2ED1196C687C002F035D /* PullToRefreshViewController.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = PullToRefreshViewController.m; path = 
PullToRefresh/PullToRefreshViewController.m; sourceTree = "<group>"; };
                D4B0AE0019365F7C00F0AC90 /* EventLoggingFunnel.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
EventLoggingFunnel.h; path = EventLogging/EventLoggingFunnel.h; sourceTree = 
"<group>"; };
                D4B0AE0119365F7C00F0AC90 /* EventLoggingFunnel.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= EventLoggingFunnel.m; path = EventLogging/EventLoggingFunnel.m; sourceTree = 
"<group>"; };
                D4B0AE031936604700F0AC90 /* EditFunnel.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
EditFunnel.h; path = EventLogging/EditFunnel.h; sourceTree = "<group>"; };
@@ -1103,6 +1106,7 @@
                04C43AB0183441A4006C643B /* View Controllers */ = {
                        isa = PBXGroup;
                        children = (
+                               D49B2ECF196C684F002F035D /* PullToRefresh */,
                                04A97E8418B81D440046B166 /* AccountCreation */,
                                04B7B9BA18B5569600A63551 /* Captcha */,
                                043DAC481901C3D2001CD17C /* Credits */,
@@ -1516,6 +1520,15 @@
                        name = "Supporting Files";
                        sourceTree = "<group>";
                };
+               D49B2ECF196C684F002F035D /* PullToRefresh */ = {
+                       isa = PBXGroup;
+                       children = (
+                               D49B2ED0196C687C002F035D /* 
PullToRefreshViewController.h */,
+                               D49B2ED1196C687C002F035D /* 
PullToRefreshViewController.m */,
+                       );
+                       name = PullToRefresh;
+                       sourceTree = "<group>";
+               };
                D4B0ADFF19365F4600F0AC90 /* EventLogging */ = {
                        isa = PBXGroup;
                        children = (
@@ -1757,6 +1770,7 @@
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               D49B2ED2196C687C002F035D /* 
PullToRefreshViewController.m in Sources */,
                                0449E63518A9845C00D51524 /* 
LoginViewController.m in Sources */,
                                04D149EC18888A0D006B4104 /* 
DownloadSectionsOp.m in Sources */,
                                04DB0BEA18BD37F900B4BCF3 /* 
UIScrollView+ScrollSubviewToLocation.m in Sources */,
diff --git a/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.h b/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.h
new file mode 100644
index 0000000..1810cb7
--- /dev/null
+++ b/wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.h
@@ -0,0 +1,48 @@
+//
+//  PullToRefreshViewController.h
+//  Wikipedia
+//
+//  Created by Brion on 7/8/14.
+//  Copyright (c) 2014 Wikimedia Foundation. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PullToRefreshViewController : UIViewController 
<UIScrollViewDelegate>
+
+@property (weak, nonatomic) NSLayoutConstraint 
*pullToRefreshViewBottomConstraint;
+@property (strong, nonatomic) UILabel *pullToRefreshLabel;
+@property (strong, nonatomic) UIView *pullToRefreshView;
+
+/**
+ * If you override this, you must call the super!
+ */
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
+
+/**
+ * Returns the scroll view to operate on.
+ * Defaults to self.view
+ */
+-(UIScrollView *)refreshScrollView;
+
+/**
+ * Get a localized string to show when pulling, before activation
+ */
+-(NSString *)refreshPromptString;
+
+/**
+ * Get a localized string to show during refresh
+ */
+-(NSString *)refreshRunningString;
+
+/**
+ * Called when the custom pull-to-refresh control is triggered
+ */
+-(void)refreshWasPulled;
+
+/**
+ * Allows for disabling the refresh behavior
+ */
+-(BOOL)refreshShouldShow;
+
+@end
diff --git a/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.m b/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.m
new file mode 100644
index 0000000..42d8f3d
--- /dev/null
+++ b/wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.m
@@ -0,0 +1,224 @@
+//
+//  PullToRefreshViewController.m
+//  Wikipedia
+//
+//  Created by Brion on 7/8/14.
+//  Copyright (c) 2014 Wikimedia Foundation. All rights reserved.
+//
+
+#import "PullToRefreshViewController.h"
+
+@interface PullToRefreshViewController ()
+
+@end
+
+@implementation PullToRefreshViewController
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle 
*)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        // Custom initialization
+    }
+    return self;
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    // Take over the scroll view's delegate
+    UIScrollView *scrollView = [self refreshScrollView];
+    assert(scrollView != nil);
+    scrollView.delegate = self;
+    [self setupPullToRefresh];
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little 
preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
+{
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+#pragma mark - UIScrollViewDelegate methods
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView
+{
+    [self updatePullToRefreshForScrollView:scrollView];
+}
+
+
+#pragma mark - Internal methods
+
+-(void)setupPullToRefresh
+{
+    self.pullToRefreshLabel = [[UILabel alloc] init];
+    self.pullToRefreshLabel.translatesAutoresizingMaskIntoConstraints = NO;
+    self.pullToRefreshLabel.backgroundColor = [UIColor clearColor];
+    self.pullToRefreshLabel.textAlignment = NSTextAlignmentCenter;
+    self.pullToRefreshLabel.numberOfLines = 2;
+    self.pullToRefreshLabel.font = [UIFont systemFontOfSize:10];
+    self.pullToRefreshLabel.textColor = [UIColor darkGrayColor];
+    
+    self.pullToRefreshView = [[UIView alloc] init];
+    self.pullToRefreshView.alpha = 0.0f;
+    self.pullToRefreshView.backgroundColor = [UIColor clearColor];
+    self.pullToRefreshView.translatesAutoresizingMaskIntoConstraints = NO;
+    [self.view addSubview:self.pullToRefreshView];
+    [self.pullToRefreshView addSubview:self.pullToRefreshLabel];
+    
+    [self constrainPullToRefresh];
+}
+
+-(void)constrainPullToRefresh
+{
+    self.pullToRefreshViewBottomConstraint =
+    [NSLayoutConstraint constraintWithItem: self.pullToRefreshView
+                                 attribute: NSLayoutAttributeBottom
+                                 relatedBy: NSLayoutRelationEqual
+                                    toItem: self.view
+                                 attribute: NSLayoutAttributeTop
+                                multiplier: 1.0
+                                  constant: 0];
+    
+    NSDictionary *viewsDictionary = @{
+                                      @"pullToRefreshView": 
self.pullToRefreshView,
+                                      @"pullToRefreshLabel": 
self.pullToRefreshLabel,
+                                      @"selfView": self.view
+                                      };
+    
+    NSArray *viewConstraintArrays =
+    @[
+      [NSLayoutConstraint constraintsWithVisualFormat: 
@"H:|[pullToRefreshView]|"
+                                              options: 0
+                                              metrics: nil
+                                                views: viewsDictionary],
+      @[self.pullToRefreshViewBottomConstraint],
+      [NSLayoutConstraint constraintsWithVisualFormat: 
@"H:|-[pullToRefreshLabel]-|"
+                                              options: 0
+                                              metrics: nil
+                                                views: viewsDictionary],
+      [NSLayoutConstraint constraintsWithVisualFormat: 
@"V:|[pullToRefreshLabel]|"
+                                              options: 0
+                                              metrics: nil
+                                                views: viewsDictionary],
+      ];
+    
+    [self.view addConstraints:[viewConstraintArrays 
valueForKeyPath:@"@unionOfArrays.self"]];
+}
+
+- (void)updatePullToRefreshForScrollView:(UIScrollView *)scrollView
+{
+    if (ROOT.isAnimatingTopAndBottomMenuHidden) return;
+    
+    CGFloat pullDistance = 
(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) ? 85.0f : 55.0f;
+    
+    UIGestureRecognizerState state = ((UIPinchGestureRecognizer 
*)scrollView.pinchGestureRecognizer).state;
+    
+    BOOL safeToShow =
+    (!scrollView.decelerating)
+    &&
+    (state == UIGestureRecognizerStatePossible)
+    &&
+    [self refreshShouldShow]
+    ;
+    
+    //NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
+    if ((scrollView.contentOffset.y < 0.0f)){
+        
+        self.pullToRefreshViewBottomConstraint.constant = 
-scrollView.contentOffset.y;
+        //self.pullToRefreshViewBottomConstraint.constant = 
-(fmaxf(scrollView.contentOffset.y, -self.pullToRefreshView.frame.size.height));
+        
+        if (safeToShow) {
+            self.pullToRefreshView.alpha = 1.0f;
+        }
+        
+        NSString *lineOneText = @"";
+        NSString *lineTwoText = [self refreshPromptString];
+        
+        if (scrollView.contentOffset.y > -(pullDistance * 0.35)){
+            lineOneText = @"▫︎ ▫︎ ▫︎ ▫︎ ▫︎";
+        }else if (scrollView.contentOffset.y > -(pullDistance * 0.52)){
+            lineOneText = @"▫︎ ▫︎ ▪︎ ▫︎ ▫︎";
+        }else if (scrollView.contentOffset.y > -(pullDistance * 0.7)){
+            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎";
+        }else if (scrollView.contentOffset.y > -pullDistance){
+            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎";
+        }else{
+            lineOneText = @"▪︎ ▪︎ ▪︎ ▪︎ ▪︎";
+            lineTwoText = [self refreshRunningString];
+        }
+        
+        self.pullToRefreshLabel.text = [NSString stringWithFormat:@"%@\n%@", 
lineOneText, lineTwoText];
+    }
+    
+    if (scrollView.contentOffset.y < -pullDistance) {
+        if (safeToShow) {
+            [self refreshWasPulled];
+            [UIView animateWithDuration: 0.3f
+                                  delay: 0.6f
+                                options: UIViewAnimationOptionTransitionNone
+                             animations: ^{
+                                 self.pullToRefreshView.alpha = 0.0f;
+                                 
self.pullToRefreshViewBottomConstraint.constant = 0;
+                                 [self.view layoutIfNeeded];
+                                 scrollView.panGestureRecognizer.enabled = NO;
+                             } completion: ^(BOOL done){
+                                 scrollView.panGestureRecognizer.enabled = YES;
+                             }];
+        }
+    }
+}
+
+#pragma mark - override these
+
+-(UIScrollView *)refreshScrollView
+{
+    if ([self.view isKindOfClass:[UIScrollView class]]) {
+        return (UIScrollView *)self.view;
+    } else {
+        NSLog(@"Override -refreshScrollView to return the correct view");
+        return nil;
+    }
+}
+
+/**
+ * Get a localized string to show when pulling, before activation
+ */
+-(NSString *)refreshPromptString
+{
+    return @"Refresh (not localized)";
+}
+
+/**
+ * Get a localized string to show during refresh
+ */
+-(NSString *)refreshRunningString
+{
+    return @"Refreshing (not localized)";
+}
+
+
+-(void)refreshWasPulled
+{
+    NSLog(@"Don't forget to override refreshWasPulled");
+}
+
+-(BOOL)refreshShouldShow
+{
+    return YES;
+}
+
+@end
diff --git a/wikipedia/View Controllers/SavedPages/SavedPagesViewController.h 
b/wikipedia/View Controllers/SavedPages/SavedPagesViewController.h
index f95c51a..d551511 100644
--- a/wikipedia/View Controllers/SavedPages/SavedPagesViewController.h
+++ b/wikipedia/View Controllers/SavedPages/SavedPagesViewController.h
@@ -3,8 +3,9 @@
 
 #import <UIKit/UIKit.h>
 #import "TopMenuViewController.h"
+#import "PullToRefreshViewController.h"
 
-@interface SavedPagesViewController : UIViewController <UITableViewDataSource, 
UITableViewDelegate>
+@interface SavedPagesViewController : PullToRefreshViewController 
<UITableViewDataSource, UITableViewDelegate>
 
 @property (nonatomic) NavBarMode navBarMode;
 
diff --git a/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m 
b/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
index 5015faa..baf54cd 100644
--- a/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
+++ b/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
@@ -304,4 +304,11 @@
     }];
 }
 
+#pragma mark - Pull to refresh
+
+- (UIScrollView *)refreshScrollView
+{
+    return self.tableView;
+}
+
 @end
diff --git a/wikipedia/View Controllers/WebView/WebViewController.h 
b/wikipedia/View Controllers/WebView/WebViewController.h
index a77aa5a..c6703c3 100644
--- a/wikipedia/View Controllers/WebView/WebViewController.h
+++ b/wikipedia/View Controllers/WebView/WebViewController.h
@@ -5,8 +5,9 @@
 #import "MWNetworkOp.h"
 #import "CenterNavController.h"
 #import "MWPageTitle.h"
+#import "PullToRefreshViewController.h"
 
-@interface WebViewController : UIViewController <UIWebViewDelegate, 
NetworkOpDelegate, UIScrollViewDelegate, UIGestureRecognizerDelegate, 
UIAlertViewDelegate>
+@interface WebViewController : PullToRefreshViewController <UIWebViewDelegate, 
NetworkOpDelegate, UIScrollViewDelegate, UIGestureRecognizerDelegate, 
UIAlertViewDelegate>
 
 @property (weak, nonatomic) IBOutlet UIWebView *webView;
 @property (nonatomic) BOOL bottomMenuHidden;
diff --git a/wikipedia/View Controllers/WebView/WebViewController.m 
b/wikipedia/View Controllers/WebView/WebViewController.m
index 47c2bd5..3031e15 100644
--- a/wikipedia/View Controllers/WebView/WebViewController.m
+++ b/wikipedia/View Controllers/WebView/WebViewController.m
@@ -82,10 +82,6 @@
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewLeftConstraint;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint 
*webViewRightConstraint;
 
-@property (weak, nonatomic) NSLayoutConstraint 
*pullToRefreshViewBottomConstraint;
-@property (strong, nonatomic) UILabel *pullToRefreshLabel;
-@property (strong, nonatomic) UIView *pullToRefreshView;
-
 @property (strong, nonatomic) TOCViewController *tocVC;
 @property (strong, nonatomic) UISwipeGestureRecognizer *tocSwipeLeftRecognizer;
 @property (strong, nonatomic) UISwipeGestureRecognizer 
*tocSwipeRightRecognizer;
@@ -180,15 +176,14 @@
     }
 
     // Ensure the keyboard hides if the web view is scrolled
-    self.webView.scrollView.delegate = self;
+    // We already are delegate from PullToRefreshViewController
+    //self.webView.scrollView.delegate = self;
 
     self.webView.backgroundColor = [UIColor whiteColor];
 
     [self.webView hideScrollGradient];
 
     [self reloadCurrentArticleInvalidatingCache:NO];
-    
-    [self setupPullToRefresh];
     
     // Restrict the web view from scrolling horizonally.
     [self.webView.scrollView addObserver: self
@@ -1108,7 +1103,7 @@
     
     [self adjustTopAndBottomMenuVisibilityOnScroll];
 
-    [self updatePullToRefreshForScrollView:scrollView];
+    [super scrollViewDidScroll:scrollView];
 }
 
 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
@@ -1811,134 +1806,37 @@
 
 #pragma mark Pull to refresh
 
--(void)setupPullToRefresh
+-(UIScrollView *)refreshScrollView
 {
-    self.pullToRefreshLabel = [[UILabel alloc] init];
-    self.pullToRefreshLabel.translatesAutoresizingMaskIntoConstraints = NO;
-    self.pullToRefreshLabel.backgroundColor = [UIColor clearColor];
-    self.pullToRefreshLabel.textAlignment = NSTextAlignmentCenter;
-    self.pullToRefreshLabel.numberOfLines = 2;
-    self.pullToRefreshLabel.font = [UIFont systemFontOfSize:10];
-    self.pullToRefreshLabel.textColor = [UIColor darkGrayColor];
-    
-    self.pullToRefreshView = [[UIView alloc] init];
-    self.pullToRefreshView.alpha = 0.0f;
-    self.pullToRefreshView.backgroundColor = [UIColor clearColor];
-    self.pullToRefreshView.translatesAutoresizingMaskIntoConstraints = NO;
-    [self.view addSubview:self.pullToRefreshView];
-    [self.pullToRefreshView addSubview:self.pullToRefreshLabel];
-    
-    [self constrainPullToRefresh];
+    return self.webView.scrollView;
 }
 
--(void)constrainPullToRefresh
+-(NSString *)refreshPromptString
 {
-    self.pullToRefreshViewBottomConstraint =
-        [NSLayoutConstraint constraintWithItem: self.pullToRefreshView
-                                     attribute: NSLayoutAttributeBottom
-                                     relatedBy: NSLayoutRelationEqual
-                                        toItem: self.view
-                                     attribute: NSLayoutAttributeTop
-                                    multiplier: 1.0
-                                      constant: 0];
-    
-    NSDictionary *viewsDictionary = @{
-                                      @"pullToRefreshView": 
self.pullToRefreshView,
-                                      @"pullToRefreshLabel": 
self.pullToRefreshLabel,
-                                      @"selfView": self.view
-                                      };
-    
-    NSArray *viewConstraintArrays =
-        @[
-          [NSLayoutConstraint constraintsWithVisualFormat: 
@"H:|[pullToRefreshView]|"
-                                                  options: 0
-                                                  metrics: nil
-                                                    views: viewsDictionary],
-          @[self.pullToRefreshViewBottomConstraint],
-          [NSLayoutConstraint constraintsWithVisualFormat: 
@"H:|-[pullToRefreshLabel]-|"
-                                                  options: 0
-                                                  metrics: nil
-                                                    views: viewsDictionary],
-          [NSLayoutConstraint constraintsWithVisualFormat: 
@"V:|[pullToRefreshLabel]|"
-                                                  options: 0
-                                                  metrics: nil
-                                                    views: viewsDictionary],
-          ];
-    
-    [self.view addConstraints:[viewConstraintArrays 
valueForKeyPath:@"@unionOfArrays.self"]];
+    return MWLocalizedString(@"article-pull-to-refresh-prompt", nil);
 }
 
-- (void)updatePullToRefreshForScrollView:(UIScrollView *)scrollView
+-(NSString *)refreshRunningString
 {
-    if (ROOT.isAnimatingTopAndBottomMenuHidden) return;
+    return MWLocalizedString(@"article-pull-to-refresh-is-refreshing", nil);
+}
 
-    CGFloat pullDistance = 
(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) ? 85.0f : 55.0f;
+-(void)refreshWasPulled
+{
+    [self reloadCurrentArticleInvalidatingCache:YES];
+}
 
-    UIGestureRecognizerState state = ((UIPinchGestureRecognizer 
*)scrollView.pinchGestureRecognizer).state;
-
+-(BOOL)refreshShouldShow
+{
     NSString *title = [SessionSingleton sharedInstance].currentArticleTitle;
-
-    BOOL safeToShow =
-        (!scrollView.decelerating)
-        &&
-        ([QueuesSingleton sharedInstance].articleRetrievalQ.operationCount == 
0)
-        &&
-        (![self tocDrawerIsOpen])
-        &&
-        (state == UIGestureRecognizerStatePossible)
-        &&
-        (title && (title.length > 0))
+    
+    return
+    ([QueuesSingleton sharedInstance].articleRetrievalQ.operationCount == 0)
+    &&
+    (![self tocDrawerIsOpen])
+    &&
+    (title && (title.length > 0))
     ;
-
-    //NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
-    if ((scrollView.contentOffset.y < 0.0f)){
-
-        self.pullToRefreshViewBottomConstraint.constant = 
-scrollView.contentOffset.y;
-        //self.pullToRefreshViewBottomConstraint.constant = 
-(fmaxf(scrollView.contentOffset.y, -self.pullToRefreshView.frame.size.height));
-
-        if (safeToShow) {
-            self.pullToRefreshView.alpha = 1.0f;
-        }
-
-        NSString *lineOneText = @"";
-        NSString *lineTwoText = 
MWLocalizedString(@"article-pull-to-refresh-prompt", nil);
-
-        if (scrollView.contentOffset.y > -(pullDistance * 0.35)){
-            lineOneText = @"▫︎ ▫︎ ▫︎ ▫︎ ▫︎";
-        }else if (scrollView.contentOffset.y > -(pullDistance * 0.52)){
-            lineOneText = @"▫︎ ▫︎ ▪︎ ▫︎ ▫︎";
-        }else if (scrollView.contentOffset.y > -(pullDistance * 0.7)){
-            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎";
-        }else if (scrollView.contentOffset.y > -pullDistance){
-            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎";
-        }else{
-            lineOneText = @"▪︎ ▪︎ ▪︎ ▪︎ ▪︎";
-            lineTwoText = 
MWLocalizedString(@"article-pull-to-refresh-is-refreshing", nil);
-        }
-
-        self.pullToRefreshLabel.text = [NSString stringWithFormat:@"%@\n%@", 
lineOneText, lineTwoText];
-    }
-
-    if (scrollView.contentOffset.y < -pullDistance) {
-        if (safeToShow) {
-            
-            //NSLog(@"REFRESH NOW!!!!!");
-            
-            [self reloadCurrentArticleInvalidatingCache:YES];
-            
-            [UIView animateWithDuration: 0.3f
-                                  delay: 0.6f
-                                options: UIViewAnimationOptionTransitionNone
-                             animations: ^{
-                                 self.pullToRefreshView.alpha = 0.0f;
-                                 
self.pullToRefreshViewBottomConstraint.constant = 0;
-                                 [self.view layoutIfNeeded];
-                                 scrollView.panGestureRecognizer.enabled = NO;
-                             } completion: ^(BOOL done){
-                                 scrollView.panGestureRecognizer.enabled = YES;
-                             }];
-        }
-    }
 }
 
 #pragma mark Data migration

-- 
To view, visit https://gerrit.wikimedia.org/r/144735
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7c4a69f5598f9bd359567074992ce4253d4df6ee
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Brion VIBBER <br...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to