75 media::Player::PlayerKey resume_key;
76 media::power::BatteryObserver battery_observer;
77 media::power::StateController::Ptr power_state_controller;
78 media::ClientDeathObserver::Ptr client_death_observer;
80 media::audio::OutputObserver audio_output_observer;
81 media::audio::OutputState audio_output_state;
83 media::telephony::CallMonitor call_monitor;
86 std::list<std::pair<media::Player::PlayerKey, bool>> paused_sessions;
88 QHash<Player::PlayerKey, PlayerImplementation *> m_players;
96 resume_key(
Player::invalidKey),
97 power_state_controller(
media::power::StateController::instance()),
99 audio_output_state(
media::
audio::OutputState::Speaker),
100 m_currentPlayer(
Player::invalidKey),
103 QObject::connect(&battery_observer,
107 const bool resume_play_after_phonecall =
false;
110 switch (battery_observer.level())
112 case media::power::Level::low:
113 case media::power::Level::very_low:
116 pause_all_multimedia_sessions(resume_play_after_phonecall);
123 QObject::connect(&battery_observer,
129 if (!battery_observer.isWarningActive())
133 QObject::connect(&audio_output_observer,
138 const bool resume_play_after_phonecall =
false;
142 MH_INFO(
"AudioOutputObserver reports that output is now Headphones/Headset.");
145 MH_INFO(
"AudioOutputObserver reports that output is now Speaker.");
151 MH_INFO(
"AudioOutputObserver reports that output is now External.");
154 audio_output_state = state;
157 QObject::connect(&call_monitor,
161 const bool resume_play_after_phonecall =
true;
162 switch (call_monitor.callState()) {
163 case media::telephony::CallMonitor::State::OffHook:
164 MH_INFO(
"Got call started signal, pausing all multimedia sessions");
167 pause_all_multimedia_sessions(resume_play_after_phonecall);
169 case media::telephony::CallMonitor::State::OnHook:
170 MH_INFO(
"Got call ended signal, resuming paused multimedia sessions");
171 resume_paused_multimedia_sessions(false);
176 QObject::connect(&recorder_observer,
181 if (state == media::RecordingState::started)
183 power_state_controller->requestDisplayOn();
186 const bool resume_play_after_phonecall =
false;
189 else if (state == media::RecordingState::stopped)
191 power_state_controller->releaseDisplayOn();
216 std::for_each(paused_sessions.begin(), paused_sessions.end(),
217 [
this, resume_video_sessions](
const std::pair<media::Player::PlayerKey, bool> &paused_player_pair) {
218 const media::Player::PlayerKey key = paused_player_pair.first;
219 const bool resume_play_after_phonecall = paused_player_pair.second;
220 PlayerImplementation *player = m_players.value(key);
222 MH_WARNING(
"Failed to look up Player instance for key %d"
223 ", no valid Player instance for that key value and cannot automatically resume"
224 " paused players. This most likely means that media-hub-server has crashed and"
229 if ((resume_video_sessions || player->isAudioSource()) && resume_play_after_phonecall)
232 MH_INFO(
"Not auto-resuming video player session or other type of player session.");
235 paused_sessions.clear();
326 d->client_death_observer,
330 this, [
this, key=client.
key]()
332 Q_D(ServiceImplementation);
334 PlayerImplementation *player = d->m_players.value(key);
336 player->audioStreamRole() == Player::AudioStreamRole::multimedia &&
337 key == currentPlayer())
339 MH_DEBUG(
"==== Resetting current player");
340 d->setCurrentPlayer(Player::invalidKey);
344 d->m_players.remove(key);
345 player->deleteLater();
350 this, [d, key=client.key]() {
351 d->onPlaybackRequested(key);
354 d->m_players[client.key] = player;