MESSENGER-2762 Initial Merge

This commit is contained in:
Frank Rotermund
2022-03-17 15:51:23 +01:00
parent ecae8d618f
commit c2108a2178
384 changed files with 17708 additions and 1928 deletions
@@ -2,6 +2,7 @@
Copyright 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Copyright 2018 New Vector Ltd
Copyright (c) 2021 BWI GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -390,17 +391,24 @@
}
}];
NSString* presenceText;
NSString *userId = self.mxRoomMember.userId;
if (userId)
if (BuildSettings.allowLocalContactPresence)
{
MXUser *user = [self.mxRoom.mxSession userWithUserId:userId];
presenceText = [Tools presenceText:user];
NSString* presenceText;
NSString *userId = self.mxRoomMember.userId;
if (userId)
{
MXUser *user = [self.mxRoom.mxSession userWithUserId:userId];
presenceText = [Tools presenceText:user];
}
self.roomMemberStatusLabel.text = presenceText;
}
else
{
self.roomMemberStatusLabel.text = @"";
}
self.roomMemberStatusLabel.text = presenceText;
self.roomMemberAvatarBadgeImageView.image = [EncryptionTrustLevelBadgeImageHelper userBadgeImageFor:self.encryptionTrustLevel];
@@ -526,11 +534,10 @@
{
isOneself = YES;
if (self.enableLeave)
{
if( !BuildSettings.roomMemberDetailsHideLeaveButton) {
[otherActionsArray addObject:@(MXKRoomMemberDetailsActionLeave)];
}
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomPowerLevels])
{
// Check whether the user is admin (in this case he may reduce his power level to become moderator or less, EXCEPT if he is the only admin).
@@ -682,7 +689,7 @@
{
otherActionsIndex = sectionCount++;
}
if (adminActionsArray.count)
if (adminActionsArray.count && !self.mxRoom.isDirect)
{
adminToolsIndex = sectionCount++;
}
@@ -716,7 +723,7 @@
}
else if (section == directChatsIndex)
{
return (directChatsArray.count + 1);
return (directChatsArray.count > 0 ? directChatsArray.count : 1);
}
else if (section == devicesIndex)
{
@@ -974,7 +981,7 @@
{
RoomTableViewCell *roomCell = [tableView dequeueReusableCellWithIdentifier:[RoomTableViewCell defaultReuseIdentifier] forIndexPath:indexPath];
if (indexPath.row < directChatsArray.count)
if (directChatsArray.count > 0)
{
MXRoom *room = [self.mainSession roomWithRoomId:directChatsArray[indexPath.row]];
if (room)
@@ -1111,18 +1118,29 @@
UIButton *button = (UIButton*)sender;
BOOL isUpgradable = BuildSettings.bwiLastAdminCanDowngradeHimself ||
![self.mxRoomMember.userId isEqualToString:self.mainSession.myUser.userId] ||
![self isLastAdmin:self.mainSession.myUser.userId];
switch (button.tag)
{
case MXKRoomMemberDetailsActionSetDefaultPowerLevel:
{
[self.mxRoom state:^(MXRoomState *roomState) {
[self setPowerLevel:roomState.powerLevels.usersDefault promptUser:YES];
}];
if( isUpgradable )
[self.mxRoom state:^(MXRoomState *roomState) {
[self setPowerLevel:roomState.powerLevels.usersDefault promptUser:YES];
}];
else
[self showAlertChangePowerLevelNotAllowed];
break;
break;
}
case MXKRoomMemberDetailsActionSetModerator:
{
[self setPowerLevel:RoomPowerLevelModerator promptUser:YES];
if( isUpgradable )
[self setPowerLevel:RoomPowerLevelModerator promptUser:YES];
else
[self showAlertChangePowerLevelNotAllowed];
break;
}
case MXKRoomMemberDetailsActionSetAdmin:
@@ -1266,6 +1284,49 @@
}
}
- (bool)isLastAdmin:(NSString*) userId {
__block NSInteger numOtherAdmins = 0;
if (!userId || [self.mxRoomLiveTimeline.state.powerLevels powerLevelOfUserWithUserID:userId] < RoomPowerLevelAdmin)
return FALSE;
// Update member power level
[self.mxRoom members:^(MXRoomMembers *roomMembers) {
for (MXRoomMember* member in roomMembers.members) {
NSInteger powerLevel = [self.mxRoomLiveTimeline.state.powerLevels powerLevelOfUserWithUserID:member.userId];
if (member && ![member.userId isEqualToString:userId] && member.membership == MXMembershipJoin && powerLevel >= RoomPowerLevelAdmin) {
numOtherAdmins++;
}
}
} failure:^(NSError *error) {
MXLogDebug(@"[RoomMemberDetailsViewController] Cannot get all room members in isLastAdmin");
}];
return numOtherAdmins > 0 ? FALSE : TRUE;
}
- (void)showAlertChangePowerLevelNotAllowed {
__weak typeof(self) weakSelf = self;
currentAlert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"room_member_details_downgrade_last_admin", @"Vector", nil)
message:nil
preferredStyle:UIAlertControllerStyleAlert];
[currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"ok"]
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
if (weakSelf)
{
typeof(self) self = weakSelf;
self->currentAlert = nil;
}
}]];
[self presentViewController:currentAlert animated:YES completion:nil];
}
- (void)handleTapGesture:(UITapGestureRecognizer*)tapGestureRecognizer
{
UIView *view = tapGestureRecognizer.view;