Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(345)

Unified Diff: ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm

Issue 2761753002: Cleanup ContentSuggestions cells (Closed)
Patch Set: Fix tests Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
deleted file mode 100644
index 97fbcf2af42f69943194c5bcaa615b9b19343289..0000000000000000000000000000000000000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h"
-
-#include "base/time/time.h"
-#import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
-#import "ios/chrome/browser/ui/uikit_ui_util.h"
-#import "ios/chrome/browser/ui/util/i18n_string.h"
-#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
-#include "url/gurl.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-const CGFloat kImageSize = 72;
-// When updating this, make sure to update |layoutSubviews|.
-const CGFloat kStandardSpacing = 8;
-}
-
-@interface ContentSuggestionsArticleItem ()
-
-@property(nonatomic, copy) NSString* subtitle;
-// Used to check if the image has already been fetched. There is no way to
-// discriminate between failed image download and nonexitent image. The article
-// tries to download the image only once.
-@property(nonatomic, assign) BOOL imageFetched;
-
-@end
-
-#pragma mark - ContentSuggestionsArticleItem
-
-@implementation ContentSuggestionsArticleItem
-
-@synthesize title = _title;
-@synthesize subtitle = _subtitle;
-@synthesize image = _image;
-@synthesize articleURL = _articleURL;
-@synthesize publisher = _publisher;
-@synthesize publishDate = _publishDate;
-@synthesize suggestionIdentifier = _suggestionIdentifier;
-@synthesize delegate = _delegate;
-@synthesize imageFetched = _imageFetched;
-
-- (instancetype)initWithType:(NSInteger)type
- title:(NSString*)title
- subtitle:(NSString*)subtitle
- delegate:(id<ContentSuggestionsArticleItemDelegate>)delegate
- url:(const GURL&)url {
- self = [super initWithType:type];
- if (self) {
- self.cellClass = [ContentSuggestionsArticleCell class];
- _title = [title copy];
- _subtitle = [subtitle copy];
- _articleURL = url;
- _delegate = delegate;
- _image = [self emptyImageBackground];
- }
- return self;
-}
-
-- (void)configureCell:(ContentSuggestionsArticleCell*)cell {
- [super configureCell:cell];
- if (!self.imageFetched) {
- self.imageFetched = YES;
- // Fetch the image. During the fetch the cell's image should still be set.
- [self.delegate loadImageForArticleItem:self];
- }
- cell.titleLabel.text = self.title;
- cell.subtitleLabel.text = self.subtitle;
- cell.imageView.image = self.image;
- [cell setPublisherName:self.publisher date:self.publishDate];
-}
-
-#pragma mark - Private
-
-- (UIImage*)emptyImageBackground {
- // TODO(crbug.com/698171): Remove this function once we have real background
- // image.
- UIColor* color = [UIColor lightGrayColor];
- CGRect rect = CGRectMake(0, 0, 1, 1);
- UIGraphicsBeginImageContext(rect.size);
- [color setFill];
- UIRectFill(rect);
- UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return image;
-}
-
-@end
-
-#pragma mark - ContentSuggestionsArticleCell
-
-@interface ContentSuggestionsArticleCell ()
-
-@property(nonatomic, strong) UILabel* publisherLabel;
-
-// Applies the constraints on the elements. Called in the init.
-- (void)applyConstraints;
-
-@end
-
-@implementation ContentSuggestionsArticleCell
-
-@synthesize titleLabel = _titleLabel;
-@synthesize subtitleLabel = _subtitleLabel;
-@synthesize imageView = _imageView;
-@synthesize publisherLabel = _publisherLabel;
-
-- (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- _subtitleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- _imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
- _publisherLabel = [[UILabel alloc] initWithFrame:CGRectZero];
-
- _titleLabel.numberOfLines = 2;
- _subtitleLabel.numberOfLines = 0;
- [_subtitleLabel setContentHuggingPriority:UILayoutPriorityDefaultHigh
- forAxis:UILayoutConstraintAxisVertical];
- [_titleLabel setContentHuggingPriority:UILayoutPriorityDefaultHigh
- forAxis:UILayoutConstraintAxisVertical];
- _imageView.contentMode = UIViewContentModeScaleAspectFill;
- _imageView.clipsToBounds = YES;
-
- _imageView.translatesAutoresizingMaskIntoConstraints = NO;
- _titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
- _subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO;
- _publisherLabel.translatesAutoresizingMaskIntoConstraints = NO;
-
- [self.contentView addSubview:_imageView];
- [self.contentView addSubview:_titleLabel];
- [self.contentView addSubview:_subtitleLabel];
- [self.contentView addSubview:_publisherLabel];
-
- _titleLabel.font = [MDCTypography subheadFont];
- _subtitleLabel.font = [MDCTypography body1Font];
- _publisherLabel.font = [MDCTypography captionFont];
-
- _subtitleLabel.textColor = [[MDCPalette greyPalette] tint700];
- _publisherLabel.textColor = [[MDCPalette greyPalette] tint700];
-
- [self applyConstraints];
- }
- return self;
-}
-
-- (void)setPublisherName:(NSString*)publisherName date:(base::Time)publishDate {
- NSDate* date = [NSDate dateWithTimeIntervalSince1970:publishDate.ToDoubleT()];
- NSString* dateString =
- [NSDateFormatter localizedStringFromDate:date
- dateStyle:NSDateFormatterMediumStyle
- timeStyle:NSDateFormatterNoStyle];
-
- self.publisherLabel.text = AdjustStringForLocaleDirection(
- [NSString stringWithFormat:@"%@ - %@.", publisherName, dateString]);
-}
-
-#pragma mark - UIView
-
-// Implements -layoutSubviews as per instructions in documentation for
-// +[MDCCollectionViewCell cr_preferredHeightForWidth:forItem:].
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- // Adjust the text label preferredMaxLayoutWidth when the parent's width
- // changes, for instance on screen rotation.
- CGFloat parentWidth = CGRectGetWidth(self.contentView.bounds);
-
- self.titleLabel.preferredMaxLayoutWidth =
- parentWidth - kImageSize - 3 * kStandardSpacing;
- self.subtitleLabel.preferredMaxLayoutWidth =
- parentWidth - kImageSize - 3 * kStandardSpacing;
-
- // Re-layout with the new preferred width to allow the label to adjust its
- // height.
- [super layoutSubviews];
-}
-
-#pragma mark - Private
-
-- (void)applyConstraints {
- [NSLayoutConstraint activateConstraints:@[
- [_imageView.widthAnchor constraintEqualToConstant:kImageSize],
- [_imageView.heightAnchor constraintEqualToAnchor:_imageView.widthAnchor],
- [_publisherLabel.topAnchor
- constraintGreaterThanOrEqualToAnchor:_imageView.bottomAnchor
- constant:kStandardSpacing],
- [_publisherLabel.topAnchor
- constraintGreaterThanOrEqualToAnchor:_subtitleLabel.bottomAnchor
- constant:kStandardSpacing],
- ]];
-
- ApplyVisualConstraintsWithMetrics(
- @[
- @"H:|-(space)-[title]-(space)-[image]-(space)-|",
- @"H:|-(space)-[text]-(space)-[image]",
- @"V:|-[title]-[text]",
- @"V:|-[image]",
- @"H:|-[publish]-|",
- @"V:[publish]-|",
- ],
- @{
- @"image" : _imageView,
- @"title" : _titleLabel,
- @"text" : _subtitleLabel,
- @"publish" : _publisherLabel,
- },
- @{ @"space" : @(kStandardSpacing) });
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698