mobile: call settings, request camera on iOS on call start (#701)

* mobile: call settings, request camera on iOS on call start

* refactor preferences

* fix typo
This commit is contained in:
Evgeny Poberezkin
2022-05-27 16:36:33 +01:00
committed by GitHub
parent 79d9e90ab7
commit da13e6614b
28 changed files with 686 additions and 513 deletions

View File

@@ -660,7 +660,9 @@ func processReceivedMsg(_ res: ChatResponse) {
call.callState = .offerReceived
call.peerMedia = callType.media
call.sharedKey = sharedKey
m.callCommand = .offer(offer: offer.rtcSession, iceCandidates: offer.rtcIceCandidates, media: callType.media, aesKey: sharedKey, useWorker: true)
let useRelay = UserDefaults.standard.bool(forKey: DEFAULT_WEBRTC_POLICY_RELAY)
logger.debug(".callOffer useRelay \(useRelay)")
m.callCommand = .offer(offer: offer.rtcSession, iceCandidates: offer.rtcIceCandidates, media: callType.media, aesKey: sharedKey, useWorker: true, relay: useRelay)
}
case let .callAnswer(contact, answer):
withCall(contact) { call in

View File

@@ -21,6 +21,7 @@ struct SimpleXApp: App {
init() {
hs_init(0, nil)
UserDefaults.standard.register(defaults: appDefaults)
BGManager.shared.register()
NtfManager.shared.registerCategories()
}

View File

@@ -19,7 +19,7 @@ class CallManager {
let m = ChatModel.shared
if let call = m.activeCall, call.callkitUUID == callUUID {
m.showCallView = true
m.callCommand = .capabilities(useWorker: true)
m.callCommand = .capabilities(media: call.localMedia, useWorker: true)
return true
}
return false
@@ -45,7 +45,9 @@ class CallManager {
sharedKey: invitation.sharedKey
)
m.showCallView = true
m.callCommand = .start(media: invitation.peerMedia, aesKey: invitation.sharedKey, useWorker: true)
let useRelay = UserDefaults.standard.bool(forKey: DEFAULT_WEBRTC_POLICY_RELAY)
logger.debug("answerIncomingCall useRelay \(useRelay)")
m.callCommand = .start(media: invitation.peerMedia, aesKey: invitation.sharedKey, useWorker: true, relay: useRelay)
}
func endCall(callUUID: UUID, completed: @escaping (Bool) -> Void) {

View File

@@ -102,7 +102,7 @@ struct WVAPIMessage: Equatable, Decodable, Encodable {
}
enum WCallCommand: Equatable, Encodable, Decodable {
case capabilities(useWorker: Bool? = nil)
case capabilities(media: CallMediaType, useWorker: Bool? = nil)
case start(media: CallMediaType, aesKey: String? = nil, useWorker: Bool? = nil, iceServers: [RTCIceServer]? = nil, relay: Bool? = nil)
case offer(offer: String, iceCandidates: String, media: CallMediaType, aesKey: String? = nil, useWorker: Bool? = nil, iceServers: [RTCIceServer]? = nil, relay: Bool? = nil)
case answer(answer: String, iceCandidates: String)
@@ -143,8 +143,9 @@ enum WCallCommand: Equatable, Encodable, Decodable {
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
switch self {
case let .capabilities(useWorker):
case let .capabilities(media, useWorker):
try container.encode("capabilities", forKey: .type)
try container.encode(media, forKey: .media)
try container.encode(useWorker, forKey: .useWorker)
case let .start(media, aesKey, useWorker, iceServers, relay):
try container.encode("start", forKey: .type)
@@ -186,8 +187,9 @@ enum WCallCommand: Equatable, Encodable, Decodable {
let type = try container.decode(String.self, forKey: CodingKeys.type)
switch type {
case "capabilities":
let media = try container.decode(CallMediaType.self, forKey: CodingKeys.media)
let useWorker = try container.decode((Bool?).self, forKey: CodingKeys.useWorker)
self = .capabilities(useWorker: useWorker)
self = .capabilities(media: media, useWorker: useWorker)
case "start":
let media = try container.decode(CallMediaType.self, forKey: CodingKeys.media)
let aesKey = try? container.decode(String.self, forKey: CodingKeys.aesKey)

View File

@@ -0,0 +1,25 @@
//
// CallSettings.swift
// SimpleX (iOS)
//
// Created by Evgeny on 27/05/2022.
// Copyright © 2022 SimpleX Chat. All rights reserved.
//
import SwiftUI
struct CallSettings: View {
@AppStorage(DEFAULT_WEBRTC_POLICY_RELAY) private var webrtcPolicyRelay = true
var body: some View {
List {
Toggle("Connect via relay", isOn: $webrtcPolicyRelay)
}
}
}
struct CallSettings_Previews: PreviewProvider {
static var previews: some View {
CallSettings()
}
}

View File

@@ -16,6 +16,13 @@ let appBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as?
let DEFAULT_USE_NOTIFICATIONS = "useNotifications"
let DEFAULT_PENDING_CONNECTIONS = "pendingConnections"
let DEFAULT_WEBRTC_POLICY_RELAY = "webrtcPolicyRelay"
let appDefaults: [String:Any] = [
DEFAULT_USE_NOTIFICATIONS: false,
DEFAULT_PENDING_CONNECTIONS: true,
DEFAULT_WEBRTC_POLICY_RELAY: true
]
private var indent: CGFloat = 36
@@ -59,6 +66,12 @@ struct SettingsView: View {
} label: {
settingsRow("server.rack") { Text("SMP servers") }
}
NavigationLink {
CallSettings()
.navigationTitle("Call settings")
} label: {
settingsRow("video") { Text("Call settings") }
}
}
Section("Help") {