فهرست منبع

Merge pull request #1534 from deltachat/voice_msg_accessibility

Voice msg accessibility
cyBerta 3 سال پیش
والد
کامیت
3ac2e9d8c6

+ 11 - 0
deltachat-ios/Chat/ChatViewController.swift

@@ -1835,6 +1835,17 @@ extension ChatViewController: MediaPickerDelegate {
         sendVoiceMessage(url: url)
     }
 
+    func onVoiceMessageRecorderClosed() {
+        if UIAccessibility.isVoiceOverRunning {
+            // we need to wait a little bit, otherwise the  UIAccessibility notification is ignored and
+            // the first accessibility element on the screen gets selected
+            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
+                // return to attach button
+                UIAccessibility.post(notification: .screenChanged, argument: self?.messageInputBar.leftStackView.subviews.first)
+            }
+        }
+    }
+
     func onDocumentSelected(url: NSURL) {
         stageDocument(url: url)
     }

+ 6 - 0
deltachat-ios/Controller/AudioRecorderController.swift

@@ -4,6 +4,7 @@ import AVKit
 
 protocol AudioRecorderControllerDelegate: class {
     func didFinishAudioAtPath(path: String)
+    func didClose()
 }
 
 class AudioRecorderController: UIViewController, AVAudioRecorderDelegate {
@@ -168,6 +169,11 @@ class AudioRecorderController: UIViewController, AVAudioRecorderDelegate {
         UIApplication.shared.isIdleTimerDisabled = wasIdleTimerDisabled
     }
 
+    override func viewDidDisappear(_ animated: Bool) {
+        super.viewDidDisappear(animated)
+        delegate?.didClose()
+    }
+
     func startUpdatingMeter() {
         meterUpdateDisplayLink?.invalidate()
         meterUpdateDisplayLink = CADisplayLink.init(target: self, selector: #selector(updateMeters))

+ 10 - 1
deltachat-ios/Helper/MediaPicker.swift

@@ -7,6 +7,7 @@ protocol MediaPickerDelegate: class {
     func onImageSelected(url: NSURL)
     func onVideoSelected(url: NSURL)
     func onVoiceMessageRecorded(url: NSURL)
+    func onVoiceMessageRecorderClosed()
     func onDocumentSelected(url: NSURL)
 }
 
@@ -20,12 +21,15 @@ extension MediaPickerDelegate {
     func onVoiceMessageRecorded(url: NSURL) {
         logger.debug("voice message recorded: \(url)")
     }
+    func onVoiceMessageRecorderClosed() {
+        logger.debug("Voice Message recorder closed.")
+    }
     func onDocumentSelected(url: NSURL) {
         logger.debug("document selected: \(url)")
     }
 }
 
-class MediaPicker: NSObject, UINavigationControllerDelegate, AudioRecorderControllerDelegate {
+class MediaPicker: NSObject, UINavigationControllerDelegate {
 
     enum CameraMediaTypes {
         case photo
@@ -183,12 +187,17 @@ extension MediaPicker: UIImagePickerControllerDelegate {
             }
         })
     }
+}
 
+extension MediaPicker: AudioRecorderControllerDelegate {
     func didFinishAudioAtPath(path: String) {
         let url = NSURL(fileURLWithPath: path)
         self.delegate?.onVoiceMessageRecorded(url: url)
     }
 
+    func didClose() {
+        self.delegate?.onVoiceMessageRecorderClosed()
+    }
 }
 
 extension MediaPicker: UIDocumentPickerDelegate {