This is an automated email from the ASF dual-hosted git repository.

erisu pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/cordova-plugin-media-capture.git


The following commit(s) were added to refs/heads/master by this push:
     new 1796d0a  fix(ios): UI issues with main thread and added alert for 
permission. (#184)
1796d0a is described below

commit 1796d0a6619fef1ee8d735f140458bc226a7a39d
Author: Denis Kovalev <35519010+bardreds...@users.noreply.github.com>
AuthorDate: Mon Aug 14 08:29:16 2023 +0500

    fix(ios): UI issues with main thread and added alert for permission. (#184)
    
    * iOS: Fixed UI issues with main thread and added alert for permission.
      - solved critical error connected with performing the UI operation on the 
non-UI thread.
      - added the alert dialog for the Microphone permission, if it is not 
granted.
    * chore: use localizable strings for mic permission alert
    * chore: add blank new line on localizable strings files
    * chore: updated French Localizable.strings
    
    ---------
    
    Co-authored-by: Erisu <er...@apache.org>
---
 .../CDVCapture.bundle/de.lproj/Localizable.strings |  4 +++
 .../CDVCapture.bundle/en.lproj/Localizable.strings |  4 +++
 .../CDVCapture.bundle/es.lproj/Localizable.strings |  4 +++
 .../CDVCapture.bundle/fr.lproj/Localizable.strings |  4 +++
 .../CDVCapture.bundle/se.lproj/Localizable.strings |  4 +++
 src/ios/CDVCapture.m                               | 40 ++++++++++++++++------
 6 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/src/ios/CDVCapture.bundle/de.lproj/Localizable.strings 
b/src/ios/CDVCapture.bundle/de.lproj/Localizable.strings
index 4ae15bf..f3350dc 100644
--- a/src/ios/CDVCapture.bundle/de.lproj/Localizable.strings
+++ b/src/ios/CDVCapture.bundle/de.lproj/Localizable.strings
@@ -25,3 +25,7 @@
 "timed recording complete" = "programmierte Aufnahme beendet";
 // accessibility hint for display of recorded elapsed time
 "recorded time in minutes and seconds" = "aufgenommene Zeit in Minuten und 
Sekunden";
+// Access denied
+"Access denied" = "Zugriff abgelehnt";
+// Microphone access has been prohibited
+"Access to the microphone has been prohibited. Please enable it in the 
Settings app to continue." = "Der Zugriff auf das Mikrofon wurde verboten. 
Bitte aktivieren Sie es in der Einstellungen-App, um fortzufahren.";
diff --git a/src/ios/CDVCapture.bundle/en.lproj/Localizable.strings 
b/src/ios/CDVCapture.bundle/en.lproj/Localizable.strings
index a4a049e..203de57 100644
--- a/src/ios/CDVCapture.bundle/en.lproj/Localizable.strings
+++ b/src/ios/CDVCapture.bundle/en.lproj/Localizable.strings
@@ -25,3 +25,7 @@
 "timed recording complete" = "timed recording complete";
 // accessibility hint for display of recorded elapsed time
 "recorded time in minutes and seconds" = "recorded time in minutes and 
seconds";
+// Access denied
+"Access denied" = "Access denied";
+// Microphone access has been prohibited
+"Access to the microphone has been prohibited. Please enable it in the 
Settings app to continue." = "Access to the microphone has been prohibited. 
Please enable it in the Settings app to continue.";
diff --git a/src/ios/CDVCapture.bundle/es.lproj/Localizable.strings 
b/src/ios/CDVCapture.bundle/es.lproj/Localizable.strings
index 255d9c5..1a88f2b 100644
--- a/src/ios/CDVCapture.bundle/es.lproj/Localizable.strings
+++ b/src/ios/CDVCapture.bundle/es.lproj/Localizable.strings
@@ -25,3 +25,7 @@
 "timed recording complete" = "límite de grabación alcanzado";
 // accessibility hint for display of recorded elapsed time
 "recorded time in minutes and seconds" = "tiempo de grabación en minutos y 
segundos";
+// Access denied
+"Access denied" = "Acceso denegado";
+// Microphone access has been prohibited
+"Access to the microphone has been prohibited. Please enable it in the 
Settings app to continue." = "Se ha prohibido el acceso al micrófono. 
Habilítelo en la aplicación Configuración para continuar.";
diff --git a/src/ios/CDVCapture.bundle/fr.lproj/Localizable.strings 
b/src/ios/CDVCapture.bundle/fr.lproj/Localizable.strings
index 2e5d0b0..116503a 100644
--- a/src/ios/CDVCapture.bundle/fr.lproj/Localizable.strings
+++ b/src/ios/CDVCapture.bundle/fr.lproj/Localizable.strings
@@ -25,3 +25,7 @@
 "timed recording complete" = "limite d'enregistrement atteinte";
 // accessibility hint for display of recorded elapsed time
 "recorded time in minutes and seconds" = "temps d'enregistrement en minutes et 
secondes";
+// Access denied
+"Access denied" = "Accès refusé";
+// Microphone access has been prohibited
+"Access to the microphone has been prohibited. Please enable it in the 
Settings app to continue." = "L'accès au micro a été interdit. Veuillez 
l'activer dans l'application Paramètres pour continuer.";
diff --git a/src/ios/CDVCapture.bundle/se.lproj/Localizable.strings 
b/src/ios/CDVCapture.bundle/se.lproj/Localizable.strings
index d01542f..72724c2 100644
--- a/src/ios/CDVCapture.bundle/se.lproj/Localizable.strings
+++ b/src/ios/CDVCapture.bundle/se.lproj/Localizable.strings
@@ -25,3 +25,7 @@
 "timed recording complete" = "inspelning har avslutad";
 // accessibility hint for display of recorded elapsed time
 "recorded time in minutes and seconds" = "inspelad tid in minuter och sekund";
+// Access denied
+"Access denied" = "Tillträde beviljas ej";
+// Microphone access has been prohibited
+"Access to the microphone has been prohibited. Please enable it in the 
Settings app to continue." = "Tillgång till mikrofonen har förbjudits. Aktivera 
det i appen Inställningar för att fortsätta.";
diff --git a/src/ios/CDVCapture.m b/src/ios/CDVCapture.m
index f66efda..3919848 100644
--- a/src/ios/CDVCapture.m
+++ b/src/ios/CDVCapture.m
@@ -800,9 +800,6 @@
         // view cleanup will occur in audioRecordingDidFinishRecording
     } else {
         // begin recording
-        [self.recordButton setImage:stopRecordImage 
forState:UIControlStateNormal];
-        self.recordButton.accessibilityTraits &= ~[self accessibilityTraits];
-        [self.recordingView setHidden:NO];
         __block NSError* error = nil;
 
         __weak CDVAudioRecorderViewController* weakSelf = self;
@@ -814,6 +811,9 @@
                 weakSelf.errorCode = CAPTURE_INTERNAL_ERR;
                 [weakSelf dismissAudioView:nil];
             } else {
+                [weakSelf.recordButton setImage:weakSelf.stopRecordImage 
forState:UIControlStateNormal];
+                weakSelf.recordButton.accessibilityTraits &= ~[self 
accessibilityTraits];
+                [weakSelf.recordingView setHidden:NO];
                 if (weakSelf.duration) {
                     weakSelf.isTimed = true;
                     [weakSelf.avRecorder recordForDuration:[weakSelf.duration 
doubleValue]];
@@ -833,13 +833,15 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
             [self.avSession performSelector:rrpSel withObject:^(BOOL granted){
-                if (granted) {
-                    startRecording();
-                } else {
-                    NSLog(@"Error creating audio session, microphone 
permission denied.");
-                    weakSelf.errorCode = CAPTURE_INTERNAL_ERR;
-                    [weakSelf dismissAudioView:nil];
-                }
+                dispatch_async(dispatch_get_main_queue(), ^{
+                    if (granted) {
+                        startRecording();
+                    } else {
+                        NSLog(@"Error creating audio session, microphone 
permission denied.");
+                        weakSelf.errorCode = CAPTURE_INTERNAL_ERR;
+                        [weakSelf showMicrophonePermissionAlert];
+                    }
+                });
             }];
 #pragma clang diagnostic pop
         } else {
@@ -879,6 +881,24 @@
     }
 }
 
+- (void) showMicrophonePermissionAlert {
+    UIAlertController* controller =
+        [UIAlertController 
alertControllerWithTitle:PluginLocalizedString(captureCommand, @"Access 
denied", nil)
+                                            
message:PluginLocalizedString(captureCommand, @"Access to the microphone has 
been prohibited. Please enable it in the Settings app to continue.", nil)
+                                     
preferredStyle:UIAlertControllerStyleAlert];
+
+    UIAlertAction* actionOk = [UIAlertAction actionWithTitle:@"OK" 
style:UIAlertActionStyleDefault handler:nil];
+    [controller addAction:actionOk];
+
+    UIAlertAction* actionSettings = [UIAlertAction actionWithTitle:@"Settings" 
style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [[UIApplication sharedApplication] openURL:[NSURL 
URLWithString:UIApplicationOpenSettingsURLString] options:[NSDictionary 
dictionary] completionHandler:nil];
+    }];
+    [controller addAction:actionSettings];
+
+    __weak CDVAudioRecorderViewController* weakSelf = self;
+    [weakSelf presentViewController:controller animated:true completion:nil];
+}
+
 - (void)dismissAudioView:(id)sender
 {
     // called when done button pressed or when error condition to do cleanup 
and remove view


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org
For additional commands, e-mail: commits-h...@cordova.apache.org

Reply via email to