mastervolume: port to use the pipewire audiomixer service 76/21576/2 7.99.2 7.99.3 8.0.0 halibut/7.99.2 halibut/7.99.3 halibut/8.0.0 halibut_7.99.2 halibut_7.99.3 halibut_8.0.0
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Mon, 10 Jun 2019 13:03:22 +0000 (16:03 +0300)
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Mon, 10 Jun 2019 14:56:05 +0000 (17:56 +0300)
Bug-AGL: SPEC-2473

Signed-off-by: George Kiagiadakis <george.kiagiadakis@collabora.com>
Change-Id: I5bacca161ce18a5ad047e4aaa2e395beb016d212

homescreen/src/mastervolume.cpp
package/config.xml

index 35b47fc..5a6dc9a 100644 (file)
@@ -46,20 +46,30 @@ void MasterVolume::setVolume(qint32 volume)
        {
                m_volume = volume;
                QJsonObject arg;
-               arg.insert("action", "volume");
+               arg.insert("control", "Master");
                arg.insert("value", volume);
-               m_client.call("ahl-4a", "activerole", arg, [](bool, const QJsonValue&) {
-                       // Nothing to do, events will update sliders
-               });
+               m_client.call("audiomixer", "volume", arg);
        }
 }
 
 void MasterVolume::onClientConnected()
 {
-       // Subscribe to 4a events
-       m_client.call("ahl-4a", "subscribe", QJsonValue(), [this](bool r, const QJsonValue&) {
-               if (r) qDebug() << "MasterVolume::onClientConnected - subscribed to 4a events!";
-               else qCritical () << "MasterVolume::onClientConnected - Failed to subscribe to 4a events!";
+       QJsonObject arg;
+       arg.insert("control", "Master");
+       m_client.call("audiomixer", "volume", arg, [this](bool r, const QJsonValue& v) {
+               if (r && v.isObject()) {
+                       int volume = v.toObject()["response"].toObject()["volume"].toDouble() * 100;
+                       volume = qBound(0, volume, 100);
+                       if (m_volume != volume)
+                       {
+                               m_volume = volume;
+                               emit VolumeChanged();
+                       }
+               }
+
+               QJsonObject arg;
+               arg.insert("event", "volume_changed");
+               m_client.call("audiomixer", "subscribe", arg);
        });
 }
 
@@ -77,19 +87,19 @@ void MasterVolume::onClientError(QAbstractSocket::SocketError se)
 void MasterVolume::onClientEventReceived(QString name, const QJsonValue& data)
 {
        qDebug() << "MasterVolume::onClientEventReceived[" << name << "]: " << data;
-       if (name == "ahl-4a/volume_changed")
+       if (name == "audiomixer/volume_changed")
        {
-               QJsonObject arg = data.toObject();
-               bool active = arg["active"].toBool();
-               if (active)
+               QString ctlName = data.toObject()["control"].toString();
+
+               if (ctlName != "Master")
+                       return;
+
+               int volume = data.toObject()["value"].toDouble() * 100;
+               volume = qBound(0, volume, 100);
+               if (m_volume != volume)
                {
-                       // QString role = arg["role"].toString();
-                       int volume = arg["volume"].toInt();
-                       if (m_volume != volume)
-                       {
-                               m_volume = volume;
-                               emit VolumeChanged();
-                       }
+                       m_volume = volume;
+                       emit VolumeChanged();
                }
        }
 }
index a14b1f3..3ebe39b 100644 (file)
     <param name="weather" value="ws" />
     <param name="Bluetooth-Manager" value="ws" />
     <param name="windowmanager" value="ws" />
-    <param name="ahl-4a" value="ws" />
+    <param name="audiomixer" value="ws" />
   </feature>
   <feature name="urn:AGL:widget:required-permission">
     <param name="urn:AGL:permission::public:no-htdocs" value="required" />
     <param name="urn:AGL:permission::system:run-by-default" value="required" />
     <param name="http://tizen.org/privilege/internal/dbus" value="required" />
-    <param name="urn:AGL:permission::public:4a-audio-mixer" value="required" />
     <param name="urn:AGL:permission::public:display" value="required" />
   </feature>
 </widget>