Begin removing contacts section from PeopleViewController.

This commit is contained in:
Doug
2021-07-06 16:14:32 +01:00
parent cf5b43faf9
commit eb2a53ff7b
2 changed files with 21 additions and 233 deletions
+20 -233
View File
@@ -14,7 +14,6 @@
limitations under the License.
*/
#import <Contacts/Contacts.h>
#import "PeopleViewController.h"
#import "UIViewController+RiotSearch.h"
@@ -25,17 +24,11 @@
#import "RecentTableViewCell.h"
#import "InviteRecentTableViewCell.h"
#import "ContactTableViewCell.h"
#import "Riot-Swift.h"
@interface PeopleViewController ()
{
NSInteger directRoomsSectionNumber;
ContactsDataSource *contactsDataSource;
NSInteger contactsSectionNumber;
RecentsDataSource *recentsDataSource;
}
@@ -55,7 +48,6 @@
[super finalizeInit];
directRoomsSectionNumber = 0;
contactsSectionNumber = 0;
self.screenName = @"People";
}
@@ -92,35 +84,9 @@
// Dispose of any resources that can be recreated.
}
- (void)destroy
{
contactsDataSource.delegate = nil;
[contactsDataSource destroy];
contactsDataSource = nil;
[super destroy];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (BuildSettings.allowLocalContactsAccess)
{
// Check whether the access to the local contacts has not been already asked
// and check that the user has decided to use or not to use an identity server
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined
|| !contactsDataSource.mxSession.hasAccountDataIdentityServerValue)
{
// Allow by default the local contacts sync in order to discover matrix users.
// This setting change will trigger the loading of the local contacts, which will automatically
// ask user permission to access their local contacts.
[MXKAppSettings standardAppSettings].syncLocalContacts = YES;
}
// Refresh the local contacts list.
[[MXKContactManager sharedManager] refreshLocalContacts];
}
[AppDelegate theDelegate].masterTabBarController.navigationItem.title = NSLocalizedStringFromTable(@"title_people", @"Vector", nil);
[AppDelegate theDelegate].masterTabBarController.tabBar.tintColor = ThemeService.shared.theme.tintColor;
@@ -147,17 +113,6 @@
{
recentsDataSource = (RecentsDataSource*)listDataSource;
}
if (BuildSettings.allowLocalContactsAccess)
{
if (!contactsDataSource)
{
// Prepare its contacts data source
contactsDataSource = [[ContactsDataSource alloc] initWithMatrixSession:listDataSource.mxSession];
contactsDataSource.contactCellAccessoryImage = [[UIImage imageNamed: @"disclosure_icon"] vc_tintedImageUsingColor:ThemeService.shared.theme.textSecondaryColor];
contactsDataSource.delegate = self;
}
}
}
#pragma mark - MXKDataSourceDelegate
@@ -185,28 +140,18 @@
directRoomsSectionNumber = [self.dataSource numberOfSectionsInTableView:self.recentsTableView];
}
// Retrieve the current number of sections related to the contacts
contactsSectionNumber = [contactsDataSource numberOfSectionsInTableView:self.recentsTableView];
return (directRoomsSectionNumber + contactsSectionNumber);
return directRoomsSectionNumber;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger count = 0;
// FIXME: Should this still need to check the section? Where do invites come in?
if (section < directRoomsSectionNumber)
{
count = [self.dataSource tableView:tableView numberOfRowsInSection:section];
}
else
{
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
count = [contactsDataSource tableView:tableView numberOfRowsInSection:section];
}
}
return count;
}
@@ -215,18 +160,11 @@
{
NSInteger section = indexPath.section;
// FIXME: Should this still need to check the section? Where do invites come in?
if (section < directRoomsSectionNumber)
{
return [self.dataSource tableView:tableView cellForRowAtIndexPath:indexPath];
}
else
{
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
return [contactsDataSource tableView:tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:section]];
}
}
// Return a fake cell to prevent app from crashing.
return [[UITableViewCell alloc] init];
@@ -236,18 +174,11 @@
{
NSInteger section = indexPath.section;
// FIXME: Should this still need to check the section? Where do invites come in?
if (section < directRoomsSectionNumber)
{
return [self.dataSource tableView:tableView canEditRowAtIndexPath:indexPath];
}
else
{
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
return [contactsDataSource tableView:tableView canEditRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:section]];
}
}
return NO;
}
@@ -256,18 +187,10 @@
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
// FIXME: Should this still need to check the section? Where do invites come in?
if (section >= directRoomsSectionNumber)
{
// Let the contact dataSource provide the height of the section header.
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
return [contactsDataSource heightForHeaderInSection:section];
}
else
{
return 0.0;
}
return 0.0;
}
return [super tableView:tableView heightForHeaderInSection:section];
@@ -275,37 +198,10 @@
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
// FIXME: Should this still need to check the section? Where do invites come in?
if (section >= directRoomsSectionNumber)
{
// Let the contact dataSource provide the section header.
CGRect frame = [tableView rectForHeaderInSection:section];
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
UIView *sectionHeader = [contactsDataSource viewForHeaderInSection:section withFrame:frame];
sectionHeader.tag = section + directRoomsSectionNumber;
if (self.enableStickyHeaders)
{
while (sectionHeader.gestureRecognizers.count)
{
UIGestureRecognizer *gestureRecognizer = sectionHeader.gestureRecognizers.lastObject;
[sectionHeader removeGestureRecognizer:gestureRecognizer];
}
// Handle tap gesture
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapOnSectionHeader:)];
[tap setNumberOfTouchesRequired:1];
[tap setNumberOfTapsRequired:1];
[sectionHeader addGestureRecognizer:tap];
}
return sectionHeader;
}
else
{
return nil;
}
return nil;
}
return [super tableView:tableView viewForHeaderInSection:section];
@@ -314,23 +210,11 @@
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger section = indexPath.section;
// FIXME: Should this still need to check the section? Where do invites come in?
if (section >= directRoomsSectionNumber)
{
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
if ([contactsDataSource contactAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:section]])
{
// Return the default height of the contact cell
return 74.0;
}
return 50;
}
else
{
return 0.0;
}
return 0.0;
}
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
@@ -339,26 +223,11 @@
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger section = indexPath.section;
// FIXME: Should this still need to check the section? Where do invites come in?
if (section >= directRoomsSectionNumber)
{
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
MXKContact *mxkContact = [contactsDataSource contactAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:section]];
if (mxkContact)
{
[[AppDelegate theDelegate].masterTabBarController selectContact:mxkContact];
// Keep selected the cell by default.
return;
}
}
else
{
[tableView deselectRowAtIndexPath:indexPath animated:NO];
return;
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];
return;
}
return [super tableView:tableView didSelectRowAtIndexPath:indexPath];
@@ -371,16 +240,13 @@
CGRect frame = [tableView rectForHeaderInSection:section];
frame.size.height = self.stickyHeaderHeight;
// FIXME: Should this still need to check the section? Where do invites come in?
if (section >= directRoomsSectionNumber)
{
// Let the contact dataSource provide this header.
section -= directRoomsSectionNumber;
if (section < contactsSectionNumber)
{
return [contactsDataSource viewForStickyHeaderInSection:section withFrame:frame];
}
return nil;
}
else if (recentsDataSource)
if (recentsDataSource)
{
return [recentsDataSource viewForStickyHeaderInSection:section withFrame:frame];
}
@@ -396,41 +262,7 @@
return;
}
// Update here the index of the current selected cell (if any) - Useful in landscape mode with split view controller.
NSIndexPath *currentSelectedCellIndexPath = nil;
MasterTabBarController *masterTabBarController = [AppDelegate theDelegate].masterTabBarController;
if (masterTabBarController.currentContactDetailViewController)
{
// Look for the rank of this selected contact
currentSelectedCellIndexPath = [contactsDataSource cellIndexPathWithContact:masterTabBarController.selectedContact];
if (currentSelectedCellIndexPath)
{
// Select the right row
currentSelectedCellIndexPath = [NSIndexPath indexPathForRow:currentSelectedCellIndexPath.row inSection:(directRoomsSectionNumber + currentSelectedCellIndexPath.section)];
[self.recentsTableView selectRowAtIndexPath:currentSelectedCellIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
if (forceVisible)
{
// Scroll table view to make the selected row appear at second position
NSInteger topCellIndexPathRow = currentSelectedCellIndexPath.row ? currentSelectedCellIndexPath.row - 1: currentSelectedCellIndexPath.row;
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:topCellIndexPathRow inSection:currentSelectedCellIndexPath.section];
[self.recentsTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
}
else
{
NSIndexPath *indexPath = [self.recentsTableView indexPathForSelectedRow];
if (indexPath)
{
[self.recentsTableView deselectRowAtIndexPath:indexPath animated:NO];
}
}
}
else
{
[super refreshCurrentSelectedCell:forceVisible];
}
[super refreshCurrentSelectedCell:forceVisible];
}
- (void)onPlusButtonPressed
@@ -449,24 +281,6 @@
}
}
#pragma mark - UISearchBarDelegate
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
// Apply filter on contact source
[contactsDataSource searchWithPattern:searchText forceReset:NO];
[super searchBar:searchBar textDidChange:searchText];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
// Reset filtering
[contactsDataSource searchWithPattern:nil forceReset:NO];
[super searchBarCancelButtonClicked:searchBar];
}
#pragma mark - Empty view management
- (void)updateEmptyView
@@ -504,34 +318,7 @@
{
return recentsDataSource.invitesCellDataArray.count
+ recentsDataSource.conversationCellDataArray.count
+ recentsDataSource.peopleCellDataArray.count
+ [self numberOfContactsInContactsDataSource];
}
- (NSUInteger)numberOfContactsInContactsDataSource
{
BOOL areLocalContactsAccessAuthorized = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusAuthorized;
NSInteger nbOfItemsInContactDataSource = 0;
for (NSInteger i = 0; i < contactsSectionNumber; i++)
{
nbOfItemsInContactDataSource += [contactsDataSource tableView:self.recentsTableView numberOfRowsInSection:i];
}
NSInteger numberOfContactsInContactsDataSource;
// No local contacts to show and no search in directory
if (!areLocalContactsAccessAuthorized && contactsSectionNumber == 1 && nbOfItemsInContactDataSource <= 1)
{
numberOfContactsInContactsDataSource = 0;
}
else
{
numberOfContactsInContactsDataSource = nbOfItemsInContactDataSource;
}
return numberOfContactsInContactsDataSource;
+ recentsDataSource.peopleCellDataArray.count;
}
@end