session-ios/Session/Signal/OWSDeviceTableViewCell.m

86 lines
2.8 KiB
Objective-C

//
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import "OWSDeviceTableViewCell.h"
#import "DateUtil.h"
#import <SignalUtilitiesKit/OWSTableViewController.h>
#import <SignalUtilitiesKit/Theme.h>
#import <SignalUtilitiesKit/UIFont+OWS.h>
#import <SignalUtilitiesKit/UIView+OWS.h>
NS_ASSUME_NONNULL_BEGIN
@implementation OWSDeviceTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self configure];
}
return self;
}
- (void)configure
{
self.preservesSuperviewLayoutMargins = YES;
self.contentView.preservesSuperviewLayoutMargins = YES;
self.nameLabel = [UILabel new];
self.linkedLabel = [UILabel new];
self.lastSeenLabel = [UILabel new];
UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[
self.nameLabel,
self.linkedLabel,
self.lastSeenLabel,
]];
stackView.axis = UILayoutConstraintAxisVertical;
stackView.alignment = UIStackViewAlignmentLeading;
stackView.spacing = 2;
[self.contentView addSubview:stackView];
[stackView ows_autoPinToSuperviewMargins];
}
- (void)configureWithDevice:(OWSDevice *)device
{
OWSAssertDebug(device);
[OWSTableItem configureCell:self];
self.nameLabel.font = UIFont.ows_dynamicTypeBodyFont;
self.linkedLabel.font = UIFont.ows_dynamicTypeCaption1Font;
self.lastSeenLabel.font = UIFont.ows_dynamicTypeCaption1Font;
self.nameLabel.textColor = Theme.primaryColor;
self.linkedLabel.textColor = Theme.secondaryColor;
self.lastSeenLabel.textColor = Theme.secondaryColor;
self.nameLabel.text = device.displayName;
NSString *linkedFormatString
= NSLocalizedString(@"DEVICE_LINKED_AT_LABEL", @"{{Short Date}} when device was linked.");
self.linkedLabel.text =
[NSString stringWithFormat:linkedFormatString, [DateUtil.dateFormatter stringFromDate:device.createdAt]];
NSString *lastSeenFormatString = NSLocalizedString(
@"DEVICE_LAST_ACTIVE_AT_LABEL", @"{{Short Date}} when device last communicated with Signal Server.");
NSDate *displayedLastSeenAt;
// lastSeenAt is stored at day granularity. At midnight UTC.
// Making it likely that when you first link a device it will
// be "last seen" the day before it was created, which looks broken.
if ([device.lastSeenAt compare:device.createdAt] == NSOrderedDescending) {
displayedLastSeenAt = device.lastSeenAt;
} else {
displayedLastSeenAt = device.createdAt;
}
self.lastSeenLabel.text =
[NSString stringWithFormat:lastSeenFormatString, [DateUtil.dateFormatter stringFromDate:displayedLastSeenAt]];
}
@end
NS_ASSUME_NONNULL_END