Skip to content

Commit

Permalink
feat(widgets): support 'Status Bar' and 'Navigation Bar' visual mode
Browse files Browse the repository at this point in the history
Lzw655 committed Aug 12, 2024
1 parent 772d450 commit eb0aa6e
Showing 18 changed files with 174 additions and 137 deletions.
4 changes: 4 additions & 0 deletions .gitlab/ci/rules.yml
Original file line number Diff line number Diff line change
@@ -70,6 +70,8 @@
- <<: *if-label-build
- <<: *if-label-target_test
- <<: *if-trigger-job
- <<: *if-dev-push
changes: *patterns-component
- <<: *if-dev-push
changes: *patterns-example_esp_ui_phone_p4_function_ev_board
- <<: *if-dev-push
@@ -81,6 +83,8 @@
- <<: *if-label-build
- <<: *if-label-target_test
- <<: *if-trigger-job
- <<: *if-dev-push
changes: *patterns-component
- <<: *if-dev-push
changes: *patterns-example_esp_ui_phone_s3_lcd_ev_board
- <<: *if-dev-push
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# ChangeLog

## v0.1.0 - 2024-08-09
## v0.1.0 - 2024-08-12

### Enhancements:

* feat(repo): init project
* feat(systems): add "Phone" system
* feat(systems): add 'Phone' system
* feat(widgets): support 'Status Bar' and 'Navigation Bar' visual mode
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ PhoneAppComplexConf::PhoneAppComplexConf(bool use_status_bar, bool use_navigatio
},
{
.app_launcher_page_index = 0,
.status_bar_area_index = 0,
.status_icon_area_index = 0,
.status_icon_data = {
.size = {},
.icon = {
@@ -35,10 +35,10 @@ PhoneAppComplexConf::PhoneAppComplexConf(bool use_status_bar, bool use_navigatio
},
},
},
.status_bar_visual_mode = (use_status_bar) ? ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED :
ESP_UI_PHONE_APP_VISUAL_MODE_HIDE,
.navigation_bar_visual_mode = (use_navigation_bar) ? ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED :
ESP_UI_PHONE_APP_VISUAL_MODE_HIDE,
.status_bar_visual_mode = (use_status_bar) ? ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED :
ESP_UI_STATUS_BAR_VISUAL_MODE_HIDE,
.navigation_bar_visual_mode = (use_navigation_bar) ? ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED :
ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE,
.flags = {
.enable_status_icon_common_size = 1,
.enable_navigation_gesture = !use_navigation_bar,
6 changes: 3 additions & 3 deletions src/systems/phone/esp_ui_phone_app.cpp
Original file line number Diff line number Diff line change
@@ -67,15 +67,15 @@ bool ESP_UI_PhoneApp::beginExtra(void)
_active_data = _init_data;

// Check navigation bar and gesture
if ((_active_data.navigation_bar_visual_mode != ESP_UI_PHONE_APP_VISUAL_MODE_HIDE) &&
if ((_active_data.navigation_bar_visual_mode != ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE) &&
_active_data.flags.enable_navigation_gesture) {
ESP_UI_LOGW("Both navigation bar and gesture are enabled, only bar will be used");
_active_data.flags.enable_navigation_gesture = false;
}
if ((_active_data.navigation_bar_visual_mode != ESP_UI_PHONE_APP_VISUAL_MODE_HIDE) &&
if ((_active_data.navigation_bar_visual_mode != ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE) &&
(navigation_bar == nullptr)) {
ESP_UI_LOGE("Navigation bar is enabled but not provided");
_active_data.navigation_bar_visual_mode = ESP_UI_PHONE_APP_VISUAL_MODE_HIDE;
_active_data.navigation_bar_visual_mode = ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE;
} else if (_active_data.flags.enable_navigation_gesture && (gesture == nullptr)) {
ESP_UI_LOGE("Navigation gesture is enabled but not provided");
_active_data.flags.enable_navigation_gesture = false;
121 changes: 59 additions & 62 deletions src/systems/phone/esp_ui_phone_home.cpp
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ LV_IMG_DECLARE(esp_ui_phone_app_launcher_image_default);
ESP_UI_PhoneHome::ESP_UI_PhoneHome(ESP_UI_Core &core, const ESP_UI_PhoneHomeData_t &data):
ESP_UI_CoreHome(core, core.getCoreData().home),
_data(data),
_app_launcher(core, data.app_launcher),
_app_launcher(core, data.app_launcher.data),
_status_bar(nullptr),
_navigation_bar(nullptr),
_recents_screen(nullptr)
@@ -46,22 +46,22 @@ bool ESP_UI_PhoneHome::begin(void)

// Status bar
if (_data.flags.enable_status_bar) {
status_bar = std::make_shared<ESP_UI_StatusBar>(_core, _data.status_bar,
status_bar = std::make_shared<ESP_UI_StatusBar>(_core, _data.status_bar.data,
_core.getCoreManager().getAppFreeId(), _core.getCoreManager().getAppFreeId());
ESP_UI_CHECK_NULL_RETURN(status_bar, false, "Create status bar failed");
ESP_UI_CHECK_FALSE_RETURN(status_bar->begin(system_screen_obj), false, "Begin status bar failed");
}

// Navigation bar
if (_data.flags.enable_navigation_bar) {
navigation_bar = std::make_shared<ESP_UI_NavigationBar>(_core, _data.navigation_bar);
navigation_bar = std::make_shared<ESP_UI_NavigationBar>(_core, _data.navigation_bar.data);
ESP_UI_CHECK_NULL_RETURN(navigation_bar, false, "Create navigation bar failed");
ESP_UI_CHECK_FALSE_RETURN(navigation_bar->begin(system_screen_obj), false, "Begin navigation bar failed");
}

// RecentsScreen
if (_data.flags.enable_recents_screen) {
recents_screen = std::make_shared<ESP_UI_RecentsScreen>(_core, _data.recents_screen);
recents_screen = std::make_shared<ESP_UI_RecentsScreen>(_core, _data.recents_screen.data);
ESP_UI_CHECK_NULL_RETURN(recents_screen, false, "Create recents_screen failed");
ESP_UI_CHECK_FALSE_RETURN(recents_screen->begin(system_screen_obj), false, "Begin recents_screen failed");
}
@@ -151,35 +151,32 @@ bool ESP_UI_PhoneHome::processAppRun(ESP_UI_CoreApp *app, lv_area_t &app_visual_
ESP_UI_LOGD("Process when app(%d) run", phone_app->getId());
ESP_UI_CHECK_FALSE_RETURN(checkInitialized(), false, "Not initialized");

const ESP_UI_PhoneAppData_t &app_data = phone_app->getActiveData();
// Process status bar
if (_status_bar == nullptr) {
ESP_UI_LOGD("No status_bar");
} else {
// Add status bar icon if needed
if (phone_app->getActiveData().status_icon_data.icon.image_num > 0) {
if (phone_app->getActiveData().flags.enable_status_icon_common_size) {
if (app_data.status_icon_data.icon.image_num > 0) {
if (app_data.flags.enable_status_icon_common_size) {
ESP_UI_LOGD("Use common size for status icon");
phone_app->_active_data.status_icon_data.size = _data.status_bar.icon_common_size;
phone_app->_active_data.status_icon_data.size = _data.status_bar.data.icon_common_size;
}
ESP_UI_CHECK_FALSE_RETURN(
ESP_UI_StatusBar::calibrateIconData(_data.status_bar, *this, phone_app->_active_data.status_icon_data),
ESP_UI_StatusBar::calibrateIconData(_data.status_bar.data, *this, phone_app->_active_data.status_icon_data),
false, "Calibrate status icon data failed"
);
ESP_UI_CHECK_FALSE_RETURN(
_status_bar->addIcon(phone_app->getActiveData().status_icon_data,
phone_app->getActiveData().status_bar_area_index,
phone_app->getId()),
_status_bar->addIcon(app_data.status_icon_data, app_data.status_icon_area_index, phone_app->getId()),
false, "Add status icon failed"
);
}
// Change visibility
const ESP_UI_PhoneAppVisualMode_t &status_bar_visual_mode = phone_app->getActiveData().status_bar_visual_mode;
ESP_UI_CHECK_FALSE_RETURN(
_status_bar->setVisible(status_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED), false,
"Status bar set visible failed"
);
if (status_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED) {
visual_area.y1 = _data.status_bar.main.size.height;
const ESP_UI_StatusBarVisualMode_t &status_bar_visual_mode = app_data.status_bar_visual_mode;
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisualMode(status_bar_visual_mode), false,
"Status bar set visual mode failed");
if (status_bar_visual_mode == ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED) {
visual_area.y1 = _data.status_bar.data.main.size.height;
}
}

@@ -188,14 +185,11 @@ bool ESP_UI_PhoneHome::processAppRun(ESP_UI_CoreApp *app, lv_area_t &app_visual_
ESP_UI_LOGD("No navigation_bar");
} else {
// Change visibility
const ESP_UI_PhoneAppVisualMode_t &navigation_bar_visual_mode =
phone_app->getActiveData().navigation_bar_visual_mode;
ESP_UI_CHECK_FALSE_RETURN(
_navigation_bar->setVisible(navigation_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED), false,
"Navigation bar set visible failed"
);
if (navigation_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED) {
visual_area.y2 -= _data.navigation_bar.main.size.height;
const ESP_UI_NavigationBarVisualMode_t &navigation_bar_visual_mode = app_data.navigation_bar_visual_mode;
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisualMode(navigation_bar_visual_mode), false,
"Navigation bar set visual mode failed");
if (navigation_bar_visual_mode == ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED) {
visual_area.y2 -= _data.navigation_bar.data.main.size.height;
}
}

@@ -223,22 +217,23 @@ bool ESP_UI_PhoneHome::processAppResume(ESP_UI_CoreApp *app)
ESP_UI_LOGD("Process when app(%d) resume", phone_app->getId());
ESP_UI_CHECK_FALSE_RETURN(checkInitialized(), false, "Not initialized");

const ESP_UI_PhoneAppData_t &app_data = phone_app->getActiveData();
// Process status bar
if (_status_bar == nullptr) {
ESP_UI_LOGD("No status_bar");
} else {
// Change visibility
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisible(phone_app->getActiveData().status_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED), false,
"Status bar set visible failed");
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisualMode(app_data.status_bar_visual_mode), false,
"Status bar set visual mode failed");
}

// Process navigation bar
if (_navigation_bar == nullptr) {
ESP_UI_LOGD("No navigation_bar");
} else {
// Change visibility
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisible(phone_app->getActiveData().navigation_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED),
false, "Navigation bar set visible failed");
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisualMode(app_data.navigation_bar_visual_mode), false,
"Navigation bar set visual mode failed");
}

return true;
@@ -284,14 +279,16 @@ bool ESP_UI_PhoneHome::processMainScreenLoad(void)
if (_status_bar == nullptr) {
ESP_UI_LOGD("No status_bar");
} else {
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisible(true), false, "Status bar set visible failed");
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisualMode(ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED), false,
"Status bar set visual mode failed");
}

// Process navigation bar
if (_navigation_bar == nullptr) {
ESP_UI_LOGD("No navigation_bar");
} else {
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisible(true), false, "Navigation bar set visible failed");
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisualMode(ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED), false,
"Navigation bar set visual mode failed");
}

ESP_UI_CHECK_FALSE_RETURN(lv_obj_is_valid(main_screen), false, "Invalid main screen");
@@ -310,16 +307,16 @@ bool ESP_UI_PhoneHome::processRecentsScreenShow(void)
if (_status_bar == nullptr) {
ESP_UI_LOGD("No status_bar");
} else {
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisible(_data.flags.enable_recents_screen_show_status_bar), false,
"Status bar set visible failed");
ESP_UI_CHECK_FALSE_RETURN(_status_bar->setVisualMode(_data.recents_screen.status_bar_visual_mode), false,
"Status bar set visual mode failed");
}

// Process navigation bar
if (_navigation_bar == nullptr) {
ESP_UI_LOGD("No navigation_bar");
} else {
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisible(_data.flags.enable_recents_screen_show_status_bar), false,
"Navigation bar set visible failed");
ESP_UI_CHECK_FALSE_RETURN(_navigation_bar->setVisualMode(_data.recents_screen.navigation_bar_visual_mode),
false, "Navigation bar set visual mode failed");
}

ESP_UI_CHECK_FALSE_RETURN(_recents_screen->setVisible(true), false, "RecentsScreen show failed");
@@ -332,54 +329,54 @@ bool ESP_UI_PhoneHome::calibrateData(const ESP_UI_StyleSize_t &screen_size, ESP_
ESP_UI_LOGD("Calibrate data");

// Initialize the size of flex widgets
if (data.flags.enable_app_launcher_flex) {
data.app_launcher.main.y_start = 0;
data.app_launcher.main.size.flags.enable_height_percent = 0;
data.app_launcher.main.size.height = screen_size.height;
if (data.flags.enable_app_launcher_flex_size) {
data.app_launcher.data.main.y_start = 0;
data.app_launcher.data.main.size.flags.enable_height_percent = 0;
data.app_launcher.data.main.size.height = screen_size.height;
}
if (data.flags.enable_recents_screen && data.flags.enable_recents_screen_flex) {
data.recents_screen.main.y_start = 0;
data.recents_screen.main.size.flags.enable_height_percent = 0;
data.recents_screen.main.size.height = screen_size.height;
if (data.flags.enable_recents_screen && data.flags.enable_recents_screen_flex_size) {
data.recents_screen.data.main.y_start = 0;
data.recents_screen.data.main.size.flags.enable_height_percent = 0;
data.recents_screen.data.main.size.height = screen_size.height;
}

// Status bar
if (data.flags.enable_status_bar) {
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_StatusBar::calibrateData(screen_size, *this, data.status_bar),
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_StatusBar::calibrateData(screen_size, *this, data.status_bar.data),
false, "Calibrate status bar data failed");
if (data.flags.enable_app_launcher_flex) {
data.app_launcher.main.y_start += data.status_bar.main.size.height;
data.app_launcher.main.size.height -= data.status_bar.main.size.height;
if (data.flags.enable_app_launcher_flex_size) {
data.app_launcher.data.main.y_start += data.status_bar.data.main.size.height;
data.app_launcher.data.main.size.height -= data.status_bar.data.main.size.height;
}
if (data.flags.enable_recents_screen && data.flags.enable_recents_screen_flex &&
data.flags.enable_recents_screen_show_status_bar) {
data.recents_screen.main.y_start += data.status_bar.main.size.height;
data.recents_screen.main.size.height -= data.status_bar.main.size.height;
if (data.flags.enable_recents_screen && data.flags.enable_recents_screen_flex_size &&
(data.recents_screen.status_bar_visual_mode == ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED)) {
data.recents_screen.data.main.y_start += data.status_bar.data.main.size.height;
data.recents_screen.data.main.size.height -= data.status_bar.data.main.size.height;
}
}
// Navigation bar
if (data.flags.enable_navigation_bar) {
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_NavigationBar::calibrateData(screen_size, *this, data.navigation_bar),
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_NavigationBar::calibrateData(screen_size, *this, data.navigation_bar.data),
false, "Calibrate navigation bar data failed");
if (data.flags.enable_app_launcher_flex) {
ESP_UI_CHECK_VALUE_RETURN(data.app_launcher.main.y_start + data.navigation_bar.main.size.height,
if (data.flags.enable_app_launcher_flex_size) {
ESP_UI_CHECK_VALUE_RETURN(data.app_launcher.data.main.y_start + data.navigation_bar.data.main.size.height,
1, screen_size.height, false, "Invalid app launcher height flex");
data.app_launcher.main.size.height -= data.navigation_bar.main.size.height;
data.app_launcher.data.main.size.height -= data.navigation_bar.data.main.size.height;
}
if (data.flags.enable_recents_screen && data.flags.enable_recents_screen_flex &&
data.flags.enable_recents_screen_show_navigation_bar) {
ESP_UI_CHECK_VALUE_RETURN(data.recents_screen.main.y_start + data.recents_screen.main.size.height,
if (data.flags.enable_recents_screen && data.flags.enable_recents_screen_flex_size &&
(data.recents_screen.navigation_bar_visual_mode == ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED)) {
ESP_UI_CHECK_VALUE_RETURN(data.recents_screen.data.main.y_start + data.recents_screen.data.main.size.height,
1, screen_size.height, false, "Invalid app launcher height flex");
data.recents_screen.main.size.height -= data.navigation_bar.main.size.height;
data.recents_screen.data.main.size.height -= data.navigation_bar.data.main.size.height;
}
}
// RecentsScreen
if (data.flags.enable_recents_screen) {
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_RecentsScreen::calibrateData(screen_size, *this, data.recents_screen),
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_RecentsScreen::calibrateData(screen_size, *this, data.recents_screen.data),
false, "Calibrate recents_screen data failed");
}
// App table
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_AppLauncher::calibrateData(screen_size, *this, data.app_launcher),
ESP_UI_CHECK_FALSE_RETURN(ESP_UI_AppLauncher::calibrateData(screen_size, *this, data.app_launcher.data),
false, "Calibrate app launcher data failed");

return true;
19 changes: 6 additions & 13 deletions src/systems/phone/esp_ui_phone_manager.cpp
Original file line number Diff line number Diff line change
@@ -494,25 +494,18 @@ bool ESP_UI_PhoneManager::processRecentsScreenHide(void)
"Gesture enable mask object failed");
}
} else {
const ESP_UI_PhoneAppData_t &app_data = active_app->getActiveData();
// Process status bar and navigation bar
if (status_bar != nullptr) {
const ESP_UI_PhoneAppVisualMode_t &status_bar_visual_mode =
active_app->getActiveData().status_bar_visual_mode;
ESP_UI_CHECK_FALSE_RETURN(
status_bar->setVisible(status_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED), false,
"Status bar set visible failed"
);
ESP_UI_CHECK_FALSE_RETURN(status_bar->setVisualMode(app_data.status_bar_visual_mode), false,
"Status bar set visible failed");
}
if (navigation_bar != nullptr) {
const ESP_UI_PhoneAppVisualMode_t &navigation_bar_visual_mode =
active_app->getActiveData().navigation_bar_visual_mode;
ESP_UI_CHECK_FALSE_RETURN(
navigation_bar->setVisible(navigation_bar_visual_mode == ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED),
false, "Navigation bar set visible failed"
);
ESP_UI_CHECK_FALSE_RETURN(navigation_bar->setVisualMode(app_data.navigation_bar_visual_mode), false,
"Navigation bar set visible failed");
}
if (_gesture != nullptr) {
_enable_navigation_gesture = active_app->getActiveData().flags.enable_navigation_gesture;
_enable_navigation_gesture = app_data.flags.enable_navigation_gesture;
ESP_UI_CHECK_FALSE_RETURN(_gesture->enableMaskObject(_enable_navigation_gesture), false,
"Gesture enable mask object failed");
}
51 changes: 27 additions & 24 deletions src/systems/phone/esp_ui_phone_type.h
Original file line number Diff line number Diff line change
@@ -20,18 +20,28 @@ extern "C" {
/////////////////////////////////////////////////////////// Home ///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct {
ESP_UI_StatusBarData_t status_bar;
ESP_UI_NavigationBarData_t navigation_bar;
ESP_UI_AppLauncherData_t app_launcher;
ESP_UI_RecentsScreenData_t recents_screen;
struct {
ESP_UI_StatusBarData_t data;
ESP_UI_StatusBarVisualMode_t visual_mode;
} status_bar;
struct {
ESP_UI_NavigationBarData_t data;
ESP_UI_NavigationBarVisualMode_t visual_mode;
} navigation_bar;
struct {
ESP_UI_AppLauncherData_t data;
} app_launcher;
struct {
ESP_UI_RecentsScreenData_t data;
ESP_UI_StatusBarVisualMode_t status_bar_visual_mode;
ESP_UI_NavigationBarVisualMode_t navigation_bar_visual_mode;
} recents_screen;
struct {
uint8_t enable_status_bar: 1;
uint8_t enable_navigation_bar: 1;
uint8_t enable_app_launcher_flex: 1;
uint8_t enable_app_launcher_flex_size: 1;
uint8_t enable_recents_screen: 1;
uint8_t enable_recents_screen_flex: 1;
uint8_t enable_recents_screen_show_status_bar: 1;
uint8_t enable_recents_screen_show_navigation_bar: 1;
uint8_t enable_recents_screen_flex_size: 1;
uint8_t enable_recents_screen_hide_when_no_snapshot: 1;
} flags;
} ESP_UI_PhoneHomeData_t;
@@ -56,23 +66,16 @@ typedef struct {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////// App //////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef enum {
ESP_UI_PHONE_APP_VISUAL_MODE_HIDE = 0,
ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED,
// ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FLEX, // TODO: Implement this mode
} ESP_UI_PhoneAppVisualMode_t;

/**
* @brief Phone app data structure
*/
typedef struct {
uint8_t app_launcher_page_index; /*!< The index of the app launcher page where the icon is shown */
uint8_t status_bar_area_index; /*!< The index of the status area where the icon is shown */
uint8_t status_icon_area_index; /*!< The index of the status area where the icon is shown */
ESP_UI_StatusBarIconData_t status_icon_data; /*!< The status icon data. If the `enable_status_icon_common_size`
flag is set, the `size` in this value will be ignored */
ESP_UI_PhoneAppVisualMode_t status_bar_visual_mode; /*!< The visual mode of the status bar */
ESP_UI_PhoneAppVisualMode_t navigation_bar_visual_mode;
/*!< The visual mode of the navigation bar */
ESP_UI_StatusBarVisualMode_t status_bar_visual_mode; /*!< The visual mode of the status bar */
ESP_UI_NavigationBarVisualMode_t navigation_bar_visual_mode; /*!< The visual mode of the navigation bar */
struct {
uint8_t enable_status_icon_common_size: 1; /*!< If set, the size of the status icon will be set to the
common size in the status bar data */
@@ -84,7 +87,7 @@ typedef struct {
/**
* @brief The default initializer for phone app data structure
*
* @note The `app_launcher_page_index` and `status_bar_area_index` is set to 0
* @note The `app_launcher_page_index` and `status_icon_area_index` is set to 0
* @note The `enable_status_icon_common_size` flag is set by default
*
* @param status_icon The status icon image. Set to `NULL` if no icon is needed
@@ -95,7 +98,7 @@ typedef struct {
#define ESP_UI_PHONE_APP_DATA_DEFAULT(status_icon, use_status_bar, use_navigation_bar) \
{ \
.app_launcher_page_index = 0, \
.status_bar_area_index = 0, \
.status_icon_area_index = 0, \
.status_icon_data = { \
.size = {}, \
.icon = { \
@@ -105,10 +108,10 @@ typedef struct {
}, \
}, \
}, \
.status_bar_visual_mode = (use_status_bar) ? ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED : \
ESP_UI_PHONE_APP_VISUAL_MODE_HIDE, \
.navigation_bar_visual_mode = (use_navigation_bar) ? ESP_UI_PHONE_APP_VISUAL_MODE_SHOW_FIXED : \
ESP_UI_PHONE_APP_VISUAL_MODE_HIDE, \
.status_bar_visual_mode = (use_status_bar) ? ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED : \
ESP_UI_STATUS_BAR_VISUAL_MODE_HIDE, \
.navigation_bar_visual_mode = (use_navigation_bar) ? ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED : \
ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE, \
.flags = { \
.enable_status_icon_common_size = 1, \
.enable_navigation_gesture = !use_navigation_bar, \
40 changes: 25 additions & 15 deletions src/systems/phone/stylesheet/dark/phone_stylesheet.h
Original file line number Diff line number Diff line change
@@ -17,21 +17,31 @@ extern "C" {
#endif

/* Home */
#define ESP_UI_PHONE_DEFAULT_DARK_HOME_DATA() \
{ \
.status_bar = ESP_UI_PHONE_DEFAULT_DARK_STATUS_BAR_DATA(), \
.navigation_bar = ESP_UI_PHONE_DEFAULT_DARK_NAVIGATION_BAR_DATA(), \
.app_launcher = ESP_UI_PHONE_DEFAULT_DARK_APP_LAUNCHER_DATA(), \
.recents_screen = ESP_UI_PHONE_DEFAULT_DARK_RECENTS_SCREEN_DATA(), \
.flags = { \
.enable_status_bar = 1, \
.enable_navigation_bar = 1, \
.enable_app_launcher_flex = 1, \
.enable_recents_screen = 1, \
.enable_recents_screen_flex = 1, \
.enable_recents_screen_show_status_bar = 0, \
.enable_recents_screen_show_navigation_bar = 0, \
}, \
#define ESP_UI_PHONE_DEFAULT_DARK_HOME_DATA() \
{ \
.status_bar = { \
.data = ESP_UI_PHONE_DEFAULT_DARK_STATUS_BAR_DATA(), \
.visual_mode = ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED, \
}, \
.navigation_bar = { \
.data = ESP_UI_PHONE_DEFAULT_DARK_NAVIGATION_BAR_DATA(), \
.visual_mode = ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED, \
}, \
.app_launcher = { \
.data = ESP_UI_PHONE_DEFAULT_DARK_APP_LAUNCHER_DATA(), \
}, \
.recents_screen = { \
.data = ESP_UI_PHONE_DEFAULT_DARK_RECENTS_SCREEN_DATA(), \
.status_bar_visual_mode = ESP_UI_STATUS_BAR_VISUAL_MODE_HIDE, \
.navigation_bar_visual_mode = ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE, \
}, \
.flags = { \
.enable_status_bar = 1, \
.enable_navigation_bar = 1, \
.enable_app_launcher_flex_size = 1, \
.enable_recents_screen = 1, \
.enable_recents_screen_flex_size = 1, \
}, \
}

/* Manager */
15 changes: 10 additions & 5 deletions src/widgets/navigation_bar/esp_ui_navigation_bar.cpp
Original file line number Diff line number Diff line change
@@ -133,15 +133,20 @@ bool ESP_UI_NavigationBar::del(void)
return ret;
}

bool ESP_UI_NavigationBar::setVisible(bool visible) const
bool ESP_UI_NavigationBar::setVisualMode(ESP_UI_NavigationBarVisualMode_t mode) const
{
ESP_UI_LOGD("Set visible(%d)", visible);
ESP_UI_LOGD("Set Visual Mode(%d)", mode);
ESP_UI_CHECK_FALSE_RETURN(checkInitialized(), false, "Not initialized");

if (visible) {
lv_obj_clear_flag(_main_obj.get(), LV_OBJ_FLAG_HIDDEN);
} else {
switch (mode) {
case ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE:
lv_obj_add_flag(_main_obj.get(), LV_OBJ_FLAG_HIDDEN);
break;
case ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED:
lv_obj_clear_flag(_main_obj.get(), LV_OBJ_FLAG_HIDDEN);
break;
default:
break;
}

return true;
2 changes: 1 addition & 1 deletion src/widgets/navigation_bar/esp_ui_navigation_bar.hpp
Original file line number Diff line number Diff line change
@@ -19,7 +19,7 @@ class ESP_UI_NavigationBar {

bool begin(lv_obj_t *parent);
bool del(void);
bool setVisible(bool visible) const;
bool setVisualMode(ESP_UI_NavigationBarVisualMode_t mode) const;

bool checkInitialized(void) const { return (_main_obj != nullptr); }
bool checkVisible(void) const;
6 changes: 6 additions & 0 deletions src/widgets/navigation_bar/esp_ui_navigation_bar_type.h
Original file line number Diff line number Diff line change
@@ -33,6 +33,12 @@ typedef struct {
} flags;
} ESP_UI_NavigationBarData_t;

typedef enum {
ESP_UI_NAVIGATION_BAR_VISUAL_MODE_HIDE = 0,
ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FIXED,
// ESP_UI_NAVIGATION_BAR_VISUAL_MODE_SHOW_FLEX, // TODO
} ESP_UI_NavigationBarVisualMode_t;

#ifdef __cplusplus
}
#endif
15 changes: 10 additions & 5 deletions src/widgets/status_bar/esp_ui_status_bar.cpp
Original file line number Diff line number Diff line change
@@ -100,15 +100,20 @@ bool ESP_UI_StatusBar::del(void)
return ret;
}

bool ESP_UI_StatusBar::setVisible(bool visible) const
bool ESP_UI_StatusBar::setVisualMode(ESP_UI_StatusBarVisualMode_t mode) const
{
ESP_UI_LOGD("Set visible(%d)", visible);
ESP_UI_LOGD("Set Visual Mode(%d)", mode);
ESP_UI_CHECK_FALSE_RETURN(checkMainInitialized(), false, "Not initialized");

if (visible) {
lv_obj_clear_flag(_main_obj.get(), LV_OBJ_FLAG_HIDDEN);
} else {
switch (mode) {
case ESP_UI_STATUS_BAR_VISUAL_MODE_HIDE:
lv_obj_add_flag(_main_obj.get(), LV_OBJ_FLAG_HIDDEN);
break;
case ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED:
lv_obj_clear_flag(_main_obj.get(), LV_OBJ_FLAG_HIDDEN);
break;
default:
break;
}

return true;
3 changes: 1 addition & 2 deletions src/widgets/status_bar/esp_ui_status_bar.hpp
Original file line number Diff line number Diff line change
@@ -22,8 +22,7 @@ class ESP_UI_StatusBar {

bool begin(lv_obj_t *parent);
bool del(void);
bool setVisible(bool visible) const;

bool setVisualMode(ESP_UI_StatusBarVisualMode_t mode) const;
bool addIcon(const ESP_UI_StatusBarIconData_t &data, uint8_t area_index, int id);
bool removeIcon(int id);
bool setIconState(int id, int state) const;
6 changes: 6 additions & 0 deletions src/widgets/status_bar/esp_ui_status_bar_type.h
Original file line number Diff line number Diff line change
@@ -76,6 +76,12 @@ typedef struct {
} flags;
} ESP_UI_StatusBarData_t;

typedef enum {
ESP_UI_STATUS_BAR_VISUAL_MODE_HIDE = 0,
ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FIXED,
// ESP_UI_STATUS_BAR_VISUAL_MODE_SHOW_FLEX, // TODO
} ESP_UI_StatusBarVisualMode_t;

#ifdef __cplusplus
}
#endif
2 changes: 2 additions & 0 deletions test_apps/sdkconfig.ci.1024_600
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONFIG_TEST_LVGL_RESOLUTION_WIDTH=1024
CONFIG_TEST_LVGL_RESOLUTION_HEIGHT=600
2 changes: 2 additions & 0 deletions test_apps/sdkconfig.ci.480_480
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONFIG_TEST_LVGL_RESOLUTION_WIDTH=480
CONFIG_TEST_LVGL_RESOLUTION_HEIGHT=480
2 changes: 2 additions & 0 deletions test_apps/sdkconfig.ci.800_480
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONFIG_TEST_LVGL_RESOLUTION_WIDTH=800
CONFIG_TEST_LVGL_RESOLUTION_HEIGHT=480
2 changes: 2 additions & 0 deletions test_apps/sdkconfig.ci.default
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONFIG_TEST_LVGL_RESOLUTION_WIDTH=240
CONFIG_TEST_LVGL_RESOLUTION_HEIGHT=240

0 comments on commit eb0aa6e

Please sign in to comment.