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 ada69987c2
commit 4ccfac94f9
7 changed files with 25 additions and 2 deletions

View file

@ -17,6 +17,7 @@
*/
#include "components/ble/NavigationService.h"
#include "systemtask/SystemTask.h"
namespace {
// 0001yyxx-78fc-48fe-8e23-433b3a1942d0
@ -43,7 +44,7 @@ namespace {
}
} // namespace
Pinetime::Controllers::NavigationService::NavigationService() {
Pinetime::Controllers::NavigationService::NavigationService(Pinetime::System::SystemTask& systemTask) : systemTask {systemTask} {
characteristicDefinition[0] = {.uuid = &navFlagCharUuid.u,
.access_cb = NAVCallback,
.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) {
m_progress = data[0];
}
systemTask.PushMessage(Pinetime::System::Messages::OnNavChange);
}
return 0;
}

View file

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

View file

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

View file

@ -335,6 +335,14 @@ void DisplayApp::Refresh() {
LoadNewScreen(Apps::Music, DisplayApp::FullRefreshDirections::Up);
}
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:
if (state != States::Running) {
PushMessageToSystemTask(System::Messages::GoToRunning);

View file

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

View file

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

View file

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