Public rooms search: Directory page starts to work (with cells from MatrixKit)

This commit is contained in:
manuroe 2015-12-18 17:17:03 +01:00
parent 10de4757d3
commit e71a4a090d
11 changed files with 108 additions and 37 deletions

View file

@ -158,6 +158,9 @@
"media_picker_choose_from_library" = "Choose from library";
"media_picker_library" = "Library";
// Directory
"directory_title" = "Directory";
// Others
"you" = "You";
"public_room_section_title" = "Public Rooms (at %@):";

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="H1p-Uh-vWS">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="H1p-Uh-vWS">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
@ -201,7 +201,7 @@
<segue destination="cLJ-Zo-cIe" kind="presentation" identifier="presentRoomCreationStep1" id="EwV-tH-4jl"/>
<segue destination="vC3-pB-5Vb" kind="showDetail" identifier="showDetails" id="agy-3r-khl"/>
<segue destination="ZlD-EU-ncw" kind="presentation" identifier="showAuth" id="vfC-8C-AsT"/>
<segue destination="dP6-5F-5s0" kind="show" identifier="showDirectory" id="hvq-zV-OB7"/>
<segue destination="dP6-5F-5s0" kind="showDetail" identifier="showDirectory" action="showViewController:sender:" id="hvq-zV-OB7"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="pF2-9z-Wl6" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -216,20 +216,6 @@
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="sgB-0b-hbe">
<rect key="frame" x="0.0" y="92" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="sgB-0b-hbe" id="29k-1a-GRN">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="dP6-5F-5s0" id="977-CD-fdo"/>
<outlet property="delegate" destination="dP6-5F-5s0" id="ycx-Nj-kqv"/>
</connections>
</tableView>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="yn2-Xd-dn4" userLabel="First Responder" sceneMemberID="firstResponder"/>

View file

@ -30,7 +30,7 @@
There is no way in Matrix to be notified when there is a change in the public room directory.
As a workaround, the data source refreshes its data when there are more than 10s old.
*/
@interface PublicRoomsDirectoryDataSource : MXKDataSource <UITableViewDataSource, MXKDataSourceDelegate>
@interface PublicRoomsDirectoryDataSource : MXKDataSource <UITableViewDataSource>
/**
All public rooms of the directory.

View file

@ -16,6 +16,8 @@
#import "PublicRoomsDirectoryDataSource.h"
#import "MXKPublicRoomTableViewCell.h"
#pragma mark - Constants definitions
// Time in seconds from which public rooms data is considered as obsolete
@ -124,4 +126,26 @@ double const kPublicRoomsDirectoryDataExpiration = 10;
}
}
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _filteredRooms.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// For now reuse MatrixKit cells
// TODO: use custom cells and manage a mechanism a la MatrixKit with cellData
MXKPublicRoomTableViewCell *publicRoomCell = [tableView dequeueReusableCellWithIdentifier:[MXKPublicRoomTableViewCell defaultReuseIdentifier]];
if (!publicRoomCell)
{
publicRoomCell = [[MXKPublicRoomTableViewCell alloc] init];
}
[publicRoomCell render:_filteredRooms[indexPath.row]];
return publicRoomCell;
}
@end

View file

@ -16,6 +16,8 @@
#import <MatrixKit/MatrixKit.h>
@class PublicRoomsDirectoryDataSource;
/**
'RecentsDataSource' class inherits from 'MXKInterleavedRecentsDataSource' to define Vector recents source.
*/
@ -44,10 +46,15 @@
@property (nonatomic, copy) NSIndexPath* droppingCellIndexPath;
/**
The movingCellBackgroundImage;
The movingCellBackgroundImage.
*/
@property (nonatomic) UIImageView* droppingCellBackGroundView;
/**
The data source used to manage search in public rooms.
*/
@property (nonatomic, readonly) PublicRoomsDirectoryDataSource *publicRoomsDirectoryDataSource;
/**
Return the header height from the section.
*/

View file

@ -32,8 +32,6 @@
NSMutableArray* conversationCellDataArray;
NSMutableArray* lowPriorityCellDataArray;
PublicRoomsDirectoryDataSource *publicRoomsDirectoryDataSource;
NSInteger directorySection;
NSInteger invitesSection;
NSInteger favoritesSection;
@ -80,10 +78,10 @@
// Initialise the public room directory data source
// Note that it is single matrix session only for now
if (!publicRoomsDirectoryDataSource)
if (!_publicRoomsDirectoryDataSource)
{
publicRoomsDirectoryDataSource = [[PublicRoomsDirectoryDataSource alloc] initWithMatrixSession:mxSession];
publicRoomsDirectoryDataSource.delegate = self;
_publicRoomsDirectoryDataSource = [[PublicRoomsDirectoryDataSource alloc] initWithMatrixSession:mxSession];
_publicRoomsDirectoryDataSource.delegate = self;
}
}
@ -102,17 +100,17 @@
[roomTagsListenerByUserId removeObjectForKey:matrixSession.myUser.userId];
}
if (publicRoomsDirectoryDataSource.mxSession == matrixSession)
if (_publicRoomsDirectoryDataSource.mxSession == matrixSession)
{
[publicRoomsDirectoryDataSource destroy];
publicRoomsDirectoryDataSource = nil;
[_publicRoomsDirectoryDataSource destroy];
_publicRoomsDirectoryDataSource = nil;
}
}
}
- (void)dataSource:(MXKDataSource*)dataSource didStateChange:(MXKDataSourceState)aState
{
if (dataSource == publicRoomsDirectoryDataSource)
if (dataSource == _publicRoomsDirectoryDataSource)
{
[self refreshRoomsSectionsAndReload];
}
@ -294,7 +292,7 @@
directoryCell = [[DirectoryRecentTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[DirectoryRecentTableViewCell defaultReuseIdentifier]];
}
[directoryCell render:publicRoomsDirectoryDataSource];
[directoryCell render:_publicRoomsDirectoryDataSource];
return directoryCell;
}
@ -529,7 +527,7 @@
// Manage the public room search results cell outside the recents.
// Show the cell showing the public rooms directory search result
// once a search is active
if (publicRoomsDirectoryDataSource.filter)
if (_publicRoomsDirectoryDataSource.filter)
{
directorySection = sectionIndex;
sectionIndex++;
@ -653,11 +651,11 @@
{
[super searchWithPatterns:patternsList];
if (patternsList && publicRoomsDirectoryDataSource)
if (patternsList && _publicRoomsDirectoryDataSource)
{
// Search only on the first pattern
// XXX: Why is it an array?
publicRoomsDirectoryDataSource.filter = patternsList[0];
_publicRoomsDirectoryDataSource.filter = patternsList[0];
}
}

View file

@ -16,6 +16,15 @@
#import <MatrixKit/MatrixKit.h>
@interface DirectoryViewController : MXKTableViewController
@class PublicRoomsDirectoryDataSource;
@interface DirectoryViewController : MXKTableViewController <UITableViewDelegate>
/**
Display data managed by the passed `PublicRoomsDirectoryDataSource`.
@param dataSource the data source serving the data.
*/
- (void)displayWitDataSource:(PublicRoomsDirectoryDataSource*)dataSource;
@end

View file

@ -16,20 +16,35 @@
#import "DirectoryViewController.h"
#import "PublicRoomsDirectoryDataSource.h"
@interface DirectoryViewController ()
@end
@implementation DirectoryViewController
- (void)viewDidLoad {
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = NSLocalizedStringFromTable(@"directory_title", @"Vector", nil);
self.tableView.delegate = self;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView reloadData];
}
- (void)displayWitDataSource:(PublicRoomsDirectoryDataSource *)dataSource
{
// Let the data source provide cells
self.tableView.dataSource = dataSource;
}
/*
@ -42,4 +57,10 @@
}
*/
#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 72;
}
@end

View file

@ -53,6 +53,12 @@
*/
- (void)closeSelectedRoom;
/**
Open the public rooms directory page.
It uses the `publicRoomsDirectoryDataSource` managed by the recents view controller data source
*/
- (void)showPublicRoomsDirectory;
/**
Action registered on `UIControlEventTouchUpInside` event for both buttons.
*/

View file

@ -20,6 +20,7 @@
#import "RecentsViewController.h"
#import "RoomViewController.h"
#import "DirectoryViewController.h"
@interface HomeViewController ()
{
@ -312,6 +313,11 @@
}
}
- (void)showPublicRoomsDirectory
{
[self performSegueWithIdentifier:@"showDirectory" sender:self];
}
#pragma mark - Internal methods
// Made the currently displayed child update its selected cell
@ -379,6 +385,11 @@
controller.navigationItem.leftItemsSupplementBackButton = YES;
}
}
else if ([[segue identifier] isEqualToString:@"showDirectory"])
{
DirectoryViewController *directoryViewController = segue.destinationViewController;
[directoryViewController displayWitDataSource:recentsDataSource.publicRoomsDirectoryDataSource];
}
// Hide back button title
self.navigationItem.backBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

View file

@ -28,6 +28,7 @@
#import "VectorDesignValues.h"
#import "InviteRecentTableViewCell.h"
#import "DirectoryRecentTableViewCell.h"
@interface RecentsViewController ()
{
@ -458,6 +459,11 @@ static NSMutableDictionary* backgroundByImageNameDict;
// hide the selection
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
else if ([cell isKindOfClass:[DirectoryRecentTableViewCell class]])
{
// Show the directory screen
[homeViewController showPublicRoomsDirectory];
}
else
{
[super tableView:tableView didSelectRowAtIndexPath:indexPath];