Skip to content

Commit

Permalink
#817 (three column layout)
Browse files Browse the repository at this point in the history
- When rotating iPhone from portrait to landscape, the feed detail now appears correctly.
- Eliminated some popping; changing columns works differently with the split view.
  • Loading branch information
Dejal committed Jan 17, 2021
1 parent c5d09a1 commit 2b3d331
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 41 deletions.
36 changes: 20 additions & 16 deletions clients/ios/Classes/DetailObjCViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -419,10 +419,11 @@ - (BOOL)becomeFirstResponder {

- (void)transitionFromFeedDetail {
if (appDelegate.detailViewController.storyTitlesOnLeft) {
[appDelegate.feedsNavigationController
popToViewController:[appDelegate.feedsNavigationController.viewControllers
objectAtIndex:0]
animated:YES];
// [appDelegate.feedsNavigationController
// popToViewController:[appDelegate.feedsNavigationController.viewControllers
// objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnSupplementary];
[appDelegate hideStoryDetailView];
} else {
[appDelegate.masterContainerViewController transitionFromFeedDetail];
Expand Down Expand Up @@ -950,10 +951,11 @@ - (void)applyNewIndex:(NSInteger)newIndex
}];
} else if (!appDelegate.feedDetailViewController.pageFinished &&
!appDelegate.feedDetailViewController.pageFetching) {
[appDelegate.feedsNavigationController
popToViewController:[appDelegate.feedsNavigationController.viewControllers
objectAtIndex:0]
animated:YES];
// [appDelegate.feedsNavigationController
// popToViewController:[appDelegate.feedsNavigationController.viewControllers
// objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnSupplementary];
[appDelegate hideStoryDetailView];
}
} else if (!outOfBounds) {
Expand Down Expand Up @@ -1827,10 +1829,11 @@ - (IBAction)doNextUnreadStory:(id)sender {
self.waitingForNextUnreadFromServer = YES;
[fdvc fetchNextPage:nil];
} else if (nextLocation == -1) {
[appDelegate.feedsNavigationController
popToViewController:[appDelegate.feedsNavigationController.viewControllers
objectAtIndex:0]
animated:YES];
// [appDelegate.feedsNavigationController
// popToViewController:[appDelegate.feedsNavigationController.viewControllers
// objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnSupplementary];
[appDelegate hideStoryDetailView];
} else {
[self changePage:nextLocation];
Expand All @@ -1843,10 +1846,11 @@ - (IBAction)doPreviousStory:(id)sender {
self.circularProgressView.hidden = NO;
id previousStoryId = [appDelegate.storiesCollection popReadStory];
if (!previousStoryId || previousStoryId == [appDelegate.activeStory objectForKey:@"story_hash"]) {
[appDelegate.feedsNavigationController
popToViewController:[appDelegate.feedsNavigationController.viewControllers
objectAtIndex:0]
animated:YES];
// [appDelegate.feedsNavigationController
// popToViewController:[appDelegate.feedsNavigationController.viewControllers
// objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnSupplementary];
[appDelegate hideStoryDetailView];
} else {
NSInteger previousLocation = [appDelegate.storiesCollection locationOfStoryId:previousStoryId];
Expand Down
29 changes: 17 additions & 12 deletions clients/ios/Classes/FeedDetailObjCViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -2084,10 +2084,12 @@ - (IBAction)doOpenMarkReadMenu:(id)sender {

void (^pop)(void) = ^{
if (!self.isPhoneOrCompact) {
[self.appDelegate.feedsNavigationController popToRootViewControllerAnimated:YES];
// [self.appDelegate.feedsNavigationController popToRootViewControllerAnimated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self.appDelegate.masterContainerViewController transitionFromFeedDetail];
} else {
[self.appDelegate.feedsNavigationController popToViewController:[self.appDelegate.feedsNavigationController.viewControllers objectAtIndex:0] animated:YES];
// [self.appDelegate.feedsNavigationController popToViewController:[self.appDelegate.feedsNavigationController.viewControllers objectAtIndex:0] animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
}
};

Expand Down Expand Up @@ -2443,10 +2445,11 @@ - (void)deleteSite {

[self.appDelegate POST:urlString parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self.appDelegate reloadFeedsView:YES];
[self.appDelegate.feedsNavigationController
popToViewController:[self.appDelegate.feedsNavigationController.viewControllers
objectAtIndex:0]
animated:YES];
// [self.appDelegate.feedsNavigationController
// popToViewController:[self.appDelegate.feedsNavigationController.viewControllers
// objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[MBProgressHUD hideHUDForView:self.view animated:YES];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self requestFailed:error];
Expand All @@ -2469,10 +2472,11 @@ - (void)deleteFolder {

[appDelegate POST:urlString parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self.appDelegate reloadFeedsView:YES];
[self.appDelegate.feedsNavigationController
popToViewController:[self.appDelegate.feedsNavigationController.viewControllers
objectAtIndex:0]
animated:YES];
// [self.appDelegate.feedsNavigationController
// popToViewController:[self.appDelegate.feedsNavigationController.viewControllers
// objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[MBProgressHUD hideHUDForView:self.view animated:YES];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self requestFailed:error];
Expand All @@ -2498,8 +2502,9 @@ - (void)muteSite {
[params setObject:activeIdentifiers forKey:@"approved_feeds"];
[appDelegate POST:urlString parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self.appDelegate reloadFeedsView:YES];
[self.appDelegate.feedsNavigationController popToViewController:[self.appDelegate.feedsNavigationController.viewControllers objectAtIndex:0]
animated:YES];
// [self.appDelegate.feedsNavigationController popToViewController:[self.appDelegate.feedsNavigationController.viewControllers objectAtIndex:0]
// animated:YES];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[MBProgressHUD hideHUDForView:self.view animated:YES];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self requestFailed:error];
Expand Down
3 changes: 2 additions & 1 deletion clients/ios/Classes/FeedsObjCViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -920,7 +920,8 @@ - (void)showUserProfile {
}

- (IBAction)tapAddSite:(id)sender {
[self.appDelegate.addSiteNavigationController popToRootViewControllerAnimated:NO];
// [self.appDelegate.addSiteNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];

[self.appDelegate showPopoverWithViewController:self.appDelegate.addSiteNavigationController contentSize:CGSizeMake(320, 96) barButtonItem:self.addBarButton];

Expand Down
33 changes: 21 additions & 12 deletions clients/ios/Classes/NewsBlurAppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -1564,7 +1564,8 @@ - (void)loadFeed:(NSString *)feedId
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
[self loadFeedDetailView];
} else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self hidePopoverAnimated:NO completion:^{
if (self.feedsNavigationController.presentedViewController) {
[self.feedsNavigationController dismissViewControllerAnimated:NO completion:^{
Expand Down Expand Up @@ -1609,7 +1610,8 @@ - (void)loadTryFeedDetailView:(NSString *)feedId
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
[self loadFeedDetailView];
} else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self hidePopoverAnimated:YES completion:^{
if (self.feedsNavigationController.presentedViewController) {
[self.feedsNavigationController dismissViewControllerAnimated:YES completion:^{
Expand All @@ -1625,7 +1627,8 @@ - (void)loadTryFeedDetailView:(NSString *)feedId
- (void)loadStarredDetailViewWithStory:(NSString *)contentId
showFindingStory:(BOOL)showHUD {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self.feedsNavigationController dismissViewControllerAnimated:YES completion:nil];
[self hidePopoverAnimated:NO];
}
Expand Down Expand Up @@ -1879,6 +1882,7 @@ - (void)loadRiverFeedDetailView:(FeedDetailViewController *)feedDetailView withF
}

[navController showViewController:feedDetailViewController sender:self];
[self.splitViewController showColumn:UISplitViewControllerColumnSupplementary];
}

if (!transferFromDashboard) {
Expand All @@ -1897,7 +1901,8 @@ - (void)loadRiverFeedDetailView:(FeedDetailViewController *)feedDetailView withF
- (void)openDashboardRiverForStory:(NSString *)contentId
showFindingStory:(BOOL)showHUD {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self.feedsNavigationController dismissViewControllerAnimated:YES completion:nil];
[self hidePopoverAnimated:NO];
}
Expand Down Expand Up @@ -2228,30 +2233,34 @@ - (void)closeOriginalStory {
}

- (void)hideStoryDetailView {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
[self.masterContainerViewController transitionFromFeedDetail];
} else {
[self.feedsNavigationController popViewControllerAnimated:YES];
}
[self.splitViewController showColumn:UISplitViewControllerColumnSupplementary];
// if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
// [self.masterContainerViewController transitionFromFeedDetail];
// } else {
// [self.feedsNavigationController popViewControllerAnimated:YES];
// }
}

#pragma mark -
#pragma mark Siri Shortcuts

- (void)handleUserActivity:(NSUserActivity *)activity {
if ([activity.activityType isEqualToString:@"com.newsblur.refresh"]) {
[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self.feedsViewController refreshFeedList];
} else if ([activity.activityType isEqualToString:@"com.newsblur.gotoFolder"]) {
NSString *folder = activity.userInfo[@"folder"];

[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self loadRiverFeedDetailView:self.feedDetailViewController withFolder:folder];
} else if ([activity.activityType isEqualToString:@"com.newsblur.gotoFeed"]) {
NSString *folder = activity.userInfo[@"folder"];
NSString *feedID = activity.userInfo[@"feedID"];

[self.feedsNavigationController popToRootViewControllerAnimated:NO];
// [self.feedsNavigationController popToRootViewControllerAnimated:NO];
[self.splitViewController showColumn:UISplitViewControllerColumnPrimary];
[self loadFolder:folder feedID:feedID];
}
}
Expand Down
8 changes: 8 additions & 0 deletions clients/ios/Classes/SplitViewDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ class SplitViewDelegate: NSObject, UISplitViewControllerDelegate {
}

func splitViewController(_ svc: UISplitViewController, displayModeForExpandingToProposedDisplayMode proposedDisplayMode: UISplitViewController.DisplayMode) -> UISplitViewController.DisplayMode {
if let supplementaryNav = svc.viewController(for: .supplementary) as? UINavigationController,
supplementaryNav.viewControllers.isEmpty,
let primaryNav = svc.viewController(for: .primary) as? UINavigationController,
primaryNav.viewControllers.count > 1,
let feedDetail = primaryNav.viewControllers[1] as? FeedDetailViewController {
supplementaryNav.viewControllers = [feedDetail]
}

if UIDevice.current.userInterfaceIdiom == .phone, proposedDisplayMode == .twoOverSecondary {
return .oneOverSecondary
} else {
Expand Down

0 comments on commit 2b3d331

Please sign in to comment.