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

Unified Diff: ios/chrome/browser/ui/ntp/recent_tabs/views/session_section_header_view.mm

Issue 2589803002: Upstream Chrome on iOS source code [6/11]. (Closed)
Patch Set: Created 4 years 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/ntp/recent_tabs/views/session_section_header_view.mm
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/views/session_section_header_view.mm b/ios/chrome/browser/ui/ntp/recent_tabs/views/session_section_header_view.mm
new file mode 100644
index 0000000000000000000000000000000000000000..eeea4f0053cee78b14cc96f95226d5362078ef1e
--- /dev/null
+++ b/ios/chrome/browser/ui/ntp/recent_tabs/views/session_section_header_view.mm
@@ -0,0 +1,190 @@
+// Copyright 2014 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.
+
+#include "ios/chrome/browser/ui/ntp/recent_tabs/views/session_section_header_view.h"
+
+#include "base/logging.h"
+#include "base/strings/sys_string_conversions.h"
+#include "ios/chrome/browser/ui/ntp/recent_tabs/synced_sessions.h"
+#include "ios/chrome/browser/ui/ntp/recent_tabs/views/disclosure_view.h"
+#include "ios/chrome/browser/ui/ntp/recent_tabs/views/views_utils.h"
+#include "ios/chrome/browser/ui/rtl_geometry.h"
+#import "ios/chrome/browser/ui/uikit_ui_util.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
+#import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoFontLoader.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+#include "ui/base/l10n/time_format.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+
+// Desired height of the view.
+const CGFloat kDesiredHeight = 72;
+
+// The UI displays relative time for up to this number of hours and then
+// switches to absolute values.
+const int kRelativeTimeMaxHours = 4;
+
+} // namespace
+
+@interface SessionSectionHeaderView () {
+ UIImageView* _deviceIcon;
+ UILabel* _nameLabel;
+ UILabel* _timeLabel;
+ DisclosureView* _disclosureView;
+}
+
+// Returns a relative string (e.g. 15 mins ago) if the time passed in is within
+// the last 4 hours. Returns the full formatted time in short style otherwise.
+- (NSString*)relativeTimeStringForTime:(base::Time)time;
+
+@end
+
+@implementation SessionSectionHeaderView
+
+- (instancetype)initWithFrame:(CGRect)aRect sectionIsCollapsed:(BOOL)collapsed {
+ self = [super initWithFrame:aRect];
+ if (self) {
+ _deviceIcon = [[UIImageView alloc] initWithImage:nil];
+ [_deviceIcon setTranslatesAutoresizingMaskIntoConstraints:NO];
+
+ _nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+ [_nameLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [_nameLabel setHighlightedTextColor:[_nameLabel textColor]];
+ [_nameLabel setTextAlignment:NSTextAlignmentNatural];
+ [_nameLabel
+ setFont:[[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16]];
+ [_nameLabel setBackgroundColor:[UIColor whiteColor]];
+ [_nameLabel
+ setContentCompressionResistancePriority:UILayoutPriorityDefaultLow
+ forAxis:
+ UILayoutConstraintAxisHorizontal];
+
+ _timeLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+ [_timeLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [_timeLabel setTextAlignment:NSTextAlignmentNatural];
+ [_timeLabel setFont:[MDCTypography captionFont]];
+ [_timeLabel setHighlightedTextColor:[_timeLabel textColor]];
+ [_timeLabel setBackgroundColor:[UIColor whiteColor]];
+
+ _disclosureView = [[DisclosureView alloc] init];
+ [_disclosureView setTranslatesAutoresizingMaskIntoConstraints:NO];
+
+ [self addSubview:_deviceIcon];
+ [self addSubview:_nameLabel];
+ [self addSubview:_timeLabel];
+ [self addSubview:_disclosureView];
+
+ NSDictionary* viewsDictionary = @{
+ @"deviceIcon" : _deviceIcon,
+ @"nameLabel" : _nameLabel,
+ @"timeLabel" : _timeLabel,
+ @"disclosureView" : _disclosureView,
+ };
+
+ NSArray* constraints = @[
+ @"H:|-16-[deviceIcon]-16-[nameLabel]-(>=16)-[disclosureView]-16-|",
+ @"V:|-16-[nameLabel]-5-[timeLabel]-16-|",
+ @"H:[deviceIcon]-16-[timeLabel]",
+ ];
+ ApplyVisualConstraintsWithOptions(constraints, viewsDictionary,
+ LayoutOptionForRTLSupport(), self);
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:_disclosureView
+ attribute:NSLayoutAttributeCenterY
+ relatedBy:NSLayoutRelationEqual
+ toItem:self
+ attribute:NSLayoutAttributeCenterY
+ multiplier:1.0
+ constant:0]];
+ [self addConstraint:[NSLayoutConstraint
+ constraintWithItem:_deviceIcon
+ attribute:NSLayoutAttributeCenterY
+ relatedBy:NSLayoutRelationEqual
+ toItem:_nameLabel
+ attribute:NSLayoutAttributeCenterY
+ multiplier:1.0
+ constant:0]];
+ [self setSectionIsCollapsed:collapsed animated:NO];
+ }
+ // TODO(jif): Add timer that refreshes the time label.
+ return self;
+}
+
+- (void)updateWithSession:
+ (synced_sessions::DistantSession const*)distantSession {
+ NSString* imageName = nil;
+ switch (distantSession->device_type) {
+ case sync_sessions::SyncedSession::TYPE_PHONE:
+ imageName = @"ntp_opentabs_phone";
+ break;
+ case sync_sessions::SyncedSession::TYPE_TABLET:
+ imageName = @"ntp_opentabs_tablet";
+ break;
+ default:
+ imageName = @"ntp_opentabs_laptop";
+ break;
+ }
+ [_deviceIcon
+ setImage:[[UIImage imageNamed:imageName]
+ imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
+ [_nameLabel setText:base::SysUTF8ToNSString(distantSession->name)];
+
+ NSDate* lastUsedDate = [NSDate
+ dateWithTimeIntervalSince1970:distantSession->modified_time.ToTimeT()];
+ NSString* timeString =
+ [self relativeTimeStringForTime:distantSession->modified_time];
+ NSString* dateString =
+ [NSDateFormatter localizedStringFromDate:lastUsedDate
+ dateStyle:NSDateFormatterShortStyle
+ timeStyle:NSDateFormatterNoStyle];
+ NSString* timeDateString =
+ [NSString stringWithFormat:@"%@ %@", timeString, dateString];
+
+ [_timeLabel setText:l10n_util::GetNSStringF(
+ IDS_IOS_OPEN_TABS_LAST_USED,
+ base::SysNSStringToUTF16(timeDateString))];
+}
+
+- (NSString*)relativeTimeStringForTime:(base::Time)time {
+ base::TimeDelta last_used_delta;
+ if (base::Time::Now() > time)
+ last_used_delta = base::Time::Now() - time;
+ if (last_used_delta.ToInternalValue() < base::Time::kMicrosecondsPerMinute)
+ return l10n_util::GetNSString(IDS_IOS_OPEN_TABS_RECENTLY_SYNCED);
+ if (last_used_delta.InHours() < kRelativeTimeMaxHours) {
+ return SysUTF16ToNSString(
+ ui::TimeFormat::Simple(ui::TimeFormat::FORMAT_ELAPSED,
+ ui::TimeFormat::LENGTH_SHORT, last_used_delta));
+ }
+ NSDate* date = [NSDate dateWithTimeIntervalSince1970:time.ToTimeT()];
+ return [NSDateFormatter localizedStringFromDate:date
+ dateStyle:NSDateFormatterNoStyle
+ timeStyle:NSDateFormatterShortStyle];
+}
+
++ (CGFloat)desiredHeightInUITableViewCell {
+ return kDesiredHeight;
+}
+
+#pragma mark - HeaderOfCollapsableSectionProtocol
+
+- (void)setSectionIsCollapsed:(BOOL)collapsed animated:(BOOL)animated {
+ [_disclosureView setTransformWhenCollapsed:collapsed animated:animated];
+ UIColor* tintColor = (collapsed ? recent_tabs::GetIconColorGray()
+ : recent_tabs::GetIconColorBlue());
+ [self setTintColor:tintColor];
+ UIColor* textColor = (collapsed ? recent_tabs::GetTextColorGray()
+ : recent_tabs::GetTextColorBlue());
+ [_nameLabel setTextColor:textColor];
+ UIColor* subtitleColor = (collapsed ? recent_tabs::GetSubtitleColorGray()
+ : recent_tabs::GetSubtitleColorBlue());
+ [_timeLabel setTextColor:subtitleColor];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698