Replace old MediePickerBridgePresenter with new PhotosUI

This commit is contained in:
Arnfried Griesert
2024-01-30 03:56:11 +01:00
parent 46ec6e56e4
commit 0031ec044f
2 changed files with 52 additions and 6 deletions

View File

@@ -709,4 +709,8 @@ class BWIBuildSettings: NSObject {
// MARK: Backup restore
var showMatrixIDinRoomInfoScreen = false
// MARK: New photos picker API
var useNewPhotosPickerAPI = true
}

View File

@@ -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)
}
}
}