Chat Room ; tap on member thumbnail also opens his member sheet

This commit is contained in:
ylecollen 2015-01-28 11:30:15 +01:00
parent edd69be267
commit 5c6301af4f

View file

@ -110,6 +110,9 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
// Local echo
NSMutableArray *pendingOutgoingEvents;
NSMutableArray *tmpCachedAttachments;
// the user taps on a member thumbnail
MXRoomMember *selectedRoomMember;
}
@property (weak, nonatomic) IBOutlet UINavigationItem *roomNavItem;
@ -402,6 +405,36 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
[self.roomTitleView refreshDisplay];
}
- (void)addPictureViewTapGesture:(RoomMessageTableCell*)cell {
if (!cell.pictureView.hidden) {
UITapGestureRecognizer* tapGesture = nil;
// check if it is already defined
// gesture in storyboard does not seem to work properly
// it always triggers a tap event on the first cell
for (UIGestureRecognizer* gesture in cell.pictureView.gestureRecognizers) {
if ([gesture isKindOfClass:[UITapGestureRecognizer class]]) {
tapGesture = (UITapGestureRecognizer*)gesture;
break;
}
}
// add it if it is not yet defined
if (!tapGesture) {
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onContactThumbnailTap:)];
[tapGesture setNumberOfTouchesRequired:1];
[tapGesture setNumberOfTapsRequired:1];
[tapGesture setDelegate:self];
[cell.pictureView addGestureRecognizer:tapGesture];
cell.pictureView.userInteractionEnabled = YES;
// ensure that nothing will hide this view
[cell.pictureView.superview bringSubviewToFront:cell.pictureView];
}
}
}
#pragma mark - room ID
- (void)setRoomId:(NSString *)roomId {
@ -467,6 +500,32 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
}
}
}
- (IBAction)onContactThumbnailTap:(UITapGestureRecognizer*)sender {
UIView* view = sender.view;
while (view && ![view isKindOfClass:[RoomMessageTableCell class]]) {
view = view.superview;
}
if ([view isKindOfClass:[RoomMessageTableCell class]]) {
NSIndexPath *indexPath = [self.messagesTableView indexPathForCell:(RoomMessageTableCell*)view];
RoomMessage* message = nil;
@synchronized(self) {
if (indexPath.row < messages.count) {
message = [messages objectAtIndex:indexPath.row];
}
}
if (message) {
selectedRoomMember = [self.mxRoom.state memberWithUserId:message.senderId];
if (selectedRoomMember) {
[self performSegueWithIdentifier:@"showMemberSheet" sender:self];
}
}
}
}
#pragma mark - Internal methods
@ -1690,6 +1749,8 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
cell.pictureView.backgroundColor = [UIColor redColor];
}
[self addPictureViewTapGesture:cell];
// Adjust top constraint constant for dateTime labels container, and hide it by default
if (message.messageType == RoomMessageTypeText) {
cell.dateTimeLabelContainerTopConstraint.constant = cell.msgTextViewTopConstraint.constant;
@ -3064,10 +3125,15 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showMemberSheet"]) {
NSIndexPath *indexPath = [self.membersTableView indexPathForSelectedRow];
MemberViewController* controller = [segue destinationViewController];
controller.mxRoomMember = [members objectAtIndex:indexPath.row];
if (selectedRoomMember) {
controller.mxRoomMember = selectedRoomMember;
selectedRoomMember = nil;
} else {
NSIndexPath *indexPath = [self.membersTableView indexPathForSelectedRow];
controller.mxRoomMember = [members objectAtIndex:indexPath.row];
}
controller.mxRoom = self.mxRoom;
}
}