Files
arcs/apps-ui/apps/llm/presenters/alarm_success_presenter.c
2026-08-13 16:50:52 +08:00

162 lines
5.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file alarm_success_presenter.c
* @brief Alarm success page presenter implementation
*/
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#define TAG "alarm_success_presenter"
#include "lisa_ui.h"
#include "lisa_ui_nav_scr.h"
#include "lisa_ui_nav_scr_ids.h"
#include "alarm_success_view.h"
#include "model_alarm.h"
struct alarm_success_nav_scr_data {
lv_obj_t *view;
lv_timer_t *auto_return;
};
static void format_alarm_time(const alarm_time_info_t *info, char *time_str, size_t time_size,
char *date_str, size_t date_size)
{
snprintf(time_str, time_size, "%02d:%02d", info->hour, info->minute);
const char *weekdays[] = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
const char *suffix = "";
if (info->is_today) {
suffix = "(今天)";
} else if (info->is_tomorrow) {
suffix = "(明天)";
}
snprintf(date_str, date_size, "%d月%d日 %s%s",
info->month, info->day, weekdays[info->weekday], suffix);
}
static void auto_return_timer_cb(lv_timer_t *timer)
{
LISA_UI_LOGD("Auto return timer triggered, navigating to home");
lisa_ui_nav_scr_nav_to(LISA_UI_NAV_SCR_ID_HOME);
}
static int alarm_success_nav_scr_open(const struct lisa_ui_nav_scr *scr, void **data)
{
LISA_UI_LOGD("Alarm success nav scr open, id: %d", scr->unique_id);
struct alarm_success_nav_scr_data *scr_data = lisa_ui_malloc(sizeof(struct alarm_success_nav_scr_data));
if (!scr_data) {
LISA_UI_LOGE("Failed to allocate memory");
return -1;
}
scr_data->view = alarm_success_view_create(lv_scr_act());
if (!scr_data->view) {
LISA_UI_LOGE("Failed to create alarm success view");
lisa_ui_free(scr_data);
return -1;
}
/* 先隐藏view避免在设置文本时闪烁 */
lv_obj_add_flag(scr_data->view, LV_OBJ_FLAG_HIDDEN);
alarm_data_t alarm_data;
if (model_alarm_get_data(&alarm_data) == 0) {
alarm_time_info_t time_info;
if (model_alarm_get_time_info(alarm_data.timestamp, &time_info) == 0) {
char time_str[16];
char date_str[32];
format_alarm_time(&time_info, time_str, sizeof(time_str), date_str, sizeof(date_str));
alarm_success_view_set_time(scr_data->view, time_str);
alarm_success_view_set_date(scr_data->view, date_str);
LISA_UI_LOGI("Alarm success page - time: %s, date: %s", time_str, date_str);
} else {
LISA_UI_LOGW("Failed to get time info");
}
} else {
LISA_UI_LOGW("No alarm data available, using default");
}
/* 数据设置完成后立即显示避免在show时才显示导致闪烁 */
lv_obj_clear_flag(scr_data->view, LV_OBJ_FLAG_HIDDEN);
scr_data->auto_return = lv_timer_create(auto_return_timer_cb, 3000, NULL);
lv_timer_set_repeat_count(scr_data->auto_return, 1);
*data = scr_data;
return 0;
}
static int alarm_success_nav_scr_show(const struct lisa_ui_nav_scr *scr, void *data)
{
LISA_UI_LOGD("Alarm success nav scr show, id: %d", scr->unique_id);
struct alarm_success_nav_scr_data *scr_data = (struct alarm_success_nav_scr_data *)data;
if (!scr_data || !scr_data->view) {
LISA_UI_LOGE("Invalid alarm success nav scr data");
return -1;
}
/* view已经在open时显示这里不需要再操作 */
return 0;
}
static int alarm_success_nav_scr_pause(const struct lisa_ui_nav_scr *scr, void *data)
{
LISA_UI_LOGD("Alarm success nav scr pause, id: %d", scr->unique_id);
struct alarm_success_nav_scr_data *scr_data = (struct alarm_success_nav_scr_data *)data;
if (scr_data && scr_data->view) {
lv_obj_add_flag(scr_data->view, LV_OBJ_FLAG_HIDDEN);
}
return 0;
}
static int alarm_success_nav_scr_resume(const struct lisa_ui_nav_scr *scr, void *data)
{
LISA_UI_LOGD("Alarm success nav scr resume, id: %d", scr->unique_id);
struct alarm_success_nav_scr_data *scr_data = (struct alarm_success_nav_scr_data *)data;
if (scr_data && scr_data->view) {
lv_obj_clear_flag(scr_data->view, LV_OBJ_FLAG_HIDDEN);
}
return 0;
}
static int alarm_success_nav_scr_close(const struct lisa_ui_nav_scr *scr, void *data)
{
LISA_UI_LOGD("Alarm success nav scr close, id: %d", scr->unique_id);
struct alarm_success_nav_scr_data *scr_data = (struct alarm_success_nav_scr_data *)data;
if (scr_data) {
if (scr_data->auto_return) {
lv_timer_del(scr_data->auto_return);
scr_data->auto_return = NULL;
}
if (scr_data->view) {
lv_obj_del(scr_data->view);
}
lisa_ui_free(scr_data);
}
return 0;
}
const struct lisa_ui_nav_scr alarm_success_nav_scr = {
.unique_id = LISA_UI_NAV_SCR_ID_ALARM_SUCCESS,
.open = alarm_success_nav_scr_open,
.show = alarm_success_nav_scr_show,
.pause = alarm_success_nav_scr_pause,
.resume = alarm_success_nav_scr_resume,
.close = alarm_success_nav_scr_close,
};