MT#56937 Don't allow CSC starting calls without any microphone enabled

Change-Id: Ic7cfbdd27ded3df41953cc1526520c0d74a0bc12
mr12.0
Hugo Zigha 2 years ago committed by Hugo Zigha
parent e10c3563d8
commit 276ebf3fc4

@ -168,31 +168,36 @@ export function callUnregister () {
}
export async function callStart ({ number }) {
$localMediaStream = await callCreateLocalAudioStream()
callEvent.emit('localStream', $localMediaStream)
$outgoingRtcSession = $userAgent.call(number, {
eventHandlers: {
progress (event) {
if (event.response.status_code === 183) {
callEvent.emit('outgoingProgress', event)
} else {
callEvent.emit('outgoingRinging', event)
try {
$localMediaStream = await callCreateLocalAudioStream()
callEvent.emit('localStream', $localMediaStream)
$outgoingRtcSession = $userAgent.call(number, {
eventHandlers: {
progress (event) {
if (event.response.status_code === 183) {
callEvent.emit('outgoingProgress', event)
} else {
callEvent.emit('outgoingRinging', event)
}
},
failed (event) {
callEvent.emit('outgoingFailed', event)
},
confirmed (event) {
callEvent.emit('outgoingConfirmed', event)
},
ended (event) {
callEvent.emit('outgoingEnded', event)
$outgoingRtcSession = null
}
},
failed (event) {
callEvent.emit('outgoingFailed', event)
},
confirmed (event) {
callEvent.emit('outgoingConfirmed', event)
},
ended (event) {
callEvent.emit('outgoingEnded', event)
$outgoingRtcSession = null
}
},
mediaStream: $localMediaStream
})
$outgoingRtcSession.connection.ontrack = handleRemoteMediaStream
mediaStream: $localMediaStream
})
$outgoingRtcSession.connection.ontrack = handleRemoteMediaStream
return true
} catch (e) {
return false
}
}
export async function callAccept () {

@ -222,7 +222,7 @@
/>
<q-btn
v-if="canStart"
:disabled="!isIncoming && !isNumberInputDefined"
:disabled="!isIncoming && (!isNumberInputDefined || microphoneNotAllowed)"
color="primary"
text-color="dark"
icon="call"
@ -231,7 +231,15 @@
size="large"
data-cy="start-call"
@click="startCall('audioOnly')"
/>
>
<q-tooltip
v-if="microphoneNotAllowed"
:delay="500"
class="text-dark"
>
{{ $t('No microphone authorized.') }}
</q-tooltip>
</q-btn>
</div>
<div
v-if="minimized"
@ -430,7 +438,9 @@ export default {
data () {
return {
localMediaWrapperWidth: 0,
remoteMediaWrapperWidth: 0
remoteMediaWrapperWidth: 0,
microphoneNotAllowed: false,
permissionState: ''
}
},
computed: {
@ -570,7 +580,7 @@ export default {
})
}
},
mounted () {
async mounted () {
const fetchMediaWrapperWidth = () => {
this.fetchLocalMediaWrapperWidth()
this.fetchRemoteMediaWrapperWidth()
@ -579,6 +589,18 @@ export default {
this.emitter.$on('window-resized', fetchMediaWrapperWidth)
this.emitter.$on('content-resized', fetchMediaWrapperWidth)
this.emitter.$on('orientation-changed', fetchMediaWrapperWidth)
if (!navigator.userAgent.includes('Firefox')) {
const permission = await navigator.permissions.query({ name: 'microphone' })
this.permissionState = permission.state
this.microphoneNotAllowed = this.permissionState === 'denied'
permission.onchange = (event) => {
if (this.permissionState === 'prompt' && event.target.state === 'denied') {
this.closeCall()
}
this.permissionState = permission.state
this.microphoneNotAllowed = event.target.state === 'denied'
}
}
},
methods: {
fetchLocalMediaWrapperWidth () {

@ -289,6 +289,7 @@
"No groups created yet": "No groups created yet",
"No manager secretary configuration created yet": "No manager secretary configuration created yet",
"No messages": "No messages",
"No microphone authorized.": "No microphone authorized.",
"No numbers assigned": "No numbers assigned",
"No numbers found": "No numbers found",
"No parents assigned": "No parents assigned",

@ -16,6 +16,12 @@ import {
callHasLocalCamera
} from 'src/api/ngcp-call'
import { errorVisibilityTimeout } from 'src/store/call/common'
import {
showGlobalError
} from 'src/helpers/ui'
import {
i18n
} from 'boot/i18n'
let errorVisibilityTimer = null
@ -26,11 +32,16 @@ export default {
.replaceAll(' ', '')
.replaceAll('-', '')
context.commit('startCalling', number)
await callStart({
const isStarted = await callStart({
number,
localMedia
})
context.commit('localMediaSuccess', callGetLocalMediaStreamId())
if (isStarted) {
context.commit('localMediaSuccess', callGetLocalMediaStreamId())
} else {
context.commit('inputNumber')
showGlobalError(i18n.global.tc('No microphone authorized.'))
}
},
async accept (context, localMedia) {
await callAccept({

Loading…
Cancel
Save