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

ask Record Permission voice

marinofaggiana 4 жил өмнө
parent
commit
68a1edfa35

+ 15 - 11
iOSClient/Main/Menu/AppDelegate+Menu.swift

@@ -31,7 +31,7 @@ extension AppDelegate: NCAudioRecorderViewControllerDelegate {
     @objc public func showMenuIn(viewController: UIViewController) {
         
         let mainMenuViewController = UIStoryboard.init(name: "NCMenu", bundle: nil).instantiateViewController(withIdentifier: "NCMainMenuTableViewController") as! NCMainMenuTableViewController
-        mainMenuViewController.actions = self.initMenu()
+        mainMenuViewController.actions = self.initMenu(viewController: viewController)
 
         let menuPanelController = NCMenuPanelController()
         menuPanelController.parentPresenter = viewController
@@ -42,7 +42,7 @@ extension AppDelegate: NCAudioRecorderViewControllerDelegate {
         viewController.present(menuPanelController, animated: true, completion: nil)
     }
     
-    private func initMenu() -> [NCMenuAction] {
+    private func initMenu(viewController: UIViewController) -> [NCMenuAction] {
         
         var actions: [NCMenuAction] = []
         let appDelegate = UIApplication.shared.delegate as! AppDelegate
@@ -114,15 +114,19 @@ extension AppDelegate: NCAudioRecorderViewControllerDelegate {
             NCMenuAction(
                 title: NSLocalizedString("_create_voice_memo_", comment: ""), icon: UIImage(named: "microphone")!.image(color: NCBrandColor.shared.icon, size: 50), action: { menuAction in
                     
-                    let fileName = CCUtility.createFileNameDate(NSLocalizedString("_voice_memo_filename_", comment: ""), extension: "m4a")!
-                    let viewController = UIStoryboard(name: "NCAudioRecorderViewController", bundle: nil).instantiateInitialViewController() as! NCAudioRecorderViewController
-                
-                    viewController.delegate = self
-                    viewController.createRecorder(fileName: fileName)
-                    viewController.modalTransitionStyle = .crossDissolve
-                    viewController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
-                
-                    appDelegate.window.rootViewController?.present(viewController, animated: true, completion: nil)
+                    NCUtility.shared.askRecordPermission(viewController: viewController) { (permissions) in
+                        if permissions {
+                            let fileName = CCUtility.createFileNameDate(NSLocalizedString("_voice_memo_filename_", comment: ""), extension: "m4a")!
+                            let viewController = UIStoryboard(name: "NCAudioRecorderViewController", bundle: nil).instantiateInitialViewController() as! NCAudioRecorderViewController
+                        
+                            viewController.delegate = self
+                            viewController.createRecorder(fileName: fileName)
+                            viewController.modalTransitionStyle = .crossDissolve
+                            viewController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
+                        
+                            appDelegate.window.rootViewController?.present(viewController, animated: true, completion: nil)
+                        }
+                    }
                 }
             )
         )

+ 2 - 0
iOSClient/Supporting Files/en.lproj/Localizable.strings

@@ -152,6 +152,7 @@
 "_duration_"                = "Duration";
 "_model_"                   = "Model";
 "_set_user_status_"         = "Set user status";
+"_open_settings_"           = "Open settings";
 
 /* User status */
 "_online_"                  = "Online";
@@ -840,6 +841,7 @@
 "_err_asset_not_found_locally_"         = "Error: Photo/video not found locally, removed from upload";
 "_err_asset_not_found_"                 = "Error: Photo/video not found, removed from upload";
 "_err_e2ee_app_version_"                = "Error: The version of app End-to-End encryption is not compatible, please update your server";
+"_err_permission_microphone_"           = "Please allow microphone usage from Settings";
 
 // QRCode
 

+ 33 - 0
iOSClient/Utility/NCUtility.swift

@@ -448,5 +448,38 @@ class NCUtility: NSObject {
             try? originalImage?.jpegData(compressionQuality: 0.7)?.write(to: URL(fileURLWithPath: fileNamePathIcon))
         }
     }
+    
+    func askRecordPermission(viewController: UIViewController, completion: @escaping (_ hasPermissions: Bool)->()) {
+        
+        switch AVAudioSession.sharedInstance().recordPermission {
+        case AVAudioSession.RecordPermission.granted:
+            completion(true)
+            break
+        case AVAudioSession.RecordPermission.denied:
+            let alert = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: NSLocalizedString("_err_permission_microphone_", comment: ""), preferredStyle: .alert)
+            alert.addAction(UIAlertAction(title: NSLocalizedString("_open_settings_", comment: ""), style: .default, handler: { action in
+                UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
+                completion(false)
+            }))
+            alert.addAction(UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel, handler: { action in
+                completion(false)
+            }))
+            viewController.present(alert, animated: true, completion: nil)
+            break
+        case AVAudioSession.RecordPermission.undetermined:
+            AVAudioSession.sharedInstance().requestRecordPermission { (allowed) in
+                DispatchQueue.main.async {
+                    if allowed {
+                        completion(true)
+                    } else {
+                        completion(false)
+                    }
+                }
+            }
+            break
+        default:
+            break
+        }
+    }
 }