Skip to content

Commit

Permalink
[ios] Hides Following Feed for signed out users.
Browse files Browse the repository at this point in the history
(cherry picked from commit 775cb43)

Change-Id: I241358abdf13d0a2d2b81b57ab5c9c2b501afbb4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3648590
Reviewed-by: Adam Arcaro <adamta@google.com>
Commit-Queue: Sergio Collazos <sczs@chromium.org>
Auto-Submit: Sergio Collazos <sczs@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#1004954}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3662200
Commit-Queue: Adam Arcaro <adamta@google.com>
Cr-Commit-Position: refs/branch-heads/5060@{#221}
Cr-Branched-From: b83393d-refs/heads/main@{#1002911}
  • Loading branch information
Sergio Collazos authored and Chromium LUCI CQ committed May 24, 2022
1 parent 48056fa commit c2ea4c2
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 36 deletions.
4 changes: 4 additions & 0 deletions ios/chrome/browser/ui/ntp/feed_control_delegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
// Determines whether the feed should be shown based on the user prefs.
- (BOOL)shouldFeedBeVisible;

// YES if the Following Feed is currently available. e.g. It might be disabled
// for certain circumstances like restricted accounts.
- (BOOL)isFollowingFeedAvailable;

@end

#endif // IOS_CHROME_BROWSER_UI_NTP_FEED_CONTROL_DELEGATE_H_
3 changes: 3 additions & 0 deletions ios/chrome/browser/ui/ntp/feed_header_view_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@
// Updates the header for when the user turns the feed off from the header menu.
- (void)updateForFeedVisibilityChanged;

// Updates the header for when the Following Feed visibility has changed.
- (void)updateForFollowingFeedVisibilityChanged;

@end

#endif // IOS_CHROME_BROWSER_UI_NTP_FEED_HEADER_VIEW_CONTROLLER_H_
71 changes: 42 additions & 29 deletions ios/chrome/browser/ui/ntp/feed_header_view_controller.mm
Original file line number Diff line number Diff line change
Expand Up @@ -148,21 +148,7 @@ - (void)viewDidLoad {
self.container.translatesAutoresizingMaskIntoConstraints = NO;

[self configureMenuButton:self.menuButton];

if (IsWebChannelsEnabled()) {
if ([self.feedControlDelegate shouldFeedBeVisible]) {
[self addViewsForVisibleFeed];
} else {
[self addViewsForHiddenFeed];
}

if (![self.ntpDelegate isGoogleDefaultSearchEngine]) {
[self addCustomSearchEngineView];
}
} else {
self.titleLabel = [self createTitleLabel];
[self.container addSubview:self.titleLabel];
}
[self configureHeaderViews];

[self.container addSubview:self.menuButton];
[self.view addSubview:self.container];
Expand All @@ -172,7 +158,8 @@ - (void)viewDidLoad {
#pragma mark - Public

- (void)toggleBackgroundBlur:(BOOL)blurred animated:(BOOL)animated {
if (UIAccessibilityIsReduceTransparencyEnabled() || !IsWebChannelsEnabled() ||
if (UIAccessibilityIsReduceTransparencyEnabled() ||
![self.feedControlDelegate isFollowingFeedAvailable] ||
!self.blurBackgroundView) {
return;
}
Expand Down Expand Up @@ -200,19 +187,20 @@ - (void)toggleBackgroundBlur:(BOOL)blurred animated:(BOOL)animated {
}

- (CGFloat)feedHeaderHeight {
return IsWebChannelsEnabled() ? kWebChannelsHeaderHeight
: kDiscoverFeedHeaderHeight;
return [self.feedControlDelegate isFollowingFeedAvailable]
? kWebChannelsHeaderHeight
: kDiscoverFeedHeaderHeight;
}

- (CGFloat)customSearchEngineViewHeight {
return
[self.ntpDelegate isGoogleDefaultSearchEngine] || !IsWebChannelsEnabled()
? 0
: kCustomSearchEngineLabelHeight;
return [self.ntpDelegate isGoogleDefaultSearchEngine] ||
![self.feedControlDelegate isFollowingFeedAvailable]
? 0
: kCustomSearchEngineLabelHeight;
}

- (void)updateFollowingSegmentDotForUnseenContent:(BOOL)hasUnseenContent {
DCHECK(IsWebChannelsEnabled());
DCHECK([self.feedControlDelegate isFollowingFeedAvailable]);

// Don't show the dot if the user is already on the Following feed.
if ([self.feedControlDelegate selectedFeed] == FeedTypeFollowing) {
Expand All @@ -229,7 +217,7 @@ - (void)updateFollowingSegmentDotForUnseenContent:(BOOL)hasUnseenContent {
}

- (void)updateForDefaultSearchEngineChanged {
if (!IsWebChannelsEnabled()) {
if (![self.feedControlDelegate isFollowingFeedAvailable]) {
[self.titleLabel setText:[self feedHeaderTitleText]];
[self.titleLabel setNeedsDisplay];
return;
Expand All @@ -244,7 +232,7 @@ - (void)updateForDefaultSearchEngineChanged {
}

- (void)updateForFeedVisibilityChanged {
if (!IsWebChannelsEnabled()) {
if (![self.feedControlDelegate isFollowingFeedAvailable]) {
[self.titleLabel setText:[self feedHeaderTitleText]];
[self.titleLabel setNeedsDisplay];
return;
Expand All @@ -261,6 +249,14 @@ - (void)updateForFeedVisibilityChanged {
[self applyHeaderConstraints];
}

- (void)updateForFollowingFeedVisibilityChanged {
[self removeViewsForHiddenFeed];
[self removeViewsForVisibleFeed];
[self.titleLabel removeFromSuperview];
[self configureHeaderViews];
[self applyHeaderConstraints];
}

#pragma mark - Setters

// Sets |followingFeedSortType| and recreates the sort menu to assign the active
Expand All @@ -274,6 +270,23 @@ - (void)setFollowingFeedSortType:(FollowingFeedSortType)followingFeedSortType {

#pragma mark - Private

- (void)configureHeaderViews {
if ([self.feedControlDelegate isFollowingFeedAvailable]) {
if ([self.feedControlDelegate shouldFeedBeVisible]) {
[self addViewsForVisibleFeed];
} else {
[self addViewsForHiddenFeed];
}

if (![self.ntpDelegate isGoogleDefaultSearchEngine]) {
[self addCustomSearchEngineView];
}
} else {
self.titleLabel = [self createTitleLabel];
[self.container addSubview:self.titleLabel];
}
}

// Creates sort menu with its content and active sort type.
- (UIMenu*)createSortMenu {
NSMutableArray<UIAction*>* sortActions = [NSMutableArray array];
Expand Down Expand Up @@ -317,7 +330,7 @@ - (void)configureMenuButton:(UIButton*)menuButton {
menuButton.accessibilityIdentifier = kNTPFeedHeaderMenuButtonIdentifier;
menuButton.accessibilityLabel =
l10n_util::GetNSString(IDS_IOS_DISCOVER_FEED_MENU_ACCESSIBILITY_LABEL);
if (IsWebChannelsEnabled()) {
if ([self.feedControlDelegate isFollowingFeedAvailable]) {
[menuButton setImage:DefaultSymbolTemplateWithPointSize(
kEllipsisFeedSymbol, kFeedSymbolPointSize)
forState:UIControlStateNormal];
Expand All @@ -341,7 +354,7 @@ - (void)configureMenuButton:(UIButton*)menuButton {

// Configures and returns the feed header's sorting button.
- (UIButton*)createSortButton {
DCHECK(IsWebChannelsEnabled());
DCHECK([self.feedControlDelegate isFollowingFeedAvailable]);

UIButton* sortButton = [[UIButton alloc] init];

Expand Down Expand Up @@ -496,7 +509,7 @@ - (void)applyHeaderConstraints {
constraintEqualToAnchor:self.container.centerYAnchor],
]];

if (IsWebChannelsEnabled()) {
if ([self.feedControlDelegate isFollowingFeedAvailable]) {
[self.feedHeaderConstraints addObjectsFromArray:@[
// Set menu button size.
[self.menuButton.heightAnchor constraintEqualToConstant:kButtonSize],
Expand Down Expand Up @@ -734,7 +747,7 @@ - (void)onSegmentSelected:(UISegmentedControl*)segmentedControl {

// The title text for the Discover feed header based on user prefs.
- (NSString*)feedHeaderTitleText {
DCHECK(!IsWebChannelsEnabled());
DCHECK(![self.feedControlDelegate isFollowingFeedAvailable]);

// Set the title based on the default search engine.
NSString* feedHeaderTitleText =
Expand Down
3 changes: 3 additions & 0 deletions ios/chrome/browser/ui/ntp/new_tab_page_content_delegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
// Reloads content suggestions collection view.
- (void)reloadContentSuggestions;

// YES if the content requires the header to stick while scrolling.
- (BOOL)isContentHeaderSticky;

@end

#endif // IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_CONTENT_DELEGATE_H_
30 changes: 24 additions & 6 deletions ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,9 @@ - (void)constrainDiscoverHeaderMenuButtonNamedGuide {
}

- (void)updateFollowingFeedHasUnseenContent:(BOOL)hasUnseenContent {
DCHECK(IsWebChannelsEnabled());
if (![self isFollowingFeedAvailable]) {
return;
}
if ([self doesFollowingFeedHaveContent]) {
[self.feedHeaderViewController
updateFollowingSegmentDotForUnseenContent:hasUnseenContent];
Expand All @@ -594,7 +596,7 @@ - (void)ntpDidChangeVisibility:(BOOL)visible {
if (!self.browser->GetBrowserState()->IsOffTheRecord()) {
if (visible && self.started) {
[self.contentSuggestionsCoordinator configureStartSurfaceIfNeeded];
if (IsWebChannelsEnabled()) {
if ([self isFollowingFeedAvailable]) {
self.ntpViewController.shouldScrollIntoFeed = self.shouldScrollIntoFeed;
self.shouldScrollIntoFeed = NO;
// Reassign the sort type in case it changed in another tab.
Expand All @@ -613,7 +615,7 @@ - (void)ntpDidChangeVisibility:(BOOL)visible {
#pragma mark - FeedControlDelegate

- (void)handleFeedSelected:(FeedType)feedType {
DCHECK(IsWebChannelsEnabled());
DCHECK([self isFollowingFeedAvailable]);

// Saves scroll position before changing feed.
CGFloat scrollPosition = [self.ntpViewController scrollPosition];
Expand All @@ -638,7 +640,7 @@ - (void)handleFeedSelected:(FeedType)feedType {
}

- (void)handleSortTypeForFollowingFeed:(FollowingFeedSortType)sortType {
DCHECK(IsWebChannelsEnabled());
DCHECK([self isFollowingFeedAvailable]);
self.prefService->SetInteger(prefs::kNTPFollowingFeedSortType, sortType);
self.discoverFeedService->SetFollowingFeedSortType(sortType);
self.feedHeaderViewController.followingFeedSortType = sortType;
Expand All @@ -649,6 +651,11 @@ - (BOOL)shouldFeedBeVisible {
!IsFeedAblationEnabled();
}

- (BOOL)isFollowingFeedAvailable {
return IsWebChannelsEnabled() &&
self.authService->HasPrimaryIdentity(signin::ConsentLevel::kSignin);
}

#pragma mark - NewTabPageFollowDelegate

- (NSUInteger)followedPublisherCount {
Expand Down Expand Up @@ -699,7 +706,7 @@ - (void)openFeedMenu {

// Items for signed-in users.
if (self.authService->HasPrimaryIdentity(signin::ConsentLevel::kSignin)) {
if (IsWebChannelsEnabled()) {
if ([self isFollowingFeedAvailable]) {
[self.alertCoordinator
addItemWithTitle:l10n_util::GetNSString(
IDS_IOS_DISCOVER_FEED_MENU_MANAGE_ITEM)
Expand Down Expand Up @@ -824,6 +831,13 @@ - (void)returnToRecentTabWasAdded {
- (void)discoverFeedModelWasCreated {
if (self.ntpViewController.viewDidAppear) {
[self updateNTPForFeed];

if (IsWebChannelsEnabled()) {
[self.feedHeaderViewController updateForFollowingFeedVisibilityChanged];
[self.ntpViewController updateNTPLayout];
[self updateFeedLayout];
[self.ntpViewController setContentOffsetToTop];
}
} else {
// If the NTP hasn't been completely configured (which happens by the time
// its view has appeared) just refresh the feed instead of updating the
Expand Down Expand Up @@ -936,6 +950,10 @@ - (void)reloadContentSuggestions {
[self.contentSuggestionsCoordinator reload];
}

- (BOOL)isContentHeaderSticky {
return [self isFollowingFeedAvailable];
}

#pragma mark - PrefObserverDelegate

- (void)onPreferenceChanged:(const std::string&)preferenceName {
Expand Down Expand Up @@ -1023,7 +1041,7 @@ - (void)configureFeedAndHeader {
[FeedModelConfiguration discoverFeedModelConfiguration];
self.discoverFeedService->CreateFeedModel(discoverFeedConfiguration);

if (IsWebChannelsEnabled()) {
if ([self isFollowingFeedAvailable]) {
FeedModelConfiguration* followingFeedConfiguration =
[FeedModelConfiguration
followingModelConfigurationWithSortType:
Expand Down
3 changes: 2 additions & 1 deletion ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,8 @@ - (void)handleStickyElementsForScrollPosition:(CGFloat)scrollPosition
}

// Handles the sticky feed header.
if (IsWebChannelsEnabled() && self.feedHeaderViewController) {
if ([self.ntpContentDelegate isContentHeaderSticky] &&
self.feedHeaderViewController) {
if ((!self.isScrolledIntoFeed || force) &&
scrollPosition > [self offsetWhenScrolledIntoFeed]) {
[self setIsScrolledIntoFeed:YES];
Expand Down

0 comments on commit c2ea4c2

Please sign in to comment.