Преглед на файлове

media picker uses native UIImagePickerController to select images

nayooti преди 5 години
родител
ревизия
34459902d8

+ 1 - 1
deltachat-ios/Controller/EditGroupViewController.swift

@@ -101,7 +101,7 @@ class EditGroupViewController: UITableViewController, MediaPickerDelegate {
     }
 
     private func galleryButtonPressed(_ action: UIAlertAction) {
-        mediaPicker?.showPhotoGallery(delegate: self)
+        mediaPicker?.showPhotoGallery()
     }
 
     private func cameraButtonPressed(_ action: UIAlertAction) {

+ 1 - 1
deltachat-ios/Controller/EditSettingsController.swift

@@ -125,7 +125,7 @@ class EditSettingsController: UITableViewController, MediaPickerDelegate {
 
     // MARK: - actions
     private func galleryButtonPressed(_ action: UIAlertAction) {
-        mediaPicker?.showPhotoGallery(delegate: self)
+        mediaPicker?.showPhotoGallery()
     }
 
     private func cameraButtonPressed(_ action: UIAlertAction) {

+ 1 - 1
deltachat-ios/Controller/NewGroupController.swift

@@ -346,7 +346,7 @@ class NewGroupController: UITableViewController, MediaPickerDelegate {
     }
 
     private func showPhotoPicker(delegate: MediaPickerDelegate) {
-        mediaPicker?.showPhotoGallery(delegate: delegate)
+        mediaPicker?.showPhotoGallery()
     }
 
     private func showCamera(delegate: MediaPickerDelegate) {

+ 1 - 1
deltachat-ios/Controller/ProfileInfoViewController.swift

@@ -123,7 +123,7 @@ class ProfileInfoViewController: UITableViewController {
     }
 
     private func galleryButtonPressed(_ action: UIAlertAction) {
-        mediaPicker?.showPhotoGallery(delegate: self)
+        mediaPicker?.showPhotoGallery()
     }
 
     private func cameraButtonPressed(_ action: UIAlertAction) {

+ 13 - 0
deltachat-ios/Extensions/UIImage+Extension.swift

@@ -52,6 +52,19 @@ extension UIImage {
         guard let cgImage = image?.cgImage else { return nil }
         self.init(cgImage: cgImage)
     }
+
+    func upOrientationImage() -> UIImage? {
+        switch imageOrientation {
+        case .up:
+            return self
+        default:
+            UIGraphicsBeginImageContextWithOptions(size, false, scale)
+            draw(in: CGRect(origin: .zero, size: size))
+            let result = UIGraphicsGetImageFromCurrentImageContext()
+            UIGraphicsEndImageContext()
+            return result
+        }
+    }
 }
 
 public enum ImageType: String {

+ 38 - 22
deltachat-ios/Helper/MediaPicker.swift

@@ -26,7 +26,7 @@ extension MediaPickerDelegate {
     }
 }
 
-class MediaPicker: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate, AudioRecorderControllerDelegate, UIDocumentPickerDelegate {
+class MediaPicker: NSObject, UINavigationControllerDelegate, AudioRecorderControllerDelegate, UIDocumentPickerDelegate {
 
     enum CameraMediaTypes {
         case photo
@@ -105,24 +105,29 @@ class MediaPicker: NSObject, UINavigationControllerDelegate, UIImagePickerContro
         }
     }
 
-    func showPhotoGallery(delegate: MediaPickerDelegate) {
-        let croppingParameters = CroppingParameters(
-            isEnabled: true,
-            allowResizing: true,
-            allowMoving: true,
-            minimumSize: CGSize(width: 70, height: 70)
-        )
-
-        let controller = CameraViewController.imagePickerViewController(
-            croppingParameters: croppingParameters,
-            completion: { [weak self] image, _ in
-                if let image = image {
-                    self?.delegate?.onImageSelected(image: image)
-                }
-                self?.navigationController?.dismiss(animated: true, completion: nil)})
-        self.delegate = delegate
-        controller.modalPresentationStyle = .fullScreen
-        navigationController?.present(controller, animated: true, completion: nil)
+    func showPhotoGallery() {
+        let imagePickerController = UIImagePickerController()
+        imagePickerController.sourceType = .photoLibrary
+        imagePickerController.delegate = self
+
+//
+//        let croppingParameters = CroppingParameters(
+//            isEnabled: true,UIImagePickerController
+//            allowResizing: true,
+//            allowMoving: true,
+//            minimumSize: CGSize(width: 70, height: 70)
+//        )
+//
+//        let controller = CameraViewController.imagePickerViewController(
+//            croppingParameters: croppingParameters,
+//            completion: { [weak self] image, _ in
+//                if let image = image {
+//                    self?.delegate?.onImageSelected(image: image)
+//                }
+//                self?.navigationController?.dismiss(animated: true, completion: nil)})
+//        controller.modalPresentationStyle = .fullScreen
+//        navigationController?.present(controller, animated: true, completion: nil)
+        navigationController?.present(imagePickerController, animated: true, completion: nil)
     }
 
     func showCamera(allowCropping: Bool, supportedMediaTypes: CameraMediaTypes) {
@@ -160,6 +165,11 @@ class MediaPicker: NSObject, UINavigationControllerDelegate, UIImagePickerContro
         showCamera(allowCropping: false, supportedMediaTypes: .allAvailable)
     }
 
+}
+
+// MARK: - UIImagePickerControllerDelegate
+extension MediaPicker: UIImagePickerControllerDelegate {
+
     func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
 
         if let type = info[.mediaType] as? String, let mediaType = PickerMediaType(rawValue: type) {
@@ -170,11 +180,17 @@ class MediaPicker: NSObject, UINavigationControllerDelegate, UIImagePickerContro
                     handleVideoUrl(url: videoUrl)
                 }
             case .image:
-                if let image = info[.editedImage] as? UIImage {
-                    self.delegate?.onImageSelected(image: image)
-                } else if let image = info[.originalImage] as? UIImage {
+                var image: UIImage? = nil
+                if let editedImage = info[.editedImage] as? UIImage {
+                    image = editedImage
+                } else if let originalImage = info[.originalImage] as? UIImage {
+                    image = originalImage
+                }
+                // photos picked from the photoLibrary come here with unadjusted orientation
+                if let image = image?.upOrientationImage() {
                     self.delegate?.onImageSelected(image: image)
                 }
+
             }
         }
         picker.dismiss(animated: true, completion: nil)