Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add date format setting #2244

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,8 @@ list(APPEND SOURCE_FILES
displayapp/screens/settings/Settings.cpp
displayapp/screens/settings/SettingWatchFace.cpp
displayapp/screens/settings/SettingTimeFormat.cpp
displayapp/screens/settings/SettingClockFormat.cpp
displayapp/screens/settings/SettingDateFormat.cpp
displayapp/screens/settings/SettingWeatherFormat.cpp
displayapp/screens/settings/SettingWakeUp.cpp
displayapp/screens/settings/SettingDisplay.cpp
Expand Down
13 changes: 13 additions & 0 deletions src/components/settings/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ namespace Pinetime {
class Settings {
public:
enum class ClockType : uint8_t { H24, H12 };
enum class DateFormat : uint8_t { YYYYMMDD, DDMMYYYY, MMDDYYYY, DayDDMonthYYYY };
enum class WeatherFormat : uint8_t { Metric, Imperial };
enum class Notification : uint8_t { On, Off, Sleep };
enum class ChimesOption : uint8_t { None, Hours, HalfHours };
Expand Down Expand Up @@ -181,6 +182,17 @@ namespace Pinetime {
return settings.clockType;
};

void SetDateFormat(DateFormat dateFormat) {
if (dateFormat != settings.dateFormat) {
settingsChanged = true;
}
settings.dateFormat = dateFormat;
};

DateFormat GetDateFormat() const {
return settings.dateFormat;
};

void SetWeatherFormat(WeatherFormat weatherFormat) {
if (weatherFormat != settings.weatherFormat) {
settingsChanged = true;
Expand Down Expand Up @@ -311,6 +323,7 @@ namespace Pinetime {
bool alwaysOnDisplay = false;

ClockType clockType = ClockType::H24;
DateFormat dateFormat = DateFormat::DayDDMonthYYYY;
WeatherFormat weatherFormat = WeatherFormat::Metric;
Notification notificationStatus = Notification::On;

Expand Down
2 changes: 1 addition & 1 deletion src/displayapp/DisplayApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
currentScreen = std::make_unique<Screens::SettingWatchFace>(this, std::move(items), settingsController, filesystem);
} break;
case Apps::SettingTimeFormat:
currentScreen = std::make_unique<Screens::SettingTimeFormat>(settingsController);
currentScreen = std::make_unique<Screens::SettingTimeFormat>(this, settingsController);
break;
case Apps::SettingWeatherFormat:
currentScreen = std::make_unique<Screens::SettingWeatherFormat>(settingsController);
Expand Down
61 changes: 61 additions & 0 deletions src/displayapp/screens/settings/SettingClockFormat.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include "displayapp/screens/settings/SettingClockFormat.h"
#include <lvgl/lvgl.h>
#include "displayapp/DisplayApp.h"
#include "displayapp/screens/Styles.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/Symbols.h"

using namespace Pinetime::Applications::Screens;

namespace {
struct ClockOption {
Pinetime::Controllers::Settings::ClockType clockType;
const char* name;
};

constexpr std::array<ClockOption, 2> clockOptions = {{
{Pinetime::Controllers::Settings::ClockType::H12, "12-hour"},
{Pinetime::Controllers::Settings::ClockType::H24, "24-hour"},
}};

std::array<CheckboxList::Item, CheckboxList::MaxItems> CreateClockOptionArray() {
std::array<Pinetime::Applications::Screens::CheckboxList::Item, CheckboxList::MaxItems> clockOptionArray;
for (size_t i = 0; i < CheckboxList::MaxItems; i++) {
if (i >= clockOptions.size()) {
clockOptionArray[i].name = "";
clockOptionArray[i].enabled = false;
} else {
clockOptionArray[i].name = clockOptions[i].name;
clockOptionArray[i].enabled = true;
}
}
return clockOptionArray;
}

uint32_t GetDefaultClockOption(Pinetime::Controllers::Settings::ClockType currentOption) {
for (size_t i = 0; i < clockOptions.size(); i++) {
if (clockOptions[i].clockType == currentOption) {
return i;
}
}
return 0;
}
}

SettingClockFormat::SettingClockFormat(Pinetime::Controllers::Settings& settingsController)
: clockCheckboxList(
0,
1,
"Time format",
Symbols::clock,
GetDefaultClockOption(settingsController.GetClockType()),
[&settings = settingsController](uint32_t index) {
settings.SetClockType(clockOptions[index].clockType);
settings.SaveSettings();
},
CreateClockOptionArray()) {
}

SettingClockFormat::~SettingClockFormat() {
lv_obj_clean(lv_scr_act());
}
24 changes: 24 additions & 0 deletions src/displayapp/screens/settings/SettingClockFormat.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once

#include <array>
#include <cstdint>
#include <lvgl/lvgl.h>

#include "components/settings/Settings.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/CheckboxList.h"

namespace Pinetime {
namespace Applications {
namespace Screens {
class SettingClockFormat : public Screen {
public:
SettingClockFormat(Pinetime::Controllers::Settings& settingsController);
~SettingClockFormat() override;

private:
CheckboxList clockCheckboxList;
};
}
}
}
63 changes: 63 additions & 0 deletions src/displayapp/screens/settings/SettingDateFormat.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include "displayapp/screens/settings/SettingDateFormat.h"
#include <lvgl/lvgl.h>
#include "displayapp/DisplayApp.h"
#include "displayapp/screens/Styles.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/Symbols.h"

using namespace Pinetime::Applications::Screens;

namespace {
struct DateOption {
Pinetime::Controllers::Settings::DateFormat dateFormat;
const char* name;
};

constexpr std::array<DateOption, 4> dateOptions = {{
{Pinetime::Controllers::Settings::DateFormat::YYYYMMDD, "yyyy-mm-dd"},
{Pinetime::Controllers::Settings::DateFormat::DDMMYYYY, "dd/mm/yyyy"},
{Pinetime::Controllers::Settings::DateFormat::MMDDYYYY, "mm/dd/yyyy"},
{Pinetime::Controllers::Settings::DateFormat::DayDDMonthYYYY, "Day DD Month YYYY"},
}};

std::array<CheckboxList::Item, CheckboxList::MaxItems> CreateDateOptionArray() {
std::array<Pinetime::Applications::Screens::CheckboxList::Item, CheckboxList::MaxItems> dateOptionArray;
for (size_t i = 0; i < CheckboxList::MaxItems; i++) {
if (i >= dateOptions.size()) {
dateOptionArray[i].name = "";
dateOptionArray[i].enabled = false;
} else {
dateOptionArray[i].name = dateOptions[i].name;
dateOptionArray[i].enabled = true;
}
}
return dateOptionArray;
}

uint32_t GetDefaultDateOption(Pinetime::Controllers::Settings::DateFormat currentOption) {
for (size_t i = 0; i < dateOptions.size(); i++) {
if (dateOptions[i].dateFormat == currentOption) {
return i;
}
}
return 0;
}
}

SettingDateFormat::SettingDateFormat(Pinetime::Controllers::Settings& settingsController)
: dateCheckboxList(
0,
1,
"Date format",
Symbols::clock,
GetDefaultDateOption(settingsController.GetDateFormat()),
[&settings = settingsController](uint32_t index) {
settings.SetDateFormat(dateOptions[index].dateFormat);
settings.SaveSettings();
},
CreateDateOptionArray()) {
}

SettingDateFormat::~SettingDateFormat() {
lv_obj_clean(lv_scr_act());
}
24 changes: 24 additions & 0 deletions src/displayapp/screens/settings/SettingDateFormat.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once

#include <array>
#include <cstdint>
#include <lvgl/lvgl.h>

#include "components/settings/Settings.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/CheckboxList.h"

namespace Pinetime {
namespace Applications {
namespace Screens {
class SettingDateFormat : public Screen {
public:
SettingDateFormat(Pinetime::Controllers::Settings& settingsController);
~SettingDateFormat() override;

private:
CheckboxList dateCheckboxList;
};
}
}
}
75 changes: 28 additions & 47 deletions src/displayapp/screens/settings/SettingTimeFormat.cpp
Original file line number Diff line number Diff line change
@@ -1,59 +1,40 @@
#include "displayapp/screens/settings/SettingTimeFormat.h"
#include <lvgl/lvgl.h>
#include "displayapp/screens/settings/SettingClockFormat.h"
#include "displayapp/screens/settings/SettingDateFormat.h"
#include "displayapp/DisplayApp.h"
#include "displayapp/screens/Styles.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/Symbols.h"
#include "displayapp/screens/ScreenList.h"
#include "components/settings/Settings.h"
#include "displayapp/widgets/DotIndicator.h"

using namespace Pinetime::Applications::Screens;

namespace {
struct Option {
Pinetime::Controllers::Settings::ClockType clockType;
const char* name;
};

constexpr std::array<Option, 2> options = {{
{Pinetime::Controllers::Settings::ClockType::H12, "12-hour"},
{Pinetime::Controllers::Settings::ClockType::H24, "24-hour"},
}};
bool SettingTimeFormat::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
return screens.OnTouchEvent(event);
}

std::array<CheckboxList::Item, CheckboxList::MaxItems> CreateOptionArray() {
std::array<Pinetime::Applications::Screens::CheckboxList::Item, CheckboxList::MaxItems> 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;
}
SettingTimeFormat::SettingTimeFormat(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
: settingsController {settingsController},
screens {app,
0,
{[this]() -> std::unique_ptr<Screen> {
return screenClockFormat();
},
[this]() -> std::unique_ptr<Screen> {
return screenDateFormat();
}},
Screens::ScreenListModes::UpDown} {
}

uint32_t GetDefaultOption(Pinetime::Controllers::Settings::ClockType currentOption) {
for (size_t i = 0; i < options.size(); i++) {
if (options[i].clockType == currentOption) {
return i;
}
}
return 0;
}
std::unique_ptr<Screen> SettingTimeFormat::screenDateFormat() {
Widgets::DotIndicator dotIndicator(1, 2);
dotIndicator.Create();
return std::make_unique<Screens::SettingDateFormat>(settingsController);
}

SettingTimeFormat::SettingTimeFormat(Pinetime::Controllers::Settings& settingsController)
: checkboxList(
0,
1,
"Time format",
Symbols::clock,
GetDefaultOption(settingsController.GetClockType()),
[&settings = settingsController](uint32_t index) {
settings.SetClockType(options[index].clockType);
settings.SaveSettings();
},
CreateOptionArray()) {
std::unique_ptr<Screen> SettingTimeFormat::screenClockFormat() {
Widgets::DotIndicator dotIndicator(0, 2);
dotIndicator.Create();
return std::make_unique<Screens::SettingClockFormat>(settingsController);
}

SettingTimeFormat::~SettingTimeFormat() {
Expand Down
17 changes: 9 additions & 8 deletions src/displayapp/screens/settings/SettingTimeFormat.h
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
#pragma once

#include <array>
#include <cstdint>
#include <lvgl/lvgl.h>

#include "components/settings/Settings.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/CheckboxList.h"
#include "displayapp/screens/ScreenList.h"

namespace Pinetime {

namespace Applications {
namespace Screens {

class SettingTimeFormat : public Screen {
public:
SettingTimeFormat(Pinetime::Controllers::Settings& settingsController);
SettingTimeFormat(DisplayApp* app, Pinetime::Controllers::Settings& settingsController);
~SettingTimeFormat() override;

bool OnTouchEvent(TouchEvents event) override;

private:
CheckboxList checkboxList;
Controllers::Settings& settingsController;

ScreenList<2> screens;
std::unique_ptr<Screen> screenDateFormat();
std::unique_ptr<Screen> screenClockFormat();
};
}
}
Expand Down