diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index 50eba1739..46327a0e8 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -125,7 +125,7 @@ @interface RoomViewController () + ReactionHistoryCoordinatorBridgePresenterDelegate, CameraPresenterDelegate, MediaPickerCoordinatorBridgePresenterDelegate> { // The expanded header ExpandedRoomTitleView *expandedHeader; @@ -226,6 +226,8 @@ @property (nonatomic, strong) MXKDocumentPickerPresenter *documentPickerPresenter; @property (nonatomic, strong) EmojiPickerCoordinatorBridgePresenter *emojiPickerCoordinatorBridgePresenter; @property (nonatomic, strong) ReactionHistoryCoordinatorBridgePresenter *reactionHistoryCoordinatorBridgePresenter; +@property (nonatomic, strong) CameraPresenter *cameraPresenter; +@property (nonatomic, strong) MediaPickerCoordinatorBridgePresenter *mediaPickerPresenter; @end @@ -1548,6 +1550,39 @@ self.reactionHistoryCoordinatorBridgePresenter = presenter; } +- (void)showCameraControllerAnimated:(BOOL)animated +{ + CameraPresenter *cameraPresenter = [CameraPresenter new]; + cameraPresenter.delegate = self; + [cameraPresenter presentCameraFrom:self with:@[MXKUTI.image, MXKUTI.movie] animated:YES]; + + self.cameraPresenter = cameraPresenter; +} + + +- (void)showMediaPickerAnimated:(BOOL)animated +{ + MediaPickerCoordinatorBridgePresenter *mediaPickerPresenter = [[MediaPickerCoordinatorBridgePresenter alloc] initWithSession:self.mainSession mediaUTIs:@[MXKUTI.image, MXKUTI.movie] allowsMultipleSelection:YES]; + mediaPickerPresenter.delegate = self; + + UIView *sourceView; + + RoomInputToolbarView *roomInputToolbarView = [self inputToolbarViewAsRoomInputToolbarView]; + + if (roomInputToolbarView) + { + sourceView = roomInputToolbarView.attachMediaButton; + } + else + { + sourceView = self.inputToolbarView; + } + + [mediaPickerPresenter presentFrom:self sourceView:sourceView sourceRect:sourceView.bounds animated:YES]; + + self.mediaPickerPresenter = mediaPickerPresenter; +} + #pragma mark - Hide/Show expanded header - (void)showExpandedHeader:(BOOL)isVisible @@ -3398,6 +3433,16 @@ self.documentPickerPresenter = documentPickerPresenter; } +- (void)roomInputToolbarViewDidTapCamera:(MXKRoomInputToolbarView*)toolbarView +{ + [self showCameraControllerAnimated:YES]; +} + +- (void)roomInputToolbarViewDidTapMediaLibrary:(MXKRoomInputToolbarView*)toolbarView +{ + [self showMediaPickerAnimated:YES]; +} + #pragma mark - RoomParticipantsViewControllerDelegate - (void)roomParticipantsViewController:(RoomParticipantsViewController *)roomParticipantsViewController mention:(MXRoomMember*)member @@ -5504,5 +5549,81 @@ }]; } +#pragma mark - CameraPresenterDelegate + +- (void)cameraPresenterDidCancel:(CameraPresenter *)cameraPresenter +{ + [cameraPresenter dismissWithAnimated:YES completion:nil]; + self.cameraPresenter = nil; +} + +- (void)cameraPresenter:(CameraPresenter *)cameraPresenter didSelectImageData:(NSData *)imageData withUTI:(MXKUTI *)uti +{ + [cameraPresenter dismissWithAnimated:YES completion:nil]; + self.cameraPresenter = nil; + + RoomInputToolbarView *roomInputToolbarView = [self inputToolbarViewAsRoomInputToolbarView]; + if (roomInputToolbarView) + { + [roomInputToolbarView sendSelectedImage:imageData withMimeType:uti.mimeType andCompressionMode:MXKRoomInputToolbarCompressionModePrompt isPhotoLibraryAsset:NO]; + } +} + +- (void)cameraPresenter:(CameraPresenter *)cameraPresenter didSelectVideoAt:(NSURL *)url +{ + [cameraPresenter dismissWithAnimated:YES completion:nil]; + self.cameraPresenter = nil; + + RoomInputToolbarView *roomInputToolbarView = [self inputToolbarViewAsRoomInputToolbarView]; + if (roomInputToolbarView) + { + [roomInputToolbarView sendSelectedVideo:url isPhotoLibraryAsset:NO]; + } +} + +#pragma mark - MediaPickerCoordinatorBridgePresenterDelegate + +- (void)mediaPickerCoordinatorBridgePresenterDidCancel:(MediaPickerCoordinatorBridgePresenter *)coordinatorBridgePresenter +{ + [coordinatorBridgePresenter dismissWithAnimated:YES completion:nil]; + self.mediaPickerPresenter = nil; +} + +- (void)mediaPickerCoordinatorBridgePresenter:(MediaPickerCoordinatorBridgePresenter *)coordinatorBridgePresenter didSelectImageData:(NSData *)imageData withUTI:(MXKUTI *)uti +{ + [coordinatorBridgePresenter dismissWithAnimated:YES completion:nil]; + self.mediaPickerPresenter = nil; + + RoomInputToolbarView *roomInputToolbarView = [self inputToolbarViewAsRoomInputToolbarView]; + if (roomInputToolbarView) + { + [roomInputToolbarView sendSelectedImage:imageData withMimeType:uti.mimeType andCompressionMode:MXKRoomInputToolbarCompressionModePrompt isPhotoLibraryAsset:YES]; + } +} + +- (void)mediaPickerCoordinatorBridgePresenter:(MediaPickerCoordinatorBridgePresenter *)coordinatorBridgePresenter didSelectVideoAt:(NSURL *)url +{ + [coordinatorBridgePresenter dismissWithAnimated:YES completion:nil]; + self.mediaPickerPresenter = nil; + + RoomInputToolbarView *roomInputToolbarView = [self inputToolbarViewAsRoomInputToolbarView]; + if (roomInputToolbarView) + { + [roomInputToolbarView sendSelectedVideo:url isPhotoLibraryAsset:YES]; + } +} + +- (void)mediaPickerCoordinatorBridgePresenter:(MediaPickerCoordinatorBridgePresenter *)coordinatorBridgePresenter didSelectAssets:(NSArray *)assets +{ + [coordinatorBridgePresenter dismissWithAnimated:YES completion:nil]; + self.mediaPickerPresenter = nil; + + RoomInputToolbarView *roomInputToolbarView = [self inputToolbarViewAsRoomInputToolbarView]; + if (roomInputToolbarView) + { + [roomInputToolbarView sendSelectedAssets:assets withCompressionMode:MXKRoomInputToolbarCompressionModePrompt]; + } +} + @end