aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/displayapp/DisplayApp.cpp5
-rw-r--r--src/displayapp/apps/Apps.h.in7
-rw-r--r--src/displayapp/apps/CMakeLists.txt6
-rw-r--r--src/displayapp/screens/settings/SettingWatchFace.cpp42
-rw-r--r--src/displayapp/screens/settings/SettingWatchFace.h10
5 files changed, 55 insertions, 15 deletions
diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp
index 2792009f..938d1179 100644
--- a/src/displayapp/DisplayApp.cpp
+++ b/src/displayapp/DisplayApp.cpp
@@ -489,10 +489,11 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
currentScreen = std::make_unique<Screens::Settings>(this, settingsController);
break;
case Apps::SettingWatchFace: {
- std::array<Screens::CheckboxList::Item, UserWatchFaceTypes::Count> items;
+ std::array<Screens::SettingWatchFace::Item, UserWatchFaceTypes::Count> items;
int i = 0;
for (const auto& userWatchFace : userWatchFaces) {
- items[i++] = Screens::CheckboxList::Item {userWatchFace.name, userWatchFace.isAvailable(controllers.filesystem)};
+ items[i++] =
+ Screens::SettingWatchFace::Item {userWatchFace.name, userWatchFace.watchFace, userWatchFace.isAvailable(controllers.filesystem)};
}
currentScreen = std::make_unique<Screens::SettingWatchFace>(this, std::move(items), settingsController, filesystem);
} break;
diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in
index 11fe17b5..e6e8d7dc 100644
--- a/src/displayapp/apps/Apps.h.in
+++ b/src/displayapp/apps/Apps.h.in
@@ -71,12 +71,7 @@ namespace Pinetime {
static constexpr size_t Count = sizeof...(Ws);
};
- using UserWatchFaceTypes = WatchFaceTypeList<WatchFace::Digital,
- WatchFace::Analog,
- WatchFace::PineTimeStyle,
- WatchFace::Terminal,
- WatchFace::Infineat,
- WatchFace::CasioStyleG7710>;
+ using UserWatchFaceTypes = WatchFaceTypeList<@WATCHFACE_TYPES@>;
static_assert(UserWatchFaceTypes::Count >= 1);
}
diff --git a/src/displayapp/apps/CMakeLists.txt b/src/displayapp/apps/CMakeLists.txt
index 3544443a..4f0e4c49 100644
--- a/src/displayapp/apps/CMakeLists.txt
+++ b/src/displayapp/apps/CMakeLists.txt
@@ -17,6 +17,12 @@ else ()
set(USERAPP_TYPES "${DEFAULT_USER_APP_TYPES}" CACHE STRING "List of user apps to build into the firmware")
endif ()
+if(DEFINED ENABLE_WATCHFACES)
+ set(WATCHFACE_TYPES ${ENABLE_WATCHFACES} CACHE STRING "List of watch faces to build into the firmware")
+else()
+ set(WATCHFACE_TYPES "WatchFace::Digital, WatchFace::Analog, WatchFace::PineTimeStyle, WatchFace::Terminal, WatchFace::Infineat, WatchFace::CasioStyleG7710" CACHE STRING "List of watch faces to build into the firmware")
+endif()
+
add_library(infinitime_apps INTERFACE)
target_sources(infinitime_apps INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/Apps.h")
target_include_directories(infinitime_apps INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/")
diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp
index f052573c..e01e9f84 100644
--- a/src/displayapp/screens/settings/SettingWatchFace.cpp
+++ b/src/displayapp/screens/settings/SettingWatchFace.cpp
@@ -9,6 +9,37 @@ using namespace Pinetime::Applications::Screens;
constexpr const char* SettingWatchFace::title;
constexpr const char* SettingWatchFace::symbol;
+namespace {
+ uint32_t IndexOf(const std::array<Pinetime::Applications::Screens::SettingWatchFace::Item,
+ Pinetime::Applications::UserWatchFaceTypes::Count>& watchfaces,
+ Pinetime::Applications::WatchFace watchface) {
+ size_t index = 0;
+ auto found = std::find_if(watchfaces.begin(),
+ watchfaces.end(),
+ [&index, &watchface](const Pinetime::Applications::Screens::SettingWatchFace::Item& item) {
+ const bool result = item.watchface == watchface;
+ if (!result) {
+ index++;
+ }
+ return result;
+ });
+ if (found == watchfaces.end()) {
+ index = 0;
+ }
+
+ return index;
+ }
+
+ Pinetime::Applications::WatchFace IndexToWatchFace(const std::array<Pinetime::Applications::Screens::SettingWatchFace::Item,
+ Pinetime::Applications::UserWatchFaceTypes::Count>& watchfaces,
+ size_t index) {
+ if (index >= watchfaces.size()) {
+ return watchfaces[0].watchface;
+ }
+ return watchfaces[index].watchface;
+ }
+}
+
auto SettingWatchFace::CreateScreenList() const {
std::array<std::function<std::unique_ptr<Screen>()>, nScreens> screens;
for (size_t i = 0; i < screens.size(); i++) {
@@ -20,7 +51,7 @@ auto SettingWatchFace::CreateScreenList() const {
}
SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app,
- std::array<Screens::CheckboxList::Item, UserWatchFaceTypes::Count>&& watchfaceItems,
+ std::array<Screens::SettingWatchFace::Item, UserWatchFaceTypes::Count>&& watchfaceItems,
Pinetime::Controllers::Settings& settingsController,
Pinetime::Controllers::FS& filesystem)
: app {app},
@@ -44,7 +75,8 @@ std::unique_ptr<Screen> SettingWatchFace::CreateScreen(unsigned int screenNum) c
if (i + (screenNum * settingsPerScreen) >= watchfaceItems.size()) {
watchfacesOnThisScreen[i] = {"", false};
} else {
- watchfacesOnThisScreen[i] = watchfaceItems[i + (screenNum * settingsPerScreen)];
+ auto& item = watchfaceItems[i + (screenNum * settingsPerScreen)];
+ watchfacesOnThisScreen[i] = Screens::CheckboxList::Item {item.name, item.enabled};
}
}
@@ -53,9 +85,9 @@ std::unique_ptr<Screen> SettingWatchFace::CreateScreen(unsigned int screenNum) c
nScreens,
title,
symbol,
- static_cast<uint32_t>(settingsController.GetWatchFace()),
- [&settings = settingsController](uint32_t index) {
- settings.SetWatchFace(static_cast<WatchFace>(index));
+ static_cast<uint32_t>(IndexOf(watchfaceItems, settingsController.GetWatchFace())),
+ [this, &settings = settingsController](uint32_t index) {
+ settings.SetWatchFace(IndexToWatchFace(watchfaceItems, index));
settings.SaveSettings();
},
watchfacesOnThisScreen);
diff --git a/src/displayapp/screens/settings/SettingWatchFace.h b/src/displayapp/screens/settings/SettingWatchFace.h
index 66559c73..4c75b0ab 100644
--- a/src/displayapp/screens/settings/SettingWatchFace.h
+++ b/src/displayapp/screens/settings/SettingWatchFace.h
@@ -19,8 +19,14 @@ namespace Pinetime {
class SettingWatchFace : public Screen {
public:
+ struct Item {
+ const char* name;
+ WatchFace watchface;
+ bool enabled;
+ };
+
SettingWatchFace(DisplayApp* app,
- std::array<Screens::CheckboxList::Item, UserWatchFaceTypes::Count>&& watchfaceItems,
+ std::array<Item, UserWatchFaceTypes::Count>&& watchfaceItems,
Pinetime::Controllers::Settings& settingsController,
Pinetime::Controllers::FS& filesystem);
~SettingWatchFace() override;
@@ -33,7 +39,7 @@ namespace Pinetime {
std::unique_ptr<Screen> CreateScreen(unsigned int screenNum) const;
static constexpr int settingsPerScreen = 4;
- std::array<Screens::CheckboxList::Item, UserWatchFaceTypes::Count> watchfaceItems;
+ std::array<Item, UserWatchFaceTypes::Count> watchfaceItems;
static constexpr int nScreens = UserWatchFaceTypes::Count > 0 ? (UserWatchFaceTypes ::Count - 1) / settingsPerScreen + 1 : 1;
Controllers::Settings& settingsController;