room_photo_selection

-> add the public / private status
-> factorize the room avatar management.
-> the room avatar was rendered in scaleToFit instead of scaleToFill.
This commit is contained in:
yannick
2015-12-16 10:28:58 +01:00
parent 4b38e1f286
commit cdf8623b80
5 changed files with 78 additions and 75 deletions
+2
View File
@@ -140,6 +140,8 @@
"room_details_fail_to_update_topic" = "Fail to update the topic";
"room_details_fail_to_update_room_name" = "Fail to update the room name";
"room_details_with_updates" = "The updates will be lost : are you sure to leave ?";
"room_details_room_is_public" = "This room is public";
"room_details_room_is_private" = "This room is private";
"notification_settings_global_notification_settings" = "Global Notification Settings";
+11
View File
@@ -39,4 +39,15 @@
*/
- (void)toggleRoomNotifications:(BOOL)mute;
/**
Set the room avatar in the dedicated MXKImageView.
The vector style implies to use in order :
1 - the default avatar if there is one
2 - the member avatar for < 3 members rooms
3 - the first later of the room name.
@param mxkImageView the destinated MXKImageView.
*/
- (void)setRoomAvatarImageIn:(MXKImageView*)mxkImageView;
@end
+43
View File
@@ -16,6 +16,8 @@
#import "MXRoom+Vector.h"
#import "AvatarGenerator.h"
@interface MXRoom ()
// create property for the extensions
@@ -197,4 +199,45 @@
}
}
- (void)setRoomAvatarImageIn:(MXKImageView*)mxkImageView
{
NSString* roomAvatarUrl = self.state.avatar;
// detect if it is a room with no more than 2 members (i.e. an alone or a 1:1 chat)
if (!roomAvatarUrl)
{
NSString* myUserId = self.mxSession.myUser.userId;
NSArray* members = self.state.members;
if (members.count < 3)
{
// use the member avatar only it is an active member
for (MXRoomMember *roomMember in members)
{
if ((MXMembershipJoin == roomMember.membership) && ((members.count == 1) || ![roomMember.userId isEqualToString:myUserId]))
{
roomAvatarUrl = roomMember.avatarUrl;
break;
}
}
}
}
UIImage* avatarImage = [AvatarGenerator generateRoomAvatar:self];
if (roomAvatarUrl)
{
mxkImageView.enableInMemoryCache = YES;
[mxkImageView setImageURL:[self.mxSession.matrixRestClient urlOfContentThumbnail:roomAvatarUrl toFitViewSize:mxkImageView.frame.size withMethod:MXThumbnailingMethodCrop] withType:nil andImageOrientation:UIImageOrientationUp previewImage:avatarImage];
}
else
{
mxkImageView.image = avatarImage;
}
mxkImageView.contentMode = UIViewContentModeScaleAspectFill;
}
@end
@@ -39,8 +39,9 @@
#define ROOM_SECTION_PHOTO 0
#define ROOM_SECTION_NAME 1
#define ROOM_SECTION_TOPIC 2
#define ROOM_SECTION_MUTE_NOTIFICATIONS 3
#define ROOM_SECTION_COUNT 4
#define ROOM_SECTION_PRIV_PUB 3
#define ROOM_SECTION_MUTE_NOTIFICATIONS 4
#define ROOM_SECTION_COUNT 5
#define ROOM_TOPIC_CELL_HEIGHT 99
@@ -590,42 +591,7 @@
}
else
{
NSString* roomAvatarUrl = mxRoomState.avatar;
// detect if it is a room with no more than 2 members (i.e. an alone or a 1:1 chat)
if (!roomAvatarUrl)
{
NSString* myUserId = mxRoom.mxSession.myUser.userId;
NSArray* members = mxRoomState.members;
if (members.count < 3)
{
// use the member avatar only it is an active member
for (MXRoomMember *roomMember in members)
{
if ((MXMembershipJoin == roomMember.membership) && ((members.count == 1) || ![roomMember.userId isEqualToString:myUserId]))
{
roomAvatarUrl = roomMember.avatarUrl;
break;
}
}
}
}
UIImage* avatarImage = [AvatarGenerator generateRoomAvatar:mxRoom];
if (roomAvatarUrl)
{
roomPhotoCell.mxkImageView.enableInMemoryCache = YES;
[roomPhotoCell.mxkImageView setImageURL:[mxRoom.mxSession.matrixRestClient urlOfContentThumbnail:roomAvatarUrl toFitViewSize:roomPhotoCell.mxkImageView.frame.size withMethod:MXThumbnailingMethodCrop] withType:nil andImageOrientation:UIImageOrientationUp previewImage:avatarImage];
}
else
{
roomPhotoCell.mxkImageView.image = avatarImage;
}
[mxRoom setRoomAvatarImageIn:roomPhotoCell.mxkImageView];
roomPhotoCell.mxkImageView.alpha = isSuperUser ? 1.0f : 0.5f;
}
@@ -704,6 +670,21 @@
// Add a "textFieldDidChange" notification method to the text field control.
[roomNameCell.mxkTextField addTarget:self action:@selector(onTextFieldUpdate:) forControlEvents:UIControlEventEditingChanged];
}
else if (row == ROOM_SECTION_PRIV_PUB)
{
TableViewCellWithLabelAndTextField *privPublicCell = [tableView dequeueReusableCellWithIdentifier:[TableViewCellWithLabelAndTextField defaultReuseIdentifier]];
if (!privPublicCell)
{
privPublicCell = [[TableViewCellWithLabelAndTextField alloc] init];
}
privPublicCell.mxkTextField.userInteractionEnabled = NO;
privPublicCell.mxkTextField.text = @"";
privPublicCell.mxkLabel.text = mxRoom.state.isPublic ? NSLocalizedStringFromTable(@"room_details_room_is_public", @"Vector", nil) : NSLocalizedStringFromTable(@"room_details_room_is_private", @"Vector", nil);
cell = privPublicCell;
}
}
return cell;
+3 -37
View File
@@ -22,6 +22,8 @@
#import "VectorDesignValues.h"
#import "MXRoom+Vector.h"
@implementation RecentTableViewCell
#pragma mark - Class methods
@@ -74,44 +76,8 @@
}
self.roomAvatar.backgroundColor = [UIColor clearColor];
MXRoom* room = roomCellData.roomDataSource.room;
NSString* roomAvatarUrl = room.state.avatar;
// detect if it is a room with no more than 2 members (i.e. an alone or a 1:1 chat)
if (!roomAvatarUrl)
{
NSString* myUserId = room.mxSession.myUser.userId;
NSArray* members = room.state.members;
if (members.count < 3)
{
// use the member avatar only it is an active member
for (MXRoomMember *roomMember in members)
{
if ((MXMembershipJoin == roomMember.membership) && ((members.count == 1) || ![roomMember.userId isEqualToString:myUserId]))
{
roomAvatarUrl = roomMember.avatarUrl;
break;
}
}
}
}
UIImage* avatarImage = [AvatarGenerator generateRoomAvatar:room];
if (roomAvatarUrl)
{
self.roomAvatar.enableInMemoryCache = YES;
[self.roomAvatar setImageURL:[roomCellData.roomDataSource.mxSession.matrixRestClient urlOfContentThumbnail:roomAvatarUrl toFitViewSize:self.roomAvatar.frame.size withMethod:MXThumbnailingMethodCrop] withType:nil andImageOrientation:UIImageOrientationUp previewImage:avatarImage];
}
else
{
self.roomAvatar.image = avatarImage;
}
[roomCellData.roomDataSource.room setRoomAvatarImageIn:self.roomAvatar];
}
else
{