Merge lp:~jhodapp/media-hub/fix-1421620-rtm into lp:~phablet-team/media-hub/media-hub-rtm-14.09

Proposed by Jim Hodapp
Status: Merged
Approved by: Ricardo Salveti
Approved revision: 88
Merged at revision: 89
Proposed branch: lp:~jhodapp/media-hub/fix-1421620-rtm
Merge into: lp:~phablet-team/media-hub/media-hub-rtm-14.09
Diff against target: 105 lines (+24/-11)
2 files modified
src/core/media/service_implementation.cpp (+23/-10)
src/core/media/service_implementation.h (+1/-1)
To merge this branch: bzr merge lp:~jhodapp/media-hub/fix-1421620-rtm
Reviewer Review Type Date Requested Status
Ricardo Salveti (community) Approve
Review via email: mp+254842@code.launchpad.net

Commit message

Fix the bug which caused music playback to start playing again after a phonecall hung up after being auto-paused by disconnecting a headphone jack

Description of the change

Fix the bug which caused music playback to start playing again after a phonecall hung up after being auto-paused by disconnecting a headphone jack

To post a comment you must log in.
Revision history for this message
Ricardo Salveti (rsalveti) wrote :

Looks good, works as expected.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/core/media/service_implementation.cpp'
--- src/core/media/service_implementation.cpp 2015-03-31 20:38:11 +0000
+++ src/core/media/service_implementation.cpp 2015-03-31 21:23:21 +0000
@@ -35,6 +35,7 @@
35#include <map>35#include <map>
36#include <memory>36#include <memory>
37#include <thread>37#include <thread>
38#include <utility>
3839
39#include <pulse/pulseaudio.h>40#include <pulse/pulseaudio.h>
4041
@@ -478,7 +479,9 @@
478 // begins.479 // begins.
479 core::Signal<void> pause_playback;480 core::Signal<void> pause_playback;
480 std::unique_ptr<CallMonitor> call_monitor;481 std::unique_ptr<CallMonitor> call_monitor;
481 std::list<media::Player::PlayerKey> paused_sessions;482 // Holds a pair of a Player key denoting what player to resume playback, and a bool
483 // for if it should be resumed after a phone call is hung up
484 std::list<std::pair<media::Player::PlayerKey, bool>> paused_sessions;
482};485};
483486
484media::ServiceImplementation::ServiceImplementation() : d(new Private())487media::ServiceImplementation::ServiceImplementation() : d(new Private())
@@ -488,7 +491,9 @@
488 // When the battery level hits 10% or 5%, pause all multimedia sessions.491 // When the battery level hits 10% or 5%, pause all multimedia sessions.
489 // Playback will resume when the user clears the presented notification.492 // Playback will resume when the user clears the presented notification.
490 if (level == "low" || level == "very_low")493 if (level == "low" || level == "very_low")
491 pause_all_multimedia_sessions();494 // Whatever player session is currently playing, make sure it is NOT resumed after
495 // a phonecall is hung up
496 pause_all_multimedia_sessions(false);
492 });497 });
493498
494 d->is_warning->changed().connect([this](const core::IndicatorPower::IsWarning::ValueType &notifying)499 d->is_warning->changed().connect([this](const core::IndicatorPower::IsWarning::ValueType &notifying)
@@ -502,14 +507,18 @@
502 d->pause_playback.connect([this]()507 d->pause_playback.connect([this]()
503 {508 {
504 std::cout << "Got pause_playback signal, pausing all multimedia sessions" << std::endl;509 std::cout << "Got pause_playback signal, pausing all multimedia sessions" << std::endl;
505 pause_all_multimedia_sessions();510 // Whatever player session is currently playing, make sure it is NOT resumed after
511 // a phonecall is hung up
512 pause_all_multimedia_sessions(false);
506 });513 });
507514
508 d->call_monitor->on_change([this](CallMonitor::State state) {515 d->call_monitor->on_change([this](CallMonitor::State state) {
509 switch (state) {516 switch (state) {
510 case CallMonitor::OffHook:517 case CallMonitor::OffHook:
511 std::cout << "Got call started signal, pausing all multimedia sessions" << std::endl;518 std::cout << "Got call started signal, pausing all multimedia sessions" << std::endl;
512 pause_all_multimedia_sessions();519 // Whatever player session is currently playing, make sure it gets resumed after
520 // a phonecall is hung up
521 pause_all_multimedia_sessions(true);
513 break;522 break;
514 case CallMonitor::OnHook:523 case CallMonitor::OnHook:
515 std::cout << "Got call ended signal, resuming paused multimedia sessions" << std::endl;524 std::cout << "Got call ended signal, resuming paused multimedia sessions" << std::endl;
@@ -579,14 +588,15 @@
579 });588 });
580}589}
581590
582void media::ServiceImplementation::pause_all_multimedia_sessions()591void media::ServiceImplementation::pause_all_multimedia_sessions(bool resume_play_after_phonecall)
583{592{
584 enumerate_players([this](const media::Player::PlayerKey& key, const std::shared_ptr<media::Player>& player)593 enumerate_players([this, resume_play_after_phonecall](const media::Player::PlayerKey& key, const std::shared_ptr<media::Player>& player)
585 {594 {
586 if (player->playback_status() == Player::playing595 if (player->playback_status() == Player::playing
587 && player->audio_stream_role() == media::Player::multimedia)596 && player->audio_stream_role() == media::Player::multimedia)
588 {597 {
589 d->paused_sessions.push_back(key);598 auto paused_player_pair = std::make_pair(key, resume_play_after_phonecall);
599 d->paused_sessions.push_back(paused_player_pair);
590 std::cout << "Pausing Player with key: " << key << std::endl;600 std::cout << "Pausing Player with key: " << key << std::endl;
591 player->pause();601 player->pause();
592 }602 }
@@ -595,13 +605,16 @@
595605
596void media::ServiceImplementation::resume_paused_multimedia_sessions(bool resume_video_sessions)606void media::ServiceImplementation::resume_paused_multimedia_sessions(bool resume_video_sessions)
597{607{
598 std::for_each(d->paused_sessions.begin(), d->paused_sessions.end(), [this, resume_video_sessions](const media::Player::PlayerKey& key) {608 std::for_each(d->paused_sessions.begin(), d->paused_sessions.end(),
609 [this, resume_video_sessions](const std::pair<media::Player::PlayerKey, bool> &paused_player_pair) {
610 const media::Player::PlayerKey key = paused_player_pair.first;
611 const bool resume_play_after_phonecall = paused_player_pair.second;
599 auto player = player_for_key(key);612 auto player = player_for_key(key);
600 // Only resume video playback if explicitly desired613 // Only resume video playback if explicitly desired
601 if (resume_video_sessions || player->is_audio_source())614 if ((resume_video_sessions || player->is_audio_source()) && resume_play_after_phonecall)
602 player->play();615 player->play();
603 else616 else
604 std::cout << "Not auto-resuming video playback session." << std::endl;617 std::cout << "Not auto-resuming video player session or other type of player session." << std::endl;
605 });618 });
606619
607 d->paused_sessions.clear();620 d->paused_sessions.clear();
608621
=== modified file 'src/core/media/service_implementation.h'
--- src/core/media/service_implementation.h 2015-03-31 20:38:11 +0000
+++ src/core/media/service_implementation.h 2015-03-31 21:23:21 +0000
@@ -41,7 +41,7 @@
41 void pause_other_sessions(Player::PlayerKey key);41 void pause_other_sessions(Player::PlayerKey key);
4242
43private:43private:
44 void pause_all_multimedia_sessions();44 void pause_all_multimedia_sessions(bool resume_play_after_phonecall);
45 void resume_paused_multimedia_sessions(bool resume_video_sessions = true);45 void resume_paused_multimedia_sessions(bool resume_video_sessions = true);
46 void resume_multimedia_session();46 void resume_multimedia_session();
4747

Subscribers

People subscribed via source and target branches