diff --git a/.gitconfig b/.gitconfig index b2274475fc..7e0aafbb1e 100644 --- a/.gitconfig +++ b/.gitconfig @@ -3,3 +3,16 @@ autocrlf = input [apply] whitespace = fix + +[diff] + tool = meld +[difftool] + prompt = false +[difftool "meld"] + cmd = meld "$LOCAL" "$REMOTE" +[merge] + tool = meld +[mergetool "meld"] + # Choose one of these two lines (not both!) explained below. + cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED" + cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED" diff --git a/.gitignore b/.gitignore index 81e49ae083..4613b1da86 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ Makefile build tools + # Resulting binary files *.a *.so diff --git a/doc/alarmStatusOnInfineat/alarmStatusOnInfineat.md b/doc/alarmStatusOnInfineat/alarmStatusOnInfineat.md new file mode 100644 index 0000000000..22885a8475 --- /dev/null +++ b/doc/alarmStatusOnInfineat/alarmStatusOnInfineat.md @@ -0,0 +1,22 @@ +# [InfiniTime : show alarm status on infineat watchface](https://github.com/Eve1374/InfiniTime/tree/alarm-status-on-infineat) +- I forked from [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime) and added a branch alarm-status-on-infineat +- I modified the watchface settings to have the possibility to show alarm status on watchface + +Here are pictures with alarm set in 12 and 24hrs format : + +![alarm set and shown, 12hrs format](infineat_alarm_set_12hrs.png "alarm set and shown, 12hrs format") +![alarm set and shown, 24hrs format](infineat_alarm_set_24hrs.png "alarm set and shown, 24hrs format") + +Alarm not set : + +![alarm shown and not set](infineat_alarm_notset.png "alarm shown and not set") + +Settings view : + +![settings](infineat_settings.png "settings modified with a button to turn on or off alarm display") + + +## Possible further development : +- Move this setting to the Alarm app and include alarm display in all watchfaces ? + + diff --git a/doc/alarmStatusOnInfineat/infineat_alarm_notset.png b/doc/alarmStatusOnInfineat/infineat_alarm_notset.png new file mode 100644 index 0000000000..a8883db00e Binary files /dev/null and b/doc/alarmStatusOnInfineat/infineat_alarm_notset.png differ diff --git a/doc/alarmStatusOnInfineat/infineat_alarm_set_12hrs.png b/doc/alarmStatusOnInfineat/infineat_alarm_set_12hrs.png new file mode 100644 index 0000000000..259c09833f Binary files /dev/null and b/doc/alarmStatusOnInfineat/infineat_alarm_set_12hrs.png differ diff --git a/doc/alarmStatusOnInfineat/infineat_alarm_set_24hrs.png b/doc/alarmStatusOnInfineat/infineat_alarm_set_24hrs.png new file mode 100644 index 0000000000..d31de79801 Binary files /dev/null and b/doc/alarmStatusOnInfineat/infineat_alarm_set_24hrs.png differ diff --git a/doc/alarmStatusOnInfineat/infineat_settings.png b/doc/alarmStatusOnInfineat/infineat_settings.png new file mode 100644 index 0000000000..0dffd5e781 Binary files /dev/null and b/doc/alarmStatusOnInfineat/infineat_settings.png differ diff --git a/doc/lvgl_align.png b/doc/lvgl_align.png new file mode 100644 index 0000000000..189c573e2e Binary files /dev/null and b/doc/lvgl_align.png differ diff --git a/doc/palettes.xcf b/doc/palettes.xcf new file mode 100644 index 0000000000..bfad74e04e Binary files /dev/null and b/doc/palettes.xcf differ diff --git a/doc/ui/infineat_settings.png b/doc/ui/infineat_settings.png new file mode 100644 index 0000000000..0dffd5e781 Binary files /dev/null and b/doc/ui/infineat_settings.png differ diff --git a/make_pine.sh b/make_pine.sh new file mode 100755 index 0000000000..006c24213c --- /dev/null +++ b/make_pine.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +#cp ./displayapp/apps/Apps.h ../src/displayapp/apps/Apps.h + +make -j4 pinetime-app + diff --git a/make_pine_mcu.sh b/make_pine_mcu.sh new file mode 100755 index 0000000000..87c00ff255 --- /dev/null +++ b/make_pine_mcu.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +#cp ./displayapp/apps/Apps.h ../src/displayapp/apps/Apps.h + +make clean -j4 pinetime-mcuboot-app + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2b69b8b02..3da994763b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -371,6 +371,7 @@ list(APPEND SOURCE_FILES displayapp/screens/StopWatch.cpp displayapp/screens/BatteryIcon.cpp displayapp/screens/BleIcon.cpp + displayapp/screens/AlarmIcon.cpp displayapp/screens/NotificationIcon.cpp displayapp/screens/SystemInfo.cpp displayapp/screens/Label.cpp diff --git a/src/Version.h.in b/src/Version.h.in index 0d6219c09a..dfeccdbc96 100644 --- a/src/Version.h.in +++ b/src/Version.h.in @@ -19,4 +19,4 @@ namespace Pinetime { static constexpr const char* commitHash = "@PROJECT_GIT_COMMIT_HASH@"; static constexpr const char* versionString = "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"; }; -} \ No newline at end of file +} diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 602de3a585..dc6bb24133 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -47,6 +47,7 @@ namespace Pinetime { struct WatchFaceInfineat { bool showSideCover = true; + bool showAlarmStatus = true; int colorIndex = 0; }; @@ -123,6 +124,17 @@ namespace Pinetime { return settings.watchFaceInfineat.showSideCover; }; + void SetInfineatShowAlarmStatus(bool show) { + if (show != settings.watchFaceInfineat.showAlarmStatus) { + settings.watchFaceInfineat.showAlarmStatus = show; + settingsChanged = true; + } + }; + + bool GetInfineatShowAlarmStatus() const { + return settings.watchFaceInfineat.showAlarmStatus; + }; + void SetInfineatColorIndex(int index) { if (index != settings.watchFaceInfineat.colorIndex) { settings.watchFaceInfineat.colorIndex = index; diff --git a/src/displayapp/InfiniTimeTheme.h b/src/displayapp/InfiniTimeTheme.h index 0690b09912..57680e8738 100644 --- a/src/displayapp/InfiniTimeTheme.h +++ b/src/displayapp/InfiniTimeTheme.h @@ -8,6 +8,7 @@ namespace Colors { static constexpr lv_color_t green = LV_COLOR_MAKE(0x0, 0xb0, 0x0); static constexpr lv_color_t blue = LV_COLOR_MAKE(0x0, 0x50, 0xff); static constexpr lv_color_t lightGray = LV_COLOR_MAKE(0xb0, 0xb0, 0xb0); + static constexpr lv_color_t gray = LV_COLOR_MAKE(0x50, 0x50, 0x50); static constexpr lv_color_t bg = LV_COLOR_MAKE(0x5d, 0x69, 0x7e); static constexpr lv_color_t bgAlt = LV_COLOR_MAKE(0x38, 0x38, 0x38); diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index 2104a267c0..7f4d03fc0b 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -23,6 +23,7 @@ namespace Pinetime { Twos, HeartRate, Navigation, + Calendar, StopWatch, Metronome, Motion, @@ -51,6 +52,7 @@ namespace Pinetime { PineTimeStyle, Terminal, Infineat, + Meow, CasioStyleG7710, }; diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index 41c383c0d4..793b885129 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -7,7 +7,7 @@ }, { "file": "FontAwesome5-Solid+Brands+Regular.woff", - "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743" + "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743, 0xf0f3, 0xf1f6" } ], "bpp": 1, diff --git a/src/displayapp/screens/AlarmIcon.cpp b/src/displayapp/screens/AlarmIcon.cpp new file mode 100644 index 0000000000..fda871300e --- /dev/null +++ b/src/displayapp/screens/AlarmIcon.cpp @@ -0,0 +1,11 @@ +#include "displayapp/screens/AlarmIcon.h" +#include "displayapp/screens/Symbols.h" +using namespace Pinetime::Applications::Screens; + +const char* AlarmIcon::GetIcon(bool isSet) { + if (isSet) { + return Symbols::bell; + } + + return Symbols::notbell; +} diff --git a/src/displayapp/screens/AlarmIcon.h b/src/displayapp/screens/AlarmIcon.h new file mode 100644 index 0000000000..678a4cb740 --- /dev/null +++ b/src/displayapp/screens/AlarmIcon.h @@ -0,0 +1,14 @@ +#pragma once + +#include "components/alarm/AlarmController.h" + +namespace Pinetime { + namespace Applications { + namespace Screens { + class AlarmIcon { + public: + static const char* GetIcon(bool isSet); + }; + } + } +} diff --git a/src/displayapp/screens/README.md b/src/displayapp/screens/README.md new file mode 100644 index 0000000000..f84a5fc62c --- /dev/null +++ b/src/displayapp/screens/README.md @@ -0,0 +1,10 @@ +# Add a new watchface : +## Modify the following files with the names of your source files : + +- /src/displayapp/apps/Apps.h.in +- /src/components/settings/Settings.h +- /src/displayapp/UserApps.h +- /src/displayapp/apps/CMakeLists.txt +- CMakelists.txt + + diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index bd958b285f..cf1b8aad07 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -12,6 +12,7 @@ namespace Pinetime { static constexpr const char* shoe = "\xEF\x95\x8B"; static constexpr const char* clock = "\xEF\x80\x97"; static constexpr const char* bell = "\xEF\x83\xB3"; + static constexpr const char* notbell = "\xEF\x87\xB6"; static constexpr const char* info = "\xEF\x84\xA9"; static constexpr const char* list = "\xEF\x80\xBA"; static constexpr const char* sun = "\xEF\x86\x85"; diff --git a/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp b/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp index c695f852fe..870232ca2d 100644 --- a/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp +++ b/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp @@ -311,7 +311,6 @@ void WatchFaceCasioStyleG7710::Refresh() { lv_obj_realign(stepIcon); } } - bool WatchFaceCasioStyleG7710::IsAvailable(Pinetime::Controllers::FS& filesystem) { lfs_file file = {}; diff --git a/src/displayapp/screens/WatchFaceInfineat.cpp b/src/displayapp/screens/WatchFaceInfineat.cpp index 4c6fc196ac..0ce644f778 100644 --- a/src/displayapp/screens/WatchFaceInfineat.cpp +++ b/src/displayapp/screens/WatchFaceInfineat.cpp @@ -4,9 +4,11 @@ #include #include "displayapp/screens/Symbols.h" #include "displayapp/screens/BleIcon.h" +#include "displayapp/screens/AlarmIcon.h" #include "components/settings/Settings.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" +#include "components/alarm/AlarmController.h" #include "components/ble/NotificationManager.h" #include "components/motion/MotionController.h" @@ -122,6 +124,7 @@ namespace { WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, + Controllers::AlarmController& alarmController, Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController, Controllers::MotionController& motionController, @@ -130,6 +133,7 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController, dateTimeController {dateTimeController}, batteryController {batteryController}, bleController {bleController}, + alarmController {alarmController}, notificationManager {notificationManager}, settingsController {settingsController}, motionController {motionController} { @@ -230,6 +234,31 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController, lv_label_set_text_static(bleIcon, Symbols::bluetooth); lv_obj_align(bleIcon, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, 0, 0); + labelAlarm = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(labelAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor); + lv_obj_set_style_local_text_font(labelAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko); + lv_obj_align(labelAlarm, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, -10, 0); + lv_obj_align(labelAlarm, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0); + lv_label_set_text_static(labelAlarm, "00:00"); + + labelTimeAmPmAlarm = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko); + lv_label_set_text_static(labelTimeAmPmAlarm, ""); + lv_obj_set_style_local_text_color(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor); + lv_obj_align(labelTimeAmPmAlarm, labelAlarm, LV_ALIGN_OUT_TOP_RIGHT, 0, 0); + + alarmIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(alarmIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor); + lv_label_set_text_static(alarmIcon, Symbols::notbell); + lv_obj_align(alarmIcon, labelAlarm, LV_ALIGN_OUT_LEFT_MID, -3, 0); + + // don't show the icons just set if we don't show alarm status + if (!settingsController.GetInfineatShowAlarmStatus()) { + lv_obj_set_hidden(labelAlarm, true); + lv_obj_set_hidden(alarmIcon, true); + lv_obj_set_hidden(labelTimeAmPmAlarm, true); + } + stepValue = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor); lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko); @@ -275,7 +304,7 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController, btnToggleCover = lv_btn_create(lv_scr_act(), nullptr); btnToggleCover->user_data = this; lv_obj_set_size(btnToggleCover, 60, 60); - lv_obj_align(btnToggleCover, lv_scr_act(), LV_ALIGN_CENTER, 0, 80); + lv_obj_align(btnToggleCover, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); lv_obj_set_style_local_bg_opa(btnToggleCover, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_70); const char* labelToggle = settingsController.GetInfineatShowSideCover() ? "ON" : "OFF"; lblToggle = lv_label_create(btnToggleCover, nullptr); @@ -283,6 +312,17 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController, lv_obj_set_event_cb(btnToggleCover, event_handler); lv_obj_set_hidden(btnToggleCover, true); + btnToggleAlarm = lv_btn_create(lv_scr_act(), nullptr); + btnToggleAlarm->user_data = this; + lv_obj_set_size(btnToggleAlarm, 60, 60); + lv_obj_align(btnToggleAlarm, lv_scr_act(), LV_ALIGN_CENTER, 0, 80); + lv_obj_set_style_local_bg_opa(btnToggleAlarm, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_70); + const char* labelToggleAlarm = settingsController.GetInfineatShowAlarmStatus() ? Symbols::bell : Symbols::notbell; + lblAlarm = lv_label_create(btnToggleAlarm, nullptr); + lv_label_set_text_static(lblAlarm, labelToggleAlarm); + lv_obj_set_event_cb(btnToggleAlarm, event_handler); + lv_obj_set_hidden(btnToggleAlarm, true); + // Button to access the settings btnSettings = lv_btn_create(lv_scr_act(), nullptr); btnSettings->user_data = this; @@ -332,6 +372,7 @@ void WatchFaceInfineat::CloseMenu() { lv_obj_set_hidden(btnNextColor, true); lv_obj_set_hidden(btnPrevColor, true); lv_obj_set_hidden(btnToggleCover, true); + lv_obj_set_hidden(btnToggleAlarm, true); } bool WatchFaceInfineat::OnButtonPushed() { @@ -346,6 +387,7 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_CLICKED) { bool showSideCover = settingsController.GetInfineatShowSideCover(); int colorIndex = settingsController.GetInfineatColorIndex(); + bool showAlarmStatus = settingsController.GetInfineatShowAlarmStatus(); if (object == btnSettings) { lv_obj_set_hidden(btnSettings, true); @@ -353,6 +395,7 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) { lv_obj_set_hidden(btnNextColor, !showSideCover); lv_obj_set_hidden(btnPrevColor, !showSideCover); lv_obj_set_hidden(btnToggleCover, false); + lv_obj_set_hidden(btnToggleAlarm, false); } if (object == btnClose) { CloseMenu(); @@ -368,6 +411,17 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) { const char* labelToggle = showSideCover ? "OFF" : "ON"; lv_label_set_text_static(lblToggle, labelToggle); } + + if (object == btnToggleAlarm) { + settingsController.SetInfineatShowAlarmStatus(!showAlarmStatus); + bool newShowAlarmStatus = settingsController.GetInfineatShowAlarmStatus(); + lv_obj_set_hidden(labelAlarm, !newShowAlarmStatus); + lv_obj_set_hidden(alarmIcon, !newShowAlarmStatus); + lv_obj_set_hidden(labelTimeAmPmAlarm, !newShowAlarmStatus); + const char* labelToggleAlarm = newShowAlarmStatus ? Symbols::bell : Symbols::notbell; + lv_label_set_text_static(lblAlarm, labelToggleAlarm); + } + if (object == btnNextColor) { colorIndex = (colorIndex + 1) % nColors; settingsController.SetInfineatColorIndex(colorIndex); @@ -452,6 +506,42 @@ void WatchFaceInfineat::Refresh() { lv_obj_align(bleIcon, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, 0, 3); } + if (settingsController.GetInfineatShowAlarmStatus()) { + isAlarmSet = alarmController.IsEnabled() == true; + // sets the icon as bell or barred bell + lv_label_set_text_static(alarmIcon, AlarmIcon::GetIcon(isAlarmSet.Get())); + // displays the time of the alarm or nothing if the alarm is not set + if (isAlarmSet.Get()) { + uint8_t alarmHours = alarmController.Hours(); + uint8_t alarmMinutes = alarmController.Minutes(); + // handles the am pm format. + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + char ampmChar[3] = "AM"; + if (alarmHours == 0) { + alarmHours = 12; + } else if (alarmHours == 12) { + ampmChar[0] = 'P'; + } else if (alarmHours > 12) { + alarmHours = alarmHours - 12; + ampmChar[0] = 'P'; + } + lv_label_set_text(labelTimeAmPmAlarm, ampmChar); + lv_obj_set_style_local_text_font(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko); + lv_obj_align(labelTimeAmPmAlarm, labelAlarm, LV_ALIGN_OUT_TOP_RIGHT, 0, 0); + } + + lv_label_set_text_fmt(labelAlarm, "%02d:%02d", alarmHours, alarmMinutes); + + lv_obj_align(alarmIcon, labelAlarm, LV_ALIGN_OUT_LEFT_MID, -3, 0); + lv_obj_align(labelAlarm, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, -10, 0); + lv_obj_align(labelAlarm, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0); + + } else { + lv_label_set_text_static(labelAlarm, Symbols::none); + lv_obj_align(alarmIcon, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, 0, 0); + lv_obj_align(alarmIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0); + } + } stepCount = motionController.NbSteps(); if (stepCount.IsUpdated()) { lv_label_set_text_fmt(stepValue, "%lu", stepCount.Get()); diff --git a/src/displayapp/screens/WatchFaceInfineat.h b/src/displayapp/screens/WatchFaceInfineat.h index 55c43f98e0..fc458c2b20 100644 --- a/src/displayapp/screens/WatchFaceInfineat.h +++ b/src/displayapp/screens/WatchFaceInfineat.h @@ -28,6 +28,7 @@ namespace Pinetime { WatchFaceInfineat(Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, + Controllers::AlarmController& alarmController, Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController, Controllers::MotionController& motionController, @@ -52,6 +53,7 @@ namespace Pinetime { Utility::DirtyValue isCharging {}; Utility::DirtyValue bleState {}; Utility::DirtyValue bleRadioEnabled {}; + Utility::DirtyValue isAlarmSet {}; Utility::DirtyValue> currentDateTime {}; Utility::DirtyValue stepCount {}; Utility::DirtyValue notificationState {}; @@ -71,22 +73,28 @@ namespace Pinetime { lv_obj_t* dateContainer; lv_obj_t* labelDate; lv_obj_t* bleIcon; + lv_obj_t* labelAlarm; + lv_obj_t* labelTimeAmPmAlarm; + lv_obj_t* alarmIcon; lv_obj_t* stepIcon; lv_obj_t* stepValue; lv_obj_t* notificationIcon; lv_obj_t* btnClose; lv_obj_t* btnNextColor; lv_obj_t* btnToggleCover; + lv_obj_t* btnToggleAlarm; lv_obj_t* btnPrevColor; lv_obj_t* btnSettings; lv_obj_t* labelBtnSettings; lv_obj_t* lblToggle; + lv_obj_t* lblAlarm; lv_obj_t* lines[nLines]; Controllers::DateTime& dateTimeController; const Controllers::Battery& batteryController; const Controllers::Ble& bleController; + Controllers::AlarmController& alarmController; Controllers::NotificationManager& notificationManager; Controllers::Settings& settingsController; Controllers::MotionController& motionController; @@ -109,6 +117,7 @@ namespace Pinetime { return new Screens::WatchFaceInfineat(controllers.dateTimeController, controllers.batteryController, controllers.bleController, + controllers.alarmController, controllers.notificationManager, controllers.settingsController, controllers.motionController, diff --git a/src/displayapp/screens/addWatchface.md b/src/displayapp/screens/addWatchface.md new file mode 100644 index 0000000000..aa8459e8b7 --- /dev/null +++ b/src/displayapp/screens/addWatchface.md @@ -0,0 +1,11 @@ +# Add a new watchface : +## Modify the following files with the names of your source files : + +- /src/displayapp/apps/Apps.h.in +- /src/components/settings/Settings.h +- /src/displayapp/screens/settings/SettingWatchFace.h +- /src/displayapp/UserApps.h +- /src/displayapp/apps/CMakeLists.txt +- CMakelists.txt + + diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index c23647f2c0..c884482b4a 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -589,7 +589,7 @@ typedef void* lv_obj_user_data_t; /*Calendar (dependencies: -)*/ #define LV_USE_CALENDAR 1 #if LV_USE_CALENDAR -#define LV_CALENDAR_WEEK_STARTS_MONDAY 0 +#define LV_CALENDAR_WEEK_STARTS_MONDAY 1 #endif /*Canvas (dependencies: lv_img)*/ diff --git a/src/resources/images.json b/src/resources/images.json index e424718808..2591bcbbf6 100644 --- a/src/resources/images.json +++ b/src/resources/images.json @@ -1,11 +1,18 @@ { - "pine_small" : { + "pine_small" : { "sources": "images/pine_logo.png", "color_format": "CF_TRUE_COLOR_ALPHA", "output_format": "bin", "binary_format": "ARGB8565_RBSWAP", "target_path": "/images/" }, + "cat_small" : { + "sources": "images/cat_clean.png", + "color_format": "CF_TRUE_COLOR_ALPHA", + "output_format": "bin", + "binary_format": "ARGB8565_RBSWAP", + "target_path": "/images/" + }, "navigation0" : { "sources": "images/navigation0.png", "color_format": "CF_INDEXED_1_BIT", diff --git a/src/resources/images/cat_clean.png b/src/resources/images/cat_clean.png new file mode 100644 index 0000000000..e4d98e961f Binary files /dev/null and b/src/resources/images/cat_clean.png differ diff --git a/todo.log b/todo.log new file mode 100644 index 0000000000..e7d50d9f29 --- /dev/null +++ b/todo.log @@ -0,0 +1,3 @@ +replace alarm info by timer info when timer is ongoing +add a shortcut for a 1min timer on the right +