Path: blob/main/Signal/src/ViewControllers/HomeView/Chat List/ChatListViewController+Camera.swift
1 views
//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import SignalUI
extension ChatListViewController: CameraFirstCaptureDelegate {
@objc
func showCameraView() {
presentCameraView()
}
func presentCameraView(completion: ((UINavigationController) -> Void)? = nil) {
// Dismiss any message actions if they're presented
conversationSplitViewController?.selectedConversationViewController?.dismissMessageContextMenu(animated: true)
let attachmentLimits = OutgoingAttachmentLimits.currentLimits()
ows_askForCameraPermissions { cameraAccessGranted in
guard cameraAccessGranted else {
Logger.warn("Camera permission denied")
return
}
self.ows_askForMicrophonePermissions { microphoneAccessGranted in
if !microphoneAccessGranted {
// We can still continue without mic permissions, but any captured video will
// be silent.
Logger.warn("Proceeding with no microphone access.")
}
let cameraModal = CameraFirstCaptureNavigationController.cameraFirstModal(
hasQuotedReplyDraft: false,
attachmentLimits: attachmentLimits,
delegate: self,
)
cameraModal.modalPresentationStyle = .overFullScreen
// Defer hiding status bar until modal is fully onscreen
// to prevent unwanted shifting upwards of the entire presenter VC's view.
let modalHidesStatusBar = cameraModal.topViewController?.prefersStatusBarHidden ?? false
if !modalHidesStatusBar {
cameraModal.modalPresentationCapturesStatusBarAppearance = true
}
self.present(cameraModal, animated: true, completion: {
if modalHidesStatusBar {
cameraModal.modalPresentationCapturesStatusBarAppearance = true
cameraModal.setNeedsStatusBarAppearanceUpdate()
}
completion?(cameraModal)
})
}
}
}
func cameraFirstCaptureSendFlowDidComplete(_ cameraFirstCaptureSendFlow: CameraFirstCaptureSendFlow) {
dismiss(animated: true)
}
func cameraFirstCaptureSendFlowDidCancel(_ cameraFirstCaptureSendFlow: CameraFirstCaptureSendFlow) {
dismiss(animated: true)
}
}