// main/ui/ui_events.c #include "ui.h" #include "ui_nav.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "lvgl.h" lv_timer_t *idle_timer = NULL; extern lv_obj_t *ui_Screen_Lottie; bool is_ai_recording = false; // AI语音交互状态标志 bool is_ai_create_pcmfile = false; // AI语音交互生成pcm文件状态标志 bool is_ai_end_recording = false; // AI语音交互结束录音状态标志 static bool is_switching = false; // 【解决方案二】正念练习状态标志(外部声明) extern volatile bool g_mindfulness_active; void ui_event_gesture_cb(lv_event_t *e) { if (lv_event_get_code(e) != LV_EVENT_GESTURE) return; if (is_switching) return; lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act()); is_switching = true; lv_indev_wait_release(lv_indev_get_act()); if (current_page_idx == UI_IDX_PULLDOWN) { if (dir == LV_DIR_TOP) { ui_nav_interrupt_mindfulness_for_gesture(); ui_nav_go_by_index(0, LV_SCR_LOAD_ANIM_OVER_TOP); } goto end; } if (current_page_idx == UI_IDX_COMPONENTS) { if (dir == LV_DIR_BOTTOM) { ui_nav_interrupt_mindfulness_for_gesture(); ui_nav_go_by_index(0, LV_SCR_LOAD_ANIM_OVER_BOTTOM); } goto end; } if (dir == LV_DIR_BOTTOM) { ESP_LOGE("手势","下划"); ui_nav_interrupt_mindfulness_for_gesture(); ui_nav_go_by_index(UI_IDX_PULLDOWN, LV_SCR_LOAD_ANIM_OVER_BOTTOM); } else if (dir == LV_DIR_TOP) { ESP_LOGE("手势","上划"); ui_nav_interrupt_mindfulness_for_gesture(); ui_nav_go_by_index(UI_IDX_COMPONENTS, LV_SCR_LOAD_ANIM_OVER_TOP); } else if (dir == LV_DIR_LEFT) { ESP_LOGE("手势","左划"); if (current_page_idx >= 0 && current_page_idx <= 2) { int next = (current_page_idx + 1) % 3; ui_nav_interrupt_mindfulness_for_gesture(); ui_nav_go_by_index(next, LV_SCR_LOAD_ANIM_MOVE_LEFT); } } else if (dir == LV_DIR_RIGHT) { ESP_LOGE("手势","右划"); if (current_page_idx >= 0 && current_page_idx <= 2) { int next = (current_page_idx - 1 + 3) % 3; ui_nav_interrupt_mindfulness_for_gesture(); ui_nav_go_by_index(next, LV_SCR_LOAD_ANIM_MOVE_RIGHT); } } end: vTaskDelay(pdMS_TO_TICKS(100)); is_switching = false; } void idle_timer_cb(lv_timer_t *timer) { LV_UNUSED(timer); ui_nav_go_by_index(0, LV_SCR_LOAD_ANIM_FADE_ON); } void ui_reset_idle_timer(void) { if (is_ui_mode && idle_timer != NULL) { lv_timer_reset(idle_timer); lv_timer_resume(idle_timer); } }