aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;