mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-04 06:58:20 +02:00
Replaced photo and video picker in new composer
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user