gengxin
author@CHENG <2393524978@qq.com>
Fri, 21 Jun 2024 09:17:50 +0000 (17:17 +0800)
committer@CHENG <2393524978@qq.com>
Fri, 21 Jun 2024 09:17:50 +0000 (17:17 +0800)
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/mmi_aigc_data.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/mmi_aigc_ui.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/mmi_aigc_ui.h

index a00d30d..54a0c6b 100644 (file)
@@ -188,7 +188,7 @@ static void mm_aigc_data_send_task_handle(void * param)
             break;
 
                case MMI_AIGC_MSG_TRANS_STOP_SEND:
-                       mmi_aigc_send_trans_stop_data_process(msg_param, param_size);
+                       //mmi_aigc_send_trans_stop_data_process(msg_param, param_size);
                        break;
 
                case MMI_AIGC_MSG_CHAT_TEXT_SEND:
@@ -284,7 +284,7 @@ void mmi_aigc_send_trans_audio_msg(void * param, uint32_t param_size)
 
 void mmi_aigc_send_trans_stop_msg(void * param, uint32_t param_size)
 {
-       mmi_aigc_data_send_task_msg_send(MMI_AIGC_MSG_TRANS_STOP_SEND, NULL, 0);
+       //mmi_aigc_data_send_task_msg_send(MMI_AIGC_MSG_TRANS_STOP_SEND, NULL, 0);
 }
 
 static void mmi_aigc_send_trans_start_data_process(void * data_ptr, uint32_t data_len)
@@ -314,6 +314,7 @@ static void mmi_aigc_send_trans_audio_data_process(void * data_ptr, uint32_t dat
 
 static void mmi_aigc_send_trans_stop_data_process(void * data_ptr, uint32_t data_len)
 {
+#if 0
     char send_ptr[512] = {0};
        int send_len = 0;
 
@@ -324,6 +325,7 @@ static void mmi_aigc_send_trans_stop_data_process(void * data_ptr, uint32_t data
        {
                AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: send fail\n", __FUNCTION__, __LINE__);
        }
+#endif
 }
 
 static void mmi_aigc_trans_text_data_recv_msg(void * param, uint32_t param_size)
@@ -358,6 +360,23 @@ static void mmi_aigc_recv_trans_text_data_process(void * data_ptr, uint32_t data
                        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: transcription start\n", __FUNCTION__, __LINE__);
                        
                }
+               else if(0 == strncmp(value_event_str, "Changed", strlen("Changed")))
+               {
+                       // changed
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: changed\n", __FUNCTION__, __LINE__);
+                       cJSON * json_result = cJSON_GetObjectItem(json_root, "result");
+                       if(NULL != json_result)
+                       {
+                               char * value_result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_result, "result"));
+                               uint32_t value_result_len = strlen(value_result_str);
+                               
+                               if(true == mmi_aigc_trans_result_text_store(value_result_str, value_result_len, false))
+                               {
+                                       // refresh ui
+                                       mmi_ui_msg_update_aigc_recv_trans_text_middle();                                        
+                               }
+                       }
+               }               
                else if(0 == strncmp(value_event_str, "SentenceEnd", strlen("SentenceEnd")))
                {
                        // end
@@ -368,10 +387,10 @@ static void mmi_aigc_recv_trans_text_data_process(void * data_ptr, uint32_t data
                                char * value_result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_result, "result"));
                                uint32_t value_result_len = strlen(value_result_str);
                                
-                               if(true == mmi_aigc_trans_result_text_store(value_result_str, value_result_len))
+                               if(true == mmi_aigc_trans_result_text_store(value_result_str, value_result_len, true))
                                {
-                                       // send msg to refresh ui
-
+                                       // refresh ui
+                                       mmi_ui_msg_action_aigc_recv_trans_text_stop();                                  
                                }
                        }
                }
@@ -380,11 +399,6 @@ static void mmi_aigc_recv_trans_text_data_process(void * data_ptr, uint32_t data
                        // stop
                        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: transcription stop\n", __FUNCTION__, __LINE__);
 
-                       // refresh ui
-                       mmi_ui_msg_action_aigc_recv_trans_text_stop();
-                       
-                       //
-                       mmi_aigc_chat_text_download_requst();
                }
        }
 
@@ -498,9 +512,6 @@ static void mmi_aigc_recv_chat_text_data_process(void * data_ptr, uint32_t data_
 
                        // send msg to refresh ui
                        mmi_ui_msg_action_aigc_recv_chat_text_stop();
-
-                       //
-                       mmi_aigc_tts_audio_download_requst();
                }
        }
 
index 9637c6a..eaf4426 100644 (file)
@@ -14,19 +14,80 @@ static uint8_t s_aigc_current_chat_index = 0; // 1 chat = 2 msg items
 
 static uint32_t s_aigc_recording_sent_size = 0;
 static uint32_t s_aigc_tts_text_sent_size = 0;
-static uint8_t s_aigc_thinking_counter = 0;
+static bool s_aigc_trans_text_end = false;
 static bool s_aigc_tts_audio_playing = false;
 
 static lv_ll_t s_aigc_tts_audio_ll = {0};
 static mmi_aigc_tts_audio_ll_t * s_aigc_tts_audio_play_node = NULL;
 
+static bool s_aigc_trans_ws_open_flag = false;
+static bool s_aigc_chat_ws_open_flag = false;
+static bool s_aigc_tts_ws_open_flag = false;
+
 #define MMI_AIGC_SEND_TTS_TEXT_MAX (150) // 50
 #define MMI_AIGC_SEND_TTS_TEXT_MIN (99) // 33
 
 
+static lv_res_t mmi_aigc_list_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
+static void mmi_aigc_list_set_slide_enable(lv_watch_obj_ext_t * ext, bool enable);
 static void mmi_aigc_default_screen_display(void);
 static void mmi_aigc_record_button_event_cb(lv_obj_t * obj, lv_event_t e);
 
+
+static void mmi_aigc_trans_websocket_open(void)
+{
+       if(false == s_aigc_trans_ws_open_flag)
+       {
+               mmi_aigc_trans_websocket_app_start();
+               s_aigc_trans_ws_open_flag = true;
+       }
+}
+
+static void mmi_aigc_chat_websocket_open(void)
+{
+       if(false == s_aigc_chat_ws_open_flag)
+       {
+               mmi_aigc_chat_websocket_app_start();
+               s_aigc_chat_ws_open_flag = true;
+       }
+}
+
+static void mmi_aigc_tts_websocket_open(void)
+{
+       if(false == s_aigc_tts_ws_open_flag)
+       {
+               mmi_aigc_tts_websocket_app_start();
+               s_aigc_tts_ws_open_flag = true;
+       }
+}
+
+static void mmi_aigc_trans_websocket_close(void)
+{
+       if(true == s_aigc_trans_ws_open_flag)
+       {
+               mmi_aigc_trans_websocket_app_stop();
+               s_aigc_trans_ws_open_flag = false;
+       }
+}
+
+static void mmi_aigc_chat_websocket_close(void)
+{
+       if(true == s_aigc_chat_ws_open_flag)
+       {
+               mmi_aigc_chat_websocket_app_stop();
+               s_aigc_chat_ws_open_flag = false;
+       }
+}
+
+static void mmi_aigc_tts_websocket_close(void)
+{
+       if(true == s_aigc_tts_ws_open_flag)
+       {
+               mmi_aigc_tts_websocket_app_stop();
+               s_aigc_tts_ws_open_flag = false;
+       }
+}
+
 static void mmi_aigc_msg_data_clean(void)
 {
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
@@ -67,7 +128,7 @@ char * mmi_aigc_trans_result_text_get(uint32_t * data_len)
        return (t_aigc_item_info->text_data_ptr);
 }
 
-bool mmi_aigc_trans_result_text_store(char * data_buff, uint32_t data_len)
+bool mmi_aigc_trans_result_text_store(char * data_buff, uint32_t data_len, bool is_end)
 {
        if(NULL == data_buff || 0 == data_len)
        {
@@ -75,8 +136,34 @@ bool mmi_aigc_trans_result_text_store(char * data_buff, uint32_t data_len)
                return false;
        }
 
+       if(true == s_aigc_trans_text_end)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       s_aigc_trans_text_end = is_end;
+
        mmi_aigc_msg_item_info_t * t_aigc_item_info = &(s_aigc_info_p->msg_item[0]);
 
+#if 1
+       char * temp_ptr = lv_mem_alloc(data_len + 1);
+       if(NULL == temp_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       _lv_memset_00(temp_ptr, data_len + 1);
+       _lv_memcpy(temp_ptr, data_buff, data_len);
+       
+       if(NULL != t_aigc_item_info->text_data_ptr)
+       {
+               lv_mem_free(t_aigc_item_info->text_data_ptr);
+               t_aigc_item_info->text_data_ptr = NULL;
+       }
+       t_aigc_item_info->text_data_ptr = temp_ptr;
+       t_aigc_item_info->text_data_size = data_len;
+
+#else
        if(NULL == t_aigc_item_info->text_data_ptr)
        {
                char * temp_ptr = lv_mem_alloc(data_len + 1);
@@ -105,8 +192,8 @@ bool mmi_aigc_trans_result_text_store(char * data_buff, uint32_t data_len)
                t_aigc_item_info->text_data_ptr = temp_ptr;
                t_aigc_item_info->text_data_size += data_len;
        }
+#endif
        t_aigc_item_info->msg_from = 0;
-
        s_aigc_info_p->msg_count = 1;
        
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, t_aigc_item_info->text_data_size, t_aigc_item_info->text_data_ptr);
@@ -165,7 +252,6 @@ bool mmi_aigc_chat_result_text_store(char * data_buff, uint32_t data_len)
                t_aigc_item_info->text_data_size += data_len;
        }
        t_aigc_item_info->msg_from = 1;
-
        s_aigc_info_p->msg_count = 2;
        
        printf("[@CHENG_DEBUG][%s][%d]: size=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, t_aigc_item_info->text_data_size, t_aigc_item_info->text_data_ptr);
@@ -400,7 +486,6 @@ void mmi_aigc_tts_audio_download_requst(void)
        mmi_aigc_send_tts_text_action_pre();
 }
 
-#if 1
 
 void mmi_aigc_tts_audio_ll_init(void)
 {
@@ -495,12 +580,14 @@ void mmi_aigc_tts_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
     }
        else if(MMI_AIGC_TTS_AUDIO_PRI > priority)
        {
-               Hal_NFFS_File_Play_End();
-               Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
-               // websocket
-               mmi_aigc_tts_websocket_app_stop();
+               // wb
+               mmi_aigc_tts_websocket_close();
+               
                // res
                mmi_aigc_tts_audio_ll_clean();
+       
+               Hal_NFFS_File_Play_End();
+               Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
     }
 }
 
@@ -536,7 +623,7 @@ static void mmi_aigc_tts_audio_over_cb(void * para)
        #else
                volume = query_current_volume();
        #endif
-               volume = 1;
+               volume = HAL_AUDIO_SPK_LEVEL_MAX;
 
                Hal_Tone_Play_Onetime((uint32_t *)node->audio_data_ptr,
                                                                node->audio_data_size,
@@ -573,7 +660,7 @@ bool mmi_aigc_tts_audio_play(void)
        #else
                volume = query_current_volume();
        #endif
-               volume = 1;
+               volume = HAL_AUDIO_SPK_LEVEL_MAX;
 
                Hal_Tone_Play_Onetime((uint32_t *)node->audio_data_ptr,
                                                                node->audio_data_size,
@@ -585,124 +672,94 @@ bool mmi_aigc_tts_audio_play(void)
        return true;
 }
 
-#else
-bool mmi_aigc_tts_audio_store(char * data_buff, uint32_t data_len)
+static void mmi_aigc_trans_text_middle_screen_task_cb(lv_task_t * task)
 {
-       if(NULL == data_buff || 0 == data_len)
-       {
-               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               return false;
-       }
-
-       mmi_aigc_msg_item_info_t * t_aigc_item_info = &(s_aigc_info_p->msg_item[1]);
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: ui_state=%d\n", __FUNCTION__, __LINE__, s_aigc_ui_state);
        
-       if(NULL == t_aigc_item_info->audio_data_ptr)
-       {
-               char * temp_ptr = lv_mem_alloc(data_len + 1);
-               if(NULL == temp_ptr)
-               {
-                       printf("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
-                       return false;
-               }
-               _lv_memset_00(temp_ptr, data_len + 1);
-               _lv_memcpy(temp_ptr, data_buff, data_len);
+       if(MMI_AIGC_UI_STATE_LISTENING == s_aigc_ui_state || MMI_AIGC_UI_STATE_LISTENING_MIDDLE == s_aigc_ui_state)
+       {               
+               lv_aigc_ext_t * ext = mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
+               if(NULL == ext)
+                       return;
+               
+               mmi_aigc_list_set_slide_enable(&ext->old_ext, true);
 
-               t_aigc_item_info->audio_data_ptr = temp_ptr;
-               t_aigc_item_info->audio_data_size = data_len;
-       }
-       else
-       {
-               char * temp_ptr = lv_mem_realloc(t_aigc_item_info->audio_data_ptr, t_aigc_item_info->audio_data_size + data_len + 1);
-               if(NULL == temp_ptr)
+               if(0 != mmi_aigc_msg_count_get())
                {
-                       printf("[@CHENG_DEBUG][%s][%d]: realloc memory fail\n", __FUNCTION__, __LINE__);
-                       return false;
-               }
-               _lv_memset_00(temp_ptr + t_aigc_item_info->audio_data_size, data_len + 1);
-               _lv_memcpy(temp_ptr + t_aigc_item_info->audio_data_size, data_buff, data_len);
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-               t_aigc_item_info->audio_data_ptr = temp_ptr;
-               t_aigc_item_info->audio_data_size += data_len;
+                       mmi_aigc_listening_middle_screen_display();
+               }
        }
-       
-       printf("[@CHENG_DEBUG][%s][%d]: size=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, t_aigc_item_info->audio_data_size, t_aigc_item_info->audio_data_ptr);
-
-       return true;
 }
 
-void mmi_aigc_tts_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
+void mmi_ui_msg_update_aigc_recv_trans_text_middle(void)
 {
-       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
-       
-    if(MMI_AIGC_TTS_AUDIO_PRI == priority)
-       {
-
-    }
-       else if(MMI_AIGC_TTS_AUDIO_PRI > priority)
-       {
-               Hal_NFFS_File_Play_End();
-               Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
-    }
+       lv_task_t * task_p = lv_task_create(mmi_aigc_trans_text_middle_screen_task_cb, 50, LV_TASK_PRIO_HIGH, NULL);
+       lv_task_once(task_p);
 }
 
-static void mmi_aigc_tts_audio_over_cb(void * para)
+static void mmi_aigc_trans_text_screen_task_cb(lv_task_t * task)
 {
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
+       mmi_aigc_thinking_screen_display();
 
+       mmi_aigc_chat_text_download_requst();
 }
 
-bool mmi_aigc_tts_audio_play(void)
+void mmi_ui_msg_update_aigc_recv_trans_text_stop(void)
 {
-/*
-       uint32_t fs_total = 0;
-       uint32_t fs_free = 0;
-       lv_fs_free_space('C', &fs_total, &fs_free);
-       printf("[@CHENG_DEBUG][%s][%d]: space total = %dB, free = %dB\n", __FUNCTION__, __LINE__, fs_total, fs_free);
-*/
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: ui_state=%d\n", __FUNCTION__, __LINE__, s_aigc_ui_state);
 
-       mmi_aigc_msg_item_info_t * t_aigc_item_info = &(s_aigc_info_p->msg_item[1]);
+       // wb
+       mmi_aigc_trans_websocket_close();
+       mmi_aigc_chat_websocket_open();
        
-       if(MMI_AIGC_TTS_AUDIO_PRI == Hal_Audio_Manage_Start_Req(MMI_AIGC_TTS_AUDIO_PRI, mmi_aigc_tts_audio_ctrl_callback))
-       {
-               uint8_t volume = 0;
-       #ifdef __MMI_USER_PROFILE_SUPPORT__
-               volume = mmi_user_profile_current_mode_remind_volume_get();
-       #else
-               volume = query_current_volume();
-       #endif
-               volume = 1;
-       
-               Hal_Tone_Play_Onetime((uint32_t *)t_aigc_item_info->audio_data_ptr,
-                                                               t_aigc_item_info->audio_data_size,
-                                                               volume,
-                                                               mmi_aigc_tts_audio_over_cb,
-                                                               NULL);  
-       }
+       if(MMI_AIGC_UI_STATE_LISTENING == s_aigc_ui_state || MMI_AIGC_UI_STATE_LISTENING_MIDDLE == s_aigc_ui_state)
+       {               
+               mmi_aigc_listening_stop(true);
 
-       return true;
-}
-#endif
+               lv_aigc_ext_t * ext = mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
+               if(NULL == ext)
+                       return;
+               
+               mmi_aigc_list_set_slide_enable(&ext->old_ext, true);
 
-void mmi_ui_msg_update_aigc_recv_trans_text_stop(void)
-{
-       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               if(0 == mmi_aigc_msg_count_get())
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+                       mmi_aigc_default_screen_display();
+               }
+               else
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+                       
+                       mmi_aigc_listening_middle_screen_display();
 
+                       lv_task_t * task_p = lv_task_create(mmi_aigc_trans_text_screen_task_cb, 1000, LV_TASK_PRIO_HIGH, NULL);
+                       lv_task_once(task_p);
+               }
+       }
 }
 
 void mmi_ui_msg_update_aigc_recv_chat_text_stop(void)
 {
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-       mmi_aigc_main_screen_refresh();
-}
-
-void mmi_ui_msg_update_aigc_recv_tts_audio_stop(void)
-{
-       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       mmi_aigc_chat_websocket_close();
+       mmi_aigc_tts_websocket_open();
+       
+       if(MMI_AIGC_UI_STATE_THINKING == s_aigc_ui_state)
+       {
+               mmi_aigc_main_screen_refresh();
 
+               mmi_aigc_tts_audio_download_requst();
+       }
 }
 
+
 void * mmi_aigc_actId_ext_get(lv_watch_Activity_Id_t actId)
 {
        lv_obj_t * activity_obj = lv_watch_get_activity_obj(actId);
@@ -720,14 +777,63 @@ void * mmi_aigc_actId_ext_get(lv_watch_Activity_Id_t actId)
        return NULL;
 }
 
+static void mmi_aigc_lv_style_reset(void)
+{
+       lv_aigc_ext_t * ext = mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
+       if(NULL == ext)
+               return;
+
+       lv_style_reset(&(ext->style_cont_self));
+       lv_style_reset(&(ext->style_cont_other));
+       //lv_style_reset(&(ext->style_label_time));
+       lv_style_reset(&(ext->style_label_len_self));
+       lv_style_reset(&(ext->style_label_len_other));
+}
+
+static void mmi_aigc_lv_style_set(void)
+{
+       lv_aigc_ext_t * ext = mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
+       if(NULL == ext)
+               return;
+
+       //lv_style_init(&(ext->style_label_time));
+       //lv_style_copy(&(ext->style_label_time), &lv_watch_font20);
+       //lv_style_set_text_color(&(ext->style_label_time), LV_STATE_DEFAULT, lv_color_make(20, 187, 242));
+
+       lv_style_init(&(ext->style_label_len_other));
+       lv_style_copy(&(ext->style_label_len_other), &lv_watch_font20);
+       lv_style_set_text_color(&(ext->style_label_len_other), LV_STATE_DEFAULT, LV_COLOR_WHITE);
+
+       lv_style_init(&(ext->style_label_len_self));
+       lv_style_copy(&(ext->style_label_len_self), &lv_watch_font20);
+       lv_style_set_text_color(&(ext->style_label_len_self), LV_STATE_DEFAULT, LV_COLOR_WHITE);
+
+       lv_style_init(&(ext->style_cont_self));
+       lv_style_set_bg_color(&(ext->style_cont_self), LV_STATE_DEFAULT, LV_COLOR_MAKE(79, 195, 76)); // LV_COLOR_MAKE(175, 242, 89));
+       lv_style_set_radius(&(ext->style_cont_self), LV_STATE_DEFAULT, 15); // 30
+       lv_style_set_pad_top(&(ext->style_cont_self), LV_STATE_DEFAULT, 10); // 8
+       lv_style_set_pad_bottom(&(ext->style_cont_self), LV_STATE_DEFAULT, 10); // 8
+       lv_style_set_pad_left(&(ext->style_cont_self), LV_STATE_DEFAULT, 5); // 8
+       lv_style_set_pad_right(&(ext->style_cont_self), LV_STATE_DEFAULT, 5); // 8
+
+       lv_style_init(&(ext->style_cont_other));
+       lv_style_set_bg_color(&(ext->style_cont_other), LV_STATE_DEFAULT, LV_COLOR_MAKE(25, 25, 25)); // LV_COLOR_MAKE(0xE2, 0xBD, 0xFF));
+       lv_style_set_radius(&(ext->style_cont_other), LV_STATE_DEFAULT, 15);
+       lv_style_set_pad_top(&(ext->style_cont_other), LV_STATE_DEFAULT, 10);
+       lv_style_set_pad_bottom(&(ext->style_cont_other), LV_STATE_DEFAULT, 10);
+       lv_style_set_pad_left(&(ext->style_cont_other), LV_STATE_DEFAULT, 5);
+       lv_style_set_pad_right(&(ext->style_cont_other), LV_STATE_DEFAULT, 5);
+}
+
 void mmi_aigc_main_prepare_destory(lv_obj_t * activity_obj)
 {
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
        // websocket
-       mmi_aigc_trans_websocket_app_stop();
-       mmi_aigc_chat_websocket_app_stop();
-       mmi_aigc_tts_websocket_app_stop();
+       mmi_aigc_trans_websocket_close();
+       mmi_aigc_chat_websocket_close();
+       mmi_aigc_tts_websocket_close();
+
        // data task
        mmi_aigc_data_task_delete();
        watch_set_suspend_enable(true, ACT_ID_AIGC_MAIN, 0);
@@ -736,19 +842,19 @@ void mmi_aigc_main_prepare_destory(lv_obj_t * activity_obj)
        mmi_aigc_msg_data_clean();
        mmi_aigc_tts_audio_ll_clean();
        
-       //
+       // audio
+       mmi_aigc_listening_stop(true);
        Hal_NFFS_File_Play_End();
        Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
        //Hal_Vibrator_Play_End();
        
     lv_watch_png_cache_all_free();
+       mmi_aigc_lv_style_reset();
 
        lv_aigc_ext_t * ext = mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
        if(NULL == ext) 
                return ;
 
-       mmi_aigc_list_msg_item_style_reset(ext);
-
        if(NULL != ext->record_buffer)
        {
                lv_mem_free(ext->record_buffer);
@@ -857,6 +963,7 @@ void mmi_aigc_timeout_screen_display(void)
 
        lv_obj_set_hidden(ext->cont_default, true);
        lv_obj_set_hidden(ext->cont_listening, true);
+       lv_obj_set_hidden(ext->cont_listening_middle, true);
        lv_obj_set_hidden(ext->cont_thinking, true);
        lv_obj_set_hidden(ext->cont_timeout, false);
        lv_obj_set_hidden(ext->cont_list, true);
@@ -866,11 +973,12 @@ void mmi_aigc_thinking_screen_clean(void)
 {
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
+       mmi_aigc_chat_websocket_close();
+       
        lv_aigc_ext_t * ext = (lv_aigc_ext_t *)mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
        if(NULL == ext) 
                return ;
 
-       mmi_aigc_send_trans_stop_msg(NULL, 0);
        if(NULL != ext->thinking_task_p)
        {
                lv_task_del(ext->thinking_task_p);
@@ -882,26 +990,14 @@ void mmi_aigc_thinking_screen_clean(void)
 
 static void mmi_aigc_thinking_screen_task_cb(lv_task_t * task)
 {
-       s_aigc_thinking_counter++;
-       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: thinking_counter=%d\n", __FUNCTION__, __LINE__, s_aigc_thinking_counter);
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
-       switch(s_aigc_thinking_counter)
-       {
-               case 1:
-                       mmi_aigc_send_trans_stop_msg(NULL, 0);
-                       break;
-                       
-               case 60:
-                       mmi_aigc_timeout_screen_display();
-                       break;
-
-               default:
-                       break;
-       }
+       mmi_aigc_timeout_screen_display();
 }
 
 void mmi_aigc_listening_remain_data_send(void)
 {
+#if 0
        lv_aigc_ext_t * ext = (lv_aigc_ext_t *)mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
        if(NULL == ext) 
        {
@@ -936,6 +1032,7 @@ EXIT:
        ext->record_size = 0;
        
        s_aigc_recording_sent_size = 0; 
+#endif
 }
 
 void mmi_aigc_thinking_screen_display(void)
@@ -948,21 +1045,25 @@ void mmi_aigc_thinking_screen_display(void)
 
        s_aigc_ui_state = MMI_AIGC_UI_STATE_THINKING;
 
-       // websocket
-       mmi_aigc_tts_websocket_app_start();
+       //mmi_aigc_listening_remain_data_send();
 
-       mmi_aigc_listening_remain_data_send();
-       s_aigc_thinking_counter = 0;
        if(NULL != ext->thinking_task_p)
        {
                lv_task_del(ext->thinking_task_p);
                ext->thinking_task_p = NULL;
        }
-       ext->thinking_task_p = lv_task_create(mmi_aigc_thinking_screen_task_cb, 1000, LV_TASK_PRIO_HIGH, NULL);
+       ext->thinking_task_p = lv_task_create(mmi_aigc_thinking_screen_task_cb, 60 * 1000, LV_TASK_PRIO_HIGH, NULL);
+       lv_task_once(ext->thinking_task_p);
 
 
        // ui
        lv_obj_t * cont = ext->cont_thinking;
+       if(NULL != ext->gif_thinking)
+       {
+               gif_close(ext->gif_thinking);
+               ext->gif_thinking = NULL;
+       }
+       lv_obj_clean(cont);
        
        //label
        lv_obj_t * label_state = lv_label_create(cont, NULL);
@@ -971,20 +1072,13 @@ void mmi_aigc_thinking_screen_display(void)
        lv_label_set_align(label_state, LV_LABEL_ALIGN_CENTER);
        lv_obj_align(label_state, NULL, LV_ALIGN_IN_TOP_MID, 0, 20);
 
-       //lv_obj_t * img = lv_img_create(cont, NULL);
-       //lv_img_set_src(img, ICON_AIGC_THINKING);
-       //lv_obj_set_click(img, false);
-       //lv_obj_align(img, NULL, LV_ALIGN_CENTER, 0, -10);
-       if(NULL == ext->gif_thinking)
+       ext->gif_thinking = gif_open(cont, ANIM_AIGC_THINKING, 0);
+       if(NULL == ext->gif_thinking) 
        {
-               ext->gif_thinking = gif_open(cont, ANIM_AIGC_THINKING, 0);
-               if(NULL == ext->gif_thinking) 
-               {
-                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
-               }
-               lv_obj_set_style_local_bg_color(ext->gif_thinking->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-               lv_obj_align(ext->gif_thinking->container, NULL, LV_ALIGN_CENTER, 0, -10);
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
        }
+       lv_obj_set_style_local_bg_color(ext->gif_thinking->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       lv_obj_align(ext->gif_thinking->container, NULL, LV_ALIGN_CENTER, 0, -10);
 
        lv_obj_t * imgbtn = lv_imgbtn_create(cont, NULL);
        lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_AIGC_RECORD_BUTTON_PRESSED);
@@ -1004,16 +1098,105 @@ void mmi_aigc_thinking_screen_display(void)
 
        lv_obj_set_hidden(ext->cont_default, true);
        lv_obj_set_hidden(ext->cont_listening, true);
+       lv_obj_set_hidden(ext->cont_listening_middle, true);
        lv_obj_set_hidden(ext->cont_thinking, false);
        lv_obj_set_hidden(ext->cont_timeout, true);
        lv_obj_set_hidden(ext->cont_list, true);
 }
 
+void mmi_aigc_listening_middle_screen_display(void)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       lv_aigc_ext_t * ext = (lv_aigc_ext_t *)mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
+       if(NULL == ext) 
+               return ;
+
+       s_aigc_ui_state = MMI_AIGC_UI_STATE_LISTENING_MIDDLE;
+       
+       // ui
+       lv_obj_t * cont = ext->cont_listening_middle;
+       if(NULL != ext->gif_listening)
+       {
+               gif_close(ext->gif_listening);
+               ext->gif_listening = NULL;
+       }
+       lv_obj_clean(cont);
+       
+
+       lv_obj_t * list_page = lv_page_create(cont, NULL);
+       lv_obj_set_size(list_page, lv_obj_get_width(cont), lv_obj_get_height(cont) / 2);
+       lv_page_set_scrollbar_mode(list_page, LV_SCROLLBAR_MODE_OFF);
+       lv_obj_set_style_local_bg_opa(list_page, LV_PAGE_PART_BG, LV_STATE_DEFAULT, LV_OPA_0);
+       lv_obj_set_style_local_border_opa(list_page, LV_PAGE_PART_BG, LV_STATE_DEFAULT, LV_OPA_0);
+       lv_obj_set_style_local_outline_width(list_page, LV_PAGE_PART_BG, LV_STATE_DEFAULT, 0);
+       lv_obj_align(list_page, NULL, LV_ALIGN_IN_TOP_MID, 0, 20);
+
+       lv_page_set_scrl_layout(list_page, LV_LAYOUT_OFF);
+       lv_page_set_scrollable_fit2(list_page, LV_FIT_NONE, LV_FIT_TIGHT);
+       
+       lv_obj_t * scrl = lv_page_get_scrollable(list_page);
+       ancient_scrl_signal = lv_obj_get_signal_cb(scrl);
+       lv_obj_set_signal_cb(scrl, mmi_aigc_list_scrl_signal);
+       lv_watch_obj_add_element(list_page);
+       lv_watch_obj_add_element(scrl);
+
+       
+       mmi_aigc_msg_item_info_t * t_aigc_item_info = &(s_aigc_info_p->msg_item[0]);
+       char * file_buf = t_aigc_item_info->text_data_ptr;
+
+       lv_obj_t * obj = lv_cont_create(list_page, NULL);
+       lv_obj_set_size(obj, LV_HOR_RES - 20, 50);
+       lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
+       //lv_cont_set_layout(obj, LV_LAYOUT_COLUMN_LEFT);
+       lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(ext->style_cont_self));
+       lv_obj_align(obj, NULL, LV_ALIGN_IN_TOP_MID, 0, 20);            
+       
+       lv_obj_t * label_text = lv_label_create(obj, NULL);
+       lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(ext->style_label_len_self));
+       lv_label_set_align(label_text, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_long_mode(label_text, LV_LABEL_LONG_BREAK);
+       lv_obj_set_width(label_text, lv_obj_get_width(obj) - 20);
+       lv_label_set_text(label_text, file_buf);
+       lv_obj_align(label_text, NULL, LV_ALIGN_IN_LEFT_MID, 10, 0);
+
+       lv_obj_set_adv_hittest(obj, false);
+       lv_page_focus(list_page, obj, 0);
+       lv_page_glue_obj(obj, true);
+       lv_watch_obj_add_element(obj);
+
+
+       ext->gif_listening = gif_open(cont, ANIM_AIGC_LISTENING, 0);
+       if(NULL == ext->gif_listening) 
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
+       }
+       lv_obj_set_style_local_bg_color(ext->gif_listening->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       lv_obj_align(ext->gif_listening->container, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -LV_VER_RES / 4);
+
+       //label
+       //lv_obj_t * label_state = lv_label_create(cont, NULL);
+       //lv_obj_add_style(label_state, LV_LABEL_PART_MAIN, &lv_watch_font20);
+       //lv_label_set_text_id(label_state, WATCH_TEXT_ID_AIGC_LISTENING);
+       //lv_label_set_align(label_state, LV_LABEL_ALIGN_CENTER);
+       //lv_obj_align(label_state, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
+
+
+       lv_obj_set_hidden(ext->cont_default, true);
+       lv_obj_set_hidden(ext->cont_listening, true);
+       lv_obj_set_hidden(ext->cont_listening_middle, false);
+       lv_obj_set_hidden(ext->cont_thinking, true);
+       lv_obj_set_hidden(ext->cont_timeout, true);
+       lv_obj_set_hidden(ext->cont_list, true);
+}
+
 bool mmi_aigc_listening_stop(bool is_cancel)
 {
        uint32_t duration_ms = 0;
        uint32_t size = 0;
        
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
        Hal_Record_Buffer_Stop_Req(&size, &duration_ms);
     Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
        
@@ -1151,17 +1334,21 @@ void mmi_aigc_listening_screen_display(void)
 
        s_aigc_ui_state = MMI_AIGC_UI_STATE_LISTENING;
 
-       Hal_NFFS_File_Play_End();
-       Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
+       s_aigc_trans_text_end = false;
+       
+       // wb
+       mmi_aigc_tts_websocket_close();
+       mmi_aigc_trans_websocket_open();
        
-       // websocket
-       mmi_aigc_tts_websocket_app_stop();
-
        // res
        mmi_aigc_msg_data_clean(); 
        mmi_aigc_tts_audio_ll_clean();
        mmi_aigc_send_trans_start_msg(NULL, 0);
 
+       //
+       Hal_NFFS_File_Play_End();
+       Hal_Audio_Manage_End_Ind(MMI_AIGC_TTS_AUDIO_PRI);
+
        if(NULL != ext->record_buffer)
        {
                lv_mem_free(ext->record_buffer);
@@ -1170,10 +1357,14 @@ void mmi_aigc_listening_screen_display(void)
        ext->record_buffer = (uint8_t *)lv_mem_alloc(MMI_AIGC_DATA_RECORD_SIZE_MAX);
        if(NULL != ext->record_buffer)
        {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
                _lv_memset_00(ext->record_buffer, MMI_AIGC_DATA_RECORD_SIZE_MAX);
 
                if(MMI_AIGC_TTS_AUDIO_PRI == Hal_Audio_Manage_Start_Req(MMI_AIGC_TTS_AUDIO_PRI, mmi_aigc_listening_audio_ctrl_callback))
                {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+                       
                        s_aigc_recording_sent_size = 0;
                        Hal_Record_Buffer_With_Format_Req(ext->record_buffer,
                                                                                MMI_AIGC_DATA_RECORD_SIZE_MAX,
@@ -1185,6 +1376,12 @@ void mmi_aigc_listening_screen_display(void)
        
        // ui
        lv_obj_t * cont = ext->cont_listening;
+       if(NULL != ext->gif_listening)
+       {
+               gif_close(ext->gif_listening);
+               ext->gif_listening = NULL;
+       }
+       lv_obj_clean(cont);
        
        //label
        lv_obj_t * label_state = lv_label_create(cont, NULL);
@@ -1193,37 +1390,31 @@ void mmi_aigc_listening_screen_display(void)
        lv_label_set_align(label_state, LV_LABEL_ALIGN_CENTER);
        lv_obj_align(label_state, cont, LV_ALIGN_IN_TOP_MID, 0, 20);
 
-       //lv_obj_t * img = lv_img_create(cont, NULL);
-       //lv_img_set_src(img, ICON_AIGC_DEFAULT);
-       //lv_obj_set_click(img, false);
-       //lv_obj_align(img, NULL, LV_ALIGN_CENTER, 0, -10);
-       if(NULL == ext->gif_listening)
+       ext->gif_listening = gif_open(cont, ANIM_AIGC_LISTENING, 0);
+       if(NULL == ext->gif_listening) 
        {
-               ext->gif_listening = gif_open(cont, ANIM_AIGC_LISTENING, 0);
-               if(NULL == ext->gif_listening) 
-               {
-                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
-               }
-               lv_obj_set_style_local_bg_color(ext->gif_listening->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-               lv_obj_align(ext->gif_listening->container, NULL, LV_ALIGN_CENTER, 0, -10);
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
        }
-
-       lv_obj_t * imgbtn = lv_imgbtn_create(cont, NULL);
-       lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_AIGC_RECORD_BUTTON_PRESSED);
-       lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_AIGC_RECORD_BUTTON_PRESSED);
-       lv_obj_set_event_cb(imgbtn, mmi_aigc_record_button_event_cb);
-    lv_obj_add_protect(imgbtn, LV_PROTECT_PRESS_LOST);
-       lv_watch_obj_add_element(imgbtn);
-       lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
-
-       lv_obj_t * imgbtn_label = lv_label_create(imgbtn, NULL);
-       lv_obj_add_style(imgbtn_label, LV_LABEL_PART_MAIN, &lv_watch_font26);
-       lv_label_set_align(imgbtn_label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_text_id(imgbtn_label, WATCH_TEXT_ID_AIGC_TALK_FINISH);
-       lv_obj_align(imgbtn_label, NULL, LV_ALIGN_CENTER, 0, 0);        
+       lv_obj_set_style_local_bg_color(ext->gif_listening->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       lv_obj_align(ext->gif_listening->container, NULL, LV_ALIGN_CENTER, 0, 0);
+
+       //lv_obj_t * imgbtn = lv_imgbtn_create(cont, NULL);
+       //lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_AIGC_RECORD_BUTTON_PRESSED);
+       //lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_AIGC_RECORD_BUTTON_PRESSED);
+       //lv_obj_set_event_cb(imgbtn, mmi_aigc_record_button_event_cb);
+    //lv_obj_add_protect(imgbtn, LV_PROTECT_PRESS_LOST);
+       //lv_watch_obj_add_element(imgbtn);
+       //lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
+
+       //lv_obj_t * imgbtn_label = lv_label_create(imgbtn, NULL);
+       //lv_obj_add_style(imgbtn_label, LV_LABEL_PART_MAIN, &lv_watch_font26);
+       //lv_label_set_align(imgbtn_label, LV_LABEL_ALIGN_CENTER);
+       //lv_label_set_text_id(imgbtn_label, WATCH_TEXT_ID_AIGC_TALK_FINISH);
+       //lv_obj_align(imgbtn_label, NULL, LV_ALIGN_CENTER, 0, 0);
 
        lv_obj_set_hidden(ext->cont_default, true);
        lv_obj_set_hidden(ext->cont_listening, false);
+       lv_obj_set_hidden(ext->cont_listening_middle, true);
        lv_obj_set_hidden(ext->cont_thinking, true);
        lv_obj_set_hidden(ext->cont_timeout, true);
        lv_obj_set_hidden(ext->cont_list, true);
@@ -1256,10 +1447,10 @@ static void mmi_aigc_record_button_event_cb(lv_obj_t * obj, lv_event_t e)
                        mmi_aigc_main_screen_clean();
                        break;
 
-               case MMI_AIGC_UI_STATE_LISTENING:
-                       mmi_aigc_listening_stop(false);
-                       mmi_aigc_thinking_screen_display();
-                       break;
+               //case MMI_AIGC_UI_STATE_LISTENING:
+                       //mmi_aigc_listening_stop(false);
+                       //mmi_aigc_thinking_screen_display();
+                       //break;
 
                case MMI_AIGC_UI_STATE_THINKING:
                        mmi_aigc_thinking_screen_clean();
@@ -1278,48 +1469,14 @@ static void mmi_aigc_record_button_event_cb(lv_obj_t * obj, lv_event_t e)
        }
 }
 
-void mmi_aigc_voice_item_reset_play_state(lv_aigc_list_ext_t * list_page_ext)
-{
-       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-#if 0
-       if(NULL == list_page_ext || NULL == list_page_ext->voice_playing_anim.var) 
-       {
-               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               return;
-       }
-
-       uint8_t msg_from = list_page_ext->voice_playing_msg_from;
-       
-       lv_anim_del(list_page_ext->voice_playing_anim.var, NULL);
-       lv_img_set_src(list_page_ext->voice_playing_anim.var, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3));
-       list_page_ext->voice_playing_anim.var = NULL;
-#endif
-}
-
-void mmi_aigc_list_msg_item_style_reset(lv_aigc_ext_t * ext)
-{
-    if(NULL == ext || NULL == ext->list) 
-               return;
-
-       lv_aigc_list_ext_t * list_page_ext = lv_obj_get_ext_attr(ext->list);
-    if(NULL == list_page_ext) 
-               return;
-
-       lv_style_reset(&(list_page_ext->style_cont_self));
-       lv_style_reset(&(list_page_ext->style_cont_other));
-       //lv_style_reset(&(list_page_ext->style_label_time));
-       lv_style_reset(&(list_page_ext->style_label_len_self));
-       lv_style_reset(&(list_page_ext->style_label_len_other));
-}
-
 lv_obj_t * mmi_aigc_list_msg_item_add(lv_obj_t * list_page, mmi_aigc_msg_item_info_t * msg_item, char * time_str, uint8_t i)
 {
        AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
        lv_obj_t * obj = NULL;
        //lv_wechat_msg_list_item_ext_t * list_item_ext = NULL;
-       lv_aigc_list_ext_t * list_page_ext = lv_obj_get_ext_attr(list_page);
+       //lv_aigc_list_ext_t * list_page_ext = lv_obj_get_ext_attr(list_page);
+       lv_aigc_ext_t * ext = mmi_aigc_actId_ext_get(ACT_ID_AIGC_MAIN);
        lv_obj_t * scrl = lv_page_get_scrl(list_page);
        lv_obj_t * last_obj = lv_obj_get_child(scrl, NULL);
        lv_coord_t obj_y = 0;
@@ -1346,11 +1503,11 @@ lv_obj_t * mmi_aigc_list_msg_item_add(lv_obj_t * list_page, mmi_aigc_msg_item_in
                lv_obj_set_size(obj, LV_HOR_RES * 2 / 3, 50); //lv_obj_set_size(obj, 153, 53); // same with voice item
                lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
                //lv_cont_set_layout(obj, LV_LAYOUT_COLUMN_LEFT);
-               lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_self));
+               lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(ext->style_cont_self));
                lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_RIGHT, -10, obj_y);                     
                
                lv_obj_t * label_text = lv_label_create(obj, NULL);
-               lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(list_page_ext->style_label_len_self));
+               lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(ext->style_label_len_self));
                lv_label_set_align(label_text, LV_LABEL_ALIGN_CENTER);
                lv_label_set_long_mode(label_text, LV_LABEL_LONG_BREAK);
                lv_obj_set_width(label_text, lv_obj_get_width(obj) - 20);
@@ -1366,11 +1523,11 @@ lv_obj_t * mmi_aigc_list_msg_item_add(lv_obj_t * list_page, mmi_aigc_msg_item_in
            lv_obj_set_size(obj, LV_HOR_RES * 2 / 3, 50); //lv_obj_set_size(obj, 153, 53); // same with voice item
                lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
                //lv_cont_set_layout(obj, LV_LAYOUT_COLUMN_LEFT);
-               lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_other));
+               lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(ext->style_cont_other));
                lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_LEFT, 10, obj_y);                       
 
                lv_obj_t * label_text = lv_label_create(obj, NULL);
-               lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(list_page_ext->style_label_len_other));
+               lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(ext->style_label_len_other));
                lv_label_set_align(label_text, LV_LABEL_ALIGN_CENTER);
                lv_label_set_long_mode(label_text, LV_LABEL_LONG_BREAK);
                lv_obj_set_width(label_text, lv_obj_get_width(obj) - 20);
@@ -1388,7 +1545,7 @@ lv_obj_t * mmi_aigc_list_msg_item_add(lv_obj_t * list_page, mmi_aigc_msg_item_in
        return obj;
 }
 
-lv_res_t mmi_aigc_list_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
+static lv_res_t mmi_aigc_list_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
 {
     lv_res_t res;
 
@@ -1439,34 +1596,6 @@ lv_obj_t * mmi_aigc_list_create(lv_obj_t * obj)
        lv_watch_obj_add_element(list_page);
        lv_watch_obj_add_element(scrl);
 
-       //lv_style_init(&(list_page_ext->style_label_time));
-       //lv_style_copy(&(list_page_ext->style_label_time), &lv_watch_font20);
-       //lv_style_set_text_color(&(list_page_ext->style_label_time), LV_STATE_DEFAULT, lv_color_make(20, 187, 242));
-
-       lv_style_init(&(list_page_ext->style_label_len_other));
-       lv_style_copy(&(list_page_ext->style_label_len_other), &lv_watch_font20);
-       lv_style_set_text_color(&(list_page_ext->style_label_len_other), LV_STATE_DEFAULT, LV_COLOR_WHITE);
-
-       lv_style_init(&(list_page_ext->style_label_len_self));
-       lv_style_copy(&(list_page_ext->style_label_len_self), &lv_watch_font20);
-       lv_style_set_text_color(&(list_page_ext->style_label_len_self), LV_STATE_DEFAULT, LV_COLOR_WHITE);
-
-       lv_style_init(&(list_page_ext->style_cont_self));
-       lv_style_set_bg_color(&(list_page_ext->style_cont_self), LV_STATE_DEFAULT, LV_COLOR_MAKE(79, 195, 76)); // LV_COLOR_MAKE(175, 242, 89));
-       lv_style_set_radius(&(list_page_ext->style_cont_self), LV_STATE_DEFAULT, 15); // 30
-       lv_style_set_pad_top(&(list_page_ext->style_cont_self), LV_STATE_DEFAULT, 10); // 8
-       lv_style_set_pad_bottom(&(list_page_ext->style_cont_self), LV_STATE_DEFAULT, 10); // 8
-       lv_style_set_pad_left(&(list_page_ext->style_cont_self), LV_STATE_DEFAULT, 5); // 8
-       lv_style_set_pad_right(&(list_page_ext->style_cont_self), LV_STATE_DEFAULT, 5); // 8
-
-       lv_style_init(&(list_page_ext->style_cont_other));
-       lv_style_set_bg_color(&(list_page_ext->style_cont_other), LV_STATE_DEFAULT, LV_COLOR_MAKE(25, 25, 25)); // LV_COLOR_MAKE(0xE2, 0xBD, 0xFF));
-       lv_style_set_radius(&(list_page_ext->style_cont_other), LV_STATE_DEFAULT, 15);
-       lv_style_set_pad_top(&(list_page_ext->style_cont_other), LV_STATE_DEFAULT, 10);
-       lv_style_set_pad_bottom(&(list_page_ext->style_cont_other), LV_STATE_DEFAULT, 10);
-       lv_style_set_pad_left(&(list_page_ext->style_cont_other), LV_STATE_DEFAULT, 5);
-       lv_style_set_pad_right(&(list_page_ext->style_cont_other), LV_STATE_DEFAULT, 5);
-
        //_lv_memset_00(&(list_page_ext->voice_playing_anim), sizeof(lv_anim_t));
        //list_page_ext->voice_playing_msg_from = 0;
        list_page_ext->pressing = false;     
@@ -1529,6 +1658,7 @@ void mmi_aigc_list_screen_display(void)
 
        lv_obj_set_hidden(ext->cont_default, true);
        lv_obj_set_hidden(ext->cont_listening, true);
+       lv_obj_set_hidden(ext->cont_listening_middle, true);
        lv_obj_set_hidden(ext->cont_thinking, true);
        lv_obj_set_hidden(ext->cont_timeout, true);
        lv_obj_set_hidden(ext->cont_list, false);
@@ -1546,6 +1676,7 @@ static void mmi_aigc_default_screen_display(void)
 
        // ui
        lv_obj_t * cont = ext->cont_default;
+       lv_obj_clean(cont);
        
        lv_obj_t * label_state = lv_label_create(cont, NULL);
        lv_obj_add_style(label_state, LV_LABEL_PART_MAIN, &lv_watch_font20);
@@ -1574,6 +1705,7 @@ static void mmi_aigc_default_screen_display(void)
        
        lv_obj_set_hidden(ext->cont_default, false);
        lv_obj_set_hidden(ext->cont_listening, true);
+       lv_obj_set_hidden(ext->cont_listening_middle, true);
        lv_obj_set_hidden(ext->cont_thinking, true);
        lv_obj_set_hidden(ext->cont_timeout, true);
        lv_obj_set_hidden(ext->cont_list, true);
@@ -1636,7 +1768,6 @@ void mmi_aigc_main_screen_refresh(void)
                return;
        
        mmi_aigc_list_set_slide_enable(&ext->old_ext, true);
-       mmi_aigc_list_msg_item_style_reset(ext);
 
        if(NULL != ext->thinking_task_p)
        {
@@ -1709,10 +1840,6 @@ lv_obj_t * mmi_aigc_main_create(lv_obj_t * activity_obj)
         return obj;
     }
 
-       // websocket
-       mmi_aigc_trans_websocket_app_start();
-       mmi_aigc_chat_websocket_app_start();
-
        // data task
        mmi_aigc_data_task_create();
        watch_set_suspend_enable(false, ACT_ID_AIGC_MAIN, 0);
@@ -1733,6 +1860,14 @@ lv_obj_t * mmi_aigc_main_create(lv_obj_t * activity_obj)
        lv_watch_obj_add_element(cont_listening);
        ext->cont_listening = cont_listening;
 
+       // cont_listening middle
+       lv_obj_t * cont_listening_middle = lv_cont_create(obj, NULL);
+       lv_obj_set_size(cont_listening_middle, lv_obj_get_width(obj), lv_obj_get_height(obj));
+       lv_obj_align(cont_listening_middle, NULL, LV_ALIGN_CENTER, 0, 0);
+       lv_obj_set_style_local_bg_color(cont_listening_middle, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       lv_watch_obj_add_element(cont_listening_middle);
+       ext->cont_listening_middle = cont_listening_middle;
+
        // cont_thinking
        lv_obj_t * cont_thinking = lv_cont_create(obj, NULL);
        lv_obj_set_size(cont_thinking, lv_obj_get_width(obj), lv_obj_get_height(obj));
@@ -1757,6 +1892,9 @@ lv_obj_t * mmi_aigc_main_create(lv_obj_t * activity_obj)
        lv_watch_obj_add_element(cont_list);
        ext->cont_list = cont_list;
 
+       // style
+       mmi_aigc_lv_style_set();
+
        mmi_aigc_default_screen_display();
        
        return obj;
index b7ee5af..29c47e8 100644 (file)
@@ -94,11 +94,11 @@ typedef struct {
     //lv_anim_t voice_playing_anim;
        //uint8_t voice_playing_msg_from;               // 0-slef; 1-other
     bool pressing;
-    lv_style_t style_cont_self;
-    lv_style_t style_cont_other;
+    //lv_style_t style_cont_self;
+    //lv_style_t style_cont_other;
     //lv_style_t style_label_time;
-    lv_style_t style_label_len_other;
-    lv_style_t style_label_len_self;
+    //lv_style_t style_label_len_other;
+    //lv_style_t style_label_len_self;
 } lv_aigc_list_ext_t;
 
 typedef struct
@@ -108,11 +108,18 @@ typedef struct
        //TIMER_ID delete_timer_id;
        lv_obj_t * cont_default;
        lv_obj_t * cont_listening;
+       lv_obj_t * cont_listening_middle;
        lv_obj_t * cont_thinking;
        lv_obj_t * cont_timeout;
        lv_obj_t * cont_list;
        lv_obj_t * list; // chat list
 
+    lv_style_t style_cont_self;
+    lv_style_t style_cont_other;
+    //lv_style_t style_label_time;
+    lv_style_t style_label_len_other;
+    lv_style_t style_label_len_self;
+
     MCI_EVNET_T event;
        uint8_t * record_buffer;
        uint32_t record_size;
@@ -128,6 +135,7 @@ typedef enum
        MMI_AIGC_UI_STATE_NONE,
        MMI_AIGC_UI_STATE_OPEN_FAIL,
        MMI_AIGC_UI_STATE_LISTENING,
+       MMI_AIGC_UI_STATE_LISTENING_MIDDLE,
        MMI_AIGC_UI_STATE_THINKING,
        MMI_AIGC_UI_STATE_CONNECT_TIMEOUT,
        MMI_AIGC_UI_STATE_LIST,
@@ -141,7 +149,7 @@ void mmi_ui_msg_update_aigc_recv_chat_text_stop(void);
 
 
 char * mmi_aigc_trans_result_text_get(uint32_t * data_len);
-bool mmi_aigc_trans_result_text_store(char * data_buff, uint32_t data_len);
+bool mmi_aigc_trans_result_text_store(char * data_buff, uint32_t data_len, bool is_end);
 bool mmi_aigc_chat_result_text_store(char * data_buff, uint32_t data_len);
 void mmi_aigc_create_event_cb(lv_obj_t * btn, lv_event_t e);