From 79e0139fb399b5af1342783ed6abb61aff6e28dd Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Mon, 22 May 2017 12:06:50 -0400 Subject: Add master volume control slider Adds support for a master volume control to the HomeScreen app. The master volume slider appears when touching in the MediaArea at the bottom of the screen. If there is no interaction with the slider, it fades out after 5 seconds so that the AGL logo area is not obscured. The volume slider is accessible across all applications due to the MediaArea portion of HomeScreen always being exposed to the screen. The slider volume control is tied to the default PA sink and applies proportional volume control across all channels of the default sink when changed. It also reacts to external volume change events from other PA clients (e.g. Mixer app or pactl CLI changes) and updates the master volume slider accordingly. AGL-Bug: SPEC-550 Change-Id: I9bf55bc624f4bb95c162a79bd2eb314d8f945033 Signed-off-by: Matt Porter --- homescreen/src/main.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'homescreen/src/main.cpp') diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp index 28a8d38..215e7c6 100644 --- a/homescreen/src/main.cpp +++ b/homescreen/src/main.cpp @@ -28,6 +28,8 @@ #include "applicationmodel.h" #include "appinfo.h" #include "afm_user_daemon_proxy.h" +#include "mastervolume.h" +#include "paclient.h" // XXX: We want this DBus connection to be shared across the different // QML objects, is there another way to do this, a nice way, perhaps? @@ -77,18 +79,26 @@ int main(int argc, char *argv[]) qInstallMessageHandler(noOutput); } + // Fire up PA client QThread + QThread* pat = new QThread; + PaClient* client = new PaClient(); + client->moveToThread(pat); + pat->start(); + qDBusRegisterMetaType(); qDBusRegisterMetaType >(); qmlRegisterType("HomeScreen", 1, 0, "ApplicationLauncher"); qmlRegisterType("Home", 1, 0, "ApplicationModel"); qmlRegisterType("HomeScreen", 1, 0, "StatusBarModel"); + qmlRegisterType("MasterVolume", 1, 0, "MasterVolume"); QQmlApplicationEngine engine; LayoutHandler* layoutHandler = new LayoutHandler(); HomeScreenControlInterface* hsci = new HomeScreenControlInterface(); + QObject::connect(hsci, SIGNAL(newRequestGetSurfaceStatus(int)), layoutHandler, SLOT(requestGetSurfaceStatus(int))); QObject::connect(hsci, SIGNAL(newRequestsToBeVisibleApp(int)), layoutHandler, SLOT(makeMeVisible(int))); QObject::connect(hsci, SIGNAL(newRequestRenderSurfaceToArea(int, int)), layoutHandler, SLOT(requestRenderSurfaceToArea(int,int))); @@ -99,5 +109,14 @@ int main(int argc, char *argv[]) engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + QList mobjs = engine.rootObjects(); + MasterVolume *mv = mobjs.first()->findChild("mv"); + engine.rootContext()->setContextProperty("MasterVolume", mv); + QObject::connect(mv, SIGNAL(sliderVolumeChanged(int)), client, SLOT(incDecVolume(int))); + QObject::connect(client, SIGNAL(volumeExternallyChanged(int)), mv, SLOT(changeExternalVolume(int))); + + // Initalize PA client + client->init(); + return a.exec(); } -- cgit 1.2.3-korg