diff --git a/src/app/appsettingsmanager.h b/src/app/appsettingsmanager.h index 93298523601db6d4e8edfc00dfcb61dc4e06e024..074fb0cf85f76174fa27e4c0fc75304c361c8c8d 100644 --- a/src/app/appsettingsmanager.h +++ b/src/app/appsettingsmanager.h @@ -48,6 +48,7 @@ extern const QString defaultDownloadPath; X(BaseZoom, 1.0) \ X(ParticipantsSide, false) \ X(HideSelf, false) \ + X(HideAudioOnly, false) \ X(AutoUpdate, true) \ X(StartMinimized, false) \ X(ShowChatviewHorizontally, true) \ diff --git a/src/app/callparticipantsmodel.h b/src/app/callparticipantsmodel.h index e1cc7cc0ce7adc97fe37443c6ffdb753c51afb0c..31e1597c8e5f4448e1e9a1390362af572045be70 100644 --- a/src/app/callparticipantsmodel.h +++ b/src/app/callparticipantsmodel.h @@ -76,6 +76,7 @@ class GenericParticipantsFilterModel final : public QSortFilterProxyModel { Q_OBJECT QML_PROPERTY(bool, hideSelf) + QML_PROPERTY(bool, hideAudioOnly) public: explicit GenericParticipantsFilterModel(LRCInstance* lrcInstance, @@ -98,6 +99,11 @@ public: sourceModel()->rowCount() > 1 && sourceModel()->data(index, CallParticipant::Role::IsLocal).toBool()) acceptState = false; + if (acceptState && + hideAudioOnly_ && + sourceModel()->rowCount() > 1 && + sourceModel()->data(index, CallParticipant::Role::VideoMuted).toBool()) + acceptState = false; return acceptState; } diff --git a/src/app/constant/JamiStrings.qml b/src/app/constant/JamiStrings.qml index cfffa2478f9075025948f3cc6be08e295161e8e0..9d6ca31b3d85ae50424fc6b418b4a2fbbe742b4f 100644 --- a/src/app/constant/JamiStrings.qml +++ b/src/app/constant/JamiStrings.qml @@ -253,6 +253,7 @@ Item { property string participantsSide: qsTr("On the side") property string participantsTop: qsTr("On the top") property string hideSelf: qsTr("Hide self") + property string hideAudioOnly: qsTr("Hide participant without video") // LineEditContextMenu property string copy: qsTr("Copy") diff --git a/src/app/mainview/components/CallActionBar.qml b/src/app/mainview/components/CallActionBar.qml index f7d46453be33b649d943a7221b55be1e94539ec5..7f9e8fa5cee98c996e7eb4b9e0a8b25667699b67 100644 --- a/src/app/mainview/components/CallActionBar.qml +++ b/src/app/mainview/components/CallActionBar.qml @@ -176,19 +176,25 @@ Control { case JamiStrings.hideSelf: UtilsAdapter.setAppValue(Settings.HideSelf, !layoutModel.get(index).ActiveSetting) GenericParticipantsFilterModel.hideSelf = UtilsAdapter.getAppValue(Settings.HideSelf) + GenericParticipantsFilterModel.hideAudioOnly = UtilsAdapter.getAppValue(Settings.HideAudioOnly) + GenericParticipantsFilterModel.reset() + break + case JamiStrings.hideAudioOnly: + UtilsAdapter.setAppValue(Settings.HideAudioOnly, !layoutModel.get(index).ActiveSetting) + GenericParticipantsFilterModel.hideSelf = UtilsAdapter.getAppValue(Settings.HideSelf) + GenericParticipantsFilterModel.hideAudioOnly = UtilsAdapter.getAppValue(Settings.HideAudioOnly) GenericParticipantsFilterModel.reset() break } } onTriggered: { layoutModel.clear() - if (!isGrid && isConference) { + if (isConference) { layoutModel.append({"Name": JamiStrings.mosaic, "IconSource": JamiResources.mosaic_black_24dp_svg, "ActiveSetting": isGrid}) layoutModel.append({}) - } - if (isConference) { + var onTheSide = UtilsAdapter.getAppValue(Settings.ParticipantsSide) layoutModel.append({"Name": onTheSide ? JamiStrings.participantsSide : JamiStrings.participantsTop, "IconSource": onTheSide ? JamiResources.ontheside_black_24dp_svg : JamiResources.onthetop_black_24dp_svg, @@ -202,6 +208,12 @@ Control { layoutModel.append({"Name": JamiStrings.viewFullScreen, "IconSource": JamiResources.open_in_full_24dp_svg, "ActiveSetting": layoutManager.isCallFullscreen}) + if (isConference) { + layoutModel.append({}) + layoutModel.append({"Name": JamiStrings.hideAudioOnly, + "IconSource": JamiResources.videocam_off_24dp_svg, + "ActiveSetting": UtilsAdapter.getAppValue(Settings.HideAudioOnly)}) + } } }, Action { diff --git a/src/app/mainview/components/ParticipantsLayer.qml b/src/app/mainview/components/ParticipantsLayer.qml index 87d22ae5839316221a7fb07fa676966b8ff52d61..c8a1b01f7ebb88eb497addb29f9a9d2de462762a 100644 --- a/src/app/mainview/components/ParticipantsLayer.qml +++ b/src/app/mainview/components/ParticipantsLayer.qml @@ -37,6 +37,7 @@ Item { onVisibleChanged: { GenericParticipantsFilterModel.hideSelf = UtilsAdapter.getAppValue(Settings.HideSelf) + GenericParticipantsFilterModel.hideAudioOnly = UtilsAdapter.getAppValue(Settings.HideAudioOnly) } Connections { @@ -45,6 +46,9 @@ Item { function onHideSelfChanged() { GenericParticipantsFilterModel.reset() } + function onHideAudioOnlyChanged() { + GenericParticipantsFilterModel.reset() + } } Component {