diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 94d97f46..7c04fd9a 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -17,6 +17,7 @@ */ #include "components/ble/MusicService.h" #include "components/ble/NimbleController.h" +#include "systemtask/SystemTask.h" #include namespace { @@ -53,7 +54,8 @@ namespace { } } -Pinetime::Controllers::MusicService::MusicService(Pinetime::Controllers::NimbleController& nimble) : nimble(nimble) { +Pinetime::Controllers::MusicService::MusicService(Pinetime::System::SystemTask& systemTask, Pinetime::Controllers::NimbleController& nimble) + : systemTask {systemTask}, nimble(nimble) { characteristicDefinition[0] = {.uuid = &msEventCharUuid.u, .access_cb = MusicCallback, .arg = this, @@ -152,6 +154,7 @@ int Pinetime::Controllers::MusicService::OnCommand(struct ble_gatt_access_ctxt* // These variables need to be updated, because the progress may not be updated immediately, // leading to getProgress() returning an incorrect position. if (playing) { + systemTask.PushMessage(Pinetime::System::Messages::OnMusicStarted); trackProgressUpdateTime = xTaskGetTickCount(); } else { trackProgress += diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index f4b902fe..7c16ec0e 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -27,12 +27,17 @@ #undef min namespace Pinetime { + + namespace System { + class SystemTask; + } + namespace Controllers { class NimbleController; class MusicService { public: - explicit MusicService(NimbleController& nimble); + explicit MusicService(Pinetime::System::SystemTask& systemTask, NimbleController& nimble); void Init(); @@ -87,6 +92,7 @@ namespace Pinetime { bool repeat {false}; bool shuffle {false}; + Pinetime::System::SystemTask& systemTask; NimbleController& nimble; }; } diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 2e7f8003..eb3a84c7 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -42,7 +42,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask, anService {systemTask, notificationManager}, alertNotificationClient {systemTask, notificationManager}, currentTimeService {dateTimeController}, - musicService {*this}, + musicService {systemTask, *this}, weatherService {dateTimeController}, batteryInformationService {batteryController}, immediateAlertService {systemTask, notificationManager}, diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index a50d5073..af7c9e9c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -327,6 +327,14 @@ void DisplayApp::Refresh() { case Messages::NewNotification: LoadNewScreen(Apps::NotificationsPreview, DisplayApp::FullRefreshDirections::Down); break; + case Messages::MusicStarted: + if (currentApp == Apps::Clock && AppAvailable(Apps::Music)) { + if (state != States::Running) { + PushMessageToSystemTask(System::Messages::GoToRunning); + } + LoadNewScreen(Apps::Music, DisplayApp::FullRefreshDirections::Up); + } + break; case Messages::TimerDone: if (state != States::Running) { PushMessageToSystemTask(System::Messages::GoToRunning); diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index 1418f6be..68d1abc8 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -15,6 +15,7 @@ namespace Pinetime { ButtonLongerPressed, ButtonDoubleClicked, NewNotification, + MusicStarted, TimerDone, BleFirmwareUpdateStarted, DimScreen, diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 81be9151..2cb63a39 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -24,6 +24,7 @@ namespace Pinetime { OnNewHalfHour, OnChargingEvent, OnPairing, + OnMusicStarted, SetOffAlarm, MeasureBatteryTimerExpired, BatteryPercentageUpdated, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 211e19ec..6e3bfe56 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -402,6 +402,9 @@ void SystemTask::Work() { nimbleController.DisableRadio(); } break; + case Messages::OnMusicStarted: + displayApp.PushMessage(Pinetime::Applications::Display::Messages::MusicStarted); + break; default: break; }