diff --git a/Riot/Modules/Settings/SettingsViewController.h b/Riot/Modules/Settings/SettingsViewController.h index 2bca07caf..4bce2072b 100644 --- a/Riot/Modules/Settings/SettingsViewController.h +++ b/Riot/Modules/Settings/SettingsViewController.h @@ -20,7 +20,7 @@ #import "MediaPickerViewController.h" -@interface SettingsViewController : MXKTableViewController +@interface SettingsViewController : MXKTableViewController @end diff --git a/Riot/Modules/Settings/SettingsViewController.m b/Riot/Modules/Settings/SettingsViewController.m index 091cb5d20..e25f74020 100644 --- a/Riot/Modules/Settings/SettingsViewController.m +++ b/Riot/Modules/Settings/SettingsViewController.m @@ -20,10 +20,7 @@ #import -#import -#import #import -#import #import "AppDelegate.h" #import "AvatarGenerator.h" @@ -141,7 +138,8 @@ SettingsKeyBackupTableViewSectionDelegate, MXKEncryptionInfoViewDelegate, KeyBackupSetupCoordinatorBridgePresenterDelegate, KeyBackupRecoverCoordinatorBridgePresenterDelegate, -SignOutAlertPresenterDelegate> +SignOutAlertPresenterDelegate, +SingleImagePickerPresenterDelegate> { // Current alert (if any). UIAlertController *currentAlert; @@ -155,9 +153,6 @@ SignOutAlertPresenterDelegate> id notificationCenterDidUpdateObserver; id notificationCenterDidFailObserver; - // picker - MediaPickerViewController* mediaPicker; - // profile updates // avatar UIImage* newAvatarImage; @@ -252,6 +247,7 @@ SignOutAlertPresenterDelegate> @property (nonatomic, weak) DeactivateAccountViewController *deactivateAccountViewController; @property (nonatomic, strong) SignOutAlertPresenter *signOutAlertPresenter; @property (nonatomic, weak) UIButton *signOutButton; +@property (nonatomic, strong) SingleImagePickerPresenter *imagePickerPresenter; @end @@ -3711,13 +3707,18 @@ SignOutAlertPresenterDelegate> - (void)onProfileAvatarTap:(UITapGestureRecognizer *)recognizer { - mediaPicker = [MediaPickerViewController mediaPickerViewController]; - mediaPicker.mediaTypes = @[(NSString *)kUTTypeImage]; - mediaPicker.delegate = self; - UINavigationController *navigationController = [UINavigationController new]; - [navigationController pushViewController:mediaPicker animated:NO]; + SingleImagePickerPresenter *singleImagePickerPresenter = [[SingleImagePickerPresenter alloc] initWithSession:self.mainSession]; + singleImagePickerPresenter.delegate = self; - [self presentViewController:navigationController animated:YES completion:nil]; + + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:userSettingsProfilePictureIndex inSection:SETTINGS_SECTION_USER_SETTINGS_INDEX]; + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + + UIView *sourceView = cell; + + [singleImagePickerPresenter presentFrom:self sourceView:sourceView sourceRect:sourceView.bounds animated:YES]; + + self.imagePickerPresenter = singleImagePickerPresenter; } - (void)exportEncryptionKeys:(UITapGestureRecognizer *)recognizer @@ -3890,32 +3891,6 @@ SignOutAlertPresenterDelegate> self.deactivateAccountViewController = deactivateAccountViewController; } -#pragma mark - MediaPickerViewController Delegate - -- (void)dismissMediaPicker -{ - if (mediaPicker) - { - [mediaPicker withdrawViewControllerAnimated:YES completion:nil]; - mediaPicker = nil; - } -} - -- (void)mediaPickerController:(MediaPickerViewController *)mediaPickerController didSelectImage:(NSData*)imageData withMimeType:(NSString *)mimetype isPhotoLibraryAsset:(BOOL)isPhotoLibraryAsset -{ - [self dismissMediaPicker]; - - newAvatarImage = [UIImage imageWithData:imageData]; - - [self.tableView reloadData]; -} - -- (void)mediaPickerController:(MediaPickerViewController *)mediaPickerController didSelectVideo:(NSURL*)videoURL -{ - // this method should not be called - [self dismissMediaPicker]; -} - #pragma mark - TextField listener - (IBAction)textFieldDidChange:(id)sender @@ -4427,4 +4402,22 @@ SignOutAlertPresenterDelegate> }]; } +#pragma mark - SingleImagePickerPresenterDelegate + +- (void)singleImagePickerPresenterDidCancel:(SingleImagePickerPresenter *)presenter +{ + [presenter dismissWithAnimated:YES completion:nil]; + self.imagePickerPresenter = nil; +} + +- (void)singleImagePickerPresenter:(SingleImagePickerPresenter *)presenter didSelectImageData:(NSData *)imageData withUTI:(MXKUTI *)uti +{ + [presenter dismissWithAnimated:YES completion:nil]; + self.imagePickerPresenter = nil; + + newAvatarImage = [UIImage imageWithData:imageData]; + + [self.tableView reloadData]; +} + @end