Replaced photo and video picker in new composer

This commit is contained in:
Arnfried Griesert
2024-01-30 05:29:35 +01:00
parent 0031ec044f
commit a1e169f1f1
+67 -4
View File
@@ -89,6 +89,9 @@
#import "GeneratedInterface-Swift.h"
#import <PhotosUI/PhotosUI.h>
#import <UniformTypeIdentifiers/UniformTypeIdentifiers.h>
NSNotificationName const RoomCallTileTappedNotification = @"RoomCallTileTappedNotification";
NSNotificationName const RoomGroupCallTileTappedNotification = @"RoomGroupCallTileTappedNotification";
const NSTimeInterval kResizeComposerAnimationDuration = .05;
@@ -100,7 +103,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, CompletionSuggestionCoordinatorBridgeDelegate, ThreadsCoordinatorBridgePresenterDelegate, ThreadsBetaCoordinatorBridgePresenterDelegate, MXThreadingServiceDelegate, RoomParticipantsInviteCoordinatorBridgePresenterDelegate, RoomInputToolbarViewDelegate, ComposerCreateActionListBridgePresenterDelegate>
RoomDataSourceDelegate, RoomCreationModalCoordinatorBridgePresenterDelegate, RoomInfoCoordinatorBridgePresenterDelegate, DialpadViewControllerDelegate, RemoveJitsiWidgetViewDelegate, VoiceMessageControllerDelegate, SpaceDetailPresenterDelegate, CompletionSuggestionCoordinatorBridgeDelegate, ThreadsCoordinatorBridgePresenterDelegate, ThreadsBetaCoordinatorBridgePresenterDelegate, MXThreadingServiceDelegate, RoomParticipantsInviteCoordinatorBridgePresenterDelegate, RoomInputToolbarViewDelegate, ComposerCreateActionListBridgePresenterDelegate, PHPickerViewControllerDelegate>
{
// The preview header
@@ -2334,9 +2337,24 @@ static CGSize kThreadListBarButtonItemImageSize;
sourceView = self.inputToolbarView;
}
[mediaPickerPresenter presentFrom:self sourceView:sourceView sourceRect:sourceView.bounds animated:YES];
self.mediaPickerPresenter = mediaPickerPresenter;
if(BWIBuildSettings.shared.useNewPhotosPickerAPI) {
PHPhotoLibrary *sharedPhotoLibrary = [PHPhotoLibrary sharedPhotoLibrary];
PHPickerConfiguration *configuration = [[PHPickerConfiguration alloc] initWithPhotoLibrary:sharedPhotoLibrary];
configuration.filter = [PHPickerFilter anyFilterMatchingSubfilters:@[PHPickerFilter.imagesFilter, PHPickerFilter.videosFilter]];
configuration.preferredAssetRepresentationMode = PHPickerConfigurationAssetRepresentationModeCompatible;
configuration.selection = PHPickerConfigurationSelectionDefault;
configuration.selectionLimit = 1;
configuration.preselectedAssetIdentifiers = @[];
PHPickerViewController *pickerViewController = [[PHPickerViewController alloc] initWithConfiguration:configuration];
pickerViewController.delegate = self;
[self presentViewController:pickerViewController animated:YES completion:nil];
} else {
[mediaPickerPresenter presentFrom:self sourceView:sourceView sourceRect:sourceView.bounds animated:YES];
self.mediaPickerPresenter = mediaPickerPresenter;
}
}
- (void)showRoomCreationModal
@@ -8031,6 +8049,51 @@ static CGSize kThreadListBarButtonItemImageSize;
}];
}
#pragma mark - PHPickerViewControllerDelegate
- (void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results
{
[picker dismissViewControllerAnimated:YES completion:nil];
if (results.firstObject) {
NSItemProvider *itemProvider = results.firstObject.itemProvider;
if ([itemProvider canLoadObjectOfClass:[UIImage class]]) {
[itemProvider loadObjectOfClass:[UIImage class] completionHandler:^(id _Nullable object, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if ([object isKindOfClass:[UIImage class]]) {
[self createDiscussionIfNeeded:^(BOOL readyToSend) {
if (readyToSend && [self inputToolbarConformsToToolbarViewProtocol])
{
UIImage *image = object;
NSData *imageData = [image dataForPNGRepresentation];
if(imageData) {
[self.inputToolbarView sendSelectedImage:imageData
withMimeType:@"image/png"
andCompressionMode:MediaCompressionHelper.defaultCompressionMode
isPhotoLibraryAsset:YES];
}
}
}];
}
});
}];
} else if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)UTTypeMovie]) {
[itemProvider loadItemForTypeIdentifier:(NSString *)UTTypeMovie options:nil completionHandler:^(id _Nullable object, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if ([object isKindOfClass:[NSURL class]]) {
NSURL *url = object;
if(url) {
AVURLAsset *selectedVideo = [AVURLAsset assetWithURL:url];
[self sendVideoAsset:selectedVideo isPhotoLibraryAsset:NO];
}
}
});
}];
}
}
}
#pragma mark - RoomCreationModalCoordinatorBridgePresenter
- (void)roomCreationModalCoordinatorBridgePresenterDelegateDidComplete:(RoomCreationModalCoordinatorBridgePresenter *)coordinatorBridgePresenter