Merge branch 'charlesmchen/homeViewBlockIndicator'
This commit is contained in:
commit
195d721aa6
|
@ -1,5 +1,6 @@
|
||||||
// Created by Dylan Bourgeois on 27/10/14.
|
//
|
||||||
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import "TSThread.h"
|
#import "TSThread.h"
|
||||||
|
@ -12,17 +13,20 @@ typedef enum : NSUInteger { kArchiveState = 0, kInboxState = 1 } CellState;
|
||||||
|
|
||||||
@interface InboxTableViewCell : UITableViewCell <UIScrollViewDelegate>
|
@interface InboxTableViewCell : UITableViewCell <UIScrollViewDelegate>
|
||||||
|
|
||||||
@property (nonatomic, strong) IBOutlet UILabel *nameLabel;
|
@property (nonatomic) IBOutlet UILabel *nameLabel;
|
||||||
@property (nonatomic, strong) IBOutlet UILabel *snippetLabel;
|
@property (nonatomic) IBOutlet UILabel *snippetLabel;
|
||||||
@property (nonatomic, strong) IBOutlet UIImageView *contactPictureView;
|
@property (nonatomic) IBOutlet UIImageView *contactPictureView;
|
||||||
@property (nonatomic, strong) IBOutlet UILabel *timeLabel;
|
@property (nonatomic) IBOutlet UILabel *timeLabel;
|
||||||
@property (nonatomic, strong) IBOutlet UIView *contentContainerView;
|
@property (nonatomic) IBOutlet UIView *contentContainerView;
|
||||||
@property (nonatomic, retain) IBOutlet UIView *messageCounter;
|
@property (nonatomic) IBOutlet UIView *messageCounter;
|
||||||
@property (nonatomic, retain) NSString *threadId;
|
@property (nonatomic) NSString *threadId;
|
||||||
|
|
||||||
+ (instancetype)inboxTableViewCell;
|
+ (instancetype)inboxTableViewCell;
|
||||||
|
|
||||||
- (void)configureWithThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager;
|
- (void)configureWithThread:(TSThread *)thread
|
||||||
|
contactsManager:(OWSContactsManager *)contactsManager
|
||||||
|
blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet;
|
||||||
|
|
||||||
- (void)animateDisappear;
|
- (void)animateDisappear;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -6,13 +6,14 @@
|
||||||
#import "Environment.h"
|
#import "Environment.h"
|
||||||
#import "OWSAvatarBuilder.h"
|
#import "OWSAvatarBuilder.h"
|
||||||
#import "PropertyListPreferences.h"
|
#import "PropertyListPreferences.h"
|
||||||
|
#import "Signal-Swift.h"
|
||||||
#import "TSContactThread.h"
|
#import "TSContactThread.h"
|
||||||
#import "TSGroupThread.h"
|
#import "TSGroupThread.h"
|
||||||
#import "TSMessagesManager.h"
|
#import "TSMessagesManager.h"
|
||||||
#import "Util.h"
|
#import "Util.h"
|
||||||
#import "Signal-Swift.h"
|
|
||||||
#import <JSQMessagesViewController/JSQMessagesAvatarImageFactory.h>
|
#import <JSQMessagesViewController/JSQMessagesAvatarImageFactory.h>
|
||||||
#import <JSQMessagesViewController/UIImage+JSQMessages.h>
|
#import <JSQMessagesViewController/UIImage+JSQMessages.h>
|
||||||
|
#import <SignalServiceKit/OWSBlockingManager.h>
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@ -49,41 +50,56 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return NSStringFromClass(self.class);
|
return NSStringFromClass(self.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)configureWithThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager
|
- (void)configureWithThread:(TSThread *)thread
|
||||||
|
contactsManager:(OWSContactsManager *)contactsManager
|
||||||
|
blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet
|
||||||
{
|
{
|
||||||
if (!_threadId || ![_threadId isEqualToString:thread.uniqueId]) {
|
OWSAssert([NSThread isMainThread]);
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
OWSAssert(thread);
|
||||||
self.hidden = YES;
|
OWSAssert(contactsManager);
|
||||||
});
|
OWSAssert(blockedPhoneNumberSet);
|
||||||
|
|
||||||
|
BOOL isBlocked = NO;
|
||||||
|
if (!thread.isGroupThread) {
|
||||||
|
NSString *contactIdentifier = thread.contactIdentifier;
|
||||||
|
isBlocked = [blockedPhoneNumberSet containsObject:contactIdentifier];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString *name = thread.name;
|
NSString *name = thread.name;
|
||||||
if (name.length == 0 && [thread isKindOfClass:[TSGroupThread class]]) {
|
if (name.length == 0 && [thread isKindOfClass:[TSGroupThread class]]) {
|
||||||
name = NSLocalizedString(@"NEW_GROUP_DEFAULT_TITLE", @"");
|
name = NSLocalizedString(@"NEW_GROUP_DEFAULT_TITLE", @"");
|
||||||
}
|
}
|
||||||
UIImage *avatar = [OWSAvatarBuilder buildImageForThread:thread contactsManager:contactsManager];
|
|
||||||
self.threadId = thread.uniqueId;
|
self.threadId = thread.uniqueId;
|
||||||
NSString *snippetLabel = [[DisplayableTextFilter new] displayableText:thread.lastMessageLabel];
|
NSString *snippetLabel = (isBlocked ? NSLocalizedString(@"HOME_VIEW_BLOCKED_CONTACT_CONVERSATION",
|
||||||
|
@"A label for conversations with blocked users.")
|
||||||
|
: [[DisplayableTextFilter new] displayableText:thread.lastMessageLabel]);
|
||||||
|
|
||||||
NSAttributedString *attributedDate = [self dateAttributedString:thread.lastMessageDate];
|
NSAttributedString *attributedDate = [self dateAttributedString:thread.lastMessageDate];
|
||||||
NSUInteger unreadCount = [[TSMessagesManager sharedManager] unreadMessagesInThread:thread];
|
NSUInteger unreadCount = [[TSMessagesManager sharedManager] unreadMessagesInThread:thread];
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
self.nameLabel.text = name;
|
||||||
self.nameLabel.text = name;
|
self.snippetLabel.text = snippetLabel;
|
||||||
self.snippetLabel.text = snippetLabel;
|
self.timeLabel.attributedText = attributedDate;
|
||||||
self.timeLabel.attributedText = attributedDate;
|
self.contactPictureView.image = nil;
|
||||||
self.contactPictureView.image = avatar;
|
[UIUtil applyRoundedBorderToImageView:_contactPictureView];
|
||||||
[UIUtil applyRoundedBorderToImageView:_contactPictureView];
|
|
||||||
|
|
||||||
self.separatorInset = UIEdgeInsetsMake(0, _contactPictureView.frame.size.width * 1.5f, 0, 0);
|
self.separatorInset = UIEdgeInsetsMake(0, _contactPictureView.frame.size.width * 1.5f, 0, 0);
|
||||||
|
|
||||||
if (thread.hasUnreadMessages) {
|
if (thread.hasUnreadMessages) {
|
||||||
[self updateCellForUnreadMessage];
|
[self updateCellForUnreadMessage];
|
||||||
} else {
|
} else {
|
||||||
[self updateCellForReadMessage];
|
[self updateCellForReadMessage];
|
||||||
}
|
}
|
||||||
[self setUnreadMsgCount:unreadCount];
|
[self setUnreadMsgCount:unreadCount];
|
||||||
self.hidden = NO;
|
|
||||||
|
NSString *threadIdCopy = thread.uniqueId;
|
||||||
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||||
|
UIImage *avatar = [OWSAvatarBuilder buildImageForThread:thread contactsManager:contactsManager];
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
if ([_threadId isEqualToString:threadIdCopy]) {
|
||||||
|
self.contactPictureView.image = avatar;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#import "TSStorageManager.h"
|
#import "TSStorageManager.h"
|
||||||
#import "UIUtil.h"
|
#import "UIUtil.h"
|
||||||
#import "VersionMigrations.h"
|
#import "VersionMigrations.h"
|
||||||
|
#import <SignalServiceKit/OWSBlockingManager.h>
|
||||||
#import <SignalServiceKit/OWSMessageSender.h>
|
#import <SignalServiceKit/OWSMessageSender.h>
|
||||||
#import <SignalServiceKit/TSMessagesManager.h>
|
#import <SignalServiceKit/TSMessagesManager.h>
|
||||||
#import <SignalServiceKit/TSOutgoingMessage.h>
|
#import <SignalServiceKit/TSOutgoingMessage.h>
|
||||||
|
@ -30,21 +31,24 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
|
||||||
|
|
||||||
@interface SignalsViewController ()
|
@interface SignalsViewController ()
|
||||||
|
|
||||||
@property (nonatomic, strong) YapDatabaseConnection *editingDbConnection;
|
@property (nonatomic) YapDatabaseConnection *editingDbConnection;
|
||||||
@property (nonatomic, strong) YapDatabaseConnection *uiDatabaseConnection;
|
@property (nonatomic) YapDatabaseConnection *uiDatabaseConnection;
|
||||||
@property (nonatomic, strong) YapDatabaseViewMappings *threadMappings;
|
@property (nonatomic) YapDatabaseViewMappings *threadMappings;
|
||||||
@property (nonatomic) CellState viewingThreadsIn;
|
@property (nonatomic) CellState viewingThreadsIn;
|
||||||
@property (nonatomic) long inboxCount;
|
@property (nonatomic) long inboxCount;
|
||||||
@property (nonatomic, retain) UISegmentedControl *segmentedControl;
|
@property (nonatomic) UISegmentedControl *segmentedControl;
|
||||||
@property (nonatomic, strong) id previewingContext;
|
@property (nonatomic) id previewingContext;
|
||||||
|
|
||||||
// Dependencies
|
// Dependencies
|
||||||
|
|
||||||
@property (nonatomic, readonly, strong) AccountManager *accountManager;
|
@property (nonatomic, readonly) AccountManager *accountManager;
|
||||||
@property (nonatomic, readonly) OWSContactsManager *contactsManager;
|
@property (nonatomic, readonly) OWSContactsManager *contactsManager;
|
||||||
@property (nonatomic, readonly) ExperienceUpgradeFinder *experienceUpgradeFinder;
|
@property (nonatomic, readonly) ExperienceUpgradeFinder *experienceUpgradeFinder;
|
||||||
@property (nonatomic, readonly) TSMessagesManager *messagesManager;
|
@property (nonatomic, readonly) TSMessagesManager *messagesManager;
|
||||||
@property (nonatomic, readonly, strong) OWSMessageSender *messageSender;
|
@property (nonatomic, readonly) OWSMessageSender *messageSender;
|
||||||
|
@property (nonatomic, readonly) OWSBlockingManager *blockingManager;
|
||||||
|
|
||||||
|
@property (nonatomic) NSSet<NSString *> *blockedPhoneNumberSet;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -80,7 +84,29 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
|
||||||
_contactsManager = [Environment getCurrent].contactsManager;
|
_contactsManager = [Environment getCurrent].contactsManager;
|
||||||
_messagesManager = [TSMessagesManager sharedManager];
|
_messagesManager = [TSMessagesManager sharedManager];
|
||||||
_messageSender = [Environment getCurrent].messageSender;
|
_messageSender = [Environment getCurrent].messageSender;
|
||||||
|
_blockingManager = [OWSBlockingManager sharedManager];
|
||||||
|
_blockedPhoneNumberSet = [NSSet setWithArray:[_blockingManager blockedPhoneNumbers]];
|
||||||
|
|
||||||
_experienceUpgradeFinder = [ExperienceUpgradeFinder new];
|
_experienceUpgradeFinder = [ExperienceUpgradeFinder new];
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
|
selector:@selector(blockedPhoneNumbersDidChange:)
|
||||||
|
name:kNSNotificationName_BlockedPhoneNumbersDidChange
|
||||||
|
object:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)blockedPhoneNumbersDidChange:(id)notification
|
||||||
|
{
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
_blockedPhoneNumberSet = [NSSet setWithArray:[_blockingManager blockedPhoneNumbers]];
|
||||||
|
|
||||||
|
[self.tableView reloadData];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)awakeFromNib
|
- (void)awakeFromNib
|
||||||
|
@ -350,9 +376,7 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
|
||||||
cell = [InboxTableViewCell inboxTableViewCell];
|
cell = [InboxTableViewCell inboxTableViewCell];
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
[cell configureWithThread:thread contactsManager:self.contactsManager blockedPhoneNumberSet:_blockedPhoneNumberSet];
|
||||||
[cell configureWithThread:thread contactsManager:self.contactsManager];
|
|
||||||
});
|
|
||||||
|
|
||||||
if ((unsigned long)indexPath.row == [self.threadMappings numberOfItemsInSection:0] - 1) {
|
if ((unsigned long)indexPath.row == [self.threadMappings numberOfItemsInSection:0] - 1) {
|
||||||
cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.f);
|
cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.f);
|
||||||
|
|
|
@ -445,6 +445,9 @@
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"GROUP_YOU_LEFT" = "You have left the group.";
|
"GROUP_YOU_LEFT" = "You have left the group.";
|
||||||
|
|
||||||
|
/* A label for conversations with blocked users. */
|
||||||
|
"HOME_VIEW_BLOCKED_CONTACT_CONVERSATION" = "Blocked";
|
||||||
|
|
||||||
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
|
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
|
||||||
"HOURS_TIME_AMOUNT" = "%u hours";
|
"HOURS_TIME_AMOUNT" = "%u hours";
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue