Feature/2099 personal state

This commit is contained in:
Arnfried Griesert
2022-06-29 11:08:57 +00:00
parent 7cdd0bf37f
commit 125e3b5362
9 changed files with 253 additions and 10 deletions
@@ -104,6 +104,12 @@ typedef BOOL (^MXKAccountOnCertificateChange)(MXKAccount *mxAccount, NSData *cer
*/
@property (nonatomic, readonly) MXPresence userPresence;
/**
The account user's status message (empty string by default).
The notification `kMXKAccountUserInfoDidChangeNotification` is posted in case of change of this property.
*/
@property (nonatomic, readonly) NSString *userStatusMessage;
/**
The account user's tint color: a unique color fixed by the user id. This tint color may be used to highlight
rooms which belong to this account's user.
@@ -282,6 +288,15 @@ typedef BOOL (^MXKAccountOnCertificateChange)(MXKAccount *mxAccount, NSData *cer
*/
- (void)setUserAvatarUrl:(NSString*)avatarUrl success:(void (^)(void))success failure:(void (^)(NSError *error))failure;
/**
Set the avatar url of the account user.
@param presence The users presence state.
@param statusMessage A custom text defined by the user that shows its current state.
@param completion Completion handler.
*/
- (void)setUserPresence:(MXPresence)presence andStatusMessage:(NSString *)statusMessage completion:(void (^)(void))completion;
/**
Update the account password.
@@ -146,7 +146,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
[self prepareRESTClient];
userPresence = MXPresenceUnknown;
// Refresh device information
[self loadDeviceInformation:nil failure:nil];
@@ -181,7 +181,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
[self registerIdentityServiceDidChangeAccessTokenNotification];
userPresence = MXPresenceUnknown;
// Refresh device information
[self loadDeviceInformation:nil failure:nil];
}
@@ -261,6 +261,15 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
}
}
- (NSString*)userStatusMessage
{
if (mxSession)
{
return mxSession.myUser.statusMsg;
}
return nil;
}
- (NSArray<NSString *> *)linkedEmails
{
NSMutableArray<NSString *> *linkedEmails = [NSMutableArray array];
@@ -664,7 +673,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
{
userPresence = presence;
if (mxSession && !hideUserPresence)
if (mxSession && (!hideUserPresence || BuildSettings.bwiPersonalState))
{
// Update user presence on server side
[mxSession.myUser setPresence:userPresence
@@ -679,12 +688,12 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKAccountUserInfoDidChangeNotification object:self.mxCredentials.userId];
}
failure:^(NSError *error) {
MXLogDebug(@"[MXKAccount] %@: set user presence (%lu) failed", self.mxCredentials.userId, (unsigned long)self->userPresence);
MXLogDebug(@"[MXKAccount] %@: set user presence (%lu) and status message (%@) failed", self.mxCredentials.userId, (unsigned long)self->userPresence, self.userStatusMessage);
}];
}
else if (hideUserPresence)
{
MXLogDebug(@"[MXKAccount] %@: set user presence is disabled.", self.mxCredentials.userId);
MXLogDebug(@"[MXKAccount] %@: set user presence and status message is disabled.", self.mxCredentials.userId);
}
}
@@ -1008,7 +1017,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
// Update user presence
MXWeakify(self);
[self setUserPresence:MXPresenceOffline andStatusMessage:nil completion:^{
[self setUserPresence:MXPresenceOffline andStatusMessage:self.userStatusMessage completion:^{
MXStrongifyAndReturnIfNil(self);
[self cancelPauseBackgroundTask];
}];
@@ -1049,7 +1058,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
MXWeakify(self);
[mxSession resume:^{
MXStrongifyAndReturnIfNil(self);
[self setUserPresence:self.preferredSyncPresence andStatusMessage:nil completion:nil];
[self setUserPresence:MXPresenceOffline andStatusMessage:self.userStatusMessage completion:nil];
[self refreshAPNSPusher];
[self refreshPushKitPusher];
@@ -1516,7 +1525,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
MXLogDebug(@"[MXKAccount] %@: The session is ready. Matrix SDK session has been started in %0.fms.", self.mxCredentials.userId, [[NSDate date] timeIntervalSinceDate:self->openSessionStartDate] * 1000);
[self setUserPresence:self.preferredSyncPresence andStatusMessage:nil completion:nil];
[self setUserPresence:MXPresenceOffline andStatusMessage:self.userStatusMessage completion:nil];
} failure:^(NSError *error) {
MXStrongifyAndReturnIfNil(self);
@@ -2171,7 +2180,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
if (self.mxSession)
{
self.mxSession.preferredSyncPresence = preferredSyncPresence;
[self setUserPresence:preferredSyncPresence andStatusMessage:nil completion:nil];
[self setUserPresence:MXPresenceOffline andStatusMessage:self.userStatusMessage completion:nil];
}
// Archive updated field