27 #include <boost/asio.hpp>
36 #include <hybris/media/media_recorder_layer.h>
45 : resume_key(
std::numeric_limits<
std::uint32_t>::max()),
46 keep_alive(io_service),
50 bus = std::shared_ptr<dbus::Bus>(
new dbus::Bus(core::dbus::WellKnownBus::session));
51 bus->install_executor(dbus::asio::make_executor(bus, io_service));
52 worker = std::move(std::thread([
this]()
59 auto stub_service = dbus::Service::use_service(bus,
"com.canonical.indicator.power");
60 indicator_power_session = stub_service->object_for_path(dbus::types::ObjectPath(
"/com/canonical/indicator/power/Battery"));
65 auto bus = std::shared_ptr<dbus::Bus>(
new dbus::Bus(core::dbus::WellKnownBus::system));
66 bus->install_executor(dbus::asio::make_executor(bus));
68 auto uscreen_stub_service = dbus::Service::use_service(bus, dbus::traits::Service<core::UScreen>::interface_name());
69 uscreen_session = uscreen_stub_service->object_for_path(dbus::types::ObjectPath(
"/com/canonical/Unity/Screen"));
71 observer = android_media_recorder_observer_new();
72 android_media_recorder_observer_set_cb(observer, &Private::media_recording_started_callback,
this);
79 if (worker.joinable())
85 if (uscreen_session ==
nullptr)
94 if (result.is_error())
95 throw std::runtime_error(result.error().print());
96 disp_cookie = result.value();
100 if (disp_cookie != -1)
102 timeout(4000,
true, [
this](){
104 this->disp_cookie = -1;
112 if (context ==
nullptr)
115 auto p =
static_cast<Private*
>(context);
127 std::shared_ptr<core::dbus::Property<core::IndicatorPower::PowerLevel>>
power_level;
128 std::shared_ptr<core::dbus::Property<core::IndicatorPower::IsWarning>>
is_warning;
138 cout << __PRETTY_FUNCTION__ << endl;
144 if (level ==
"low" || level ==
"very_low")
145 pause_all_multimedia_sessions();
153 resume_multimedia_session();
159 pause_all_multimedia_sessions();
162 resume_paused_multimedia_sessions();
173 const media::Player::Configuration& conf)
175 auto player = std::make_shared<media::PlayerImplementation>(
176 conf.identity, conf.bus, conf.session, shared_from_this(), conf.key);
179 player->on_client_disconnected().connect([
this, key]()
186 d->io_service.post([
this, key]()
199 cerr <<
"Could not find Player by key: " << key << endl;
221 cout <<
"Pausing Player with key: " << other_key << endl;
222 other_player->pause();
227 void media::ServiceImplementation::pause_all_multimedia_sessions()
234 d->paused_sessions.push_back(key);
240 void media::ServiceImplementation::resume_paused_multimedia_sessions()
246 d->paused_sessions.clear();
249 void media::ServiceImplementation::resume_multimedia_session()
258 cout <<
"Resuming playback of Player with key: " << d->resume_key << endl;
260 d->resume_key = std::numeric_limits<std::uint32_t>::max();