M products/BellHybrid/apps/Application.cpp => products/BellHybrid/apps/Application.cpp +0 -1
@@ 117,7 117,6 @@ namespace app
void Application::onStop()
{
stopIdleTimer();
- stopAllAudio();
}
void Application::stopAllAudio()
M products/BellHybrid/apps/application-bell-background-sounds/ApplicationBellBackgroundSounds.cpp => products/BellHybrid/apps/application-bell-background-sounds/ApplicationBellBackgroundSounds.cpp +6 -0
@@ 108,4 108,10 @@ namespace app
}
return ApplicationCommon::handleSwitchWindow(msgl);
}
+
+ void ApplicationBellBackgroundSounds::onStop()
+ {
+ Application::onStop();
+ audioModel->stopPlayedByThis({});
+ }
} // namespace app
M products/BellHybrid/apps/application-bell-background-sounds/include/application-bell-background-sounds/ApplicationBellBackgroundSounds.hpp => products/BellHybrid/apps/application-bell-background-sounds/include/application-bell-background-sounds/ApplicationBellBackgroundSounds.hpp +1 -0
@@ 26,6 26,7 @@ namespace app
std::unique_ptr<AbstractAudioModel> audioModel;
std::unique_ptr<bgSounds::BGSoundsPlayer> player;
+ void onStop() override;
sys::MessagePointer handleSwitchWindow(sys::Message *msgl) override;
public:
M products/BellHybrid/apps/application-bell-background-sounds/widgets/BGSoundsPlayer.cpp => products/BellHybrid/apps/application-bell-background-sounds/widgets/BGSoundsPlayer.cpp +1 -1
@@ 28,7 28,7 @@ namespace app::bgSounds
void BGSoundsPlayer::stop(AbstractAudioModel::OnStateChangeCallback &&callback)
{
paused = false;
- audioModel.stop(std::move(callback));
+ audioModel.stopPlayedByThis(std::move(callback));
}
void BGSoundsPlayer::pause(AbstractAudioModel::OnStateChangeCallback &&callback)
{
M products/BellHybrid/apps/application-bell-powernap/ApplicationBellPowerNap.cpp => products/BellHybrid/apps/application-bell-powernap/ApplicationBellPowerNap.cpp +6 -0
@@ 73,4 73,10 @@ namespace app
return handleAsyncResponse(resp);
}
+
+ void ApplicationBellPowerNap::onStop()
+ {
+ Application::onStop();
+ audioModel->stopPlayedByThis({});
+ }
} // namespace app
M products/BellHybrid/apps/application-bell-powernap/include/application-bell-powernap/ApplicationBellPowerNap.hpp => products/BellHybrid/apps/application-bell-powernap/include/application-bell-powernap/ApplicationBellPowerNap.hpp +1 -0
@@ 24,6 24,7 @@ namespace app
{
private:
std::unique_ptr<AbstractAudioModel> audioModel;
+ void onStop() override;
public:
ApplicationBellPowerNap(std::string name = applicationBellPowerNapName,
M products/BellHybrid/apps/application-bell-powernap/presenter/PowerNapProgressPresenter.cpp => products/BellHybrid/apps/application-bell-powernap/presenter/PowerNapProgressPresenter.cpp +1 -1
@@ 65,7 65,7 @@ namespace app::powernap
}
void PowerNapProgressPresenter::onNapAlarmFinished()
{
- audioModel.stop({});
+ audioModel.stopPlayedByThis({});
getView()->napEnded();
}
M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp => products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +6 -0
@@ 239,4 239,10 @@ namespace app
}
return handleAsyncResponse(resp);
}
+
+ void ApplicationBellSettings::onStop()
+ {
+ Application::onStop();
+ audioModel->stopPlayedByThis({});
+ }
} // namespace app
M products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp => products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp +1 -0
@@ 29,6 29,7 @@ namespace app
{
private:
std::unique_ptr<AbstractAudioModel> audioModel;
+ void onStop() override;
public:
ApplicationBellSettings(std::string name = applicationBellSettingsName,
M products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp +1 -1
@@ 61,7 61,7 @@ namespace app::bell_settings
void BedtimeSettingsPresenter::stopSound()
{
- this->audioModel.stop({});
+ this->audioModel.stopPlayedByThis({});
}
void BedtimeSettingsPresenter::exitWithoutSave()
{
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp +1 -1
@@ 57,7 57,7 @@ namespace app::bell_settings
}
void AlarmSettingsPresenter::stopSound()
{
- this->audioModel.stop({});
+ this->audioModel.stopPlayedByThis({});
}
void AlarmSettingsPresenter::exitWithoutSave()
{
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp +1 -1
@@ 61,7 61,7 @@ namespace app::bell_settings
}
void PrewakeUpWindowPresenter::stopSound()
{
- this->audioModel.stop({});
+ this->audioModel.stopPlayedByThis({});
}
void PrewakeUpWindowPresenter::exitWithoutSave()
{
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp +1 -1
@@ 58,7 58,7 @@ namespace app::bell_settings
}
void SnoozePresenter::stopSound()
{
- audioModel.stop({});
+ audioModel.stopPlayedByThis({});
}
void SnoozePresenter::eraseProviderData()
{
M products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp => products/BellHybrid/apps/common/include/common/models/AbstractAudioModel.hpp +2 -1
@@ 36,7 36,8 @@ namespace app
virtual std::optional<Volume> getVolume(PlaybackType playbackType) = 0;
virtual void getVolume(PlaybackType playbackType, OnGetValueCallback &&callback) = 0;
virtual void play(const std::string &filePath, PlaybackType type, OnStateChangeCallback &&callback) = 0;
- virtual void stop(OnStateChangeCallback &&callback) = 0;
+ virtual void stopAny(OnStateChangeCallback &&callback) = 0;
+ virtual void stopPlayedByThis(OnStateChangeCallback &&callback) = 0;
virtual void pause(OnStateChangeCallback &&callback) = 0;
virtual void resume(OnStateChangeCallback &&callback) = 0;
virtual void setPlaybackFinishedCb(OnPlaybackFinishedCallback &&callback) = 0;
M products/BellHybrid/apps/common/include/common/models/AudioModel.hpp => products/BellHybrid/apps/common/include/common/models/AudioModel.hpp +4 -1
@@ 18,13 18,16 @@ namespace app
std::optional<Volume> getVolume(PlaybackType playbackType) override;
void getVolume(PlaybackType playbackType, OnGetValueCallback &&callback) override;
void play(const std::string &filePath, PlaybackType type, OnStateChangeCallback &&callback) override;
- void stop(OnStateChangeCallback &&callback) override;
+ void stopAny(OnStateChangeCallback &&callback) override;
+ void stopPlayedByThis(OnStateChangeCallback &&callback) override;
void pause(OnStateChangeCallback &&callback) override;
void resume(OnStateChangeCallback &&callback) override;
void setPlaybackFinishedCb(OnPlaybackFinishedCallback &&callback) override;
bool hasPlaybackFinished() override;
private:
+ audio::Token lastPlayedToken = audio::Token::MakeBadToken();
+ void stop(audio::Token token, OnStateChangeCallback &&callback);
std::function<void()> playbackFinishedCallback{nullptr};
bool playbackFinishedFlag{false};
ApplicationCommon *app{};
M products/BellHybrid/apps/common/src/AudioModel.cpp => products/BellHybrid/apps/common/src/AudioModel.cpp +15 -4
@@ 76,8 76,9 @@ namespace app
playbackFinishedFlag = false;
auto msg = std::make_unique<service::AudioStartPlaybackRequest>(filePath, convertPlaybackType(type));
auto task = app::AsyncRequest::createFromMessage(std::move(msg), service::audioServiceName);
- auto cb = [_callback = callback](auto response) {
- auto result = dynamic_cast<service::AudioStartPlaybackResponse *>(response);
+ auto cb = [_callback = callback, this](auto response) {
+ auto result = dynamic_cast<service::AudioStartPlaybackResponse *>(response);
+ lastPlayedToken = result->token;
if (result == nullptr) {
return false;
}
@@ 91,9 92,14 @@ namespace app
task->execute(app, this, std::move(cb));
}
- void AudioModel::stop(OnStateChangeCallback &&callback)
+ void AudioModel::stopAny(OnStateChangeCallback &&callback)
+ {
+ stop(audio::Token(), std::move(callback));
+ }
+
+ void AudioModel::stop(audio::Token token, OnStateChangeCallback &&callback)
{
- auto msg = std::make_unique<service::AudioStopRequest>();
+ auto msg = std::make_unique<service::AudioStopRequest>(token);
auto task = app::AsyncRequest::createFromMessage(std::move(msg), service::audioServiceName);
auto cb = [_callback = callback](auto response) {
auto result = dynamic_cast<service::AudioStopResponse *>(response);
@@ 109,6 115,11 @@ namespace app
task->execute(app, this, std::move(cb));
}
+ void AudioModel::stopPlayedByThis(OnStateChangeCallback &&callback)
+ {
+ stop(lastPlayedToken, std::move(callback));
+ }
+
void AudioModel::setVolume(AbstractAudioModel::Volume volume,
PlaybackType playbackType,
OnStateChangeCallback &&callback)
M products/BellHybrid/apps/include/Application.hpp => products/BellHybrid/apps/include/Application.hpp +1 -1
@@ 21,6 21,7 @@ namespace app
void restartIdleTimer();
void stopIdleTimer();
void stopAllAudio();
+ virtual void onStop();
private:
sys::MessagePointer handleKBDKeyEvent(sys::Message *msgl) override;
@@ 31,7 32,6 @@ namespace app
virtual void onKeyPressed();
virtual void onStart();
- virtual void onStop();
bool idleTimerActiveFlag = true;
};
} // namespace app
M products/BellHybrid/services/audio/ServiceAudio.cpp => products/BellHybrid/services/audio/ServiceAudio.cpp +6 -1
@@ 157,7 157,12 @@ namespace service
for (auto &input : audioMux.GetAllInputs()) {
auto t = input.token;
- retCodes.emplace_back(t, stopInput(&input));
+ if (token.IsValid() && t == token) {
+ retCodes.emplace_back(t, stopInput(&input));
+ }
+ if (token.IsUninitialized()) {
+ retCodes.emplace_back(t, stopInput(&input));
+ }
}
// on failure return first false code