From 06014d1e24c95bbe24e1c1637f2b579c605cf5bb Mon Sep 17 00:00:00 2001 From: Rik Date: Fri, 27 Mar 2026 12:11:53 +0100 Subject: [PATCH 1/3] Add quick access settings option --- src/CMakeLists.txt | 1 + src/components/settings/Settings.h | 12 ++++ src/displayapp/DisplayApp.cpp | 4 ++ src/displayapp/apps/Apps.h.in | 1 + src/displayapp/fonts/fonts.json | 7 ++- .../screens/settings/SettingQuickAccess.cpp | 63 +++++++++++++++++++ .../screens/settings/SettingQuickAccess.h | 27 ++++++++ src/displayapp/screens/settings/Settings.h | 3 +- 8 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 src/displayapp/screens/settings/SettingQuickAccess.cpp create mode 100644 src/displayapp/screens/settings/SettingQuickAccess.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4a354df64..99e40ad949 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -418,6 +418,7 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingSetDate.cpp displayapp/screens/settings/SettingSetTime.cpp displayapp/screens/settings/SettingChimes.cpp + displayapp/screens/settings/SettingQuickAccess.cpp displayapp/screens/settings/SettingShakeThreshold.cpp displayapp/screens/settings/SettingBluetooth.cpp displayapp/screens/settings/SettingOTA.cpp diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 9133d3fea1..26510efb56 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -87,6 +87,17 @@ namespace Pinetime { return settings.chimesOption; }; + void SetQuickAccessApp(Pinetime::Applications::Apps app) { + if (app != settings.quickAccessApp) { + settingsChanged = true; + } + settings.quickAccessApp = app; + } + + Pinetime::Applications::Apps GetQuickAccessApp() const { + return settings.quickAccessApp; + }; + void SetPTSColorTime(Colors colorTime) { if (colorTime != settings.PTS.ColorTime) settingsChanged = true; @@ -369,6 +380,7 @@ namespace Pinetime { Pinetime::Applications::WatchFace watchFace = Pinetime::Applications::WatchFace::Digital; ChimesOption chimesOption = ChimesOption::None; + Pinetime::Applications::Apps quickAccessApp = Pinetime::Applications::Apps::None; PineTimeStyle PTS; diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 84fa603622..62d800d7ec 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -48,6 +48,7 @@ #include "displayapp/screens/settings/SettingSteps.h" #include "displayapp/screens/settings/SettingSetDateTime.h" #include "displayapp/screens/settings/SettingChimes.h" +#include "displayapp/screens/settings/SettingQuickAccess.h" #include "displayapp/screens/settings/SettingHeartRate.h" #include "displayapp/screens/settings/SettingShakeThreshold.h" #include "displayapp/screens/settings/SettingBluetooth.h" @@ -625,6 +626,9 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio case Apps::SettingChimes: currentScreen = std::make_unique(settingsController); break; + case Apps::SettingQuickAccess: + currentScreen = std::make_unique(settingsController); + break; case Apps::SettingShakeThreshold: currentScreen = std::make_unique(settingsController, motionController, *systemTask); break; diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index d440b598d1..0e21bd9bb7 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -42,6 +42,7 @@ namespace Pinetime { SettingSteps, SettingSetDateTime, SettingChimes, + SettingQuickAccess, SettingShakeThreshold, SettingBluetooth, SettingOTA, diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index 3221c2f171..2c62bda542 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -12,7 +12,10 @@ ], "bpp": 1, "size": 20, - "patches": ["jetbrains_mono_bold_20.c_zero.patch", "jetbrains_mono_bold_20.c_M.patch"] + "patches": [ + "jetbrains_mono_bold_20.c_zero.patch", + "jetbrains_mono_bold_20.c_M.patch" + ] }, "jetbrains_mono_42": { "sources": [ @@ -74,4 +77,4 @@ "bpp": 1, "size": 25 } -} +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingQuickAccess.cpp b/src/displayapp/screens/settings/SettingQuickAccess.cpp new file mode 100644 index 0000000000..109bbb5b44 --- /dev/null +++ b/src/displayapp/screens/settings/SettingQuickAccess.cpp @@ -0,0 +1,63 @@ +#include "displayapp/screens/settings/SettingQuickAccess.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Styles.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" +#include + +using namespace Pinetime::Applications::Screens; + +namespace { + struct Option { + Pinetime::Applications::Apps app; + const char* name; + }; + + constexpr std::array options = {{ + {Pinetime::Applications::Apps::Music, "Music"}, + {Pinetime::Applications::Apps::HeartRate, "Heart Rate"}, + {Pinetime::Applications::Apps::StopWatch, "Stopwatch"}, + }}; + + std::array CreateOptionArray() { + std::array optionArray; + for (size_t i = 0; i < CheckboxList::MaxItems; i++) { + if (i >= options.size()) { + optionArray[i].name = ""; + optionArray[i].enabled = false; + } else { + optionArray[i].name = options[i].name; + optionArray[i].enabled = true; + } + } + return optionArray; + } + + uint32_t GetDefaultOption(Pinetime::Applications::Apps currentApp) { + for (size_t i = 0; i < options.size(); i++) { + if (options[i].app == currentApp) { + return i; + } + } + return 0; + } +} + +SettingQuickAccess::SettingQuickAccess(Pinetime::Controllers::Settings& settingsController) + : checkboxList( + 0, + 1, + "Quick Access", + Symbols::list, + GetDefaultOption(settingsController.GetQuickAccessApp()), + [&settings = settingsController](uint32_t index) { + settings.SetQuickAccessApp(options[index].app); + settings.SaveSettings(); + }, + CreateOptionArray()) { +} + +SettingQuickAccess::~SettingQuickAccess() { + lv_obj_clean(lv_scr_act()); +} diff --git a/src/displayapp/screens/settings/SettingQuickAccess.h b/src/displayapp/screens/settings/SettingQuickAccess.h new file mode 100644 index 0000000000..db633adb06 --- /dev/null +++ b/src/displayapp/screens/settings/SettingQuickAccess.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +#include "components/settings/Settings.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/CheckboxList.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingQuickAccess : public Screen { + public: + SettingQuickAccess(Pinetime::Controllers::Settings& settingsController); + ~SettingQuickAccess() override; + + void UpdateSelected(lv_obj_t* object, lv_event_t event); + + private: + CheckboxList checkboxList; + }; + } + } +} diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 32ac3ca943..c75e4fc9c6 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -34,7 +34,7 @@ namespace Pinetime { static constexpr std::array entries {{ {Symbols::sun, "Display", Apps::SettingDisplay}, {Symbols::eye, "Wake Up", Apps::SettingWakeUp}, - {Symbols::clock, "Time format", Apps::SettingTimeFormat}, + {Symbols::list, "Quick Access", Apps::SettingQuickAccess}, {Symbols::home, "Watch face", Apps::SettingWatchFace}, {Symbols::shoe, "Steps", Apps::SettingSteps}, @@ -47,6 +47,7 @@ namespace Pinetime { {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, + {Symbols::clock, "Time format", Apps::SettingTimeFormat}, {Symbols::shieldAlt, "Over-the-air", Apps::SettingOTA}, {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, {Symbols::list, "About", Apps::SysInfo}, From 675c784ebd4963cc317f15c76958aeeedbfff8ca Mon Sep 17 00:00:00 2001 From: Rik Date: Fri, 27 Mar 2026 12:19:37 +0100 Subject: [PATCH 2/3] Add loader for quick access app --- src/displayapp/DisplayApp.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 62d800d7ec..de72e0b35e 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -431,6 +431,11 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeRight: LoadNewScreen(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; + case TouchEvents::SwipeLeft: + if (settingsController.GetQuickAccessApp() != Apps::None) { + LoadNewScreen(settingsController.GetQuickAccessApp(), DisplayApp::FullRefreshDirections::LeftAnim); + } + break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); break; From 1fc79243223235bf5c4b01579d4fa1d9e228a8cd Mon Sep 17 00:00:00 2001 From: Rik Date: Fri, 27 Mar 2026 12:21:04 +0100 Subject: [PATCH 3/3] Add option to disable quick access --- src/displayapp/screens/settings/SettingQuickAccess.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/displayapp/screens/settings/SettingQuickAccess.cpp b/src/displayapp/screens/settings/SettingQuickAccess.cpp index 109bbb5b44..710b2df15d 100644 --- a/src/displayapp/screens/settings/SettingQuickAccess.cpp +++ b/src/displayapp/screens/settings/SettingQuickAccess.cpp @@ -14,7 +14,8 @@ namespace { const char* name; }; - constexpr std::array options = {{ + constexpr std::array options = {{ + {Pinetime::Applications::Apps::None, "None"}, {Pinetime::Applications::Apps::Music, "Music"}, {Pinetime::Applications::Apps::HeartRate, "Heart Rate"}, {Pinetime::Applications::Apps::StopWatch, "Stopwatch"},