From 06c02f76ba8dcf19edd33bda0d114a91fb7db514 Mon Sep 17 00:00:00 2001 From: Anatole SCHRAMM Date: Wed, 25 Oct 2023 13:39:06 +0200 Subject: [PATCH] Added the possibility to set the notification's displayed hour format (12H/24H) --- .../app/gfx/notification_screen.c | 33 ++++++++++++++++--- .../app/gfx/notification_screen.h | 6 +++- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/W800_SDK_v1.00.10/app/gfx/notification_screen.c b/src/W800_SDK_v1.00.10/app/gfx/notification_screen.c index 1ca118f..a1f4883 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/notification_screen.c +++ b/src/W800_SDK_v1.00.10/app/gfx/notification_screen.c @@ -16,7 +16,7 @@ void _notification_list_debug(NotificationDataList_t notificationList); void _display_message_notification(NotificationScreen_t * const notificationScreen, NotificationData_t *notification); void _notification_popup_destroy(NotificationScreen_t * const notificationScreen); const char *_notification_type_to_char(NotificationType_e notificationType); -const char *_notification_timestamp_to_date(time_t timestamp); +const char *_notification_timestamp_to_date(time_t timestamp, bool hour_24H_format); static void notification_scrolled_event_cb(lv_event_t *e) { @@ -68,6 +68,17 @@ void notification_screen_register_on_state_change_cb(NotificationScreen_t * cons notificationScreen->notificationOnStateChangeCb = notificationOnStateChangeCb; } +void notification_screen_set_displayed_hour_format(NotificationScreen_t * const notificationScreen, bool hour_24H_format) +{ + if(!notificationScreen) + { + LV_LOG_ERROR("NULL pointer given !"); + return; + } + + notificationScreen->notification_hour_24H_format = hour_24H_format; +} + void notification_screen_notify(NotificationScreen_t * const notificationScreen, uint32_t handle, time_t dateOfArrival, NotificationType_e notificationType, char * title, char * body) { if(!notificationScreen) @@ -324,7 +335,7 @@ void _display_message_notification(NotificationScreen_t * const notificationScre lv_obj_set_style_pad_right(notificationScreen->date_label, 10, LV_PART_MAIN); lv_obj_set_style_text_color(notificationScreen->date_label, lv_color_white(), LV_PART_MAIN); lv_obj_align(notificationScreen->date_label, LV_ALIGN_TOP_RIGHT, 0, 0); - lv_label_set_text_static(notificationScreen->date_label, _notification_timestamp_to_date(notification->dateOfArrival)); + lv_label_set_text_static(notificationScreen->date_label, _notification_timestamp_to_date(notification->dateOfArrival, notificationScreen->notification_hour_24H_format)); //Create the sub-area in the notification lv_obj_t *sub_area = lv_obj_create(main_notification); @@ -359,7 +370,7 @@ void _display_message_notification(NotificationScreen_t * const notificationScre //We just have to update the notification content lv_label_set_text_static(notificationScreen->type_label, _notification_type_to_char(notification->type)); lv_label_set_text_static(notificationScreen->title_label, notification->title); - lv_label_set_text_static(notificationScreen->date_label, _notification_timestamp_to_date(notification->dateOfArrival)); + lv_label_set_text_static(notificationScreen->date_label, _notification_timestamp_to_date(notification->dateOfArrival, notificationScreen->notification_hour_24H_format)); lv_label_set_text_static(notificationScreen->body_label, notification->body); } } @@ -392,12 +403,24 @@ const char *_notification_type_to_char(NotificationType_e notificationType) } } -const char *_notification_timestamp_to_date(time_t timestamp) +const char *_notification_timestamp_to_date(time_t timestamp, bool hour_24H_format) { static char date[9]; //Ex 7:23PM struct tm *time = gmtime(×tamp); - sprintf(date, "%s%d:%s%d", time->tm_hour < 10 ? "0" : "", time->tm_hour, time->tm_min < 10 ? "0" : "", time->tm_min); + if(hour_24H_format) + sprintf(date, "%s%d:%s%d", time->tm_hour < 10 ? "0" : "", time->tm_hour, time->tm_min < 10 ? "0" : "", time->tm_min); + else + { + // Intermediate hour var to set it on a 12H format + uint8_t hour = time->tm_hour; + if(hour > 12)hour -= 12; + + sprintf(date, "%d:%s%d%s", hour, + time->tm_min < 10 ? "0" : "", time->tm_min, + time->tm_hour < 13 ? "AM" : "PM"); + } + return date; } diff --git a/src/W800_SDK_v1.00.10/app/gfx/notification_screen.h b/src/W800_SDK_v1.00.10/app/gfx/notification_screen.h index 2f212ce..2bdd078 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/notification_screen.h +++ b/src/W800_SDK_v1.00.10/app/gfx/notification_screen.h @@ -57,13 +57,17 @@ typedef struct NotificationScreen NotificationDataList_t notificationList; // Actual notifications NotificationDataList_t freeNotificationList; // Free notification object pool // Miscellaneous - bool new_notification_available; + bool new_notification_available : 1; + bool notification_hour_24H_format : 1; + } NotificationScreen_t; void notification_screen_init(NotificationScreen_t * const notificationScreen); void notification_screen_register_on_state_change_cb(NotificationScreen_t * const notificationScreen, NotificationOnStateChangeCb_t notificationOnStateChangeCb); +void notification_screen_set_displayed_hour_format(NotificationScreen_t * const notificationScreen, bool hour_24H_format); + void notification_screen_notify(NotificationScreen_t * const notificationScreen, uint32_t handle, time_t dateOfArrival, NotificationType_e notificationType, char * title, char * body); bool notification_screen_new_notification_available(NotificationScreen_t * const notificationScreen);