Эх сурвалжийг харах

implement avatar picker in group editing context

cyberta 5 жил өмнө
parent
commit
360c1f7099

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

@@ -1,10 +1,11 @@
 import UIKit
 import UIKit
 
 
-class EditGroupViewController: UITableViewController {
+class EditGroupViewController: UITableViewController, MediaPickerDelegate {
 
 
     weak var coordinator: EditGroupCoordinator?
     weak var coordinator: EditGroupCoordinator?
 
 
     private let chat: DcChat
     private let chat: DcChat
+    private var groupImage: UIImage?
 
 
     private let rowAvatar = 0
     private let rowAvatar = 0
     private let rowGroupName = 1
     private let rowGroupName = 1
@@ -34,6 +35,7 @@ class EditGroupViewController: UITableViewController {
         self.avatarSelectionCell = AvatarSelectionCell(chat: chat)
         self.avatarSelectionCell = AvatarSelectionCell(chat: chat)
         super.init(style: .grouped)
         super.init(style: .grouped)
         self.avatarSelectionCell.hintLabel.text = String.localized("group_avatar")
         self.avatarSelectionCell.hintLabel.text = String.localized("group_avatar")
+        self.avatarSelectionCell.onAvatarTapped = onAvatarTapped
         title = String.localized("menu_edit_group")
         title = String.localized("menu_edit_group")
     }
     }
 
 
@@ -72,6 +74,9 @@ class EditGroupViewController: UITableViewController {
     
     
     @objc func saveContactButtonPressed() {
     @objc func saveContactButtonPressed() {
         let newName = groupNameCell.getText()
         let newName = groupNameCell.getText()
+        if let groupImage = groupImage, let dcContext = coordinator?.dcContext {
+            AvatarHelper.saveChatAvatar(dcContext: dcContext, image: groupImage, for: Int(chat.id))
+        }
         dc_set_chat_name(mailboxPointer, UInt32(chat.id), newName)
         dc_set_chat_name(mailboxPointer, UInt32(chat.id), newName)
         coordinator?.navigateBack()
         coordinator?.navigateBack()
     }
     }
@@ -84,4 +89,36 @@ class EditGroupViewController: UITableViewController {
         avatarSelectionCell.onInitialsChanged(text: textField.text)
         avatarSelectionCell.onInitialsChanged(text: textField.text)
         doneButton.isEnabled = true
         doneButton.isEnabled = true
     }
     }
+
+    private func onAvatarTapped() {
+        let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
+            let photoAction = PhotoPickerAlertAction(title: String.localized("gallery"), style: .default, handler: galleryButtonPressed(_:))
+            let videoAction = PhotoPickerAlertAction(title: String.localized("camera"), style: .default, handler: cameraButtonPressed(_:))
+            alert.addAction(photoAction)
+            alert.addAction(videoAction)
+            alert.addAction(UIAlertAction(title: String.localized("cancel"), style: .cancel, handler: nil))
+        self.present(alert, animated: true, completion: nil)
+    }
+
+    private func galleryButtonPressed(_ action: UIAlertAction) {
+        coordinator?.showPhotoPicker(delegate: self)
+    }
+
+    private func cameraButtonPressed(_ action: UIAlertAction) {
+        coordinator?.showCamera(delegate: self)
+    }
+
+    func onImageSelected(image: UIImage) {
+        groupImage = image
+        doneButton.isEnabled = true
+
+        avatarSelectionCell = AvatarSelectionCell(context: nil, with: groupImage)
+        avatarSelectionCell.hintLabel.text = String.localized("group_avatar")
+        avatarSelectionCell.onAvatarTapped = onAvatarTapped
+
+        self.tableView.beginUpdates()
+        let indexPath = IndexPath(row: rowAvatar, section: 0)
+        self.tableView.reloadRows(at: [indexPath], with: UITableView.RowAnimation.none)
+        self.tableView.endUpdates()
+    }
 }
 }

+ 14 - 2
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -355,7 +355,7 @@ class GroupChatDetailCoordinator: Coordinator {
 
 
     func showGroupChatEdit(chat: DcChat) {
     func showGroupChatEdit(chat: DcChat) {
         let editGroupViewController = EditGroupViewController(chat: chat)
         let editGroupViewController = EditGroupViewController(chat: chat)
-        let coordinator = EditGroupCoordinator(navigationController: navigationController)
+        let coordinator = EditGroupCoordinator(dcContext: dcContext, navigationController: navigationController)
         childCoordinators.append(coordinator)
         childCoordinators.append(coordinator)
         editGroupViewController.coordinator = coordinator
         editGroupViewController.coordinator = coordinator
         navigationController.pushViewController(editGroupViewController, animated: true)
         navigationController.pushViewController(editGroupViewController, animated: true)
@@ -631,9 +631,21 @@ class ContactDetailCoordinator: Coordinator, ContactDetailCoordinatorProtocol {
 
 
 class EditGroupCoordinator: Coordinator {
 class EditGroupCoordinator: Coordinator {
     let navigationController: UINavigationController
     let navigationController: UINavigationController
+    let dcContext: DcContext
+    let mediaPicker: MediaPicker
 
 
-    init(navigationController: UINavigationController) {
+    init(dcContext: DcContext, navigationController: UINavigationController) {
+        self.dcContext = dcContext
         self.navigationController = navigationController
         self.navigationController = navigationController
+        mediaPicker = MediaPicker(navigationController: self.navigationController)
+    }
+
+    func showPhotoPicker(delegate: MediaPickerDelegate) {
+        mediaPicker.showGallery(delegate: delegate)
+    }
+
+    func showCamera(delegate: MediaPickerDelegate) {
+        mediaPicker.showCamera(delegate: delegate)
     }
     }
 
 
     func navigateBack() {
     func navigateBack() {