mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-17 06:58:28 +02:00
Replace old MediePickerBridgePresenter with new PhotosUI
This commit is contained in:
@@ -709,4 +709,8 @@ class BWIBuildSettings: NSObject {
|
||||
// MARK: Backup restore
|
||||
var showMatrixIDinRoomInfoScreen = false
|
||||
|
||||
|
||||
// MARK: New photos picker API
|
||||
var useNewPhotosPickerAPI = true
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
import AVFoundation
|
||||
import PhotosUI
|
||||
|
||||
@objc protocol SingleImagePickerPresenterDelegate: AnyObject {
|
||||
func singleImagePickerPresenter(_ presenter: SingleImagePickerPresenter, didSelectImageData imageData: Data, withUTI uti: MXKUTI?)
|
||||
@@ -122,12 +123,26 @@ final class SingleImagePickerPresenter: NSObject {
|
||||
guard let presentingViewController = self.presentingViewController else {
|
||||
return
|
||||
}
|
||||
|
||||
let mediaPickerPresenter = MediaPickerCoordinatorBridgePresenter(session: self.session, mediaUTIs: [.image], allowsMultipleSelection: false)
|
||||
mediaPickerPresenter.delegate = self
|
||||
|
||||
mediaPickerPresenter.present(from: presentingViewController, sourceView: sourceView, sourceRect: sourceRect, animated: animated)
|
||||
self.mediaPickerPresenter = mediaPickerPresenter
|
||||
|
||||
if BWIBuildSettings.shared.useNewPhotosPickerAPI {
|
||||
var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared())
|
||||
configuration.filter = PHPickerFilter.any(of: [.images, .videos])
|
||||
configuration.preferredAssetRepresentationMode = .compatible
|
||||
configuration.selection = .default
|
||||
configuration.selectionLimit = 1
|
||||
configuration.preselectedAssetIdentifiers = []
|
||||
|
||||
let pickerViewController = PHPickerViewController(configuration: configuration)
|
||||
pickerViewController.delegate = self
|
||||
|
||||
presentingViewController.present(pickerViewController, animated: true)
|
||||
} else {
|
||||
let mediaPickerPresenter = MediaPickerCoordinatorBridgePresenter(session: self.session, mediaUTIs: [.image], allowsMultipleSelection: false)
|
||||
mediaPickerPresenter.delegate = self
|
||||
|
||||
mediaPickerPresenter.present(from: presentingViewController, sourceView: sourceView, sourceRect: sourceRect, animated: animated)
|
||||
self.mediaPickerPresenter = mediaPickerPresenter
|
||||
}
|
||||
}
|
||||
|
||||
private func removeImage() {
|
||||
@@ -170,3 +185,30 @@ extension SingleImagePickerPresenter: MediaPickerCoordinatorBridgePresenterDeleg
|
||||
self.delegate?.singleImagePickerPresenterDidCancel(self)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - PHPickerViewControllerDelegate (BWI)
|
||||
extension SingleImagePickerPresenter: PHPickerViewControllerDelegate {
|
||||
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
|
||||
picker.dismiss(animated: true)
|
||||
|
||||
guard let itemProvider = results.first?.itemProvider else {
|
||||
self.delegate?.singleImagePickerPresenterDidCancel(self)
|
||||
return
|
||||
}
|
||||
|
||||
if itemProvider.canLoadObject(ofClass: UIImage.self) {
|
||||
itemProvider.loadObject(ofClass: UIImage.self) { image, error in
|
||||
DispatchQueue.main.async {
|
||||
if let image = image as? UIImage, let imageData = image.pngData() {
|
||||
let uti = MXKUTI(mimeType: "image/png")
|
||||
self.delegate?.singleImagePickerPresenter(self, didSelectImageData: imageData, withUTI: uti)
|
||||
} else {
|
||||
self.delegate?.singleImagePickerPresenterDidCancel(self)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self.delegate?.singleImagePickerPresenterDidCancel(self)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user