!106 输入输出设备列表只显示目前已激活的端口,暂时禁用选择端口的功能

From: @luoqing_kylinsec 
Reviewed-by: @liubuguiii 
Signed-off-by: @liubuguiii
This commit is contained in:
openeuler-ci-bot 2023-09-11 02:24:46 +00:00 committed by Gitee
commit 8dc9d535f7
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 311 additions and 1 deletions

View File

@ -0,0 +1,306 @@
From 091bc92282fd07e989747ca23157f7af5113c723 Mon Sep 17 00:00:00 2001
From: luoqing <luoqing@kylinsec.com.cn>
Date: Fri, 8 Sep 2023 15:53:56 +0800
Subject: [PATCH] fix(audio):The Sink/Source device list displays only active
ports. The port selection function is temporarily disabled
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 输入输出设备列表只显示目前已激活的端口,暂时禁用选择端口的功能
Related #13261
---
.../audio/src/dbus/audio-device-interface.cpp | 33 +++++++++
.../audio/src/dbus/audio-device-interface.h | 9 +++
plugins/audio/src/plugin/input-page.cpp | 69 +++++++------------
plugins/audio/src/plugin/input-page.h | 1 -
plugins/audio/src/plugin/output-page.cpp | 62 ++++++-----------
plugins/audio/src/plugin/output-page.h | 1 -
6 files changed, 89 insertions(+), 86 deletions(-)
diff --git a/plugins/audio/src/dbus/audio-device-interface.cpp b/plugins/audio/src/dbus/audio-device-interface.cpp
index a3a750f..7ec201d 100644
--- a/plugins/audio/src/dbus/audio-device-interface.cpp
+++ b/plugins/audio/src/dbus/audio-device-interface.cpp
@@ -13,6 +13,7 @@
*/
#include "audio-device-interface.h"
+#include <qt5-log-i.h>
/*
* Implementation of interface class AudioDeviceInterface
@@ -28,6 +29,38 @@ AudioDeviceInterface::~AudioDeviceInterface()
{
}
+QList<AudioPortInfo> AudioDeviceInterface::getPortsInfo()
+{
+ QDBusPendingReply<QString> getPorts = GetPorts();
+ KLOG_DEBUG() << "getPorts:" << getPorts;
+
+ //解析默认sink的端口信息
+ QJsonParseError jsonParseError;
+ QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError);
+
+ if((doc.isNull()) || (jsonParseError.error != QJsonParseError::NoError))
+ {
+ return QList<AudioPortInfo>();
+ }
+
+ QList<AudioPortInfo> portInfoList;
+ if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError)
+ {
+ QJsonArray array = doc.array();
+ for (int i = 0; i < array.count(); ++i)
+ {
+ QJsonObject object = array.at(i).toObject();
+ AudioPortInfo portInfo;
+ portInfo.description = object.value("description").toString();
+ portInfo.name = object.value("name").toString();
+ portInfo.priority = object.value("priority").toDouble();
+ portInfoList << portInfo;
+ }
+ }
+
+ return portInfoList;
+}
+
void sendPropertyChangedDetailSignal(AudioDeviceInterface *ptr, const QString &propertyName, QVariant value)
{
if (propertyName == QStringLiteral("active_port"))
diff --git a/plugins/audio/src/dbus/audio-device-interface.h b/plugins/audio/src/dbus/audio-device-interface.h
index 29fbe6d..8bea01a 100644
--- a/plugins/audio/src/dbus/audio-device-interface.h
+++ b/plugins/audio/src/dbus/audio-device-interface.h
@@ -26,6 +26,13 @@
#include <QtDBus/QtDBus>
#include "audio-device-interface.h"
+struct AudioPortInfo
+{
+ QString description;
+ QString name;
+ double priority;
+};
+
/*
* Proxy class for interface com.kylinsec.Kiran.SessionDaemon.Audio.Device
*/
@@ -103,6 +110,8 @@ public:
return qvariant_cast<double>(property("volume"));
}
+ QList<AudioPortInfo> getPortsInfo();
+
public Q_SLOTS: // METHODS
inline QDBusPendingReply<QString> GetPorts()
{
diff --git a/plugins/audio/src/plugin/input-page.cpp b/plugins/audio/src/plugin/input-page.cpp
index 8b0ecaa..11275ec 100644
--- a/plugins/audio/src/plugin/input-page.cpp
+++ b/plugins/audio/src/plugin/input-page.cpp
@@ -198,48 +198,28 @@ void InputPage::initInputDevice()
void InputPage::initActivedPort()
{
- QDBusPendingReply<QString> getPorts = m_defaultSource->GetPorts();
- KLOG_DEBUG() << "getPorts:" << getPorts;
- //解析默认source的端口信息
- QJsonParseError jsonParseError;
- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError);
- if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError)
- {
- if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError)
- {
- QJsonArray array = doc.array();
- for (int i = 0; i < array.count(); ++i)
- {
- KLOG_DEBUG() << "array.at(i)" << array.at(i);
- QJsonObject object = array.at(i).toObject();
- QString description = object.value("description").toString();
- QString name = object.value("name").toString();
- double priority = object.value("priority").toDouble();
- KLOG_DEBUG() << "description" << description;
- KLOG_DEBUG() << "name" << name;
- KLOG_DEBUG() << "priority" << priority;
-
- ui->inputDevices->insertItem(i, description);
- ui->inputDevices->setItemData(i, name, Qt::UserRole); //激活端口所需信息
- //获取已激活的端口在comobox中的index
- if (m_defaultSource->active_port() == name)
- {
- m_defaultDeviceIndex = i;
- KLOG_DEBUG() << "m_defaultDeviceIndex" << m_defaultDeviceIndex;
- }
- }
- }
- //默认选中已激活的端口
- m_isValidPort = true;
- ui->inputDevices->setCurrentIndex(m_defaultDeviceIndex);
- ui->inputDevices->setEnabled(true);
- ui->volumeSetting->setEnabled(true);
- }
- else
+ QList<AudioPortInfo> portsInfo = m_defaultSource->getPortsInfo();
+
+ if(portsInfo.isEmpty())
{
KLOG_DEBUG() << "ports is null";
disableSettings();
+ return;
}
+
+ Q_FOREACH (auto portInfo, portsInfo)
+ {
+ if(m_defaultSource->active_port() == portInfo.name)
+ {
+ ui->inputDevices->addItem(portInfo.description,portInfo.name);
+ break;
+ }
+ }
+
+ //默认选中已激活的端口
+ m_isValidPort = true;
+ ui->inputDevices->setEnabled(true);
+ ui->volumeSetting->setEnabled(true);
}
void InputPage::initInputSettins()
@@ -304,13 +284,16 @@ void InputPage::disableSettings()
void InputPage::handleActivePortChanged(const QString &value)
{
KLOG_DEBUG() << "handleActivePortChanged :" << value;
- for (int i = 0; i < ui->inputDevices->count(); ++i)
+
+ QList<AudioPortInfo> portsInfo = m_defaultSource->getPortsInfo();
+
+ Q_FOREACH (auto portInfo, portsInfo)
{
- QString name = ui->inputDevices->itemData(i, Qt::UserRole).toString();
- if (name == value)
+ if(m_defaultSource->active_port() == portInfo.name)
{
- ui->inputDevices->setCurrentIndex(i);
- KLOG_DEBUG() << "handleActivePortChanged setCurrentIndex " << i;
+ ui->inputDevices->clear();
+ ui->inputDevices->addItem(portInfo.description,portInfo.name);
+ break;
}
}
}
diff --git a/plugins/audio/src/plugin/input-page.h b/plugins/audio/src/plugin/input-page.h
index 3b57daf..e9f6909 100644
--- a/plugins/audio/src/plugin/input-page.h
+++ b/plugins/audio/src/plugin/input-page.h
@@ -91,7 +91,6 @@ private:
AudioDeviceInterface *m_activedSource;
QMap<int, AudioDeviceInterface *> m_inputDevicesMap;
int m_defaultSourceIndex;
- int m_defaultDeviceIndex;
bool m_isValidPort = false;
QAudioInput *m_audioInput = nullptr;
diff --git a/plugins/audio/src/plugin/output-page.cpp b/plugins/audio/src/plugin/output-page.cpp
index 420cf98..1242b8a 100644
--- a/plugins/audio/src/plugin/output-page.cpp
+++ b/plugins/audio/src/plugin/output-page.cpp
@@ -93,47 +93,25 @@ void OutputPage::initOutputDevice()
void OutputPage::initActivedPort()
{
- QDBusPendingReply<QString> getPorts = m_defaultSink->GetPorts();
- KLOG_DEBUG() << "getPorts:" << getPorts;
-
- //解析默认sink的端口信息
- QJsonParseError jsonParseError;
- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError);
- if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError)
- {
- if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError)
- {
- QJsonArray array = doc.array();
- for (int i = 0; i < array.count(); ++i)
- {
- KLOG_DEBUG() << "array.at(i)" << array.at(i);
- QJsonObject object = array.at(i).toObject();
- QString description = object.value("description").toString();
- QString name = object.value("name").toString();
- double priority = object.value("priority").toDouble();
- KLOG_DEBUG() << "description" << description;
- KLOG_DEBUG() << "name" << name;
- KLOG_DEBUG() << "priority" << priority;
- ui->outputDevices->insertItem(i, description);
- ui->outputDevices->setItemData(i, name, Qt::UserRole); //激活端口所需信息
-
- //获取已激活的端口在comobox中的index
- if (m_defaultSink->active_port() == name)
- {
- m_defaultDeviceIndex = i;
- }
- }
- }
- //默认选中已激活的端口
- ui->outputDevices->setCurrentIndex(m_defaultDeviceIndex);
- initOutputSettins();
- }
- else
+ QList<AudioPortInfo> portsInfo = m_defaultSink->getPortsInfo();
+ if(portsInfo.isEmpty())
{
//无激活端口则禁用音量设置和平衡
KLOG_DEBUG() << "default sink ports is null";
disableSettings();
+ return;
}
+
+ Q_FOREACH (auto portInfo, portsInfo)
+ {
+ if(m_defaultSink->active_port() == portInfo.name)
+ {
+ ui->outputDevices->addItem(portInfo.description,portInfo.name);
+ break;
+ }
+ }
+
+ initOutputSettins();
}
void OutputPage::initOutputSettins()
@@ -202,13 +180,15 @@ void OutputPage::initConnect()
void OutputPage::handleActivePortChanged(const QString &value)
{
KLOG_DEBUG() << "handleActivePortChanged :" << value;
- for (int i = 0; i < ui->outputDevices->count(); ++i)
+ QList<AudioPortInfo> portsInfo = m_defaultSink->getPortsInfo();
+
+ Q_FOREACH (auto portInfo, portsInfo)
{
- QString name = ui->outputDevices->itemData(i, Qt::UserRole).toString();
- if (name == value)
+ if(m_defaultSink->active_port() == portInfo.name)
{
- ui->outputDevices->setCurrentIndex(i);
- KLOG_DEBUG() << "handleActivePortChanged setCurrentIndex " << i;
+ ui->outputDevices->clear();
+ ui->outputDevices->addItem(portInfo.description,portInfo.name);
+ break;
}
}
}
diff --git a/plugins/audio/src/plugin/output-page.h b/plugins/audio/src/plugin/output-page.h
index abaf9a1..dea45e7 100644
--- a/plugins/audio/src/plugin/output-page.h
+++ b/plugins/audio/src/plugin/output-page.h
@@ -61,7 +61,6 @@ private:
AudioInterface *m_audioInterface;
QMap<int, AudioDeviceInterface *> m_outputDevicesMap;
AudioDeviceInterface *m_defaultSink;
- int m_defaultDeviceIndex;
QDBusServiceWatcher *m_dbusServiceWatcher;
};
--
2.33.0

View File

@ -1,6 +1,6 @@
Name: kiran-control-panel
Version: 2.5.5
Release: 6%{?dist}
Release: 7%{?dist}
Summary: Kiran Control Panel
Summary(zh_CN): Kiran桌面控制面板
@ -15,6 +15,7 @@ Patch0005: 0005-fix-account-Fixed-issues-related-to-creating-and-del.patch
Patch0006: 0006-feature-network-When-the-gateway-setting-item-is-0.0.patch
Patch0007: 0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch
Patch0008: 0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch
Patch0009: 0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch
BuildRequires: gcc-c++
BuildRequires: cmake >= 3.2
@ -172,6 +173,9 @@ make %{?_smp_mflags}
rm -rf %{buildroot}
%changelog
* Fri Sep 08 2023 luoqing <luoqing@kylinsec.com.cn> - 2.5.5-7
- KYOS-F: The Sink/Source device list displays only active ports. The port selection function is temporarily disabled(#13261)
* Fri Sep 08 2023 luoqing <luoqing@kylinsec.com.cn> - 2.5.5-6
- KYOS-F: Fixed an issue where the volume tray icon did not change with the volume after the default Sink was changed(#14124)