|
|
@ -281,15 +281,23 @@ class CallViewController: UIViewController, CallDelegate {
|
|
|
|
|
|
|
|
|
|
|
|
textMessageButton = createButton(imageName:"message-active-wide",
|
|
|
|
textMessageButton = createButton(imageName:"message-active-wide",
|
|
|
|
action:#selector(didPressTextMessage))
|
|
|
|
action:#selector(didPressTextMessage))
|
|
|
|
muteButton = createButton(imageName:"mute-active-wide",
|
|
|
|
muteButton = createButton(imageName:"mute-unselected-wide",
|
|
|
|
action:#selector(didPressMute))
|
|
|
|
action:#selector(didPressMute))
|
|
|
|
speakerPhoneButton = createButton(imageName:"speaker-active-wide",
|
|
|
|
speakerPhoneButton = createButton(imageName:"speaker-active-wide",
|
|
|
|
action:#selector(didPressSpeakerphone))
|
|
|
|
action:#selector(didPressSpeakerphone))
|
|
|
|
videoButton = createButton(imageName:"video-active-wide",
|
|
|
|
videoButton = createButton(imageName:"video-inactive-wide",
|
|
|
|
action:#selector(didPressVideo))
|
|
|
|
action:#selector(didPressVideo))
|
|
|
|
hangUpButton = createButton(imageName:"hangup-active-wide",
|
|
|
|
hangUpButton = createButton(imageName:"hangup-active-wide",
|
|
|
|
action:#selector(didPressHangup))
|
|
|
|
action:#selector(didPressHangup))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let muteSelectedImage = UIImage(named:"mute-selected-wide")
|
|
|
|
|
|
|
|
assert(muteSelectedImage != nil)
|
|
|
|
|
|
|
|
muteButton.setImage(muteSelectedImage, for:.selected)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let videoSelectedImage = UIImage(named:"video-active-wide")
|
|
|
|
|
|
|
|
assert(videoSelectedImage != nil)
|
|
|
|
|
|
|
|
videoButton.setImage(videoSelectedImage, for:.selected)
|
|
|
|
|
|
|
|
|
|
|
|
ongoingCallView = createContainerForCallControls(controlGroups : [
|
|
|
|
ongoingCallView = createContainerForCallControls(controlGroups : [
|
|
|
|
[textMessageButton, videoButton],
|
|
|
|
[textMessageButton, videoButton],
|
|
|
|
[muteButton, speakerPhoneButton ],
|
|
|
|
[muteButton, speakerPhoneButton ],
|
|
|
@ -335,6 +343,7 @@ class CallViewController: UIViewController, CallDelegate {
|
|
|
|
|
|
|
|
|
|
|
|
func createButton(imageName: String, action: Selector) -> UIButton {
|
|
|
|
func createButton(imageName: String, action: Selector) -> UIButton {
|
|
|
|
let image = UIImage(named:imageName)
|
|
|
|
let image = UIImage(named:imageName)
|
|
|
|
|
|
|
|
assert(image != nil)
|
|
|
|
let button = UIButton()
|
|
|
|
let button = UIButton()
|
|
|
|
button.setImage(image, for:.normal)
|
|
|
|
button.setImage(image, for:.normal)
|
|
|
|
button.imageEdgeInsets = UIEdgeInsets(top: buttonInset(),
|
|
|
|
button.imageEdgeInsets = UIEdgeInsets(top: buttonInset(),
|
|
|
@ -513,6 +522,9 @@ class CallViewController: UIViewController, CallDelegate {
|
|
|
|
assert(Thread.isMainThread)
|
|
|
|
assert(Thread.isMainThread)
|
|
|
|
updateCallStatusLabel(callState: callState)
|
|
|
|
updateCallStatusLabel(callState: callState)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
videoButton.isSelected = call.hasVideo
|
|
|
|
|
|
|
|
muteButton.isSelected = call.isMuted
|
|
|
|
|
|
|
|
|
|
|
|
// Show Incoming vs. Ongoing call controls
|
|
|
|
// Show Incoming vs. Ongoing call controls
|
|
|
|
let isRinging = callState == .localRinging
|
|
|
|
let isRinging = callState == .localRinging
|
|
|
|
incomingCallView.isHidden = !isRinging
|
|
|
|
incomingCallView.isHidden = !isRinging
|
|
|
@ -573,7 +585,7 @@ class CallViewController: UIViewController, CallDelegate {
|
|
|
|
Logger.info("\(TAG) called \(#function)")
|
|
|
|
Logger.info("\(TAG) called \(#function)")
|
|
|
|
muteButton.isSelected = !muteButton.isSelected
|
|
|
|
muteButton.isSelected = !muteButton.isSelected
|
|
|
|
if let call = self.call {
|
|
|
|
if let call = self.call {
|
|
|
|
callUIAdapter.toggleMute(call: call, isMuted: muteButton.isSelected)
|
|
|
|
callUIAdapter.setIsMuted(call: call, isMuted: muteButton.isSelected)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
Logger.warn("\(TAG) pressed mute, but call was unexpectedly nil")
|
|
|
|
Logger.warn("\(TAG) pressed mute, but call was unexpectedly nil")
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -608,8 +620,12 @@ class CallViewController: UIViewController, CallDelegate {
|
|
|
|
|
|
|
|
|
|
|
|
func didPressVideo(sender: UIButton) {
|
|
|
|
func didPressVideo(sender: UIButton) {
|
|
|
|
Logger.info("\(TAG) called \(#function)")
|
|
|
|
Logger.info("\(TAG) called \(#function)")
|
|
|
|
|
|
|
|
videoButton.isSelected = !videoButton.isSelected
|
|
|
|
// TODO:
|
|
|
|
if let call = self.call {
|
|
|
|
|
|
|
|
callUIAdapter.setHasVideo(call: call, hasVideo: videoButton.isSelected)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
Logger.warn("\(TAG) pressed video, but call was unexpectedly nil")
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -627,18 +643,25 @@ class CallViewController: UIViewController, CallDelegate {
|
|
|
|
self.dismiss(animated: true)
|
|
|
|
self.dismiss(animated: true)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// MARK: - Call Delegate
|
|
|
|
// MARK: - CallDelegate
|
|
|
|
|
|
|
|
|
|
|
|
internal func stateDidChange(call: SignalCall, state: CallState) {
|
|
|
|
internal func stateDidChange(call: SignalCall, state: CallState) {
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
self.updateCallUI(callState: state)
|
|
|
|
self.updateCallUI(callState: state)
|
|
|
|
|
|
|
|
Logger.info("\(self.TAG) new call status: \(call.state)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
self.audioService.handleState(state)
|
|
|
|
self.audioService.handleState(state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
internal func hasVideoDidChange(call: SignalCall, hasVideo: Bool) {
|
|
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
|
|
|
|
self.updateCallUI(callState: call.state)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
internal func muteDidChange(call: SignalCall, isMuted: Bool) {
|
|
|
|
internal func muteDidChange(call: SignalCall, isMuted: Bool) {
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
self.muteButton.isSelected = call.isMuted
|
|
|
|
self.updateCallUI(callState: call.state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|