diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 5d5a8f002..af825302c 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -407,6 +407,10 @@ class CorePreferences val showLettersOnDialpad: Boolean get() = config.getBool("ui", "show_letters_on_dialpad", true) + @get:WorkerThread + val showMicrophoneAndSpeakerVuMeters: Boolean + get() = config.getBool("ui", "show_mic_speaker_vu_meter", false) + // Paths @get:AnyThread diff --git a/app/src/main/java/org/linphone/ui/call/view/VuMeterView.kt b/app/src/main/java/org/linphone/ui/call/view/VuMeterView.kt index 6aa39bf1f..4d75ab120 100644 --- a/app/src/main/java/org/linphone/ui/call/view/VuMeterView.kt +++ b/app/src/main/java/org/linphone/ui/call/view/VuMeterView.kt @@ -68,7 +68,7 @@ class VuMeterView : View { vuMeterPaint = Paint() vuMeterPaint.strokeWidth = 2f vuMeterPaint.isAntiAlias = true - vuMeterPaint.setColor(color) + vuMeterPaint.color = color } fun setVuMeterPercentage(percentage: Float) { @@ -93,7 +93,7 @@ class VuMeterView : View { } override fun onDraw(canvas: Canvas) { - paint.setShader(createShader()) + paint.shader = createShader() canvas.drawCircle(width / 2f, height / 2f, width / 2f, paint) } } diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt index c44a6f74f..872687286 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt @@ -116,6 +116,8 @@ class CurrentCallViewModel val microphoneRecordingVolume = MutableLiveData() + val playbackVolume = MutableLiveData() + val isSpeakerEnabled = MutableLiveData() val isHeadsetEnabled = MutableLiveData() @@ -537,6 +539,7 @@ class CurrentCallViewModel proximitySensorEnabled.value = false videoUpdateInProgress.value = false microphoneRecordingVolume.value = 0f + playbackVolume.value = 0f refreshKeyguardLockedStatus() answerAlpha.value = 1f @@ -1254,12 +1257,14 @@ class CurrentCallViewModel Log.i("$TAG Failed to find an existing 1-1 conversation for current call") } - microphoneVolumeVuMeterTickerFlow().onEach { - coreContext.postOnCoreThread { - val volumeDbm0 = currentCall.recordVolume - microphoneRecordingVolume.postValue(computeVuMeterValue(volumeDbm0)) - } - }.launchIn(viewModelScope) + if (corePreferences.showMicrophoneAndSpeakerVuMeters) { + volumeVuMeterTickerFlow().onEach { + coreContext.postOnCoreThread { + microphoneRecordingVolume.postValue(computeVuMeterValue(currentCall.recordVolume)) + playbackVolume.postValue(computeVuMeterValue(currentCall.playVolume)) + } + }.launchIn(viewModelScope) + } } @WorkerThread @@ -1530,7 +1535,7 @@ class CurrentCallViewModel showGreenToast(R.string.call_is_being_recorded, R.drawable.record_fill) } - private fun microphoneVolumeVuMeterTickerFlow() = flow { + private fun volumeVuMeterTickerFlow() = flow { while (::currentCall.isInitialized) { emit(Unit) delay(50) diff --git a/app/src/main/res/layout/call_actions_generic.xml b/app/src/main/res/layout/call_actions_generic.xml index 394b249c0..771d99bda 100644 --- a/app/src/main/res/layout/call_actions_generic.xml +++ b/app/src/main/res/layout/call_actions_generic.xml @@ -114,6 +114,27 @@ app:layout_constraintStart_toEndOf="@id/toggle_video" app:layout_constraintEnd_toStartOf="@id/change_audio_output" /> + + + +