-
-
Notifications
You must be signed in to change notification settings - Fork 961
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
Infineat external resources #1324
Merged
Merged
Changes from all commits
Commits
Show all changes
38 commits
Select commit
Hold shift + click to select a range
ae705f2
Implement watchface Infineat
dmlls 17d37d5
Add Infineat watchface to settings
dmlls a89fca7
Add 'circle' symbol & Pine64 logo
dmlls c2ecd4c
Add Infineat settings to settings controller
dmlls da2cf8e
Add 'Bebas Neue' and 'Teko' fonts
dmlls b5fbcf0
Add lowercase days of the week
dmlls 8f54332
Fix typo
dmlls be16ef0
Update BLE controller in Infineat watchface
dmlls 03790d4
Build on push to 'colors-rebase' branch
dmlls a890f85
Fixes in side cover toggling
dmlls f1f7fb7
Add whitespace char to Teko font
dmlls 6eb5b99
Fix aligment of time labels
dmlls fcdf6de
Change Pine64 logo to grayscale
dmlls f9d2b78
Small color adjustments
dmlls b561e7f
Implement CheckboxList screen
dmlls a3bfbb5
Implement SettingWatchFace list
dmlls 8942791
All ready for PR
dmlls b15f90a
Bump settings version (#1)
dmlls f5e9055
Make function DayOfWeekShortToStringLow const
dmlls dd0d2a4
Make Pine64 logo background transparent
dmlls a4c3558
Fix bleIcon in Infineat watchface after upstream rebase
dmlls f6f6f95
Use existing fonts in Infineat watchface
dmlls 9122547
Make Pine64 logo darker
dmlls b5bf6c5
Implement battery indicator
dmlls cb2131e
Implement charging battery animation
dmlls 603af7c
Better alignment of the date label
dmlls 20b31fd
Show battery indicator when side cover hidden
dmlls 4e9fe3f
Simplify code
dmlls 2ad51e6
Fix date alignment
dmlls 18cff28
Make notification color white when side cover off
dmlls ada2c09
Merge branch 'develop' into infineat-external-resources
JF002 4cf73fc
Infineat : Add support for external resources, and read the images an…
JF002 0cd1d6f
Fix recovery firmware : add FS in parameters of DisplayAppRecovery ctor.
JF002 970d5b3
Fix submodule for date library
JF002 58bb0e7
Fix formatting
JF002 56f315b
A few minors changes following the code review : rename fs -> filesys…
JF002 2400110
CheckBoxList : remove unused constant MAXLISTITEMS (replaced by MaxIt…
JF002 58586d0
Fix formatting in CheckBoxList.cpp.
JF002 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
#include "displayapp/screens/CheckboxList.h" | ||
#include "displayapp/DisplayApp.h" | ||
#include "displayapp/screens/Styles.h" | ||
|
||
using namespace Pinetime::Applications::Screens; | ||
|
||
namespace { | ||
static void event_handler(lv_obj_t* obj, lv_event_t event) { | ||
CheckboxList* screen = static_cast<CheckboxList*>(obj->user_data); | ||
screen->UpdateSelected(obj, event); | ||
} | ||
|
||
} | ||
|
||
CheckboxList::CheckboxList(const uint8_t screenID, | ||
const uint8_t numScreens, | ||
DisplayApp* app, | ||
Controllers::Settings& settingsController, | ||
const char* optionsTitle, | ||
const char* optionsSymbol, | ||
void (Controllers::Settings::*SetOptionIndex)(uint8_t), | ||
uint8_t (Controllers::Settings::*GetOptionIndex)() const, | ||
std::array<const char*, MaxItems> options) | ||
: Screen(app), | ||
screenID {screenID}, | ||
settingsController {settingsController}, | ||
SetOptionIndex {SetOptionIndex}, | ||
GetOptionIndex {GetOptionIndex}, | ||
options {options} { | ||
|
||
settingsController.SetWatchfacesMenu(screenID); | ||
|
||
// Set the background to Black | ||
lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); | ||
|
||
if (numScreens > 1) { | ||
pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; | ||
pageIndicatorBasePoints[0].y = 0; | ||
pageIndicatorBasePoints[1].x = LV_HOR_RES - 1; | ||
pageIndicatorBasePoints[1].y = LV_VER_RES; | ||
|
||
pageIndicatorBase = lv_line_create(lv_scr_act(), NULL); | ||
lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); | ||
lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); | ||
lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints.data(), 2); | ||
|
||
const uint16_t indicatorSize = LV_VER_RES / numScreens; | ||
const uint16_t indicatorPos = indicatorSize * screenID; | ||
|
||
pageIndicatorPoints[0].x = LV_HOR_RES - 1; | ||
pageIndicatorPoints[0].y = indicatorPos; | ||
pageIndicatorPoints[1].x = LV_HOR_RES - 1; | ||
pageIndicatorPoints[1].y = indicatorPos + indicatorSize; | ||
|
||
pageIndicator = lv_line_create(lv_scr_act(), NULL); | ||
lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); | ||
lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); | ||
lv_line_set_points(pageIndicator, pageIndicatorPoints.data(), 2); | ||
} | ||
|
||
lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); | ||
|
||
lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); | ||
lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); | ||
lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); | ||
lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); | ||
|
||
lv_obj_set_pos(container1, 10, 60); | ||
lv_obj_set_width(container1, LV_HOR_RES - 20); | ||
lv_obj_set_height(container1, LV_VER_RES - 50); | ||
lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); | ||
|
||
lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); | ||
lv_label_set_text_static(title, optionsTitle); | ||
lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); | ||
lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); | ||
|
||
lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); | ||
lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); | ||
lv_label_set_text_static(icon, optionsSymbol); | ||
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); | ||
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); | ||
|
||
for (unsigned int i = 0; i < options.size(); i++) { | ||
if (strcmp(options[i], "")) { | ||
cbOption[i] = lv_checkbox_create(container1, nullptr); | ||
lv_checkbox_set_text(cbOption[i], options[i]); | ||
cbOption[i]->user_data = this; | ||
lv_obj_set_event_cb(cbOption[i], event_handler); | ||
SetRadioButtonStyle(cbOption[i]); | ||
|
||
if (static_cast<unsigned int>((settingsController.*GetOptionIndex)() - MaxItems * screenID) == i) { | ||
lv_checkbox_set_checked(cbOption[i], true); | ||
} | ||
} | ||
} | ||
} | ||
|
||
CheckboxList::~CheckboxList() { | ||
lv_obj_clean(lv_scr_act()); | ||
settingsController.SaveSettings(); | ||
} | ||
|
||
void CheckboxList::UpdateSelected(lv_obj_t* object, lv_event_t event) { | ||
if (event == LV_EVENT_VALUE_CHANGED) { | ||
for (unsigned int i = 0; i < options.size(); i++) { | ||
if (strcmp(options[i], "")) { | ||
if (object == cbOption[i]) { | ||
lv_checkbox_set_checked(cbOption[i], true); | ||
(settingsController.*SetOptionIndex)(MaxItems * screenID + i); | ||
} else { | ||
lv_checkbox_set_checked(cbOption[i], false); | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#pragma once | ||
|
||
#include <lvgl/lvgl.h> | ||
#include <cstdint> | ||
#include <memory> | ||
#include <array> | ||
#include "displayapp/screens/Screen.h" | ||
#include "displayapp/Apps.h" | ||
#include "components/settings/Settings.h" | ||
|
||
namespace Pinetime { | ||
namespace Applications { | ||
namespace Screens { | ||
class CheckboxList : public Screen { | ||
public: | ||
static constexpr size_t MaxItems = 4; | ||
|
||
CheckboxList(const uint8_t screenID, | ||
const uint8_t numScreens, | ||
DisplayApp* app, | ||
Controllers::Settings& settingsController, | ||
const char* optionsTitle, | ||
const char* optionsSymbol, | ||
void (Controllers::Settings::*SetOptionIndex)(uint8_t), | ||
uint8_t (Controllers::Settings::*GetOptionIndex)() const, | ||
std::array<const char*, MaxItems> options); | ||
|
||
~CheckboxList() override; | ||
|
||
void UpdateSelected(lv_obj_t* object, lv_event_t event); | ||
|
||
private: | ||
const uint8_t screenID; | ||
Controllers::Settings& settingsController; | ||
const char* optionsTitle; | ||
const char* optionsSymbol; | ||
void (Controllers::Settings::*SetOptionIndex)(uint8_t); | ||
uint8_t (Controllers::Settings::*GetOptionIndex)() const; | ||
std::array<const char*, MaxItems> options; | ||
std::array<lv_obj_t*, MaxItems> cbOption; | ||
std::array<lv_point_t, 2> pageIndicatorBasePoints; | ||
std::array<lv_point_t, 2> pageIndicatorPoints; | ||
lv_obj_t* pageIndicatorBase; | ||
lv_obj_t* pageIndicator; | ||
}; | ||
} | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we're using
fs
for the filesystem controller everywhere else (I think). I like the explicitness offilesystem
would you suggest to use
filesystem
instead offs
in the future?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I agree with you,
filesystem
is more explicit!