From 218aa35e1e31afcac4ee1c7073f07a2a2cd9f88f Mon Sep 17 00:00:00 2001
From: agsantos <aline.gondimsantos@savoirfairelinux.com>
Date: Thu, 2 Dec 2021 10:33:33 -0500
Subject: [PATCH] misc: av settings

+ remove "Preview unavailable" and only set preview as invisible if no video device
+ fix preview not starting after branching device
+ resets eudiometer if no videodevice.listsize changes
+ fix preview visibility in recorderbox
+ fix recorderbox closing when changing from conversation to settings

GitLab: #608
GitLab: #610
Change-Id: Ie7069934abdf5005ed8360fad20c0de20bdc1a43
---
 src/mainview/components/ChatViewFooter.qml    |  5 +++++
 src/mainview/components/RecordBox.qml         | 20 +++++++++++++------
 src/settingsview/components/AudioSettings.qml | 14 +++++++++++++
 src/settingsview/components/AvSettingPage.qml |  4 ----
 src/settingsview/components/VideoSettings.qml | 18 +++++++++++------
 5 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/src/mainview/components/ChatViewFooter.qml b/src/mainview/components/ChatViewFooter.qml
index b0f58069d..8afa71d16 100644
--- a/src/mainview/components/ChatViewFooter.qml
+++ b/src/mainview/components/ChatViewFooter.qml
@@ -89,6 +89,11 @@ Rectangle {
 
         visible: false
     }
+    onVisibleChanged: {
+        if (!visible) {
+            recordBox.visible = false
+        }
+    }
 
     EmojiPicker {
         id: emojiPicker
diff --git a/src/mainview/components/RecordBox.qml b/src/mainview/components/RecordBox.qml
index b1740a1f7..bc997db9b 100644
--- a/src/mainview/components/RecordBox.qml
+++ b/src/mainview/components/RecordBox.qml
@@ -41,7 +41,6 @@ Rectangle {
     property int duration: 0
     property int state: RecordBox.States.INIT
     property bool isVideo: false
-    property bool previewAvailable: false
     property int preferredWidth: 320
     property int preferredHeight: 240
     property int btnSize: 40
@@ -61,7 +60,6 @@ Rectangle {
         if (isVideo) {
             previewWidget.deviceId = VideoDevices.getDefaultDevice()
             previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId)
-            previewAvailable = true
         }
     }
 
@@ -243,7 +241,7 @@ Rectangle {
 
         anchors.fill: parent
 
-        visible: (isVideo && previewAvailable)
+        visible: (isVideo && VideoDevices.listSize !== 0) 
         color: JamiTheme.blackColor
         radius: 5
 
@@ -262,6 +260,13 @@ Rectangle {
                 maskSource: rectBox
             }
         }
+
+        onVisibleChanged: {
+            if (visible) {
+                openRecorder(true)
+            } else
+                VideoDevices.stopDevice(previewWidget.deviceId)
+        }
     }
 
     Label {
@@ -269,11 +274,14 @@ Rectangle {
 
         width: root.width
 
-        visible: (isVideo && !previewAvailable)
+        visible: (isVideo && VideoDevices.listSize === 0)
 
-        text: qsTr("Preview unavailable")
-        font.pointSize: 10
+        text: JamiStrings.previewUnavailable
+        font.pointSize: JamiTheme.settingsFontSize
         font.kerning: true
+        color: JamiTheme.primaryForegroundColor
+        horizontalAlignment: Text.AlignHCenter
+        verticalAlignment: Text.AlignVCenter
     }
 
     Timer {
diff --git a/src/settingsview/components/AudioSettings.qml b/src/settingsview/components/AudioSettings.qml
index 34649f314..578aabca8 100644
--- a/src/settingsview/components/AudioSettings.qml
+++ b/src/settingsview/components/AudioSettings.qml
@@ -30,6 +30,7 @@ ColumnLayout {
     id:root
 
     property int itemWidth
+    property int videoDevicesListSize: VideoDevices.listSize
 
     enum Setting {
         AUDIOINPUT,
@@ -38,6 +39,19 @@ ColumnLayout {
         AUDIOMANAGER
     }
 
+    onVisibleChanged: {
+        if (visible)
+            populateAudioSettings()
+    }
+
+    onVideoDevicesListSizeChanged: {
+        AvAdapter.stopAudioMeter()
+        var selectedAudioManager = inputComboBoxSetting.comboModel.data(
+                    inputComboBoxSetting.comboModel.index(inputComboBoxSetting.modelIndex, 0), AudioDeviceModel.RawDeviceName)
+        AVModel.setInputDevice(selectedAudioManager)
+        AvAdapter.startAudioMeter()
+    }
+
     function populateAudioSettings() {
         inputComboBoxSetting.modelIndex = inputComboBoxSetting.comboModel.getCurrentIndex()
         outputComboBoxSetting.modelIndex = outputComboBoxSetting.comboModel.getCurrentIndex()
diff --git a/src/settingsview/components/AvSettingPage.qml b/src/settingsview/components/AvSettingPage.qml
index 52cd2b50f..38003fb2b 100644
--- a/src/settingsview/components/AvSettingPage.qml
+++ b/src/settingsview/components/AvSettingPage.qml
@@ -32,10 +32,6 @@ Rectangle {
     property int contentWidth: avSettingsColumnLayout.width
     property int preferredHeight: avSettingsColumnLayout.implicitHeight
 
-    function populateAVSettings() {
-        audioSettings.populateAudioSettings()
-    }
-
     color: JamiTheme.secondaryBackgroundColor
 
     ColumnLayout {
diff --git a/src/settingsview/components/VideoSettings.qml b/src/settingsview/components/VideoSettings.qml
index 19afe5ef0..c6c705c1c 100644
--- a/src/settingsview/components/VideoSettings.qml
+++ b/src/settingsview/components/VideoSettings.qml
@@ -32,14 +32,12 @@ ColumnLayout {
     id: root
 
     property real aspectRatio: 0.75
-    property bool previewAvailable: false
     property int itemWidth
 
     function startPreviewing(force = false) {
         if (root.visible) {
             previewWidget.deviceId = VideoDevices.getDefaultDevice()
             previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId, force)
-            previewAvailable = true
         }
     }
 
@@ -196,7 +194,7 @@ ColumnLayout {
 
         onSwitchToggled: {
             AvAdapter.setHardwareAcceleration(checked)
-            startPreviewing(true)
+            startPreviewing()
         }
     }
 
@@ -230,11 +228,18 @@ ColumnLayout {
                 maskSource: rectBox
             }
         }
-    }
 
+        onVisibleChanged: {
+            if (visible) {
+                VideoDevices.stopDevice(previewWidget.deviceId)
+                startPreviewing(true)
+            } else
+                VideoDevices.stopDevice(previewWidget.deviceId)
+        }
+    }
+    
     Label {
-        // TODO: proper use of previewAvailable
-        visible: !previewAvailable
+        visible: VideoDevices.listSize === 0
 
         Layout.fillWidth: true
         Layout.preferredHeight: JamiTheme.preferredFieldHeight
@@ -243,6 +248,7 @@ ColumnLayout {
         text: JamiStrings.previewUnavailable
         font.pointSize: JamiTheme.settingsFontSize
         font.kerning: true
+        color: JamiTheme.primaryForegroundColor
 
         horizontalAlignment: Text.AlignHCenter
         verticalAlignment: Text.AlignVCenter
-- 
GitLab