From 402c5d9fc1b9bcc30aa3a432b1df6bf4249de5fe Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Fri, 11 Oct 2013 17:46:09 -0700 Subject: [PATCH] Massive refactor to fix all toolbar buttons so they extend to the edge. --- .../ios/Classes/FeedDetailViewController.h | 3 - .../ios/Classes/FeedDetailViewController.m | 87 +++++++++--------- clients/ios/Classes/FolderTitleView.m | 8 +- clients/ios/Classes/LoginViewController.m | 8 +- .../ios/Classes/NBContainerViewController.m | 5 +- clients/ios/Classes/NewsBlurAppDelegate.h | 2 - clients/ios/Classes/NewsBlurAppDelegate.m | 21 +---- clients/ios/Classes/NewsBlurViewController.m | 51 ++++++---- .../ios/Classes/StoryDetailViewController.m | 1 + clients/ios/Classes/StoryPageControl.h | 4 +- clients/ios/Classes/StoryPageControl.m | 44 ++++----- .../ios/NewsBlur.xcodeproj/project.pbxproj | 4 +- .../ios/Other Sources/UIBarButtonItem+Image.m | 6 +- .../Resources-iPhone/LoginViewController.xib | 12 +-- clients/ios/Resources/markread.png | Bin 919 -> 829 bytes clients/ios/Resources/markread@2x.png | Bin 895 -> 722 bytes clients/ios/Resources/nav_icn_settings.png | Bin 1124 -> 1028 bytes clients/ios/Resources/nav_icn_settings@2x.png | Bin 2157 -> 1913 bytes clients/ios/Resources/original_button.png | Bin 1906 -> 1780 bytes clients/ios/Resources/original_button@2x.png | Bin 3725 -> 3396 bytes 20 files changed, 119 insertions(+), 137 deletions(-) diff --git a/clients/ios/Classes/FeedDetailViewController.h b/clients/ios/Classes/FeedDetailViewController.h index 8fba64ec0..292cde2ae 100644 --- a/clients/ios/Classes/FeedDetailViewController.h +++ b/clients/ios/Classes/FeedDetailViewController.h @@ -12,7 +12,6 @@ #import "BaseViewController.h" #import "Utilities.h" #import "WEPopoverController.h" -#import "TransparentToolbar.h" #import "NBNotifier.h" #import "MCSwipeTableViewCell.h" @@ -48,10 +47,8 @@ @property (nonatomic) IBOutlet UIBarButtonItem * settingsBarButton; @property (nonatomic) IBOutlet UIBarButtonItem * spacerBarButton; @property (nonatomic) IBOutlet UIBarButtonItem * spacer2BarButton; -@property (nonatomic) IBOutlet UIBarButtonItem * spacer3BarButton; @property (nonatomic) IBOutlet UIBarButtonItem * separatorBarButton; @property (nonatomic) IBOutlet UIBarButtonItem * titleImageBarButton; -@property (nonatomic) IBOutlet TransparentToolbar * rightToolbar; @property (nonatomic, retain) WEPopoverController *popoverController; @property (nonatomic, retain) NBNotifier *notifier; diff --git a/clients/ios/Classes/FeedDetailViewController.m b/clients/ios/Classes/FeedDetailViewController.m index 7f13e4b93..dfa5beba4 100644 --- a/clients/ios/Classes/FeedDetailViewController.m +++ b/clients/ios/Classes/FeedDetailViewController.m @@ -24,7 +24,6 @@ #import "UIBarButtonItem+WEPopover.h" #import "WEPopoverController.h" #import "UIBarButtonItem+Image.h" -#import "TransparentToolbar.h" #import "FeedDetailMenuViewController.h" #import "NBNotifier.h" #import "NBLoadingCell.h" @@ -51,8 +50,7 @@ @synthesize settingsBarButton; @synthesize separatorBarButton; @synthesize titleImageBarButton; -@synthesize spacerBarButton, spacer2BarButton, spacer3BarButton; -@synthesize rightToolbar; +@synthesize spacerBarButton, spacer2BarButton; @synthesize appDelegate; @synthesize feedPage; @synthesize pageFetching; @@ -77,19 +75,12 @@ self.storyTitlesTable.backgroundColor = UIColorFromRGB(0xf4f4f4); self.storyTitlesTable.separatorColor = UIColorFromRGB(0xE9E8E4); - rightToolbar = [[TransparentToolbar alloc] - initWithFrame:CGRectMake(0, 0, 76, 44)]; - rightToolbar.keepSpacing = YES; - spacerBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - spacerBarButton.width = -10; + spacerBarButton.width = 0; spacer2BarButton = [[UIBarButtonItem alloc] - initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - spacer2BarButton.width = -10; - spacer3BarButton = [[UIBarButtonItem alloc] - initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - spacer3BarButton.width = -6; + initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + spacer2BarButton.width = 0; UIImage *separatorImage = [UIImage imageNamed:@"bar-separator.png"]; separatorBarButton = [UIBarButtonItem barItemWithImage:separatorImage target:nil action:nil]; @@ -97,7 +88,7 @@ UIImage *settingsImage = [UIImage imageNamed:@"nav_icn_settings.png"]; settingsBarButton = [UIBarButtonItem barItemWithImage:settingsImage target:self action:@selector(doOpenSettingsActionSheet:)]; - + UIImage *markreadImage = [UIImage imageNamed:@"markread.png"]; feedMarkReadButton = [UIBarButtonItem barItemWithImage:markreadImage target:self action:@selector(doOpenMarkReadActionSheet:)]; @@ -131,42 +122,49 @@ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; [self setUserAvatarLayout:orientation]; self.finishedAnimatingIn = NO; - [MBProgressHUD hideHUDForView:self.view animated:YES]; + [MBProgressHUD hideHUDForView:self.view animated:NO]; + + // set right avatar title image + spacerBarButton.width = 0; + spacer2BarButton.width = 0; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + spacerBarButton.width = -6; + spacer2BarButton.width = 10; + } + if (appDelegate.isSocialView) { + spacerBarButton.width = -6; + NSString *feedIdStr = [NSString stringWithFormat:@"%@", [appDelegate.activeFeed objectForKey:@"id"]]; + UIImage *titleImage = [Utilities getImage:feedIdStr isSocial:YES]; + titleImage = [Utilities roundCorneredImage:titleImage radius:6]; + [((UIButton *)titleImageBarButton.customView).imageView removeFromSuperview]; + titleImageBarButton = [UIBarButtonItem barItemWithImage:titleImage + target:self + action:@selector(showUserProfile)]; + titleImageBarButton.customView.frame = CGRectMake(0, 0, 32, 32); + self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: + spacerBarButton, + titleImageBarButton, + spacer2BarButton, + separatorBarButton, + feedMarkReadButton, nil]; + } else { + self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: + spacerBarButton, + settingsBarButton, + spacer2BarButton, + separatorBarButton, + feedMarkReadButton, + nil]; + } // set center title if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { UILabel *titleLabel = (UILabel *)[appDelegate makeFeedTitle:appDelegate.activeFeed]; self.navigationItem.titleView = titleLabel; } - - // set right avatar title image - if (appDelegate.isSocialView) { - NBBarButtonItem *titleImageButton = [appDelegate makeRightFeedTitle:appDelegate.activeFeed]; - [titleImageButton addTarget:self action:@selector(showUserProfile) forControlEvents:UIControlEventTouchUpInside]; - titleImageBarButton.customView = titleImageButton; - [rightToolbar setItems: [NSArray arrayWithObjects: - spacerBarButton, - feedMarkReadButton, - spacer2BarButton, - separatorBarButton, - spacer3BarButton, - titleImageBarButton, nil]]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightToolbar]; - titleImageBarButton.enabled = YES; - } else { - [rightToolbar setItems: [NSArray arrayWithObjects: - spacerBarButton, - feedMarkReadButton, - spacer2BarButton, - separatorBarButton, - spacer3BarButton, - settingsBarButton, nil]]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightToolbar]; - } - NSMutableArray *indexPaths = [NSMutableArray array]; - NSLog(@"appDelegate.recentlyReadStoryLocations: %d - %@", self.isOffline, appDelegate.recentlyReadStoryLocations); +// NSLog(@"appDelegate.recentlyReadStoryLocations: %d - %@", self.isOffline, appDelegate.recentlyReadStoryLocations); for (id i in appDelegate.recentlyReadStoryLocations) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[i intValue] inSection:0]; @@ -185,8 +183,6 @@ appDelegate.recentlyReadStoryLocations = [NSMutableArray array]; appDelegate.originalStoryCount = [appDelegate unreadCount]; - [super viewWillAppear:animated]; - if ((appDelegate.isSocialRiverView || appDelegate.isSocialView || [appDelegate.activeFolder isEqualToString:@"saved_stories"])) { @@ -220,7 +216,6 @@ [super viewDidAppear:animated]; if (appDelegate.inStoryDetail && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { appDelegate.inStoryDetail = NO; - [appDelegate.storyPageControl resetPages]; [self checkScroll]; } @@ -1463,7 +1458,7 @@ - (void)showUserProfile { appDelegate.activeUserProfileId = [NSString stringWithFormat:@"%@", [appDelegate.activeFeed objectForKey:@"user_id"]]; appDelegate.activeUserProfileName = [NSString stringWithFormat:@"%@", [appDelegate.activeFeed objectForKey:@"username"]]; - [appDelegate showUserProfileModal:self.navigationItem.rightBarButtonItem]; + [appDelegate showUserProfileModal:titleImageBarButton]; } - (void)changeActiveFeedDetailRow { diff --git a/clients/ios/Classes/FolderTitleView.m b/clients/ios/Classes/FolderTitleView.m index ddec7818e..4e82a795f 100644 --- a/clients/ios/Classes/FolderTitleView.m +++ b/clients/ios/Classes/FolderTitleView.m @@ -86,16 +86,16 @@ CGContextSetStrokeColor(context, CGColorGetComponents([topColor CGColor])); CGContextBeginPath(context); - CGContextMoveToPoint(context, 0, 0.5f); - CGContextAddLineToPoint(context, rect.size.width, 0.5f); + CGContextMoveToPoint(context, 0, 0.25f); + CGContextAddLineToPoint(context, rect.size.width, 0.25f); CGContextStrokePath(context); // bottom border UIColor *bottomColor = UIColorFromRGB(0xB7BBAA); CGContextSetStrokeColor(context, CGColorGetComponents([bottomColor CGColor])); CGContextBeginPath(context); - CGContextMoveToPoint(context, 0, rect.size.height - .5f); - CGContextAddLineToPoint(context, rect.size.width, rect.size.height - .5f); + CGContextMoveToPoint(context, 0, rect.size.height-0.25f); + CGContextAddLineToPoint(context, rect.size.width, rect.size.height-0.25f); CGContextStrokePath(context); // Folder title diff --git a/clients/ios/Classes/LoginViewController.m b/clients/ios/Classes/LoginViewController.m index 7708135e8..a2c95cac6 100644 --- a/clients/ios/Classes/LoginViewController.m +++ b/clients/ios/Classes/LoginViewController.m @@ -48,7 +48,12 @@ self.emailInput.borderStyle = UITextBorderStyleRoundedRect; self.signUpPasswordInput.borderStyle = UITextBorderStyleRoundedRect; self.signUpUsernameInput.borderStyle = UITextBorderStyleRoundedRect; + [self.loginControl + setTitleTextAttributes:@{NSFontAttributeName: + [UIFont fontWithName:@"Helvetica-Bold" size:11.0f]} + forState:UIControlStateNormal]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { self.logInView.frame = CGRectMake(134, 180, 500, 300); @@ -218,6 +223,7 @@ [self.passwordInput setText:@""]; [self.signUpPasswordInput setText:@""]; [appDelegate reloadFeedsView:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; } } @@ -278,7 +284,7 @@ [self.signUpPasswordInput setText:@""]; // [appDelegate showFirstTimeUser]; [appDelegate reloadFeedsView:YES]; - [self dismissViewControllerAnimated:NO completion:nil]; + [self dismissViewControllerAnimated:YES completion:nil]; } } diff --git a/clients/ios/Classes/NBContainerViewController.m b/clients/ios/Classes/NBContainerViewController.m index 20eecd7a1..579b1f7fc 100644 --- a/clients/ios/Classes/NBContainerViewController.m +++ b/clients/ios/Classes/NBContainerViewController.m @@ -506,7 +506,7 @@ self.storyPageControl.nextPage.webView.hidden = YES; self.storyPageControl.bottomSize.hidden = NO; self.storyPageControl.navigationItem.rightBarButtonItems = nil; - [self.storyPageControl resetPages]; + [self.storyPageControl hidePages]; NSInteger unreadCount = appDelegate.unreadCount; if (unreadCount == 0) { self.storyPageControl.circularProgressView.percentage = 1; @@ -521,8 +521,7 @@ if (UIInterfaceOrientationIsPortrait(orientation) && !self.storyTitlesOnLeft) { // CASE: story titles on bottom self.storyPageControl.navigationItem.leftBarButtonItem = self.storyPageControl.buttonBack; - self.storyPageControl.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] - initWithCustomView:self.feedDetailViewController.rightToolbar]; + self.storyPageControl.navigationItem.rightBarButtonItems = self.feedDetailViewController.navigationItem.rightBarButtonItems; self.storyNavigationController.view.frame = CGRectMake(vb.size.width, 0, vb.size.width, storyTitlesYCoordinate); self.feedDetailViewController.view.frame = CGRectMake(vb.size.width, diff --git a/clients/ios/Classes/NewsBlurAppDelegate.h b/clients/ios/Classes/NewsBlurAppDelegate.h index 7f6cddefc..a2d8ad763 100644 --- a/clients/ios/Classes/NewsBlurAppDelegate.h +++ b/clients/ios/Classes/NewsBlurAppDelegate.h @@ -9,7 +9,6 @@ #import #import "BaseViewController.h" #import "FMDatabaseQueue.h" -#import "NBBarButtonItem.h" #define FEED_DETAIL_VIEW_TAG 1000001 #define STORY_DETAIL_VIEW_TAG 1000002 @@ -353,7 +352,6 @@ + (UIView *)makeGradientView:(CGRect)rect startColor:(NSString *)start endColor:(NSString *)end; - (UIView *)makeFeedTitleGradient:(NSDictionary *)feed withRect:(CGRect)rect; - (UIView *)makeFeedTitle:(NSDictionary *)feed; -- (NBBarButtonItem *)makeRightFeedTitle:(NSDictionary *)feed; - (void)toggleAuthorClassifier:(NSString *)author feedId:(NSString *)feedId; - (void)toggleTagClassifier:(NSString *)tag feedId:(NSString *)feedId; diff --git a/clients/ios/Classes/NewsBlurAppDelegate.m b/clients/ios/Classes/NewsBlurAppDelegate.m index d4915ef68..5e2c295fa 100644 --- a/clients/ios/Classes/NewsBlurAppDelegate.m +++ b/clients/ios/Classes/NewsBlurAppDelegate.m @@ -193,7 +193,7 @@ // [[UISegmentedControl appearance] setBackgroundColor:UIColorFromRGB(0x8F918B)]; [self createDatabaseConnection]; - [self.feedsViewController fetchFeedList:YES]; + [self.feedsViewController loadOfflineFeeds:NO]; [[PocketAPI sharedAPI] setConsumerKey:@"16638-05adf4465390446398e53b8b"]; @@ -605,7 +605,6 @@ - (void)reloadFeedsView:(BOOL)showLoader { [feedsViewController fetchFeedList:showLoader]; - [loginViewController dismissViewControllerAnimated:NO completion:nil]; } - (void)loadFeedDetailView { @@ -2190,8 +2189,6 @@ titleLabel.shadowColor = UIColorFromRGB(0xF0F0F0); titleLabel.shadowOffset = CGSizeMake(0, 1); titleLabel.center = CGPointMake(0, -2); - [titleLabel sizeToFit]; - if (!self.isSocialView) { titleLabel.center = CGPointMake(28, -2); NSString *feedIdStr = [NSString stringWithFormat:@"%@", [feed objectForKey:@"id"]]; @@ -2213,23 +2210,11 @@ titleImageView.frame = CGRectMake(0.0, 2.0, 16.0, 16.0); [titleLabel addSubview:titleImageView]; } + [titleLabel sizeToFit]; + return titleLabel; } -- (NBBarButtonItem *)makeRightFeedTitle:(NSDictionary *)feed { - - NSString *feedIdStr = [NSString stringWithFormat:@"%@", [feed objectForKey:@"id"]]; - UIImage *titleImage = [Utilities getImage:feedIdStr]; - - titleImage = [Utilities roundCorneredImage:titleImage radius:6]; - - NBBarButtonItem *titleImageButton = [NBBarButtonItem buttonWithType:UIButtonTypeCustom]; - titleImageButton.bounds = CGRectMake(0, 0, 32, 32); - - [titleImageButton setImage:titleImage forState:UIControlStateNormal]; - return titleImageButton; -} - #pragma mark - #pragma mark Classifiers diff --git a/clients/ios/Classes/NewsBlurViewController.m b/clients/ios/Classes/NewsBlurViewController.m index 2109755f9..ce7d15758 100644 --- a/clients/ios/Classes/NewsBlurViewController.m +++ b/clients/ios/Classes/NewsBlurViewController.m @@ -26,6 +26,7 @@ #import "NBNotifier.h" #import "Utilities.h" #import "UIBarButtonItem+WEPopover.h" +#import "UIBarButtonItem+Image.h" #import "AddSiteViewController.h" #import "FMDatabase.h" #import "FMDatabaseAdditions.h" @@ -287,7 +288,7 @@ static const CGFloat kFolderTitleHeight = 28.0f; NSDate *decayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:(BACKGROUND_REFRESH_SECONDS)]; NSLog(@"Last Update: %@ - %f", self.lastUpdate, [self.lastUpdate timeIntervalSinceDate:decayDate]); if ([self.lastUpdate timeIntervalSinceDate:decayDate] < 0) { - [self fetchFeedList:YES]; + [appDelegate reloadFeedsView:YES]; } } @@ -320,8 +321,6 @@ static const CGFloat kFolderTitleHeight = 28.0f; self.lastUpdate = [NSDate date]; [self showRefreshNotifier]; - - [self loadOfflineFeeds:NO]; } - (void)finishedWithError:(ASIHTTPRequest *)request { @@ -332,7 +331,6 @@ static const CGFloat kFolderTitleHeight = 28.0f; [self informError:[request error]]; self.inPullToRefresh_ = NO; - [self loadOfflineFeeds:YES]; [self showOfflineNotifier]; } @@ -350,7 +348,6 @@ static const CGFloat kFolderTitleHeight = 28.0f; [self informError:@"The server barfed!"]; } - [self loadOfflineFeeds:YES]; [self showOfflineNotifier]; return; } @@ -483,6 +480,7 @@ static const CGFloat kFolderTitleHeight = 28.0f; forKey:userKey]; } + NSLog(@"Setting dictSocialFeeds"); appDelegate.dictSocialFeeds = socialDict; [self loadAvatars]; @@ -660,8 +658,12 @@ static const CGFloat kFolderTitleHeight = 28.0f; [cursor close]; dispatch_async(dispatch_get_main_queue(), ^{ - if (![[results allKeys] count] && !failed) return; + if (![[results allKeys] count] && !failed) { + NSLog(@"Fetched feeds before offline came in. Skipping offline loading."); + return; + } [_self finishLoadingFeedListWithDict:results]; + [_self fetchFeedList:NO]; }); }]; } @@ -670,7 +672,8 @@ static const CGFloat kFolderTitleHeight = 28.0f; appDelegate.activeUserProfileId = [NSString stringWithFormat:@"%@", [appDelegate.dictSocialProfile objectForKey:@"user_id"]]; appDelegate.activeUserProfileName = [NSString stringWithFormat:@"%@", [appDelegate.dictSocialProfile objectForKey:@"username"]]; // appDelegate.activeUserProfileName = @"You"; - [appDelegate showUserProfileModal:self.navigationItem.leftBarButtonItem]; + [appDelegate showUserProfileModal:[self.navigationItem.leftBarButtonItems + objectAtIndex:1]]; } - (IBAction)tapAddSite:(id)sender { @@ -1532,7 +1535,7 @@ heightForHeaderInSection:(NSInteger)section { // called when the user pulls-to-refresh - (void)pullToRefreshViewShouldRefresh:(PullToRefreshView *)view { self.inPullToRefresh_ = YES; - [self fetchFeedList:NO]; + [appDelegate reloadFeedsView:NO]; } - (void)refreshFeedList { @@ -1744,36 +1747,36 @@ heightForHeaderInSection:(NSInteger)section { NSURL *imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", [appDelegate.dictSocialProfile objectForKey:@"photo_url"]]]; - NBBarButtonItem *userAvatarButton = [NBBarButtonItem buttonWithType:UIButtonTypeCustom]; - userAvatarButton.frame = CGRectMake(0, yOffset + 1, isShort ? 28 : 32, isShort ? 28 : 32); - [userAvatarButton addTarget:self action:@selector(showUserProfile) forControlEvents:UIControlEventTouchUpInside]; + UIBarButtonItem *userAvatarButton = [UIBarButtonItem barItemWithImage:[UIImage alloc] + target:self + action:@selector(showUserProfile)]; + userAvatarButton.customView.frame = CGRectMake(0, yOffset + 1, isShort ? 28 : 32, isShort ? 28 : 32); NSMutableURLRequest *avatarRequest = [NSMutableURLRequest requestWithURL:imageURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; [avatarRequest setHTTPShouldHandleCookies:NO]; [avatarRequest setHTTPShouldUsePipelining:YES]; - UIImageView *avatarImageView = [[UIImageView alloc] initWithFrame:userAvatarButton.frame]; + UIImageView *avatarImageView = [[UIImageView alloc] initWithFrame:userAvatarButton.customView.frame]; [avatarImageView setImageWithURLRequest:avatarRequest placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { image = [Utilities roundCorneredImage:image radius:3]; - [userAvatarButton setImage:image forState:UIControlStateNormal]; + [(UIButton *)userAvatarButton.customView setImage:image forState:UIControlStateNormal]; } failure:nil]; // self.navigationItem.leftBarButtonItem = userInfoBarButton; - [userInfoView addSubview:userAvatarButton]; +// [userInfoView addSubview:userAvatarButton]; - int xOffset = CGRectGetMaxX(userAvatarButton.frame) + 6; - - UILabel *userLabel = [[UILabel alloc] initWithFrame:CGRectMake(xOffset, yOffset, userInfoView.frame.size.width, 16)]; + UILabel *userLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, yOffset, userInfoView.frame.size.width, 16)]; userLabel.text = appDelegate.activeUsername; userLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0]; userLabel.textColor = UIColorFromRGB(0x404040); userLabel.backgroundColor = [UIColor clearColor]; userLabel.shadowColor = UIColorFromRGB(0xFAFAFA); + [userLabel sizeToFit]; [userInfoView addSubview:userLabel]; [appDelegate.folderCountCache removeObjectForKey:@"everything"]; UnreadCounts *counts = [appDelegate splitUnreadCountForFolder:@"everything"]; UIImageView *yellow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"g_icn_unread"]]; - yellow.frame = CGRectMake(xOffset, userLabel.frame.origin.y + userLabel.frame.size.height + 4, 8, 8); + yellow.frame = CGRectMake(0, userLabel.frame.origin.y + userLabel.frame.size.height + 4, 8, 8); [userInfoView addSubview:yellow]; NSNumberFormatter *formatter = [NSNumberFormatter new]; @@ -1804,11 +1807,19 @@ heightForHeaderInSection:(NSInteger)section { [positiveCount sizeToFit]; [userInfoView addSubview:positiveCount]; - [userInfoView setBounds:CGRectInset(userInfoView.bounds, 10, 0)]; + [userInfoView sizeToFit]; UIBarButtonItem *userInfoBarButton = [[UIBarButtonItem alloc] initWithCustomView:userInfoView]; - self.navigationItem.leftBarButtonItem = userInfoBarButton; + UIBarButtonItem *spacer = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace + target:nil + action:nil]; + spacer.width = -8; + self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects: + spacer, + userAvatarButton, + userInfoBarButton, nil]; } - (void)showRefreshNotifier { diff --git a/clients/ios/Classes/StoryDetailViewController.m b/clients/ios/Classes/StoryDetailViewController.m index a14bd33a1..9dc2d6cb0 100644 --- a/clients/ios/Classes/StoryDetailViewController.m +++ b/clients/ios/Classes/StoryDetailViewController.m @@ -70,6 +70,7 @@ [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; + self.pageIndex = -2; self.inTextView = NO; } diff --git a/clients/ios/Classes/StoryPageControl.h b/clients/ios/Classes/StoryPageControl.h index 8c59df6cf..f19c26589 100644 --- a/clients/ios/Classes/StoryPageControl.h +++ b/clients/ios/Classes/StoryPageControl.h @@ -10,7 +10,6 @@ #import "BaseViewController.h" #import "NewsBlurAppDelegate.h" #import "WEPopoverController.h" -#import "TransparentToolbar.h" #import "THCircularProgressView.h" @class NewsBlurAppDelegate; @@ -27,7 +26,6 @@ UIButton *buttonText; UIActivityIndicatorView *loadingIndicator; UIBarButtonItem *buttonBack; - TransparentToolbar * rightToolbar; UIView *traverseView; UIView *progressView; UIView *progressViewContainer; @@ -60,7 +58,6 @@ @property (nonatomic) IBOutlet UIBarButtonItem * spacer2BarButton; @property (nonatomic) IBOutlet UIBarButtonItem * spacer3BarButton; @property (nonatomic) IBOutlet UIBarButtonItem * separatorBarButton; -@property (nonatomic) IBOutlet TransparentToolbar * rightToolbar; @property (nonatomic) IBOutlet UIView *traverseView; @property (nonatomic) IBOutlet UIView *progressView; @property (nonatomic) IBOutlet UIView *progressViewContainer; @@ -84,6 +81,7 @@ - (void)transitionFromFeedDetail; - (void)resetPages; +- (void)hidePages; - (void)refreshPages; - (void)refreshHeaders; - (void)setStoryFromScroll; diff --git a/clients/ios/Classes/StoryPageControl.m b/clients/ios/Classes/StoryPageControl.m index c573e72f9..99d3f3586 100644 --- a/clients/ios/Classes/StoryPageControl.m +++ b/clients/ios/Classes/StoryPageControl.m @@ -22,7 +22,6 @@ #import "NBContainerViewController.h" #import "DataUtilities.h" #import "JSON.h" -#import "TransparentToolbar.h" #import "UIBarButtonItem+Image.h" #import "THCircularProgressView.h" #import "FMDatabase.h" @@ -35,7 +34,6 @@ @synthesize circularProgressView; @synthesize separatorBarButton; @synthesize spacerBarButton, spacer2BarButton, spacer3BarButton; -@synthesize rightToolbar; @synthesize buttonPrevious; @synthesize buttonNext; @synthesize buttonAction; @@ -122,9 +120,6 @@ [self.traverseView insertSubview:tapIndicator aboveSubview:circularProgressView]; self.loadingIndicator.frame = self.circularProgressView.frame; - rightToolbar = [[TransparentToolbar alloc] - initWithFrame:CGRectMake(0, 0, 86, 44)]; - spacerBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; @@ -173,15 +168,10 @@ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { - [rightToolbar setItems: [NSArray arrayWithObjects: - spacerBarButton, - fontSettingsButton, - spacer2BarButton, - separatorBarButton, - spacer3BarButton, - originalStoryButton, nil]]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] - initWithCustomView:rightToolbar]; + self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: + originalStoryButton, + separatorBarButton, + fontSettingsButton, nil]; } [self.scrollView addObserver:self forKeyPath:@"contentOffset" @@ -194,6 +184,7 @@ - (void)viewWillAppear:(BOOL)animated { [self setNextPreviousButtons]; [appDelegate adjustStoryDetailWebView]; + self.navigationController.interactivePopGestureRecognizer.enabled = NO; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { if (!appDelegate.isSocialView) { @@ -264,6 +255,8 @@ - (void)viewWillDisappear:(BOOL)animated { previousPage.view.hidden = YES; + self.navigationController.interactivePopGestureRecognizer.enabled = YES; + } - (void)transitionFromFeedDetail { @@ -339,10 +332,6 @@ [nextPage clearStory]; [previousPage clearStory]; - [currentPage hideStory]; - [nextPage hideStory]; - [previousPage hideStory]; - CGRect frame = self.scrollView.frame; self.scrollView.contentSize = frame.size; @@ -354,7 +343,12 @@ currentPage.pageIndex = -2; nextPage.pageIndex = -2; previousPage.pageIndex = -2; - +} + +- (void)hidePages { + [currentPage hideStory]; + [nextPage hideStory]; + [previousPage hideStory]; } - (void)refreshPages { @@ -695,14 +689,10 @@ [self.view setNeedsLayout]; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - [rightToolbar setItems: [NSArray arrayWithObjects: - spacerBarButton, - fontSettingsButton, - spacer2BarButton, - separatorBarButton, - spacer3BarButton, - originalStoryButton, nil]]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightToolbar]; + self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: + originalStoryButton, + separatorBarButton, + fontSettingsButton, nil]; } [self setNextPreviousButtons]; diff --git a/clients/ios/NewsBlur.xcodeproj/project.pbxproj b/clients/ios/NewsBlur.xcodeproj/project.pbxproj index 36eb1513d..9f04df064 100755 --- a/clients/ios/NewsBlur.xcodeproj/project.pbxproj +++ b/clients/ios/NewsBlur.xcodeproj/project.pbxproj @@ -2606,7 +2606,7 @@ "-all_load", ); PRODUCT_NAME = NewsBlur; - PROVISIONING_PROFILE = "A0156932-124B-4F8E-8B93-EE6598D778F0"; + PROVISIONING_PROFILE = "EB97D956-BB90-4F2F-9919-F71949B04B3F"; TARGETED_DEVICE_FAMILY = "1,2"; "WARNING_CFLAGS[arch=*]" = "-Wall"; }; @@ -2638,7 +2638,7 @@ "-all_load", ); PRODUCT_NAME = NewsBlur; - PROVISIONING_PROFILE = "A0156932-124B-4F8E-8B93-EE6598D778F0"; + PROVISIONING_PROFILE = "EB97D956-BB90-4F2F-9919-F71949B04B3F"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; diff --git a/clients/ios/Other Sources/UIBarButtonItem+Image.m b/clients/ios/Other Sources/UIBarButtonItem+Image.m index 65a1e0195..ca7af7ea1 100644 --- a/clients/ios/Other Sources/UIBarButtonItem+Image.m +++ b/clients/ios/Other Sources/UIBarButtonItem+Image.m @@ -13,11 +13,13 @@ +(UIBarButtonItem *)barItemWithImage:(UIImage *)image target:(id)target action:(SEL)action { UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; - button.bounds = CGRectMake(0, 0, image.size.width, image.size.height); [button setImage:image forState:UIControlStateNormal]; [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; - + [button sizeToFit]; +// button.imageView.contentMode = UIViewContentModeCenter; UIBarButtonItem* item = [[self alloc] initWithCustomView:button]; +// button.layer.borderColor = [[UIColor redColor] CGColor]; +// button.layer.borderWidth = 0.5f; return item; } diff --git a/clients/ios/Resources-iPhone/LoginViewController.xib b/clients/ios/Resources-iPhone/LoginViewController.xib index e4efdfb6b..01e3507d6 100644 --- a/clients/ios/Resources-iPhone/LoginViewController.xib +++ b/clients/ios/Resources-iPhone/LoginViewController.xib @@ -1,5 +1,5 @@ - + @@ -131,14 +131,14 @@ - + - + - - + + - + diff --git a/clients/ios/Resources/markread.png b/clients/ios/Resources/markread.png index d1bc043831efaf0df10fd3f9d39a48e38446f5ac..524821977c3c9cc9844407405973c55dd8be237e 100644 GIT binary patch delta 744 zcmVUgyU&))zVLb5WS1N<&CUr5iI zra=&dry?^~Zy^AfS z@Jm&Fdm%%cM*Lb5WQ9y+@^i~!V-tZ3`N z+cV)NlNpjP&|g+semcF+rvoM(ya2#+00{ucvcPXL^VRgMswzw-6C__?z+rcuB%;-y z&xRc!01QANI%Bhy%v@G3?kX;MbY?T6)$r4F-b&k}ojm_4tkw zk(%kBm+o|T^`}zv4F-cjzrJ5sSlGO@wA7|)+6_HiFbMFveQ*6z@DLIG%Jj>*1FEVX zztY+^Q&}lZ#9|*XJ39-b(U?9yx3I9_0N_{y7X)}*-gkZ}csLsz$fE;-AeaHncwF8~ zvMr`n_@8W(Vly~-TdO^v-ixr=bwS~`aU)Jgqhv> ae)k7V-5wZ+6&g(d0000MofS3Nkl5Ys8WtC$0|7&+1|u-&pos$sixQ&_MgqpDgo>Xl0}=?-M&+x$$AyxUAa`)B zGTcA8;k~=}d4Fl1y!WQW%-G2h{x?7^22gJdpxzijy)l1)dSd|f#sKP#7z%f$<2W-J z@CWy4c~R{&C8p`PWl2>b`ttSjP^yXn01=7IJe9xyz`2c{hr*rrnRzkb57qE;Q*_;i@?Hwp8w4Kqo=9YTUtiWXgcnTm2;P`(Axa-V(IXO-w5-^+1klfxuyUlTm zh%|4$sy#>m7=S=@HZL!K_ENBES8nd!K>#(YuRI9&gLMkrRc5}D9Lur{lgR|h?HwvD zaUUb1gtC6h_rY5|-2;n@3$-SbNqPHjR#sNS%F0TcEX&uFIKd>K)a8Edk$i`U=;!)+ zDeHg1L?UsbwWV#gtW265AAg6rxjAHHWF#M-Us_tS1F-*r69kkvOW$}T-{FmLTB5lJ z1wqILFk9j*ZJzk}K67;BW#fD_szk2C5nRraF|ViM2ocS12M27U2b1?FK16y)MusnZ zk3}JhYe>kl3?czerz=w7J6KIbGaHm$OIm-w#gX^p{iCmj>tnGPL{VJD5sHgl6P4vv z)kHL{RznS_>%dx6Xlszly!Wg*Iapp^1`)yGaDJ*Rud304`)3)CjP>5>>)~h5pS)$} zJzJT}%$r^*%eU#NN6hTn>O3_d8Gm5vi~-ae1E@C!P;U&N-t2hbZx35*nBi%#=l}}< N002ovPDHLkV1g0ke;WV* diff --git a/clients/ios/Resources/markread@2x.png b/clients/ios/Resources/markread@2x.png index d2482c667d440aedcdbe8e4a309952bcb01a1a40..44584bbecadbfe26f1b7712c3e97797d4b37218e 100644 GIT binary patch delta 636 zcmV-?0)zek2GRu~iBL{Q4GJ0x0000DNk~Le0000$0000e2nGNE08Y;Q>5(BD3e*4q zEz|)RVZ~{YMofPzNklAz;ArLTdaEe;^4epD`*?1_XyQHvQQ{+>u zu$cp~u((TirC=vo$cdn6q2>w;tHVEFCAO0Hnp?@m#LVo@pJd~&Om>#{d6>yNvl}HM ztaECy3y7WiVDJ7)O@Ut0S1#|j_A}tWfY=3uNT$<`Os9YMW__nb#b@ zryI3e?Pxq6Zvn$z((jzRpUdKwEmQD$&Pk}OfI0Aa{z#~#fCcb*hP|ZUQJGGo?gL!+ zbwl_(!%B4lOL$tX)^^=@QK4cBzqxtw_pO~fpDHl}3c|l`Hk;eg_W`zjeLAJ!mHN5T zU7##HtZ;uDbO8@5D!>&yfb)HT>%Kl6m+%njG??jhkmd=c`!*7M zz(ZgGXYjid9~nvT1rHvc2h8j1GvFuF?Irz#IpeJ08;yo^ckjM3frmg{U;%udza$ia z-?@4F%azMlw@lz6z!J!GI$$w8Of82J@YhY@A;5nOIC}Zw$=i2tZdeTI0*_0;k8JAm zz7G(Q_UQP-qi4^bUNA07sS^>oW^!#AcmVImVWrgJ+3PoB38CO2fB+~aVNqPbLm&a* zR)Q;d2)GZ(Q{*>cGA`i(>SZ5D*rv=(a19Rum%wC-Nbms}p@Cgr* z1;9kVCHRJiB@h6!C4_)qx`;^oo)^~?r+9F?Ox9( zy7|=K@N{tushIQj*8XhaLYZS9pG!L_BrFJUmHos2tG`1}>}ZZBTlnRMpW1#q<|y#- zZJWLLftrUo)&O( z_0(FXQ2&M$CKX|YnG7dcJk%VF7$ro4Fz z6VRY-f(?lxIjw;k!jJ5mJM*tr(s9?PbF8O7dw*Et#;U7X?UPTYupc>CRAg+83crzj?WXLHpr}1>-)^p7|Nh>eLvrQ1VF_+~%+IDxj%!?czA^Lp zuAdS%&+okNoyQz$lhFM9fX#+j_%) zaM{#+{q%D8_x$zCZY*Jcz}aZ-S6ufcddCaP3ukUUJ}+M{Z&&~EjnAXWMek0W(Np~y z&6ZzPmuYSp_Hg^=ImP|U)n`f+hE`N=ne@9cQegU1X1NWAq*qlc{c2)gQ@}T8>eE>g z`uR4$q)yzs;3K_Rs5Yu{vsb0sB-V@WHVclldu0mL9%c5b)0)n5G2P}s^YK~B6@T@y zS1@qQ>4{*qd2h7&Tha25?e^d0T_(%h@0Xt$x#;|%Cx$Dhm(Ps6eP-V}ru-_KS5NnZ qtO=M}v*u+mjwFPUT;K_9Q@z)9#hj&?Ym0%&pTX1B&t;ucLK6V{L2FY0 diff --git a/clients/ios/Resources/nav_icn_settings.png b/clients/ios/Resources/nav_icn_settings.png index 6e303ad4bed1834dc85461a270eacf6a4a08a162..34bda53ca2a6e94391f35018c2ab0fb723674d90 100644 GIT binary patch delta 948 zcmV;l155nm2!seBiBL{Q4GJ0x0000DNk~Le0000O0000O2nGNE0N{5$_>mzS3K9SS z4-x?(oANV}ZX=OMD1QT8NklF=}FGXww$D~N$R%R+13k{%~ZEp z#kmaJn5@#VmBJKRujT|L<|3Ek9}pyl3bhxqRhhrgxw}a#v{(>_vSu*d#fEgY>1f(w z+jX>&n%9f`;QVS0`rN(W_j$hGbDr~k-uDRVj7&ED0T8P!FMlQzsf+d0sr3q|4eI%g zzc)01a8pJm`wKqi}xXR_&_9j}rDl%(u%sf%T@>6jf?Y)SpVn4%~X=HyH^ebSt_ zzP1*y?e_zdLWl{wh_I1-TiXy~RZ96Wa1v;>KUpPi08>DZt!{5Jk(#my+_`i6+{ozF zq2gb~O}Ofdoqs!bZS?h?c}xf~1*R6Yw|9(mpXhn;f5;8L!7C?vu2sn`0z!zXmX=4l zJ7Z7(XMz3upI!9%wso5^i%o?Pyy9y z@zlQ9l7-W}s5oHKPJa4S-)bZheIFRF!10-x>G!_A{C}m}i*zOvsa#FKG@*yxvJW2U zDn9?*3td8poEeu=#z#i4j{SD)SGO{NyTBDC)EMgBj2yu4H@>iwL%E&NX!F=+bwF#V zG1RN59?$kIl2}|^aFACcKbya~RjumrY*!!M)3)gKc!Mh|%dFgAaU{*&%R9!uwl|wU zX2%S_fq!8H2#3S?{ed|lrF@6-wCBgsT++zeEXhYR+^^XJ~0)^+`N zAP3|uE|OBlE`2sUIlnOPCNd0M0fIn3F5m5m$Dicb(U%*A5H+h>4m%-4E)s2CaAOC~ zQa-CLxRC?sy6~NL;Ar3T>-}%NGW55!ra6+m%rL! z7zRgQI=&i-MBfGC#bU8%aA?3n{^lERqiNbOFkUFk4UB&O-41}$r}}Q{y6;f+TR2>_ zym`F*gQj`!>bmds>I6$EgM%Lp{8_y#!cAdbd-ZJ1EmF$Z`uf_Z0A_Mai=gbHKp?QM zl9V&yOAj?QZB*9{4eF|yLAU7Ik@~)m@f-+M8eU$B9vBuwziJEOWl&Q3jP72 WY878l&rmu50000Q2;>MMiBL{Q4GJ0x0000DNk~Le0000Y0000i2nGNE002#DvXLPh3ON7( z4>OR~{uY)y3cuw(-ZWkZ1o zh=FdfuZMQX@b;bQpa(t7H|b%X_kG^y(>_1uO$ntGpM!)?4S%4@0%2u=u(Ci{Ss<)L zo{x> z#oAQ}0LV~U!}0S)qG2Cv{~(Y^G~5MXP!NP6?V*uqxJ|onX>rlXtaky36GDc}zz|-( z)EdbJ`&DCKpnsHJ2G9neQs>MU07d|`GJbWzKxhQu*N7p=@bKTK9z49)oBlst=nENY zR4(bl&g1EDw+96Q?jM1|0kAqXL4q@rR=i{H2NgFzY_ zchA`E>sku!E7-n-kXTRe#Ww&PTDxSE;P>ys=1mmOG-QRAOOJOP;M{~0J3TH zddmm({C@yc=FZL&7ep*B{=(oe%*;&ZL8wYjBwrf&>YdF^%~xBiW^Bba*Zlk(=HJZc ztxx=y)SZ+Q6UjrYO>rnt6erwnHyjS%Z{!><?7p1qTltUhsIlKLKb?r_-%Hz1^$)emH#= zk|YfPh^11K-47q#Uk?E7$2(ujvb{;Il{KeEg_)b1`(2W3qq1y2p-xmvsjKHw_iOd8 z;x2RJ`|nPcXoC5cmKLu7fEGdz#8lTfom$TN++higefG<;vSszTs7PGU1|x(dWZB-t zLg>lVEne?Z<8gbF0ud?!psK1S$?+=)u(H?s$B2;y!pZ_+Wr47=Kv=y8SyWLDg3S7y P00000NkvXXu0mjfjoI#% diff --git a/clients/ios/Resources/nav_icn_settings@2x.png b/clients/ios/Resources/nav_icn_settings@2x.png index 817cdd40a92e944574a3cb5fdda93514c96296a6..6af7bd960980a2942ffa626af81b2db05215e15e 100644 GIT binary patch delta 1840 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 rlze7p-PvZU{c?Nv|LNd=ySJsgliCwp+cRtfG^ diff --git a/clients/ios/Resources/original_button.png b/clients/ios/Resources/original_button.png index 6fd732d8e77d40ce2c544d0332cd4eee4b90070d..6a5393c583ca1b8d53a5b5683c01cd9d5f677fee 100644 GIT binary patch delta 1702 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