diff options
author | Ted Gould <ted@gould.cx> | 2014-02-25 15:50:44 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2014-02-25 15:50:44 -0600 |
commit | c003018253a7f1574c5f370bf2e1c2148e1df328 (patch) | |
tree | 938cf52caa3dccd85e7b48e0161473b316674f41 | |
parent | 0b93aa745830a32185f4383ba3813fbbd307bdf2 (diff) | |
parent | 69231381cb7656b551d860c441b8d9750f9f5bc2 (diff) | |
download | ayatana-indicator-sound-c003018253a7f1574c5f370bf2e1c2148e1df328.tar.gz ayatana-indicator-sound-c003018253a7f1574c5f370bf2e1c2148e1df328.tar.bz2 ayatana-indicator-sound-c003018253a7f1574c5f370bf2e1c2148e1df328.zip |
Merge trunk and export
-rw-r--r-- | MERGE-REVIEW | 19 | ||||
-rw-r--r-- | debian/changelog | 34 | ||||
-rw-r--r-- | debian/control | 3 | ||||
-rwxr-xr-x | debian/rules | 5 | ||||
-rw-r--r-- | src/accounts-service-user.vala | 6 | ||||
-rw-r--r-- | src/service.vala | 55 | ||||
-rw-r--r-- | tests/manual | 24 |
7 files changed, 137 insertions, 9 deletions
diff --git a/MERGE-REVIEW b/MERGE-REVIEW new file mode 100644 index 0000000..1b7ff95 --- /dev/null +++ b/MERGE-REVIEW @@ -0,0 +1,19 @@ + +This documents the expections that the project has on what both submitters +and reviewers should ensure that they've done for a merge into the project. + +== Submitter Responsibilities == + + * Ensure the project compiles and the test suite executes without error + * Ensure that non-obvious code has comments explaining it + * If the change works on specific profiles, please include those in the merge description. + +== Reviewer Responsibilities == + + * Did the Jenkins build compile? Pass? Run unit tests successfully? + * Are there appropriate tests to cover any new functionality? + * If the description says this effects the phone profile: + * Run tests indicator-sound/unity8* + * If the description says this effects the desktop profile: + * Run tests indicator-sound/unity7* + diff --git a/debian/changelog b/debian/changelog index eb3fedf..818a735 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,37 @@ +indicator-sound (12.10.2+14.04.20140224-0ubuntu1) trusty; urgency=low + + [ Sebastien Bacher ] + * Remove the new added allow-applified key, it's moved to shared + schemas, that way the other desktop components don't need to depends + on indicator-sound only to read that settings + + -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 24 Feb 2014 14:33:07 +0000 + +indicator-sound (12.10.2+14.04.20140220-0ubuntu1) trusty; urgency=low + + [ Lars Uebernickel ] + * Add support for amplified volumes Add a settings key "allow- + amplified-volume" which controls whether the volume slider stops at + 100% or PA_VOLUME_UI_MAX. unity-control-center will provide a ui for + this key. + + -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 20 Feb 2014 18:13:42 +0000 + +indicator-sound (12.10.2+14.04.20140207-0ubuntu1) trusty; urgency=low + + [ Unit193 ] + * Drop the recommends to suggests for the control centers and system + settings so that flavors that don't seed those packages aren't stuck + with them. + + [ Ted Gould ] + * Adding acceptance tests and merge review policies. + + [ CI bot ] + * Adding acceptance tests and merge review policies + + -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 07 Feb 2014 16:26:07 +0000 + indicator-sound (12.10.2+14.04.20140124-0ubuntu1) trusty; urgency=low [ Robert Ancell ] diff --git a/debian/control b/debian/control index 84d3727..f026240 100644 --- a/debian/control +++ b/debian/control @@ -37,7 +37,8 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, pulseaudio, -Recommends: unity-control-center | gnome-control-center | ubuntu-system-settings, + gsettings-ubuntu-schemas (>= 0.0.1+14.04.20140224), +Recommends: unity-control-center | gnome-control-center | ubuntu-system-settings | pavucontrol, Description: System sound indicator. System sound indicator which provides easy control of the PulseAudio sound daemon. diff --git a/debian/rules b/debian/rules index 9a276dc..3f1dfeb 100755 --- a/debian/rules +++ b/debian/rules @@ -5,3 +5,8 @@ export DPKG_GENSYMBOLS_CHECK_LEVEL=4 %: dh $@ --parallel --fail-missing --with translations +override_dh_auto_configure: + # Debian defines CMAKE_INSTALL_LOCALSTATEDIR as /usr/var, which is wrong. + # So until Debian bug 719148 is fixed, do it ourselves. + dh_auto_configure -- -DCMAKE_INSTALL_LOCALSTATEDIR="/var" + diff --git a/src/accounts-service-user.vala b/src/accounts-service-user.vala index 03aeb25..f021764 100644 --- a/src/accounts-service-user.vala +++ b/src/accounts-service-user.vala @@ -27,10 +27,13 @@ public class AccountsServiceUser : Object { public MediaPlayer? player { set { this._player = value; + debug("New player: %s", this._player != null ? this._player.name : "Cleared"); /* No proxy, no settings to set */ - if (this.proxy == null) + if (this.proxy == null) { + debug("Nothing written to Accounts Service, waiting on proxy"); return; + } /* Always reset the timer */ if (this.timer != 0) { @@ -68,6 +71,7 @@ public class AccountsServiceUser : Object { } this.timer = GLib.Timeout.add_seconds(5 * 60, () => { + debug("Writing timestamp"); this.proxy.timestamp = GLib.get_monotonic_time(); return true; }); diff --git a/src/service.vala b/src/service.vala index 7b88e1b..be0164d 100644 --- a/src/service.vala +++ b/src/service.vala @@ -17,9 +17,10 @@ * Lars Uebernickel <lars.uebernickel@canonical.com> */ -public class IndicatorSound.Service { +public class IndicatorSound.Service: Object { public Service (MediaPlayerList playerlist) { this.settings = new Settings ("com.canonical.indicator.sound"); + this.sharedsettings = new Settings ("com.ubuntu.sound"); this.volume_control = new VolumeControl (); @@ -58,6 +59,8 @@ public class IndicatorSound.Service { this.notification.set_hint_string ("x-canonical-private-synchronous", "indicator-sound"); } } + + sharedsettings.bind ("allow-amplified-volume", this, "allow-amplified-volume", SettingsBindFlags.GET); } public int run () { @@ -75,6 +78,25 @@ public class IndicatorSound.Service { return 0; } + public bool allow_amplified_volume { + get { + return this.max_volume > 1.0; + } + + set { + if (value) { + /* from pulse/volume.h: #define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0)) */ + this.max_volume = (double)PulseAudio.Volume.sw_from_dB(11.0) / PulseAudio.Volume.NORM; + } + else { + this.max_volume = 1.0; + } + + /* Normalize volume, because the volume action's state is [0.0, 1.0], see create_volume_action() */ + this.actions.change_action_state ("volume", this.volume_control.get_volume () / this.max_volume); + } + } + const ActionEntry[] action_entries = { { "root", null, null, "@a{sv} {}", null }, { "scroll", activate_scroll_action, "i", null, null }, @@ -86,6 +108,7 @@ public class IndicatorSound.Service { SimpleActionGroup actions; HashTable<string, SoundMenu> menus; Settings settings; + Settings sharedsettings; VolumeControl volume_control; MediaPlayerList players; uint player_action_update_id; @@ -93,13 +116,18 @@ public class IndicatorSound.Service { bool syncing_preferred_players = false; AccountsServiceUser? accounts_service = null; + /* Maximum volume as a scaling factor between the volume action's state and the value in + * this.volume_control. See create_volume_action(). + */ + double max_volume = 1.0; + const double volume_step_percentage = 0.06; void activate_scroll_action (SimpleAction action, Variant? param) { int delta = param.get_int32(); /* positive for up, negative for down */ double v = this.volume_control.get_volume () + volume_step_percentage * delta; - this.volume_control.set_volume (v.clamp (0.0, 1.0)); + this.volume_control.set_volume (v.clamp (0.0, this.max_volume)); if (this.notification != null) { string icon; @@ -206,22 +234,35 @@ public class IndicatorSound.Service { void volume_changed (double volume) { var volume_action = this.actions.lookup_action ("volume") as SimpleAction; - volume_action.set_state (new Variant.double (volume)); + + /* Normalize volume, because the volume action's state is [0.0, 1.0], see create_volume_action() */ + volume_action.set_state (new Variant.double (volume / this.max_volume)); this.update_root_icon (); } Action create_volume_action () { - var volume_action = new SimpleAction.stateful ("volume", VariantType.INT32, new Variant.double (this.volume_control.get_volume ())); + /* The action's state is between be in [0.0, 1.0] instead of [0.0, + * max_volume], so that we don't need to update the slider menu item + * every time allow-amplified-volume is changed. Convert between the + * two here, so that we always pass the full range into + * volume_control.set_volume(). + */ + + double volume = this.volume_control.get_volume () / this.max_volume; + + var volume_action = new SimpleAction.stateful ("volume", VariantType.INT32, new Variant.double (volume)); volume_action.change_state.connect ( (action, val) => { - volume_control.set_volume (val.get_double ()); + double v = val.get_double () * this.max_volume; + volume_control.set_volume (v.clamp (0.0, this.max_volume)); }); /* activating this action changes the volume by the amount given in the parameter */ volume_action.activate.connect ( (action, param) => { - double v = volume_control.get_volume () + volume_step_percentage * param.get_int32 (); - volume_control.set_volume (v.clamp (0.0, 1.0)); + int delta = param.get_int32 (); + double v = volume_control.get_volume () + volume_step_percentage * delta; + volume_control.set_volume (v.clamp (0.0, this.max_volume)); }); this.volume_control.volume_changed.connect (volume_changed); diff --git a/tests/manual b/tests/manual new file mode 100644 index 0000000..201465c --- /dev/null +++ b/tests/manual @@ -0,0 +1,24 @@ + +Test-case indicator-sound/unity7-items-check +<dl> + <dt>Log in to a Unity 7 user session</dt> + <dt>Go to the panel and click on the Sound indicator</dt> + <dd>Ensure there are items in the menu</dd> +</dl> + +Test-case indicator-sound/unity7-greeter-items-check +<dl> + <dt>Start a system and wait for the greeter or logout of the current user session</dt> + <dt>Go to the panel and click on the Sound indicator</dt> + <dd>Ensure there are items in the menu</dd> +</dl> + +Test-case indicator-sound/unity8-items-check +<dl> + <dt>Login to a user session running Unity 8</dt> + <dt>Pull down the top panel until it sticks open</dt> + <dt>Navigate through the tabs until "Sound" is shown</dt> + <dd>Sound is at the top of the menu</dd> + <dd>The menu is populated with items</dd> +</dl> + |