NavigationService: Autostart navigation app on nav command

When a paired device sends a navigation message, the navigation service
will automatically trigger the navigation app to open if there is no app
already loaded.
This commit is contained in:
Victor Kareh 2024-02-09 13:35:28 -05:00
parent a403dd343d
commit cb45b9cb37
7 changed files with 25 additions and 2 deletions

View file

@ -17,6 +17,7 @@
*/ */
#include "components/ble/NavigationService.h" #include "components/ble/NavigationService.h"
#include "systemtask/SystemTask.h"
namespace { namespace {
// 0001yyxx-78fc-48fe-8e23-433b3a1942d0 // 0001yyxx-78fc-48fe-8e23-433b3a1942d0
@ -43,7 +44,7 @@ namespace {
} }
} // namespace } // namespace
Pinetime::Controllers::NavigationService::NavigationService() { Pinetime::Controllers::NavigationService::NavigationService(Pinetime::System::SystemTask& systemTask) : systemTask {systemTask} {
characteristicDefinition[0] = {.uuid = &navFlagCharUuid.u, characteristicDefinition[0] = {.uuid = &navFlagCharUuid.u,
.access_cb = NAVCallback, .access_cb = NAVCallback,
.arg = this, .arg = this,
@ -96,6 +97,7 @@ int Pinetime::Controllers::NavigationService::OnCommand(struct ble_gatt_access_c
} else if (ble_uuid_cmp(ctxt->chr->uuid, &navProgressCharUuid.u) == 0) { } else if (ble_uuid_cmp(ctxt->chr->uuid, &navProgressCharUuid.u) == 0) {
m_progress = data[0]; m_progress = data[0];
} }
systemTask.PushMessage(Pinetime::System::Messages::OnNavChange);
} }
return 0; return 0;
} }

View file

@ -27,11 +27,16 @@
#undef min #undef min
namespace Pinetime { namespace Pinetime {
namespace System {
class SystemTask;
}
namespace Controllers { namespace Controllers {
class NavigationService { class NavigationService {
public: public:
NavigationService(); explicit NavigationService(Pinetime::System::SystemTask& systemTask);
void Init(); void Init();
@ -53,6 +58,8 @@ namespace Pinetime {
std::string m_narrative; std::string m_narrative;
std::string m_manDist; std::string m_manDist;
int m_progress; int m_progress;
Pinetime::System::SystemTask& systemTask;
}; };
} }
} }

View file

@ -44,6 +44,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
currentTimeService {dateTimeController}, currentTimeService {dateTimeController},
musicService {systemTask, *this}, musicService {systemTask, *this},
weatherService {dateTimeController}, weatherService {dateTimeController},
navService {systemTask},
batteryInformationService {batteryController}, batteryInformationService {batteryController},
immediateAlertService {systemTask, notificationManager}, immediateAlertService {systemTask, notificationManager},
heartRateService {*this, heartRateController}, heartRateService {*this, heartRateController},

View file

@ -267,6 +267,14 @@ void DisplayApp::Refresh() {
LoadNewScreen(Apps::Music, DisplayApp::FullRefreshDirections::Up); LoadNewScreen(Apps::Music, DisplayApp::FullRefreshDirections::Up);
} }
break; break;
case Messages::NavStarted:
if (currentApp == Apps::Clock && AppAvailable(Apps::Navigation)) {
if (state != States::Running) {
PushMessageToSystemTask(System::Messages::GoToRunning);
}
LoadNewScreen(Apps::Navigation, DisplayApp::FullRefreshDirections::Up);
}
break;
case Messages::TimerDone: case Messages::TimerDone:
if (state != States::Running) { if (state != States::Running) {
PushMessageToSystemTask(System::Messages::GoToRunning); PushMessageToSystemTask(System::Messages::GoToRunning);

View file

@ -16,6 +16,7 @@ namespace Pinetime {
ButtonDoubleClicked, ButtonDoubleClicked,
NewNotification, NewNotification,
MusicStarted, MusicStarted,
NavStarted,
TimerDone, TimerDone,
BleFirmwareUpdateStarted, BleFirmwareUpdateStarted,
DimScreen, DimScreen,

View file

@ -25,6 +25,7 @@ namespace Pinetime {
OnChargingEvent, OnChargingEvent,
OnPairing, OnPairing,
OnMusicStarted, OnMusicStarted,
OnNavChange,
SetOffAlarm, SetOffAlarm,
MeasureBatteryTimerExpired, MeasureBatteryTimerExpired,
BatteryPercentageUpdated, BatteryPercentageUpdated,

View file

@ -396,6 +396,9 @@ void SystemTask::Work() {
case Messages::OnMusicStarted: case Messages::OnMusicStarted:
displayApp.PushMessage(Pinetime::Applications::Display::Messages::MusicStarted); displayApp.PushMessage(Pinetime::Applications::Display::Messages::MusicStarted);
break; break;
case Messages::OnNavChange:
displayApp.PushMessage(Pinetime::Applications::Display::Messages::NavStarted);
break;
default: default:
break; break;
} }