diff --git a/Classes/Swift/Chat/Views/MessageView.swift b/Classes/Swift/Chat/Views/MessageView.swift index 8d2ee3843..9099b96d8 100644 --- a/Classes/Swift/Chat/Views/MessageView.swift +++ b/Classes/Swift/Chat/Views/MessageView.swift @@ -1,21 +1,37 @@ -// -// MessageView.swift -// linphone -// -// Created by BenoƮt Martins on 07/12/2022. -// +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ import Foundation +import Photos +import PhotosUI +import MobileCoreServices +import UniformTypeIdentifiers -class MessageView: UIView { +class MessageView: UIView, PHPickerViewControllerDelegate, UIDocumentPickerDelegate { let top_bar_height = 66.0 let side_buttons_margin = 10 - var backAction : (() -> Void)? = nil var action1 : (() -> Void)? = nil var action2 : (() -> Void)? = nil + var action3 : (() -> Void)? = nil let pictureButton = CallControlButton(buttonTheme:VoipTheme.nav_button("")) let voiceRecordButton = CallControlButton(buttonTheme:VoipTheme.nav_button("vr_off")) @@ -38,20 +54,20 @@ class MessageView: UIView { addSubview(pictureButton) pictureButton.alignParentLeft(withMargin: side_buttons_margin).matchParentHeight().done() - pictureButton.setImage(UIImage(named:"chat_attachment_default.png"), for: UIControl.State.normal) - pictureButton.setImage(UIImage(named:"chat_attachment_over.png"), for: UIControl.State.highlighted) - pictureButton.onClickAction = backAction + pictureButton.setImage(UIImage(named:"chat_attachment_default.png"), for: .normal) + pictureButton.setImage(UIImage(named:"chat_attachment_over.png"), for: .highlighted) + pictureButton.onClickAction = alertAction addSubview(voiceRecordButton) voiceRecordButton.toRightOf(pictureButton, withLeftMargin: 10).matchParentHeight().done() voiceRecordButton.size(w: 30, h: 30).done() - voiceRecordButton.onClickAction = action2 + voiceRecordButton.onClickAction = action3 addSubview(sendButton) sendButton.alignParentRight(withMargin: side_buttons_margin).matchParentHeight().done() - sendButton.setImage(UIImage(named:"chat_send_default.png"), for: UIControl.State.normal) - sendButton.setImage(UIImage(named:"chat_send_over.png"), for: UIControl.State.highlighted) - sendButton.onClickAction = action1 + sendButton.setImage(UIImage(named:"chat_send_default.png"), for: .normal) + sendButton.setImage(UIImage(named:"chat_send_over.png"), for: .highlighted) + sendButton.onClickAction = action2 addSubview(messageTextView) messageTextView.toRightOf(voiceRecordButton, withLeftMargin: 5).toLeftOf(sendButton).matchParentHeight().done() @@ -61,4 +77,69 @@ class MessageView: UIView { messageText.font = UIFont.systemFont(ofSize: 18) messageText.backgroundColor = UIColor.white } + + func alertAction() { + + let alertController = UIAlertController(title: VoipTexts.image_picker_view_alert_action_title, message: nil, preferredStyle: .actionSheet) + + let alert_action_camera = UIAlertAction(title: VoipTexts.image_picker_view_alert_action_camera, style: .default, handler: { (action) -> Void in + self.imageCamera() + }) + let alert_action_photo_library = UIAlertAction(title: VoipTexts.image_picker_view_alert_action_photo_library, style: .default, handler: { (action) -> Void in + self.pickPhotos() + }) + let alert_action_document = UIAlertAction(title: VoipTexts.image_picker_view_alert_action_document, style: .default, handler: { (action) -> Void in + self.openDocumentPicker() + }) + + let cancel = UIAlertAction(title: VoipTexts.cancel, style: .cancel) { (action) -> Void in + } + + + alertController.addAction(cancel) + alertController.addAction(alert_action_camera) + alertController.addAction(alert_action_photo_library) + alertController.addAction(alert_action_document) + + alertController.popoverPresentationController?.sourceView = PhoneMainView.instance().mainViewController.statusBarView + PhoneMainView.instance().mainViewController.present(alertController, animated: true) + } + + func imageCamera(){ + let vc = UIImagePickerController() + vc.sourceType = .camera + vc.allowsEditing = true + PhoneMainView.instance().mainViewController.present(vc, animated: true) + + } + + func pickPhotos() + { + if #available(iOS 14.0, *) { + var config = PHPickerConfiguration() + let pickerViewController = PHPickerViewController(configuration: config) + pickerViewController.delegate = self + PhoneMainView.instance().mainViewController.present(pickerViewController, animated: true) + } else { + // Fallback on earlier versions + } + } + + // MARK: PHPickerViewControllerDelegate + + @available(iOS 14.0, *) + func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { + picker.dismiss(animated: true, completion: nil) + } + + func openDocumentPicker() { + if #available(iOS 14.0, *) { + let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.jpeg, .png]) + documentPicker.delegate = self + documentPicker.modalPresentationStyle = .overFullScreen + PhoneMainView.instance().mainViewController.present(documentPicker, animated: true) + } else { + // Fallback on earlier versions + } + } } diff --git a/Classes/Swift/Util/BackActionsNavigationView.swift b/Classes/Swift/Util/BackActionsNavigationView.swift index 4e3425031..61d678993 100644 --- a/Classes/Swift/Util/BackActionsNavigationView.swift +++ b/Classes/Swift/Util/BackActionsNavigationView.swift @@ -71,7 +71,7 @@ import linphonesw topBar.addSubview(action1Button) action1Button.toLeftOf(action2Button, withRightMargin: 20).matchParentHeight().done() - action1Button.size(w: 35, h: 35) + action1Button.size(w: 35, h: 35).done() action1Button.onClickAction = action1 topBar.addSubview(titleLabel) diff --git a/Classes/Swift/Voip/Theme/VoipTexts.swift b/Classes/Swift/Voip/Theme/VoipTexts.swift index 204dc2057..cfd4aa1c5 100644 --- a/Classes/Swift/Voip/Theme/VoipTexts.swift +++ b/Classes/Swift/Voip/Theme/VoipTexts.swift @@ -149,6 +149,11 @@ import UIKit @objc static let conference_scheduled_future_filter = NSLocalizedString("Scheduled",comment:"") @objc static let conference_scheduled_cancelled_by_me = NSLocalizedString("You have cancelled the conference",comment:"") @objc static let conference_scheduled_cancelled_by_organizer = NSLocalizedString("Conference has been cancelled by organizer",comment:"") + + @objc static let image_picker_view_alert_action_title = NSLocalizedString("Select the source",comment:"") + @objc static let image_picker_view_alert_action_camera = NSLocalizedString("Camera",comment:"") + @objc static let image_picker_view_alert_action_photo_library = NSLocalizedString("Photo library",comment:"") + @objc static let image_picker_view_alert_action_document = NSLocalizedString("Document",comment:"") // FROM ANDROID END