mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-18 21:52:18 +02:00
Merge pull request #2962 from vector-im/riot_2906
Room decoration: Use shields instead of padlocks
This commit is contained in:
@@ -5,6 +5,7 @@ Improvements:
|
||||
* ON/OFF Cross-signing development in a Lab setting (#2855).
|
||||
* RoomVC: Update encryption decoration with shields (#2934, #2930, #2906).
|
||||
* Settings: Remove "End-to-End Encryption" from the LABS section (#2941).
|
||||
* Room decoration: Use shields instead of padlocks (#2906).
|
||||
|
||||
Changes in 0.10.4 (2019-12-11)
|
||||
===============================================
|
||||
|
||||
@@ -266,6 +266,7 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
|
||||
// Set the App Group identifier.
|
||||
MXSDKOptions *sdkOptions = [MXSDKOptions sharedInstance];
|
||||
sdkOptions.applicationGroupIdentifier = @"group.im.vector";
|
||||
sdkOptions.computeE2ERoomSummaryTrust = YES;
|
||||
|
||||
// Redirect NSLogs to files only if we are not debugging
|
||||
if (!isatty(STDERR_FILENO))
|
||||
|
||||
@@ -16,6 +16,17 @@
|
||||
|
||||
#import <MatrixKit/MatrixKit.h>
|
||||
|
||||
/**
|
||||
RoomEncryptionTrustLevel represents the trust level in an encrypted room.
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger, RoomEncryptionTrustLevel) {
|
||||
RoomEncryptionTrustLevelTrusted,
|
||||
RoomEncryptionTrustLevelWarning,
|
||||
RoomEncryptionTrustLevelNormal,
|
||||
RoomEncryptionTrustLevelUnknown
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Define a `MXRoomSummary` category at Riot level.
|
||||
*/
|
||||
@@ -32,4 +43,11 @@
|
||||
*/
|
||||
- (void)setRoomAvatarImageIn:(MXKImageView*)mxkImageView;
|
||||
|
||||
/**
|
||||
Get the trust level in the room.
|
||||
|
||||
@return the trust level.
|
||||
*/
|
||||
- (RoomEncryptionTrustLevel)roomEncryptionTrustLevel;
|
||||
|
||||
@end
|
||||
|
||||
@@ -47,4 +47,31 @@
|
||||
mxkImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
}
|
||||
|
||||
- (RoomEncryptionTrustLevel)roomEncryptionTrustLevel
|
||||
{
|
||||
RoomEncryptionTrustLevel roomEncryptionTrustLevel = RoomEncryptionTrustLevelUnknown;
|
||||
if (self.trust)
|
||||
{
|
||||
double trustedDevicesPercentage = self.trust.trustedDevicesProgress.fractionCompleted;
|
||||
|
||||
if (trustedDevicesPercentage >= 1.0
|
||||
|| self.trust.trustedDevicesProgress.totalUnitCount == 0)
|
||||
{
|
||||
roomEncryptionTrustLevel = RoomEncryptionTrustLevelTrusted;
|
||||
}
|
||||
else if (trustedDevicesPercentage == 0.0)
|
||||
{
|
||||
roomEncryptionTrustLevel = RoomEncryptionTrustLevelNormal;
|
||||
}
|
||||
else
|
||||
{
|
||||
roomEncryptionTrustLevel = RoomEncryptionTrustLevelWarning;
|
||||
}
|
||||
|
||||
roomEncryptionTrustLevel = roomEncryptionTrustLevel;
|
||||
}
|
||||
|
||||
return roomEncryptionTrustLevel;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -137,7 +137,15 @@ static const CGFloat kDirectRoomBorderWidth = 3.0;
|
||||
|
||||
self.directRoomBorderView.hidden = !roomCellData.roomSummary.room.isDirect;
|
||||
|
||||
self.encryptedRoomIcon.hidden = !roomCellData.roomSummary.isEncrypted;
|
||||
if (roomCellData.roomSummary.isEncrypted)
|
||||
{
|
||||
self.encryptedRoomIcon.hidden = NO;
|
||||
self.encryptedRoomIcon.image = [self shieldImageForTrustLevel:roomCellData.roomSummary.roomEncryptionTrustLevel];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.encryptedRoomIcon.hidden = YES;
|
||||
}
|
||||
|
||||
[roomCellData.roomSummary setRoomAvatarImageIn:self.roomAvatar];
|
||||
}
|
||||
@@ -153,4 +161,32 @@ static const CGFloat kDirectRoomBorderWidth = 3.0;
|
||||
return 74;
|
||||
}
|
||||
|
||||
- (UIImage*)shieldImageForTrustLevel:(RoomEncryptionTrustLevel)roomEncryptionTrustLevel
|
||||
{
|
||||
UIImage *shieldImage;
|
||||
|
||||
NSString *encryptionIconName;
|
||||
switch (roomEncryptionTrustLevel)
|
||||
{
|
||||
case RoomEncryptionTrustLevelWarning:
|
||||
encryptionIconName = @"encryption_warning";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelNormal:
|
||||
encryptionIconName = @"encryption_normal";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelTrusted:
|
||||
encryptionIconName = @"encryption_trusted";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelUnknown:
|
||||
encryptionIconName = @"encryption_normal";
|
||||
break;
|
||||
}
|
||||
|
||||
if (encryptionIconName)
|
||||
{
|
||||
shieldImage = [UIImage imageNamed:encryptionIconName];
|
||||
}
|
||||
return shieldImage;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -159,7 +159,15 @@ static const CGFloat kDirectRoomBorderWidth = 3.0;
|
||||
|
||||
self.directRoomBorderView.hidden = !roomCellData.roomSummary.room.isDirect;
|
||||
|
||||
self.encryptedRoomIcon.hidden = !roomCellData.roomSummary.isEncrypted;
|
||||
if (roomCellData.roomSummary.isEncrypted)
|
||||
{
|
||||
self.encryptedRoomIcon.hidden = NO;
|
||||
self.encryptedRoomIcon.image = [self shieldImageForTrustLevel:roomCellData.roomSummary.roomEncryptionTrustLevel];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.encryptedRoomIcon.hidden = YES;
|
||||
}
|
||||
|
||||
[roomCellData.roomSummary setRoomAvatarImageIn:self.roomAvatar];
|
||||
}
|
||||
@@ -207,5 +215,33 @@ static const CGFloat kDirectRoomBorderWidth = 3.0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (UIImage*)shieldImageForTrustLevel:(RoomEncryptionTrustLevel)roomEncryptionTrustLevel
|
||||
{
|
||||
UIImage *shieldImage;
|
||||
|
||||
NSString *encryptionIconName;
|
||||
switch (roomEncryptionTrustLevel)
|
||||
{
|
||||
case RoomEncryptionTrustLevelWarning:
|
||||
encryptionIconName = @"encryption_warning";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelNormal:
|
||||
encryptionIconName = @"encryption_normal";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelTrusted:
|
||||
encryptionIconName = @"encryption_trusted";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelUnknown:
|
||||
encryptionIconName = @"encryption_normal";
|
||||
break;
|
||||
}
|
||||
|
||||
if (encryptionIconName)
|
||||
{
|
||||
shieldImage = [UIImage imageNamed:encryptionIconName];
|
||||
}
|
||||
return shieldImage;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -19,15 +19,7 @@
|
||||
|
||||
#import "WidgetManager.h"
|
||||
|
||||
/**
|
||||
RoomEncryptionTrustLevel represents the room members trust level in an encrypted room.
|
||||
*/
|
||||
typedef NS_ENUM(NSUInteger, RoomEncryptionTrustLevel) {
|
||||
RoomEncryptionTrustLevelTrusted,
|
||||
RoomEncryptionTrustLevelWarning,
|
||||
RoomEncryptionTrustLevelNormal,
|
||||
RoomEncryptionTrustLevelUnknown
|
||||
};
|
||||
#import "MXRoomSummary+Riot.h"
|
||||
|
||||
@protocol RoomDataSourceDelegate;
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
NSLog(@"[MXKRoomDataSource] finalizeRoomDataSource: Cannot retrieve all room members");
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
if (self.room.summary.isEncrypted)
|
||||
{
|
||||
[self fetchEncryptionTrustedLevel];
|
||||
@@ -193,85 +193,27 @@
|
||||
|
||||
- (void)registerTrustLevelDidChangeNotifications
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceInfoTrustLevelDidChange:) name:MXDeviceInfoTrustLevelDidChangeNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(crossSigningInfoTrustLevelDidChange:) name:MXCrossSigningInfoTrustLevelDidChangeNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(roomSummaryDidChange:) name:kMXRoomSummaryDidChangeNotification object:self.room.summary];
|
||||
}
|
||||
|
||||
- (void)deviceInfoTrustLevelDidChange:(NSNotification*)notification
|
||||
{
|
||||
MXDeviceInfo *deviceInfo = notification.object;
|
||||
|
||||
NSString *userId = deviceInfo.userId;
|
||||
|
||||
if (userId)
|
||||
{
|
||||
[self encryptionTrustLevelDidChangeRelatedToUserId:userId forceDownload:NO];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)crossSigningInfoTrustLevelDidChange:(NSNotification*)notification
|
||||
{
|
||||
MXCrossSigningInfo *crossSigningInfo = notification.object;
|
||||
|
||||
NSString *userId = crossSigningInfo.userId;
|
||||
|
||||
if (userId)
|
||||
{
|
||||
[self encryptionTrustLevelDidChangeRelatedToUserId:userId forceDownload:NO];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)fetchEncryptionTrustedLevel
|
||||
{
|
||||
[self encryptionTrustLevelDidChangeRelatedToUserId:self.mxSession.myUser.userId forceDownload:YES];
|
||||
}
|
||||
|
||||
- (void)encryptionTrustLevelDidChangeRelatedToUserId:(NSString*)userId forceDownload:(BOOL)forceDownload
|
||||
- (void)roomSummaryDidChange:(NSNotification*)notification
|
||||
{
|
||||
if (!self.room.summary.isEncrypted)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
[self.room members:^(MXRoomMembers *roomMembers) {
|
||||
MXRoomMember *roomMember = [roomMembers memberWithUserId:userId];
|
||||
|
||||
// If user belongs to the room refresh the trust level
|
||||
if (roomMember)
|
||||
{
|
||||
[self.room membersTrustLevelSummaryWithForceDownload:forceDownload success:^(MXUsersTrustLevelSummary *usersTrustLevelSummary) {
|
||||
|
||||
RoomEncryptionTrustLevel roomEncryptionTrustLevel;
|
||||
|
||||
double trustedDevicesPercentage = usersTrustLevelSummary.trustedDevicesProgress.fractionCompleted;
|
||||
|
||||
if (trustedDevicesPercentage >= 1.0
|
||||
|| usersTrustLevelSummary.trustedDevicesProgress.totalUnitCount == 0)
|
||||
{
|
||||
roomEncryptionTrustLevel = RoomEncryptionTrustLevelTrusted;
|
||||
}
|
||||
else if (trustedDevicesPercentage == 0.0)
|
||||
{
|
||||
roomEncryptionTrustLevel = RoomEncryptionTrustLevelNormal;
|
||||
}
|
||||
else
|
||||
{
|
||||
roomEncryptionTrustLevel = RoomEncryptionTrustLevelWarning;
|
||||
}
|
||||
|
||||
self.encryptionTrustLevel = roomEncryptionTrustLevel;
|
||||
[self.roomDataSourceDelegate roomDataSource:self didUpdateEncryptionTrustLevel:roomEncryptionTrustLevel];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"[RoomDataSource] trustLevelDidChangeRelatedToUserId fails to retrieve room members trusted progress");
|
||||
}];
|
||||
}
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"[RoomDataSource] trustLevelDidChangeRelatedToUserId fails to retrieve room members");
|
||||
}];
|
||||
[self fetchEncryptionTrustedLevel];
|
||||
}
|
||||
|
||||
- (void)fetchEncryptionTrustedLevel
|
||||
{
|
||||
self.encryptionTrustLevel = self.room.summary.roomEncryptionTrustLevel;
|
||||
[self.roomDataSourceDelegate roomDataSource:self didUpdateEncryptionTrustLevel:self.encryptionTrustLevel];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
|
||||
@@ -71,7 +71,15 @@
|
||||
|
||||
self.directRoomBorderView.hidden = !roomCellData.roomSummary.isDirect;
|
||||
|
||||
self.encryptedRoomIcon.hidden = !roomCellData.roomSummary.isEncrypted;
|
||||
if (roomCellData.roomSummary.isEncrypted)
|
||||
{
|
||||
self.encryptedRoomIcon.hidden = NO;
|
||||
self.encryptedRoomIcon.image = [self shieldImageForTrustLevel:roomCellData.roomSummary.roomEncryptionTrustLevel];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.encryptedRoomIcon.hidden = YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,4 +88,32 @@
|
||||
return 74;
|
||||
}
|
||||
|
||||
- (UIImage*)shieldImageForTrustLevel:(RoomEncryptionTrustLevel)roomEncryptionTrustLevel
|
||||
{
|
||||
UIImage *shieldImage;
|
||||
|
||||
NSString *encryptionIconName;
|
||||
switch (roomEncryptionTrustLevel)
|
||||
{
|
||||
case RoomEncryptionTrustLevelWarning:
|
||||
encryptionIconName = @"encryption_warning";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelNormal:
|
||||
encryptionIconName = @"encryption_normal";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelTrusted:
|
||||
encryptionIconName = @"encryption_trusted";
|
||||
break;
|
||||
case RoomEncryptionTrustLevelUnknown:
|
||||
encryptionIconName = @"encryption_normal";
|
||||
break;
|
||||
}
|
||||
|
||||
if (encryptionIconName)
|
||||
{
|
||||
shieldImage = [UIImage imageNamed:encryptionIconName];
|
||||
}
|
||||
return shieldImage;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user