Move composer send media selection to it's own coordinator and us e ioS 15 api for sheet

This commit is contained in:
David Langley
2022-10-08 10:46:05 +01:00
parent ae9e05f353
commit d54bcd5a97
13 changed files with 395 additions and 235 deletions
+70 -30
View File
@@ -97,7 +97,7 @@ static CGSize kThreadListBarButtonItemImageSize;
@interface RoomViewController () <UISearchBarDelegate, UIGestureRecognizerDelegate, UIScrollViewAccessibilityDelegate, RoomTitleViewTapGestureDelegate, MXKRoomMemberDetailsViewControllerDelegate, ContactsTableViewControllerDelegate, MXServerNoticesDelegate, RoomContextualMenuViewControllerDelegate,
ReactionsMenuViewModelCoordinatorDelegate, EditHistoryCoordinatorBridgePresenterDelegate, MXKDocumentPickerPresenterDelegate, EmojiPickerCoordinatorBridgePresenterDelegate,
ReactionHistoryCoordinatorBridgePresenterDelegate, CameraPresenterDelegate, MediaPickerCoordinatorBridgePresenterDelegate,
RoomDataSourceDelegate, RoomCreationModalCoordinatorBridgePresenterDelegate, RoomInfoCoordinatorBridgePresenterDelegate, DialpadViewControllerDelegate, RemoveJitsiWidgetViewDelegate, VoiceMessageControllerDelegate, SpaceDetailPresenterDelegate, UserSuggestionCoordinatorBridgeDelegate, ThreadsCoordinatorBridgePresenterDelegate, ThreadsBetaCoordinatorBridgePresenterDelegate, MXThreadingServiceDelegate, RoomParticipantsInviteCoordinatorBridgePresenterDelegate, RoomInputToolbarViewDelegate>
RoomDataSourceDelegate, RoomCreationModalCoordinatorBridgePresenterDelegate, RoomInfoCoordinatorBridgePresenterDelegate, DialpadViewControllerDelegate, RemoveJitsiWidgetViewDelegate, VoiceMessageControllerDelegate, SpaceDetailPresenterDelegate, UserSuggestionCoordinatorBridgeDelegate, ThreadsCoordinatorBridgePresenterDelegate, ThreadsBetaCoordinatorBridgePresenterDelegate, MXThreadingServiceDelegate, RoomParticipantsInviteCoordinatorBridgePresenterDelegate, RoomInputToolbarViewDelegate, ComposerCreateActionListBridgePresenterDelegate>
{
// The preview header
@@ -209,6 +209,7 @@ static CGSize kThreadListBarButtonItemImageSize;
@property (nonatomic, strong) ThreadsCoordinatorBridgePresenter *threadsBridgePresenter;
@property (nonatomic, strong) ThreadsBetaCoordinatorBridgePresenter *threadsBetaBridgePresenter;
@property (nonatomic, strong) SlidingModalPresenter *threadsNoticeModalPresenter;
@property (nonatomic, strong) ComposerCreateActionListBridgePresenter *composerCreateActionListBridgePresenter;
@property (nonatomic, getter=isActivitiesViewExpanded) BOOL activitiesViewExpanded;
@property (nonatomic, getter=isScrollToBottomHidden) BOOL scrollToBottomHidden;
@property (nonatomic, getter=isMissedDiscussionsBadgeHidden) BOOL missedDiscussionsBadgeHidden;
@@ -2252,35 +2253,6 @@ static CGSize kThreadListBarButtonItemImageSize;
- (void)setupActions {
if (@available(iOS 16.0, *)) {
if ([self.inputToolbarView isKindOfClass:WysiwygInputToolbarView.class]) {
//TODO actions should respect the build settings/preferences as with the legacy view just below
((WysiwygInputToolbarView *) self.inputToolbarView).startModuleAction = ^(enum ComposerModule module) {
switch (module) {
case ComposerModulePhotoLibrary:
[self showMediaPickerAnimated:YES];
break;
case ComposerModuleStickers:
[self roomInputToolbarViewPresentStickerPicker];
break;
case ComposerModuleAttachments:
[self roomInputToolbarViewDidTapFileUpload];
break;
case ComposerModulePolls:
[self.delegate roomViewControllerDidRequestPollCreationFormPresentation:self];
break;
case ComposerModuleLocation:
[self.delegate roomViewControllerDidRequestLocationSharingFormPresentation:self];
break;
case ComposerModuleCamera:
[self showCameraControllerAnimated:YES];
break;
}
};
}
}
if (![self.inputToolbarView isKindOfClass:RoomInputToolbarView.class]) {
return;
}
@@ -5003,6 +4975,39 @@ static CGSize kThreadListBarButtonItemImageSize;
}];
}
- (void)roomInputToolbarViewShowSendMediaActions:(MXKRoomInputToolbarView *)toolbarView
{
NSMutableArray *actionItems = [NSMutableArray new];
if (RiotSettings.shared.roomScreenAllowMediaLibraryAction)
{
[actionItems addObject:@(ComposerCreateActionPhotoLibrary)];
}
if (RiotSettings.shared.roomScreenAllowStickerAction && !self.isNewDirectChat)
{
[actionItems addObject:@(ComposerCreateActionStickers)];
}
if (RiotSettings.shared.roomScreenAllowFilesAction)
{
[actionItems addObject:@(ComposerCreateActionAttachments)];
}
if (BuildSettings.pollsEnabled && self.displayConfiguration.sendingPollsEnabled && !self.isNewDirectChat)
{
[actionItems addObject:@(ComposerCreateActionPolls)];
}
if (BuildSettings.locationSharingEnabled && !self.isNewDirectChat)
{
[actionItems addObject:@(ComposerCreateActionLocation)];
}
if (RiotSettings.shared.roomScreenAllowCameraAction)
{
[actionItems addObject:@(ComposerCreateActionCamera)];
}
self.composerCreateActionListBridgePresenter = [[ComposerCreateActionListBridgePresenter alloc] initWithActions:actionItems];
self.composerCreateActionListBridgePresenter.delegate = self;
[self.composerCreateActionListBridgePresenter presentFrom:self animated:YES];
}
- (void)roomInputToolbarView:(RoomInputToolbarView *)toolbarView sendAttributedTextMessage:(NSAttributedString *)attributedTextMessage
{
// Create before sending the message in case of a discussion (direct chat)
@@ -7906,4 +7911,39 @@ static CGSize kThreadListBarButtonItemImageSize;
}
}
#pragma mark - ComposerCreateActionListBridgePresenter
- (void)composerCreateActionListBridgePresenterDelegateDidComplete:(ComposerCreateActionListBridgePresenter *)coordinatorBridgePresenter action:(enum ComposerCreateAction)action
{
[coordinatorBridgePresenter dismissWithAnimated:true completion:^{
switch (action) {
case ComposerCreateActionPhotoLibrary:
[self showMediaPickerAnimated:YES];
break;
case ComposerCreateActionStickers:
[self roomInputToolbarViewPresentStickerPicker];
break;
case ComposerCreateActionAttachments:
[self roomInputToolbarViewDidTapFileUpload];
break;
case ComposerCreateActionPolls:
[self.delegate roomViewControllerDidRequestPollCreationFormPresentation:self];
break;
case ComposerCreateActionLocation:
[self.delegate roomViewControllerDidRequestLocationSharingFormPresentation:self];
break;
case ComposerCreateActionCamera:
[self showCameraControllerAnimated:YES];
break;
}
self.composerCreateActionListBridgePresenter = nil;
}];
}
- (void)composerCreateActionListBridgePresenterDidDismissInteractively:(ComposerCreateActionListBridgePresenter *)coordinatorBridgePresenter
{
self.composerCreateActionListBridgePresenter = nil;
}
@end