aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavi Garcia Mena <xavi.garcia.mena@canonical.com>2016-03-17 10:06:24 +0000
committerCI Train Bot <ci-train-bot@canonical.com>2016-03-17 10:06:24 +0000
commitce15e8ab1cc1fd37df3badad69da4e0ecc7b9318 (patch)
tree26e355f5d1c702dc8a2b9e67702ace213e9054ec
parente24fb23ad146190a7ba873abb620e2a6def0ad21 (diff)
parent2acd4961a7e5af93f863503eca90f51d28e6603d (diff)
downloadayatana-indicator-sound-ce15e8ab1cc1fd37df3badad69da4e0ecc7b9318.tar.gz
ayatana-indicator-sound-ce15e8ab1cc1fd37df3badad69da4e0ecc7b9318.tar.bz2
ayatana-indicator-sound-ce15e8ab1cc1fd37df3badad69da4e0ecc7b9318.zip
Changed to code to get the root icon. Now it does not take into account the source output, as in fact that code was not differentiating between any particular case.
The code was added in the past in the case that we should differentiate between bluetooth, headphones, etc... but it was never used. Fixes: #1555831 Approved by: Charles Kerr
-rw-r--r--src/service.vala50
-rw-r--r--tests/integration/indicator-sound-test-base.cpp43
-rw-r--r--tests/integration/indicator-sound-test-base.h2
-rw-r--r--tests/integration/test-indicator.cpp62
4 files changed, 116 insertions, 41 deletions
diff --git a/src/service.vala b/src/service.vala
index bdc4d40..651ec73 100644
--- a/src/service.vala
+++ b/src/service.vala
@@ -290,48 +290,16 @@ public class IndicatorSound.Service: Object {
private bool block_info_notifications = false;
- private static unowned string get_volume_root_icon_by_volume (double volume, VolumeControl.ActiveOutput active_output) {
- switch (active_output) {
- case VolumeControl.ActiveOutput.SPEAKERS:
- case VolumeControl.ActiveOutput.HEADPHONES:
- case VolumeControl.ActiveOutput.BLUETOOTH_HEADPHONES:
- case VolumeControl.ActiveOutput.BLUETOOTH_SPEAKER:
- case VolumeControl.ActiveOutput.USB_SPEAKER:
- case VolumeControl.ActiveOutput.USB_HEADPHONES:
- case VolumeControl.ActiveOutput.HDMI_SPEAKER:
- case VolumeControl.ActiveOutput.HDMI_HEADPHONES:
- if (volume <= 0.0)
- return "audio-volume-muted-panel";
- if (volume <= 0.3)
- return "audio-volume-low-panel";
- if (volume <= 0.7)
- return "audio-volume-medium-panel";
- return "audio-volume-high-panel";
-
- default:
- return "";
- }
- }
-
private unowned string get_volume_root_icon (double volume, bool mute, VolumeControl.ActiveOutput active_output) {
- switch (active_output) {
- case VolumeControl.ActiveOutput.SPEAKERS:
- case VolumeControl.ActiveOutput.HEADPHONES:
- case VolumeControl.ActiveOutput.BLUETOOTH_HEADPHONES:
- case VolumeControl.ActiveOutput.BLUETOOTH_SPEAKER:
- case VolumeControl.ActiveOutput.USB_SPEAKER:
- case VolumeControl.ActiveOutput.USB_HEADPHONES:
- case VolumeControl.ActiveOutput.HDMI_SPEAKER:
- case VolumeControl.ActiveOutput.HDMI_HEADPHONES:
- if (mute || volume <= 0.0)
- return this.mute_blocks_sound ? "audio-volume-muted-blocking-panel" : "audio-volume-muted-panel";
- if (this.accounts_service != null && this.accounts_service.silentMode)
- return "audio-volume-muted-panel";
- return get_volume_root_icon_by_volume (volume, active_output);
-
- default:
- return "";
- }
+ if (mute || volume <= 0.0)
+ return this.mute_blocks_sound ? "audio-volume-muted-blocking-panel" : "audio-volume-muted-panel";
+ if (this.accounts_service != null && this.accounts_service.silentMode)
+ return "audio-volume-muted-panel";
+ if (volume <= 0.3)
+ return "audio-volume-low-panel";
+ if (volume <= 0.7)
+ return "audio-volume-medium-panel";
+ return "audio-volume-high-panel";
}
private void update_notification () {
diff --git a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
index 9225c1d..b8608f6 100644
--- a/tests/integration/indicator-sound-test-base.cpp
+++ b/tests/integration/indicator-sound-test-base.cpp
@@ -989,6 +989,49 @@ QVariantList IndicatorSoundTestBase::getActionValue(QString const &action)
return QVariantList();
}
+QStringList IndicatorSoundTestBase::getRootIconValue(bool *isValid)
+{
+ QString result = 0;
+
+ QVariantList varList = getActionValue("root");
+ if (isValid != nullptr)
+ {
+ *isValid = false;
+ }
+ if (varList.at(0).canConvert<QDBusArgument>())
+ {
+ const QDBusArgument dbusArg = qvariant_cast<QDBusArgument>(varList.at(0));
+ if (dbusArg.currentType() == QDBusArgument::MapType)
+ {
+ QVariantMap map;
+ dbusArg >> map;
+ QVariantMap::const_iterator iter = map.find("icon");
+ if (iter != map.end())
+ {
+ const QDBusArgument iconArg = qvariant_cast<QDBusArgument>((*iter));
+ if (iconArg.currentType() == QDBusArgument::StructureType)
+ {
+ QString name;
+ QVariant iconValue;
+ iconArg.beginStructure();
+ iconArg >> name;
+ iconArg >> iconValue;
+ if (name == "themed" && iconValue.type() == QVariant::StringList)
+ {
+ if (isValid != nullptr)
+ {
+ *isValid = true;
+ }
+ }
+ iconArg.endStructure();
+ return iconValue.toStringList();
+ }
+ }
+ }
+ }
+ return QStringList();
+}
+
qlonglong IndicatorSoundTestBase::getVolumeSyncValue(bool *isValid)
{
qlonglong result = 0;
diff --git a/tests/integration/indicator-sound-test-base.h b/tests/integration/indicator-sound-test-base.h
index 5b3545a..7942bd5 100644
--- a/tests/integration/indicator-sound-test-base.h
+++ b/tests/integration/indicator-sound-test-base.h
@@ -148,6 +148,8 @@ protected:
qlonglong getVolumeSyncValue(bool *isValid = nullptr);
+ QStringList getRootIconValue(bool *isValid = nullptr);
+
float getVolumeValue(bool *isValid = nullptr);
static QVariant waitPropertyChanged(QSignalSpy * signalSpy, QString property);
diff --git a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
index eff1516..bb08c40 100644
--- a/tests/integration/test-indicator.cpp
+++ b/tests/integration/test-indicator.cpp
@@ -32,6 +32,68 @@ class TestIndicator: public IndicatorSoundTestBase
{
};
+TEST_F(TestIndicator, PhoneCheckRootIcon)
+{
+ double INITIAL_VOLUME = 0.0;
+
+ ASSERT_NO_THROW(startAccountsService());
+ EXPECT_TRUE(clearGSettingsPlayers());
+ ASSERT_NO_THROW(startPulsePhone());
+
+ // initialize volumes in pulseaudio
+ EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
+
+ // start now the indicator, so it picks the new volumes
+ ASSERT_NO_THROW(startIndicator());
+
+ // check that the volume is set and give
+ // time to the indicator to start
+ EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
+ .item(mh::MenuItemMatcher()
+ .action("indicator.root")
+ .string_attribute("x-canonical-type", "com.canonical.indicator.root")
+ .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+ .string_attribute("x-canonical-secondary-action", "indicator.mute")
+ .string_attribute("submenu-action", "indicator.indicator-shown")
+ .mode(mh::MenuItemMatcher::Mode::all)
+ .submenu()
+ .item(mh::MenuItemMatcher()
+ .section()
+ .item(silentModeSwitch(false))
+ .item(volumeSlider(INITIAL_VOLUME, "Volume"))
+ )
+ .item(mh::MenuItemMatcher()
+ .label("Sound Settingsā€¦")
+ .action("indicator.phone-settings")
+ )
+ ).match());
+
+ QStringList mutedIcon = {"audio-volume-muted-panel", "audio-volume-muted", "audio-volume", "audio"};
+ EXPECT_EQ(getRootIconValue(), mutedIcon);
+
+ QStringList lowVolumeIcon = {"audio-volume-low-panel", "audio-volume-low", "audio-volume", "audio"};
+ for( double volume = 0.1; volume <= 0.3; volume+=0.1)
+ {
+ EXPECT_TRUE(setStreamRestoreVolume("alert", volume));
+ EXPECT_EQ(getRootIconValue(), lowVolumeIcon);
+ }
+ EXPECT_TRUE(setStreamRestoreVolume("alert", 0.4));
+
+ QStringList mediumVolumeIcon = {"audio-volume-medium-panel", "audio-volume-medium", "audio-volume", "audio"};
+ for( double volume = 0.4; volume <= 0.7; volume+=0.1)
+ {
+ EXPECT_TRUE(setStreamRestoreVolume("alert", volume));
+ EXPECT_EQ(getRootIconValue(), mediumVolumeIcon);
+ }
+
+ QStringList highVolumeIcon = {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"};
+ for( double volume = 0.8; volume <= 1.0; volume+=0.1)
+ {
+ EXPECT_TRUE(setStreamRestoreVolume("alert", volume));
+ EXPECT_EQ(getRootIconValue(), highVolumeIcon);
+ }
+}
+
TEST_F(TestIndicator, PhoneTestExternalMicInOut)
{
double INITIAL_VOLUME = 0.0;