mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-23 18:12:44 +02:00
Begin removing contacts section from PeopleViewController.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user