From 8010e1e9709f365609eae13ec42ccdf5ea96c581 Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Tue, 6 Feb 2024 15:41:59 -0500 Subject: [PATCH] MusicService: Autostart music app on music start When starting music on a paired device, the music service will automatically trigger the music app to open if there is no app already loaded. --- src/components/ble/MusicService.cpp | 5 ++++- src/components/ble/MusicService.h | 8 +++++++- src/components/ble/NimbleController.cpp | 2 +- src/displayapp/DisplayApp.cpp | 8 ++++++++ src/displayapp/Messages.h | 1 + src/systemtask/Messages.h | 1 + src/systemtask/SystemTask.cpp | 3 +++ 7 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 43cbec70..659a26d5 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 #include #include @@ -55,7 +56,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, @@ -154,6 +156,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 93d94a34..87c1b38f 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -28,12 +28,17 @@ #include 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(); @@ -88,6 +93,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 5059007a..6e00e122 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 d0bf2240..5b5625b9 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -339,6 +339,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 dcfff4c2..b3730e1b 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -14,6 +14,7 @@ namespace Pinetime { ButtonLongerPressed, ButtonDoubleClicked, NewNotification, + MusicStarted, TimerDone, BleFirmwareUpdateStarted, // Resets the screen timeout timer when awake 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 fc4e8f7e..cd9c0e29 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -352,6 +352,9 @@ void SystemTask::Work() { nimbleController.DisableRadio(); } break; + case Messages::OnMusicStarted: + displayApp.PushMessage(Pinetime::Applications::Display::Messages::MusicStarted); + break; default: break; }