diff --git a/LegacyComponents/TGAttachmentCarouselItemView.m b/LegacyComponents/TGAttachmentCarouselItemView.m index 654e20afa3..1b04ca486d 100644 --- a/LegacyComponents/TGAttachmentCarouselItemView.m +++ b/LegacyComponents/TGAttachmentCarouselItemView.m @@ -66,6 +66,7 @@ const NSUInteger TGAttachmentDisplayedAssetLimit = 500; SMetaDisposable *_assetsDisposable; TGMediaAssetFetchResult *_fetchResult; + bool _document; bool _forProfilePhoto; SMetaDisposable *_selectionChangedDisposable; @@ -133,12 +134,13 @@ const NSUInteger TGAttachmentDisplayedAssetLimit = 500; #endif __weak TGAttachmentCarouselItemView *weakSelf = self; + _document = document; _forProfilePhoto = forProfilePhoto; _assetsLibrary = [TGMediaAssetsLibrary libraryForAssetType:assetType]; _assetsDisposable = [[SMetaDisposable alloc] init]; - if (!forProfilePhoto && !document) + if (!forProfilePhoto && !selfPortrait) { _selectionContext = [[TGMediaSelectionContext alloc] initWithGroupingAllowed:allowGrouping]; if (allowGrouping) @@ -257,15 +259,18 @@ const NSUInteger TGAttachmentDisplayedAssetLimit = 500; [_sendMediaItemView setHidden:true animated:false]; [self addSubview:_sendMediaItemView]; - _sendFileItemView = [[TGMenuSheetButtonItemView alloc] initWithTitle:nil type:TGMenuSheetButtonTypeDefault action:^ + if (!_document) { - __strong TGAttachmentCarouselItemView *strongSelf = weakSelf; - if (strongSelf != nil && strongSelf.sendPressed != nil) - strongSelf.sendPressed(nil, true); - }]; - _sendFileItemView.requiresDivider = false; - [_sendFileItemView setHidden:true animated:false]; - [self addSubview:_sendFileItemView]; + _sendFileItemView = [[TGMenuSheetButtonItemView alloc] initWithTitle:nil type:TGMenuSheetButtonTypeDefault action:^ + { + __strong TGAttachmentCarouselItemView *strongSelf = weakSelf; + if (strongSelf != nil && strongSelf.sendPressed != nil) + strongSelf.sendPressed(nil, true); + }]; + _sendFileItemView.requiresDivider = false; + [_sendFileItemView setHidden:true animated:false]; + [self addSubview:_sendFileItemView]; + } [self setSignal:[[TGMediaAssetsLibrary authorizationStatusSignal] mapToSignal:^SSignal *(NSNumber *statusValue) { @@ -553,6 +558,12 @@ const NSUInteger TGAttachmentDisplayedAssetLimit = 500; else [self setSelectedMode:activated animated:true]; + if (_document) + { + _sendMediaItemView.title = TGLocalized(@"Common.Done"); + return; + } + if (totalCount == 0) return; @@ -628,7 +639,7 @@ const NSUInteger TGAttachmentDisplayedAssetLimit = 500; { progress = zoomedIn ? progress : 1.0f - progress; - CGFloat correction = self.remainingHeight - 2 * TGMenuSheetButtonItemViewHeight; + CGFloat correction = self.remainingHeight - (_document ? 1 : 2) * TGMenuSheetButtonItemViewHeight; return -(correction * progress); } diff --git a/LegacyComponents/TGCameraController.m b/LegacyComponents/TGCameraController.m index 229dad280a..b794c0abf6 100644 --- a/LegacyComponents/TGCameraController.m +++ b/LegacyComponents/TGCameraController.m @@ -1226,7 +1226,7 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus } }]; - bool hasCamera = _intent == TGCameraControllerGenericIntent && !_shortcut; + bool hasCamera = (_intent == TGCameraControllerGenericIntent && !_shortcut) || (_intent == TGCameraControllerPassportIntent || _intent == TGCameraControllerPassportIdIntent); TGMediaPickerGalleryModel *model = [[TGMediaPickerGalleryModel alloc] initWithContext:windowContext items:galleryItems focusItem:focusItem selectionContext:_items.count > 1 ? selectionContext : nil editingContext:editingContext hasCaptions:self.allowCaptions allowCaptionEntities:self.allowCaptionEntities hasTimer:self.hasTimer onlyCrop:_intent == TGCameraControllerPassportIntent || _intent == TGCameraControllerPassportIdIntent inhibitDocumentCaptions:self.inhibitDocumentCaptions hasSelectionPanel:true hasCamera:hasCamera recipientName:self.recipientName]; model.controller = galleryController; model.suggestionContext = self.suggestionContext; diff --git a/LegacyComponents/TGPassportAttachMenu.m b/LegacyComponents/TGPassportAttachMenu.m index 5807ec7f79..f07ebf15e3 100644 --- a/LegacyComponents/TGPassportAttachMenu.m +++ b/LegacyComponents/TGPassportAttachMenu.m @@ -13,6 +13,18 @@ #import #import +@interface TGPassportDocumentPickerDelegate : NSObject +{ + TGPassportDocumentPickerDelegate *_self; +} + +@property (nonatomic, copy, readonly) void (^completionBlock)(TGPassportDocumentPickerDelegate *, NSArray *); + +- (instancetype)initWithCompletionBlock:(void (^)(TGPassportDocumentPickerDelegate *, NSArray *))completionBlock; +- (void)cleanup; + +@end + @implementation TGPassportAttachMenu + (TGMenuSheetController *)presentWithContext:(id)context parentController:(TGViewController *)parentController menuController:(TGMenuSheetController *)menuController title:(NSString *)title identity:(bool)identity selfie:(bool)selfie uploadAction:(void (^)(SSignal *, void (^)(void)))uploadAction sourceView:(UIView *)sourceView sourceRect:(CGRect (^)(void))sourceRect barButtonItem:(UIBarButtonItem *)barButtonItem @@ -87,6 +99,31 @@ }]; [itemViews addObject:galleryItem]; + if (iosMajorVersion() >= 8 && !selfie) + { + TGMenuSheetButtonItemView *icloudItem = [[TGMenuSheetButtonItemView alloc] initWithTitle:TGLocalized(@"Conversation.FileICloudDrive") type:TGMenuSheetButtonTypeDefault action:^ + { + __strong TGMenuSheetController *strongController = weakController; + if (strongController == nil) + return; + + __strong TGViewController *strongParentController = weakParentController; + if (strongParentController == nil) + return; + + [strongController dismissAnimated:true]; + [TGPassportAttachMenu _presentICloudPickerWithParentController:strongParentController uploadAction:uploadAction]; + }]; + [itemViews addObject:icloudItem]; + + carouselItem.underlyingViews = @[ galleryItem, icloudItem ]; + } + else + { + carouselItem.underlyingViews = @[ galleryItem ]; + } + carouselItem.remainingHeight = TGMenuSheetButtonItemViewHeight * (itemViews.count - 1); + TGMenuSheetButtonItemView *cancelItem = [[TGMenuSheetButtonItemView alloc] initWithTitle:TGLocalized(@"Common.Cancel") type:TGMenuSheetButtonTypeCancel action:^ { __strong TGMenuSheetController *strongController = weakController; @@ -186,6 +223,7 @@ __weak TGMediaAssetsController *weakController = controller; controller.singleCompletionBlock = ^(id currentItem, TGMediaEditingContext *editingContext) { + exit(1); uploadAction([TGPassportAttachMenu resultSignalForEditingContext:editingContext currentItem:(id)currentItem], ^{ __strong TGMediaAssetsController *strongController = weakController; @@ -327,6 +365,28 @@ }; } ++ (void)_presentICloudPickerWithParentController:(TGViewController *)parentController uploadAction:(void (^)(SSignal *, void (^)(void)))uploadAction +{ + TGPassportDocumentPickerDelegate *delegate = [[TGPassportDocumentPickerDelegate alloc] initWithCompletionBlock:^(TGPassportDocumentPickerDelegate *delegate, NSArray *urls) + { + if (urls.count > 0) + { + NSURL *url = urls.firstObject; + uploadAction([SSignal single:url], ^{}); + } + + [delegate cleanup]; + }]; + + UIDocumentPickerViewController *controller = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.image"] inMode:UIDocumentPickerModeOpen]; + controller.view.backgroundColor = [UIColor whiteColor]; + controller.delegate = delegate; + + if (TGIsPad()) + controller.modalPresentationStyle = UIModalPresentationFormSheet; + + [parentController presentViewController:controller animated:true completion:nil]; +} + (SSignal *)resultSignalForEditingContext:(TGMediaEditingContext *)editingContext currentItem:(id)currentItem { @@ -382,3 +442,42 @@ } @end + + +@implementation TGPassportDocumentPickerDelegate + +- (instancetype)initWithCompletionBlock:(void (^)(TGPassportDocumentPickerDelegate *, NSArray *))completionBlock +{ + self = [super init]; + if (self != nil) + { + _self = self; + _completionBlock = [completionBlock copy]; + } + return self; +} + +- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url +{ + if (self.completionBlock != nil) + self.completionBlock(self, @[url]); +} + +- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray *)urls +{ + if (self.completionBlock != nil) + self.completionBlock(self, urls); +} + +- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller +{ + if (self.completionBlock != nil) + self.completionBlock(self, nil); +} + +- (void)cleanup +{ + _self = nil; +} + +@end