Start implementing conversation screen redesign

pull/68/head
Niels Andriesse 6 years ago
parent 34b5b000a4
commit a8ad23fdfe

@ -571,6 +571,7 @@
B82B408C239A068800A248E7 /* RegisterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B408B239A068800A248E7 /* RegisterVC.swift */; }; B82B408C239A068800A248E7 /* RegisterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B408B239A068800A248E7 /* RegisterVC.swift */; };
B82B408E239DC00D00A248E7 /* DisplayNameVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B408D239DC00D00A248E7 /* DisplayNameVC.swift */; }; B82B408E239DC00D00A248E7 /* DisplayNameVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B408D239DC00D00A248E7 /* DisplayNameVC.swift */; };
B82B4090239DD75000A248E7 /* RestoreVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B408F239DD75000A248E7 /* RestoreVC.swift */; }; B82B4090239DD75000A248E7 /* RestoreVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B408F239DD75000A248E7 /* RestoreVC.swift */; };
B82B4094239DF15900A248E7 /* ConversationTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82B4093239DF15900A248E7 /* ConversationTitleView.swift */; };
B846365B22B7418B00AF1514 /* Identicon+ObjC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B846365A22B7418B00AF1514 /* Identicon+ObjC.swift */; }; B846365B22B7418B00AF1514 /* Identicon+ObjC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B846365A22B7418B00AF1514 /* Identicon+ObjC.swift */; };
B84664F5235022F30083A1CD /* MentionUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84664F4235022F30083A1CD /* MentionUtilities.swift */; }; B84664F5235022F30083A1CD /* MentionUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84664F4235022F30083A1CD /* MentionUtilities.swift */; };
B86BD08423399ACF000F5AE3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08323399ACF000F5AE3 /* Modal.swift */; }; B86BD08423399ACF000F5AE3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08323399ACF000F5AE3 /* Modal.swift */; };
@ -1405,6 +1406,7 @@
B82B408B239A068800A248E7 /* RegisterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterVC.swift; sourceTree = "<group>"; }; B82B408B239A068800A248E7 /* RegisterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterVC.swift; sourceTree = "<group>"; };
B82B408D239DC00D00A248E7 /* DisplayNameVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayNameVC.swift; sourceTree = "<group>"; }; B82B408D239DC00D00A248E7 /* DisplayNameVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayNameVC.swift; sourceTree = "<group>"; };
B82B408F239DD75000A248E7 /* RestoreVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestoreVC.swift; sourceTree = "<group>"; }; B82B408F239DD75000A248E7 /* RestoreVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestoreVC.swift; sourceTree = "<group>"; };
B82B4093239DF15900A248E7 /* ConversationTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationTitleView.swift; sourceTree = "<group>"; };
B846365A22B7418B00AF1514 /* Identicon+ObjC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Identicon+ObjC.swift"; sourceTree = "<group>"; }; B846365A22B7418B00AF1514 /* Identicon+ObjC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Identicon+ObjC.swift"; sourceTree = "<group>"; };
B84664F4235022F30083A1CD /* MentionUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MentionUtilities.swift; sourceTree = "<group>"; }; B84664F4235022F30083A1CD /* MentionUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MentionUtilities.swift; sourceTree = "<group>"; };
B86BD08323399ACF000F5AE3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = "<group>"; }; B86BD08323399ACF000F5AE3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = "<group>"; };
@ -2798,6 +2800,7 @@
B8CCF63D2397580E0091D419 /* View Controllers */ = { B8CCF63D2397580E0091D419 /* View Controllers */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
B82B4093239DF15900A248E7 /* ConversationTitleView.swift */,
B885D5F3233491AB00EE0D8E /* DeviceLinkingModal.swift */, B885D5F3233491AB00EE0D8E /* DeviceLinkingModal.swift */,
B894D0702339D6F300B4D94D /* DeviceLinkingModalDelegate.swift */, B894D0702339D6F300B4D94D /* DeviceLinkingModalDelegate.swift */,
B80C6B562384A56D00FDBC8B /* DeviceLinksVC.swift */, B80C6B562384A56D00FDBC8B /* DeviceLinksVC.swift */,
@ -4003,6 +4006,7 @@
340FC8BB204DAC8D007AEB0F /* OWSAddToContactViewController.m in Sources */, 340FC8BB204DAC8D007AEB0F /* OWSAddToContactViewController.m in Sources */,
45F32C232057297A00A300D5 /* MediaPageViewController.swift in Sources */, 45F32C232057297A00A300D5 /* MediaPageViewController.swift in Sources */,
452C468F1E427E200087B011 /* OutboundCallInitiator.swift in Sources */, 452C468F1E427E200087B011 /* OutboundCallInitiator.swift in Sources */,
B82B4094239DF15900A248E7 /* ConversationTitleView.swift in Sources */,
34D2CCDA2062E7D000CB1A14 /* OWSScreenLockUI.m in Sources */, 34D2CCDA2062E7D000CB1A14 /* OWSScreenLockUI.m in Sources */,
45F170BB1E2FC5D3003FC1F2 /* CallAudioService.swift in Sources */, 45F170BB1E2FC5D3003FC1F2 /* CallAudioService.swift in Sources */,
4CA46F4C219CCC630038ABDE /* CaptionView.swift in Sources */, 4CA46F4C219CCC630038ABDE /* CaptionView.swift in Sources */,

@ -0,0 +1,89 @@
@objc final class ConversationTitleView : UIView {
private let thread: TSThread
// MARK: Components
private lazy var titleLabel: UILabel = {
let result = UILabel()
result.textColor = Colors.text
result.font = .boldSystemFont(ofSize: Values.mediumFontSize)
result.lineBreakMode = .byTruncatingTail
return result
}()
private lazy var subtitleLabel: UILabel = {
let result = UILabel()
result.textColor = Colors.text
result.font = .systemFont(ofSize: Values.smallFontSize)
result.lineBreakMode = .byTruncatingTail
return result
}()
// MARK: Lifecycle
@objc init(thread: TSThread) {
self.thread = thread
super.init(frame: CGRect.zero)
setUpViewHierarchy()
update()
NotificationCenter.default.addObserver(self, selector: #selector(handleProfileChangedNotification(_:)), name: NSNotification.Name(rawValue: kNSNotificationName_OtherUsersProfileDidChange), object: nil)
}
override init(frame: CGRect) {
preconditionFailure("Use init(thread:) instead.")
}
required init?(coder: NSCoder) {
preconditionFailure("Use init(thread:) instead.")
}
private func setUpViewHierarchy() {
let stackView = UIStackView(arrangedSubviews: [ titleLabel, subtitleLabel ])
stackView.axis = .vertical
stackView.alignment = .center
stackView.layoutMargins = UIEdgeInsets(top: 4, left: 8, bottom: 4, right: 0) // Compensate for settings button trailing margin
stackView.isLayoutMarginsRelativeArrangement = true
addSubview(stackView)
stackView.pin(to: self)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
// MARK: Updating
private func update() {
let title: String
if thread.isGroupThread() {
if thread.name().isEmpty {
title = NSLocalizedString("New Group", comment: "")
} else {
title = thread.name()
}
} else {
if thread.isNoteToSelf() {
title = NSLocalizedString("Note to Self", comment: "")
} else {
let hexEncodedPublicKey = thread.contactIdentifier()!
title = DisplayNameUtilities.getPrivateChatDisplayName(for: hexEncodedPublicKey) ?? hexEncodedPublicKey
}
}
titleLabel.text = title
let subtitle = NSMutableAttributedString()
if thread.isMuted {
subtitle.append(NSAttributedString(string: "\u{e067} ", attributes: [ .font : UIFont.ows_elegantIconsFont(10), .foregroundColor : Colors.unimportant ]))
}
subtitle.append(NSAttributedString(string: "26 members")) // TODO: Implement
subtitleLabel.attributedText = subtitle
}
@objc private func handleProfileChangedNotification(_ notification: Notification) {
guard let hexEncodedPublicKey = notification.userInfo?[kNSNotificationKey_ProfileRecipientId] as? String, let thread = self.thread as? TSContactThread,
hexEncodedPublicKey == thread.contactIdentifier() else { return }
update()
}
// MARK: Layout
public override var intrinsicContentSize: CGSize {
return UIView.layoutFittingExpandedSize
}
}

@ -16,18 +16,20 @@
[self updateTableContents]; [self updateTableContents];
// Loki: Set gradient background
self.tableView.backgroundColor = UIColor.clearColor;
LKGradient *gradient = LKGradients.defaultLokiBackground; LKGradient *gradient = LKGradients.defaultLokiBackground;
self.view.backgroundColor = UIColor.clearColor; self.view.backgroundColor = UIColor.clearColor;
[self.view setGradient:gradient]; [self.view setGradient:gradient];
self.tableView.backgroundColor = UIColor.clearColor; // Loki: Set navigation bar background color
UINavigationBar *navigationBar = self.navigationController.navigationBar; UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
navigationBar.shadowImage = [UIImage new]; navigationBar.shadowImage = [UIImage new];
[navigationBar setTranslucent:NO]; [navigationBar setTranslucent:NO];
navigationBar.barTintColor = LKColors.navigationBarBackground; navigationBar.barTintColor = LKColors.navigationBarBackground;
// Loki: Customize title
UILabel *titleLabel = [UILabel new]; UILabel *titleLabel = [UILabel new];
titleLabel.text = NSLocalizedString(@"Content", @""); titleLabel.text = NSLocalizedString(@"Content", @"");
titleLabel.textColor = LKColors.text; titleLabel.textColor = LKColors.text;

@ -19,24 +19,27 @@
[self updateTableContents]; [self updateTableContents];
// Loki: Set gradient background
self.tableView.backgroundColor = UIColor.clearColor;
LKGradient *gradient = LKGradients.defaultLokiBackground; LKGradient *gradient = LKGradients.defaultLokiBackground;
self.view.backgroundColor = UIColor.clearColor; self.view.backgroundColor = UIColor.clearColor;
[self.view setGradient:gradient]; [self.view setGradient:gradient];
self.tableView.backgroundColor = UIColor.clearColor; // Loki: Set navigation bar background color
UINavigationBar *navigationBar = self.navigationController.navigationBar; UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
navigationBar.shadowImage = [UIImage new]; navigationBar.shadowImage = [UIImage new];
[navigationBar setTranslucent:NO]; [navigationBar setTranslucent:NO];
navigationBar.barTintColor = LKColors.navigationBarBackground; navigationBar.barTintColor = LKColors.navigationBarBackground;
// Loki: Customize title
UILabel *titleLabel = [UILabel new]; UILabel *titleLabel = [UILabel new];
titleLabel.text = NSLocalizedString(@"Notifications", @""); titleLabel.text = NSLocalizedString(@"Notifications", @"");
titleLabel.textColor = LKColors.text; titleLabel.textColor = LKColors.text;
titleLabel.font = [UIFont boldSystemFontOfSize:LKValues.veryLargeFontSize]; titleLabel.font = [UIFont boldSystemFontOfSize:LKValues.veryLargeFontSize];
self.navigationItem.titleView = titleLabel; self.navigationItem.titleView = titleLabel;
// Loki: Set up back button
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", "") style:UIBarButtonItemStylePlain target:nil action:nil]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", "") style:UIBarButtonItemStylePlain target:nil action:nil];
backButton.tintColor = LKColors.text; backButton.tintColor = LKColors.text;
self.navigationItem.backBarButtonItem = backButton; self.navigationItem.backBarButtonItem = backButton;

@ -38,18 +38,20 @@ NS_ASSUME_NONNULL_BEGIN
[self updateTableContents]; [self updateTableContents];
[self updateNavigationItems]; [self updateNavigationItems];
// Loki: Set gradient background
self.tableView.backgroundColor = UIColor.clearColor;
LKGradient *gradient = LKGradients.defaultLokiBackground; LKGradient *gradient = LKGradients.defaultLokiBackground;
self.view.backgroundColor = UIColor.clearColor; self.view.backgroundColor = UIColor.clearColor;
[self.view setGradient:gradient]; [self.view setGradient:gradient];
self.tableView.backgroundColor = UIColor.clearColor; // Loki: Set navigation bar background color
UINavigationBar *navigationBar = self.navigationController.navigationBar; UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
navigationBar.shadowImage = [UIImage new]; navigationBar.shadowImage = [UIImage new];
[navigationBar setTranslucent:NO]; [navigationBar setTranslucent:NO];
navigationBar.barTintColor = LKColors.navigationBarBackground; navigationBar.barTintColor = LKColors.navigationBarBackground;
// Loki: Customize title
UILabel *titleLabel = [UILabel new]; UILabel *titleLabel = [UILabel new];
titleLabel.text = NSLocalizedString(@"Sound", @""); titleLabel.text = NSLocalizedString(@"Sound", @"");
titleLabel.textColor = LKColors.text; titleLabel.textColor = LKColors.text;

@ -29,18 +29,20 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
[self updateTableContents]; [self updateTableContents];
// Loki: Set gradient background
self.tableView.backgroundColor = UIColor.clearColor;
LKGradient *gradient = LKGradients.defaultLokiBackground; LKGradient *gradient = LKGradients.defaultLokiBackground;
self.view.backgroundColor = UIColor.clearColor; self.view.backgroundColor = UIColor.clearColor;
[self.view setGradient:gradient]; [self.view setGradient:gradient];
self.tableView.backgroundColor = UIColor.clearColor; // Loki: Set navigation bar background color
UINavigationBar *navigationBar = self.navigationController.navigationBar; UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
navigationBar.shadowImage = [UIImage new]; navigationBar.shadowImage = [UIImage new];
[navigationBar setTranslucent:NO]; [navigationBar setTranslucent:NO];
navigationBar.barTintColor = LKColors.navigationBarBackground; navigationBar.barTintColor = LKColors.navigationBarBackground;
// Loki: Customize title
UILabel *titleLabel = [UILabel new]; UILabel *titleLabel = [UILabel new];
titleLabel.text = NSLocalizedString(@"Privacy", @""); titleLabel.text = NSLocalizedString(@"Privacy", @"");
titleLabel.textColor = LKColors.text; titleLabel.textColor = LKColors.text;

@ -38,13 +38,13 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithFrame:(CGRect)frame - (instancetype)initWithFrame:(CGRect)frame
{ {
if (self = [super initWithFrame:frame]) { if (self = [super initWithFrame:frame]) {
[self commontInit]; [self commonInit];
} }
return self; return self;
} }
- (void)commontInit - (void)commonInit
{ {
// Ensure only called once. // Ensure only called once.
OWSAssertDebug(!self.messageBubbleView); OWSAssertDebug(!self.messageBubbleView);

@ -119,7 +119,6 @@ typedef enum : NSUInteger {
ContactsViewHelperDelegate, ContactsViewHelperDelegate,
DisappearingTimerConfigurationViewDelegate, DisappearingTimerConfigurationViewDelegate,
OWSConversationSettingsViewDelegate, OWSConversationSettingsViewDelegate,
ConversationHeaderViewDelegate,
ConversationViewLayoutDelegate, ConversationViewLayoutDelegate,
ConversationViewCellDelegate, ConversationViewCellDelegate,
ConversationInputTextViewDelegate, ConversationInputTextViewDelegate,
@ -160,7 +159,7 @@ typedef enum : NSUInteger {
@property (nonatomic, nullable) NSTimer *readTimer; @property (nonatomic, nullable) NSTimer *readTimer;
@property (nonatomic) NSCache *cellMediaCache; @property (nonatomic) NSCache *cellMediaCache;
@property (nonatomic) ConversationHeaderView *headerView; @property (nonatomic) ConversationTitleView *headerView;
@property (nonatomic, nullable) UIView *bannerView; @property (nonatomic, nullable) UIView *bannerView;
@property (nonatomic, nullable) OWSDisappearingMessagesConfiguration *disappearingMessagesConfiguration; @property (nonatomic, nullable) OWSDisappearingMessagesConfiguration *disappearingMessagesConfiguration;
@ -435,10 +434,6 @@ typedef enum : NSUInteger {
NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId]; NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId];
OWSAssertDebug(recipientId.length > 0); OWSAssertDebug(recipientId.length > 0);
if (recipientId.length > 0 && [self.thread.recipientIdentifiers containsObject:recipientId]) { if (recipientId.length > 0 && [self.thread.recipientIdentifiers containsObject:recipientId]) {
if ([self.thread isKindOfClass:[TSContactThread class]]) {
// update title with profile name
[self updateNavigationTitle];
}
if (self.isGroupConversation) { if (self.isGroupConversation) {
// Reload all cells if this is a group conversation, // Reload all cells if this is a group conversation,
@ -477,7 +472,6 @@ typedef enum : NSUInteger {
{ {
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
[self updateNavigationBarSubtitleLabel];
[self ensureBannerState]; [self ensureBannerState];
} }
@ -627,16 +621,26 @@ typedef enum : NSUInteger {
[self applyTheme]; [self applyTheme];
[self.conversationViewModel viewDidLoad]; [self.conversationViewModel viewDidLoad];
// Loki: Track events // Loki: Set gradient background
if (self.thread.isGroupThread) { self.collectionView.backgroundColor = UIColor.clearColor;
if (self.isRSSFeed) { LKGradient *gradient = LKGradients.defaultLokiBackground;
[LKAnalytics.shared track:@"RSS Feed Opened"]; self.view.backgroundColor = UIColor.clearColor;
} else { [self.view setGradient:gradient];
[LKAnalytics.shared track:@"Loki Public Chat Opened"];
} // Loki: Set navigation bar background color
} else { UINavigationBar *navigationBar = self.navigationController.navigationBar;
[LKAnalytics.shared track:@"Conversation Opened"]; [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
} navigationBar.shadowImage = [UIImage new];
[navigationBar setTranslucent:NO];
navigationBar.barTintColor = LKColors.navigationBarBackground;
// Loki: Set up navigation bar buttons
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", "") style:UIBarButtonItemStylePlain target:nil action:nil];
backButton.tintColor = LKColors.text;
self.navigationItem.backBarButtonItem = backButton;
UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Gear"] style:UIBarButtonItemStylePlain target:self action:@selector(showConversationSettings)];
settingsButton.tintColor = LKColors.text;
self.navigationItem.rightBarButtonItem = settingsButton;
} }
- (void)createContents - (void)createContents
@ -803,7 +807,6 @@ typedef enum : NSUInteger {
[self updateDisappearingMessagesConfiguration]; [self updateDisappearingMessagesConfiguration];
[self updateBarButtonItems]; [self updateBarButtonItems];
[self updateNavigationTitle];
[self resetContentAndLayout]; [self resetContentAndLayout];
@ -1260,8 +1263,6 @@ typedef enum : NSUInteger {
[ProfileFetcherJob runWithThread:self.thread]; [ProfileFetcherJob runWithThread:self.thread];
[self markVisibleMessagesAsRead]; [self markVisibleMessagesAsRead];
[self startReadTimer]; [self startReadTimer];
[self updateNavigationBarSubtitleLabel];
[self updateBackButtonUnreadCount];
[self autoLoadMoreIfNecessary]; [self autoLoadMoreIfNecessary];
if (!self.viewHasEverAppeared) { if (!self.viewHasEverAppeared) {
@ -1376,60 +1377,12 @@ typedef enum : NSUInteger {
#pragma mark - Initiliazers #pragma mark - Initiliazers
- (void)updateNavigationTitle
{
NSAttributedString *name;
if (self.thread.isGroupThread) {
if (self.thread.name.length == 0) {
name = [[NSAttributedString alloc] initWithString:[MessageStrings newGroupDefaultTitle]];
} else {
name = [[NSAttributedString alloc] initWithString:self.thread.name];
}
} else {
OWSAssertDebug(self.thread.contactIdentifier);
if (self.thread.isNoteToSelf) {
name = [[NSAttributedString alloc]
initWithString:NSLocalizedString(@"NOTE_TO_SELF", @"Label for 1:1 conversation with yourself.")
attributes:@{
NSFontAttributeName : self.headerView.titlePrimaryFont,
}];
} else {
name = [self.contactsManager
attributedContactOrProfileNameForPhoneIdentifier:self.thread.contactIdentifier
primaryFont:self.headerView.titlePrimaryFont
secondaryFont:self.headerView.titleSecondaryFont];
}
}
self.title = nil;
if ([name isEqual:self.headerView.attributedTitle]) {
return;
}
self.headerView.attributedTitle = name;
}
- (void)createHeaderViews - (void)createHeaderViews
{ {
_backButtonUnreadCountView = [UIView new]; ConversationTitleView *headerView = [[ConversationTitleView alloc] initWithThread:self.thread];
_backButtonUnreadCountView.layer.cornerRadius = self.unreadCountViewDiameter / 2;
_backButtonUnreadCountView.backgroundColor = [UIColor redColor];
_backButtonUnreadCountView.hidden = YES;
_backButtonUnreadCountView.userInteractionEnabled = NO;
_backButtonUnreadCountLabel = [UILabel new];
_backButtonUnreadCountLabel.backgroundColor = [UIColor clearColor];
_backButtonUnreadCountLabel.textColor = [UIColor whiteColor];
_backButtonUnreadCountLabel.font = [UIFont systemFontOfSize:11];
_backButtonUnreadCountLabel.textAlignment = NSTextAlignmentCenter;
ConversationHeaderView *headerView =
[[ConversationHeaderView alloc] initWithThread:self.thread contactsManager:self.contactsManager];
self.headerView = headerView; self.headerView = headerView;
SET_SUBVIEW_ACCESSIBILITY_IDENTIFIER(self, headerView); SET_SUBVIEW_ACCESSIBILITY_IDENTIFIER(self, headerView);
headerView.delegate = self;
self.navigationItem.titleView = headerView; self.navigationItem.titleView = headerView;
if (@available(iOS 11, *)) { if (@available(iOS 11, *)) {
@ -1441,15 +1394,6 @@ typedef enum : NSUInteger {
CGRect headerFrame = CGRectMake(0, 0, screenSize.width, 44); CGRect headerFrame = CGRectMake(0, 0, screenSize.width, 44);
headerView.frame = headerFrame; headerView.frame = headerFrame;
} }
#ifdef USE_DEBUG_UI
[headerView addGestureRecognizer:[[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(navigationTitleLongPressed:)]];
#endif
[self updateNavigationBarSubtitleLabel];
} }
- (CGFloat)unreadCountViewDiameter - (CGFloat)unreadCountViewDiameter
@ -1480,9 +1424,6 @@ typedef enum : NSUInteger {
[_backButtonUnreadCountView addSubview:_backButtonUnreadCountLabel]; [_backButtonUnreadCountView addSubview:_backButtonUnreadCountLabel];
[_backButtonUnreadCountLabel autoPinWidthToSuperviewWithMargin:4]; [_backButtonUnreadCountLabel autoPinWidthToSuperviewWithMargin:4];
[_backButtonUnreadCountLabel autoPinHeightToSuperview]; [_backButtonUnreadCountLabel autoPinHeightToSuperview];
// Initialize newly created unread count badge to accurately reflect the current unread count.
[self updateBackButtonUnreadCount];
} }
self.navigationItem.leftBarButtonItem = backItem; self.navigationItem.leftBarButtonItem = backItem;
@ -1495,6 +1436,8 @@ typedef enum : NSUInteger {
- (void)updateBarButtonItems - (void)updateBarButtonItems
{ {
return; // Loki: Re-enable later?
self.navigationItem.hidesBackButton = NO; self.navigationItem.hidesBackButton = NO;
if (self.customBackButton) { if (self.customBackButton) {
self.navigationItem.leftBarButtonItem = self.customBackButton; self.navigationItem.leftBarButtonItem = self.customBackButton;
@ -1585,62 +1528,6 @@ typedef enum : NSUInteger {
self.navigationItem.rightBarButtonItems = [barButtons copy]; self.navigationItem.rightBarButtonItems = [barButtons copy];
} }
- (void)updateNavigationBarSubtitleLabel
{
BOOL hasCompactHeader = self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact;
if (hasCompactHeader) {
self.headerView.attributedSubtitle = nil;
return;
}
NSMutableAttributedString *subtitleText = [NSMutableAttributedString new];
UIColor *subtitleColor = [Theme.navbarTitleColor colorWithAlphaComponent:(CGFloat)0.9];
if (self.thread.isMuted) {
// Show a "mute" icon before the navigation bar subtitle if this thread is muted.
[subtitleText appendAttributedString:[[NSAttributedString alloc]
initWithString:LocalizationNotNeeded(@"\ue067 ")
attributes:@{
NSFontAttributeName : [UIFont ows_elegantIconsFont:7.f],
NSForegroundColorAttributeName : subtitleColor
}]];
}
BOOL isVerified = YES;
for (NSString *recipientId in self.thread.recipientIdentifiers) {
if ([[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId]
!= OWSVerificationStateVerified) {
isVerified = NO;
break;
}
}
if (isVerified) {
// Show a "checkmark" icon before the navigation bar subtitle if this thread is verified.
[subtitleText appendAttributedString:[[NSAttributedString alloc]
initWithString:LocalizationNotNeeded(@"\uf00c ")
attributes:@{
NSFontAttributeName : [UIFont ows_fontAwesomeFont:10.f],
NSForegroundColorAttributeName : subtitleColor,
}]];
}
[subtitleText
appendAttributedString:[[NSAttributedString alloc]
initWithString:NSLocalizedString(@"MESSAGES_VIEW_TITLE_SUBTITLE",
@"The subtitle for the messages view title indicates that the "
@"title can be tapped to access settings for this conversation.")
attributes:@{
NSFontAttributeName : self.headerView.subtitleFont,
NSForegroundColorAttributeName : subtitleColor,
}]];
if (!self.thread.isGroupThread) {
self.headerView.attributedSubtitle = subtitleText;
}
}
#pragma mark - Updating #pragma mark - Updating
- (void)updateInputToolbar { - (void)updateInputToolbar {
@ -3754,33 +3641,6 @@ typedef enum : NSUInteger {
} }
} }
#pragma mark Unread Badge
- (void)updateBackButtonUnreadCount
{
OWSAssertIsOnMainThread();
self.backButtonUnreadCount = [OWSMessageUtils.sharedManager unreadMessagesCountExcept:self.thread];
}
- (void)setBackButtonUnreadCount:(NSUInteger)unreadCount
{
OWSAssertIsOnMainThread();
if (_backButtonUnreadCount == unreadCount) {
// No need to re-render same count.
return;
}
_backButtonUnreadCount = unreadCount;
OWSAssertDebug(_backButtonUnreadCountView != nil);
_backButtonUnreadCountView.hidden = unreadCount <= 0;
OWSAssertDebug(_backButtonUnreadCountLabel != nil);
// Max out the unread count at 99+.
const NSUInteger kMaxUnreadCount = 99;
_backButtonUnreadCountLabel.text = [OWSFormat formatInt:(int)MIN(kMaxUnreadCount, unreadCount)];
}
#pragma mark 3D Touch Preview Actions #pragma mark 3D Touch Preview Actions
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems - (NSArray<id<UIPreviewActionItem>> *)previewActionItems
@ -4115,8 +3975,6 @@ typedef enum : NSUInteger {
// make sure toolbar extends below iPhoneX home button. // make sure toolbar extends below iPhoneX home button.
self.view.backgroundColor = Theme.toolbarBackgroundColor; self.view.backgroundColor = Theme.toolbarBackgroundColor;
self.collectionView.backgroundColor = Theme.backgroundColor; self.collectionView.backgroundColor = Theme.backgroundColor;
[self updateNavigationBarSubtitleLabel];
} }
#pragma mark - AttachmentApprovalViewControllerDelegate #pragma mark - AttachmentApprovalViewControllerDelegate
@ -4282,7 +4140,6 @@ typedef enum : NSUInteger {
- (void)conversationColorWasUpdated - (void)conversationColorWasUpdated
{ {
[self.conversationStyle updateProperties]; [self.conversationStyle updateProperties];
[self.headerView updateAvatar];
[self resetContentAndLayout]; [self resetContentAndLayout];
} }
@ -5083,8 +4940,6 @@ typedef enum : NSUInteger {
return; return;
} }
[self updateBackButtonUnreadCount];
[self updateNavigationBarSubtitleLabel];
[self dismissMenuActionsIfNecessary]; [self dismissMenuActionsIfNecessary];
[self updateInputToolbar]; [self updateInputToolbar];
@ -5092,7 +4947,6 @@ typedef enum : NSUInteger {
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { [self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
[self.thread reloadWithTransaction:transaction]; [self.thread reloadWithTransaction:transaction];
}]; }];
[self updateNavigationTitle];
} }
[self updateDisappearingMessagesConfiguration]; [self updateDisappearingMessagesConfiguration];
@ -5349,7 +5203,6 @@ typedef enum : NSUInteger {
{ {
[super traitCollectionDidChange:previousTraitCollection]; [super traitCollectionDidChange:previousTraitCollection];
[self updateNavigationBarSubtitleLabel];
[self ensureBannerState]; [self ensureBannerState];
[self updateBarButtonItems]; [self updateBarButtonItems];
} }

Loading…
Cancel
Save