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,6 +168,7 @@ export function callUnregister () {
} }
export async function callStart ({ number }) { export async function callStart ({ number }) {
try {
$localMediaStream = await callCreateLocalAudioStream() $localMediaStream = await callCreateLocalAudioStream()
callEvent.emit('localStream', $localMediaStream) callEvent.emit('localStream', $localMediaStream)
$outgoingRtcSession = $userAgent.call(number, { $outgoingRtcSession = $userAgent.call(number, {
@ -193,6 +194,10 @@ export async function callStart ({ number }) {
mediaStream: $localMediaStream mediaStream: $localMediaStream
}) })
$outgoingRtcSession.connection.ontrack = handleRemoteMediaStream $outgoingRtcSession.connection.ontrack = handleRemoteMediaStream
return true
} catch (e) {
return false
}
} }
export async function callAccept () { export async function callAccept () {

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

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

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

Loading…
Cancel
Save