Merge branch 'charlesmchen/streamlineHomeView'

pull/1/head
Matthew Chen 8 years ago
commit 5897ca1b6a

@ -44,6 +44,10 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
@property (nonatomic) id previewingContext; @property (nonatomic) id previewingContext;
@property (nonatomic) NSSet<NSString *> *blockedPhoneNumberSet; @property (nonatomic) NSSet<NSString *> *blockedPhoneNumberSet;
@property (nonatomic) BOOL isViewVisible;
@property (nonatomic) BOOL isAppInBackground;
@property (nonatomic) BOOL shouldObserveDBModifications;
// Dependencies // Dependencies
@property (nonatomic, readonly) AccountManager *accountManager; @property (nonatomic, readonly) AccountManager *accountManager;
@ -107,6 +111,14 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
selector:@selector(signalAccountsDidChange:) selector:@selector(signalAccountsDidChange:)
name:OWSContactsManagerSignalAccountsDidChangeNotification name:OWSContactsManagerSignalAccountsDidChangeNotification
object:nil]; object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillEnterForeground:)
name:UIApplicationWillEnterForegroundNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
} }
- (void)dealloc - (void)dealloc
@ -148,12 +160,9 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
self.editingDbConnection = TSStorageManager.sharedManager.newDatabaseConnection; self.editingDbConnection = TSStorageManager.sharedManager.newDatabaseConnection;
[self.uiDatabaseConnection beginLongLivedReadTransaction]; // Create the database connection.
[self uiDatabaseConnection];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(yapDatabaseModified:)
name:TSUIDatabaseConnectionDidUpdateNotification
object:nil];
[self selectedInbox:self]; [self selectedInbox:self];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[ self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[
@ -310,12 +319,77 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
- (void)viewWillAppear:(BOOL)animated { - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; [super viewWillAppear:animated];
[self checkIfEmptyView];
if ([TSThread numberOfKeysInCollection] > 0) { if ([TSThread numberOfKeysInCollection] > 0) {
[self.contactsManager requestSystemContactsOnce]; [self.contactsManager requestSystemContactsOnce];
} }
[self updateInboxCountLabel]; [self updateInboxCountLabel];
[[self tableView] reloadData];
self.isViewVisible = YES;
[self checkIfEmptyView];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.isViewVisible = NO;
}
- (void)setIsViewVisible:(BOOL)isViewVisible
{
_isViewVisible = isViewVisible;
[self updateShouldObserveDBModifications];
}
- (void)setIsAppInBackground:(BOOL)isAppInBackground
{
_isAppInBackground = isAppInBackground;
[self updateShouldObserveDBModifications];
}
- (void)updateShouldObserveDBModifications
{
self.shouldObserveDBModifications = self.isViewVisible && !self.isAppInBackground;
}
- (void)setShouldObserveDBModifications:(BOOL)shouldObserveDBModifications
{
if (!_shouldObserveDBModifications && shouldObserveDBModifications && self.threadMappings != nil) {
// Before we begin observing database modifications, make sure
// our mapping and table state is up-to-date.
//
// We need to `beginLongLivedReadTransaction` before we update our
// mapping in order to jump to the most recent commit.
[self.uiDatabaseConnection beginLongLivedReadTransaction];
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
[self.threadMappings updateWithTransaction:transaction];
}];
[[self tableView] reloadData];
}
_shouldObserveDBModifications = shouldObserveDBModifications;
if (shouldObserveDBModifications) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(yapDatabaseModified:)
name:YapDatabaseModifiedNotification
object:nil];
} else {
[[NSNotificationCenter defaultCenter] removeObserver:self name:YapDatabaseModifiedNotification object:nil];
}
}
- (void)applicationWillEnterForeground:(NSNotification *)notification
{
self.isAppInBackground = NO;
}
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
self.isAppInBackground = YES;
} }
- (void)viewDidAppear:(BOOL)animated { - (void)viewDidAppear:(BOOL)animated {
@ -395,7 +469,8 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
#pragma mark - Table View Data Source #pragma mark - Table View Data Source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return (NSInteger)[self.threadMappings numberOfSections]; return (NSInteger)[self.threadMappings numberOfSections];
} }
@ -683,18 +758,17 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
} }
- (void)changeToGrouping:(NSString *)grouping { - (void)changeToGrouping:(NSString *)grouping {
OWSAssert([NSThread isMainThread]);
self.shouldObserveDBModifications = NO;
self.threadMappings = self.threadMappings =
[[YapDatabaseViewMappings alloc] initWithGroups:@[ grouping ] view:TSThreadDatabaseViewExtensionName]; [[YapDatabaseViewMappings alloc] initWithGroups:@[ grouping ] view:TSThreadDatabaseViewExtensionName];
[self.threadMappings setIsReversed:YES forGroup:grouping]; [self.threadMappings setIsReversed:YES forGroup:grouping];
[self.uiDatabaseConnection asyncReadWithBlock:^(YapDatabaseReadTransaction *transaction) { [self updateShouldObserveDBModifications];
[self.threadMappings updateWithTransaction:transaction];
dispatch_async(dispatch_get_main_queue(), ^{ [self checkIfEmptyView];
[self.tableView reloadData];
[self checkIfEmptyView];
});
}];
} }
#pragma mark Database delegates #pragma mark Database delegates
@ -705,10 +779,6 @@ NSString *const SignalsViewControllerSegueShowIncomingCall = @"ShowIncomingCallS
YapDatabase *database = TSStorageManager.sharedManager.database; YapDatabase *database = TSStorageManager.sharedManager.database;
_uiDatabaseConnection = [database newConnection]; _uiDatabaseConnection = [database newConnection];
[_uiDatabaseConnection beginLongLivedReadTransaction]; [_uiDatabaseConnection beginLongLivedReadTransaction];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(yapDatabaseModified:)
name:YapDatabaseModifiedNotification
object:database];
} }
return _uiDatabaseConnection; return _uiDatabaseConnection;
} }

@ -28,10 +28,6 @@ NS_ASSUME_NONNULL_BEGIN
return self; return self;
} }
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(yapDatabaseModified:)
name:TSUIDatabaseConnectionDidUpdateNotification
object:nil];
[self initializeMapping]; [self initializeMapping];
return self; return self;

Loading…
Cancel
Save