Display info dialogs when we prevent the user from starting a new voice broadcast

- Update the existing implementation used to start/stop a voice broadcast in order to handle the different cases where voice broadcast is denied
- Add the optional Voice broadcast action to the new wysiwyg composer
This commit is contained in:
Giom Foret
2022-10-20 00:38:42 +02:00
parent 24f0671a73
commit 16f57eaf3e
5 changed files with 98 additions and 24 deletions
+59 -24
View File
@@ -1775,15 +1775,20 @@ static CGSize kThreadListBarButtonItemImageSize;
|| self.customizedRoomDataSource.jitsiWidget;
}
- (BOOL)canSendStateEventWithType:(MXEventTypeString)eventTypeString
{
MXRoomPowerLevels *powerLevels = [self.roomDataSource.roomState powerLevels];
NSInteger requiredPower = [powerLevels minimumPowerLevelForSendingEventAsStateEvent:eventTypeString];
NSInteger myPower = [powerLevels powerLevelOfUserWithUserID:self.roomDataSource.mxSession.myUserId];
return myPower >= requiredPower;
}
/**
Returns a flag for the current user whether it's privileged to add/remove Jitsi widgets to this room.
*/
- (BOOL)canEditJitsiWidget
{
MXRoomPowerLevels *powerLevels = [self.roomDataSource.roomState powerLevels];
NSInteger requiredPower = [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kWidgetModularEventTypeString];
NSInteger myPower = [powerLevels powerLevelOfUserWithUserID:self.roomDataSource.mxSession.myUserId];
return myPower >= requiredPower;
return [self canSendStateEventWithType:kWidgetModularEventTypeString];
}
- (void)registerURLPreviewNotifications
@@ -2327,26 +2332,7 @@ static CGSize kThreadListBarButtonItemImageSize;
if ([self.inputToolbarView isKindOfClass:RoomInputToolbarView.class]) {
((RoomInputToolbarView *) self.inputToolbarView).actionMenuOpened = NO;
}
// TODO: Init and start voice broadcast
MXSession* session = self.roomDataSource.mxSession;
[session getOrCreateVoiceBroadcastServiceFor:self.roomDataSource.room completion:^(VoiceBroadcastService *voiceBroadcastService) {
if (voiceBroadcastService) {
if ([VoiceBroadcastInfo isStoppedFor:[voiceBroadcastService getState]]) {
[session.voiceBroadcastService startVoiceBroadcastWithSuccess:^(NSString * _Nullable success) {
} failure:^(NSError * _Nonnull error) {
}];
} else {
[session.voiceBroadcastService stopVoiceBroadcastWithSuccess:^(NSString * _Nullable success) {
} failure:^(NSError * _Nonnull error) {
}];
}
}
}];
[self roomInputToolbarViewDidTapVoiceBroadcast];
}]];
}
roomInputView.actionsBar.actionItems = actionItems;
@@ -2436,6 +2422,48 @@ static CGSize kThreadListBarButtonItemImageSize;
self.documentPickerPresenter = documentPickerPresenter;
}
- (void)roomInputToolbarViewDidTapVoiceBroadcast
{
// Check first the room permission
if (![self canSendStateEventWithType:VoiceBroadcastSettings.eventType])
{
[self showAlertWithTitle:[VectorL10n voiceBroadcastUnauthorizedTitle] message:[VectorL10n voiceBroadcastPermissionDeniedMessage]];
return;
}
MXSession* session = self.roomDataSource.mxSession;
// Check whether the user is not already broadcasting here or in another room
if (session.voiceBroadcastService)
{
[self showAlertWithTitle:[VectorL10n voiceBroadcastUnauthorizedTitle] message:[VectorL10n voiceBroadcastAlreadyInProgressMessage]];
//*** Temporary code - To be removed ***
// We stop here the current voice broadcasting (required until the actual stop button is available)
[session.voiceBroadcastService stopVoiceBroadcastWithSuccess:^(NSString * _Nullable success) {
[session tearDownVoiceBroadcastService];
} failure:^(NSError * _Nonnull error) {
}];
//*** End ***
return;
}
// Request the voice broadcast service to start recording - No service is returned if someone else is already broadcasting in the room
[session getOrCreateVoiceBroadcastServiceFor:self.roomDataSource.room completion:^(VoiceBroadcastService *voiceBroadcastService) {
if (voiceBroadcastService) {
[voiceBroadcastService startVoiceBroadcastWithSuccess:^(NSString * _Nullable success) {
} failure:^(NSError * _Nonnull error) {
}];
}
else
{
[self showAlertWithTitle:[VectorL10n voiceBroadcastUnauthorizedTitle] message:[VectorL10n voiceBroadcastBlockedBySomeoneElseMessage]];
}
}];
}
/**
Send a video asset via the room input toolbar prompting the user for the conversion preset to use
if the `showMediaCompressionPrompt` setting has been enabled.
@@ -5070,6 +5098,10 @@ static CGSize kThreadListBarButtonItemImageSize;
{
[actionItems addObject:@(ComposerCreateActionAttachments)];
}
if (RiotSettings.shared.enableVoiceBroadcast && !self.isNewDirectChat)
{
[actionItems addObject:@(ComposerCreateActionVoiceBroadcast)];
}
if (BuildSettings.pollsEnabled && self.displayConfiguration.sendingPollsEnabled && !self.isNewDirectChat)
{
[actionItems addObject:@(ComposerCreateActionPolls)];
@@ -8007,6 +8039,9 @@ static CGSize kThreadListBarButtonItemImageSize;
case ComposerCreateActionAttachments:
[self roomInputToolbarViewDidTapFileUpload];
break;
case ComposerCreateActionVoiceBroadcast:
[self roomInputToolbarViewDidTapVoiceBroadcast];
break;
case ComposerCreateActionPolls:
[self.delegate roomViewControllerDidRequestPollCreationFormPresentation:self];
break;