element-ios/Riot/Modules/Rooms/RoomsViewController.m

167 lines
4.7 KiB
Objective-C

/*
Copyright 2024 New Vector Ltd.
Copyright 2017 Vector Creations Ltd
SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details.
*/
#import "RoomsViewController.h"
#import "RecentsDataSource.h"
#import "GeneratedInterface-Swift.h"
@interface RoomsViewController () <MasterTabBarItemDisplayProtocol>
{
RecentsDataSource *recentsDataSource;
}
@property (nonatomic, strong) MXThrottler *tableViewPaginationThrottler;
@end
@implementation RoomsViewController
+ (instancetype)instantiate
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
RoomsViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"RoomsViewController"];
return viewController;
}
- (void)finalizeInit
{
[super finalizeInit];
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenRooms];
self.tableViewPaginationThrottler = [[MXThrottler alloc] initWithMinimumDelay:0.1];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.accessibilityIdentifier = @"RoomsVCView";
self.recentsTableView.accessibilityIdentifier = @"RoomsVCTableView";
// Tag the recents table with the its recents data source mode.
// This will be used by the shared RecentsDataSource instance for sanity checks (see UITableViewDataSource methods).
self.recentsTableView.tag = RecentsDataSourceModeRooms;
// Add the (+) button programmatically
plusButtonImageView = [self vc_addFABWithImage:AssetImages.roomsFloatingAction.image
target:self
action:@selector(onPlusButtonPressed)];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[AppDelegate theDelegate].masterTabBarController.tabBar.tintColor = ThemeService.shared.theme.tintColor;
if ([self.dataSource isKindOfClass:RecentsDataSource.class])
{
// Take the lead on the shared data source.
recentsDataSource = (RecentsDataSource*)self.dataSource;
if (recentsDataSource.recentsDataSourceMode != RecentsDataSourceModeRooms)
{
// Take the lead on the shared data source.
[recentsDataSource setDelegate:self andRecentsDataSourceMode:RecentsDataSourceModeRooms];
// Reset filtering on the shared data source when switching tabs
[recentsDataSource searchWithPatterns:nil];
[self.recentsSearchBar setText:nil];
}
}
}
- (void)destroy
{
[super destroy];
}
#pragma mark - Override RecentsViewController
- (void)refreshCurrentSelectedCell:(BOOL)forceVisible
{
// Check whether the recents data source is correctly configured.
if (recentsDataSource.recentsDataSourceMode != RecentsDataSourceModeRooms)
{
return;
}
[super refreshCurrentSelectedCell:forceVisible];
}
- (void)onPlusButtonPressed
{
[self showRoomDirectory];
}
#pragma mark - UITableView delegate
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([super respondsToSelector:@selector(tableView:willDisplayCell:forRowAtIndexPath:)])
{
[super tableView:tableView willDisplayCell:cell forRowAtIndexPath:indexPath];
}
[self.tableViewPaginationThrottler throttle:^{
NSInteger section = indexPath.section;
if (tableView.numberOfSections <= section)
{
return;
}
NSInteger numberOfRowsInSection = [tableView numberOfRowsInSection:section];
if (indexPath.row == numberOfRowsInSection - 1)
{
[self->recentsDataSource paginateInSection:section];
}
}];
}
#pragma mark -
- (void)scrollToNextRoomWithMissedNotifications
{
// Check whether the recents data source is correctly configured.
if (recentsDataSource.recentsDataSourceMode == RecentsDataSourceModeRooms)
{
[self scrollToTheTopTheNextRoomWithMissedNotificationsInSection:[recentsDataSource.sections sectionIndexForSectionType:RecentsDataSourceSectionTypeConversation]];
}
}
#pragma mark - Empty view management
- (void)updateEmptyView
{
[self.emptyView fillWith:[self emptyViewArtwork]
title:[VectorL10n roomsEmptyViewTitle]
informationText:[VectorL10n roomsEmptyViewInformation]];
}
- (UIImage*)emptyViewArtwork
{
if (ThemeService.shared.isCurrentThemeDark)
{
return AssetImages.roomsEmptyScreenArtworkDark.image;
}
else
{
return AssetImages.roomsEmptyScreenArtwork.image;
}
}
#pragma mark - MasterTabBarItemDisplayProtocol
- (NSString *)masterTabBarItemTitle
{
return [VectorL10n titleRooms];
}
@end