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:
committed by
GitHub
parent
79d9e90ab7
commit
da13e6614b
@@ -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
|
||||
|
||||
@@ -21,6 +21,7 @@ struct SimpleXApp: App {
|
||||
|
||||
init() {
|
||||
hs_init(0, nil)
|
||||
UserDefaults.standard.register(defaults: appDefaults)
|
||||
BGManager.shared.register()
|
||||
NtfManager.shared.registerCategories()
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
25
apps/ios/Shared/Views/UserSettings/CallSettings.swift
Normal file
25
apps/ios/Shared/Views/UserSettings/CallSettings.swift
Normal 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()
|
||||
}
|
||||
}
|
||||
@@ -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") {
|
||||
|
||||
Reference in New Issue
Block a user