beike
authorCCC <2393524978@qq.com>
Fri, 3 Nov 2023 01:53:01 +0000 (09:53 +0800)
committerCCC <2393524978@qq.com>
Fri, 3 Nov 2023 01:53:01 +0000 (09:53 +0800)
2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c
2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c
2.sdk/sdk/gui/lv_watch/include/ui_textid.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/bei_ke_rui_sheng.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/bei_ke_rui_sheng.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/bei_ke_rui_sheng_data.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/bei_ke_rui_sheng_socket.c

index 7880036..4f5f656 100644 (file)
@@ -886,6 +886,8 @@ const void * lang_text_ch[] = {
     "AI语音", // WATCH_TEXT_ID_AI_TALK,
     "请按住说话", // WATCH_TEXT_ID_PRESS_TO_TALK,
     "正在录音", // WATCH_TEXT_ID_AUDIO_RECORDING,
+    "正在获取结果", // WATCH_TEXT_ID_GETTING_RESULT,
+    "获取失败", // WATCH_TEXT_ID_GET_RESULT_FAIL,
 
 
     //CHENG_MODIFY
index 8f9c60d..92b0e7b 100644 (file)
@@ -886,6 +886,8 @@ const void * lang_text_en[] = {
     "AI talk", // WATCH_TEXT_ID_AI_TALK,
     "Press to talk", // WATCH_TEXT_ID_PRESS_TO_TALK,
     "Recording", // WATCH_TEXT_ID_AUDIO_RECORDING,
+    "Getting result", // WATCH_TEXT_ID_GETTING_RESULT,
+    "Get failed", // WATCH_TEXT_ID_GET_RESULT_FAIL,
 
 
     //CHENG_MODIFY
index 6cea8b1..5306284 100644 (file)
@@ -893,6 +893,8 @@ enum
     WATCH_TEXT_ID_AI_TALK,                              /* "AI语音"                 "AI talk" */
     WATCH_TEXT_ID_PRESS_TO_TALK,                        /* "请按住说话"                 "Press to talk" */
     WATCH_TEXT_ID_AUDIO_RECORDING,                      /* "正在录音"                 "Recording"*/
+    WATCH_TEXT_ID_GETTING_RESULT,                       /* "正在获取结果"             "Getting result"*/
+    WATCH_TEXT_ID_GET_RESULT_FAIL,                      /* "获取失败"                "Get failed"*/
 
 
     //CHENG_MODIFY
index c93635d..6f91782 100644 (file)
@@ -6,42 +6,46 @@
 #ifdef __MMI_CUSTOM_BEI_KE_RUI_SHENG__
 
 #define AI_TALK_AUDIO_FORMAT_TYPE      (7) // 3-amr
-#define AI_TALK_AUDIO_FORMAT_STR       (".wav") // ".amr"
+//#define AI_TALK_AUDIO_FORMAT_STR     (".wav") // ".amr"
 
 static lv_signal_cb_t ancient_scrl_signal;
 
-static uint8_t s_ai_talk_init_flag = 0;
-static nv_watch_wechat_msg_info_t * s_ai_talk_info = NULL;
-static nv_watch_wechat_msg_item_info_t s_ai_talk_item_info = {0};
+//static uint8_t s_ai_talk_init_flag = 0;
+//static mmi_ai_talk_msg_info_t * s_ai_talk_info = NULL;
+static mmi_ai_talk_msg_item_info_t s_ai_talk_item_info = {0};
 static uint8_t s_ai_talk_play_anim_count = 0;
-static char s_ai_talk_selected_item_index = -1;
+//static char s_ai_talk_selected_item_index = -1;
 static bool s_item_receive_playing = false;
 static uint32_t s_ai_talk_recording_sent_size = 0;
+static uint8_t s_ai_talk_sending_screen_counter = 0;
 
+static bool mmi_ai_talk_is_waiting_for_result(void);
+static void mmi_ai_talk_sending_screen_task_stop(void);
 
-void mmi_ai_talk_info_init(void)
-{
-       if(NULL == s_ai_talk_info)
-       {
-               uint32_t nv_data_length = sizeof(nv_watch_wechat_msg_info_t);
 
-               s_ai_talk_info = (nv_watch_wechat_msg_info_t *)lv_mem_alloc(nv_data_length);
-               if(NULL == s_ai_talk_info)
-               {
-                       printf("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
-                       return;
-               }
-               _lv_memset_00(s_ai_talk_info, nv_data_length);
-       }
-       else
+static void mmi_ai_talk_receive_item_info_clean(void)
+{
+       if(NULL != s_ai_talk_item_info.msg_data_ptr)
        {
-               //mmi_ai_talk_info_all_item_delete();
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               lv_mem_free(s_ai_talk_item_info.msg_data_ptr);
+               s_ai_talk_item_info.msg_data_ptr = NULL;
+               s_ai_talk_item_info.msg_data_size = 0;
        }
 }
 
 uint8_t mmi_ai_talk_info_count_get(void)
 {
-       uint8_t msg_count = s_ai_talk_info->msg_count;
+       uint8_t msg_count = 0;
+
+#if 1
+       if(NULL != s_ai_talk_item_info.msg_data_ptr)
+       {
+               msg_count = 1;
+       }
+#else
+       msg_count = s_ai_talk_info->msg_count;
+#endif
        
        return msg_count;
 }
@@ -49,23 +53,26 @@ uint8_t mmi_ai_talk_info_count_get(void)
 uint8_t mmi_ai_talk_info_index_item_msg_from_get(uint8_t msg_index)
 {
        // 0-slef; 1-other
-       uint8_t msg_from = s_ai_talk_info->msg_item[msg_index].msg_from;
+       uint8_t msg_from = 0;
+       
+       //msg_from = s_ai_talk_info->msg_item[msg_index].msg_from;
 
        return msg_from;
 }
 
-void mmi_ai_talk_info_index_item_get(uint8_t msg_index, nv_watch_wechat_msg_item_info_t ** msg_item)
+void mmi_ai_talk_info_index_item_get(uint8_t msg_index, mmi_ai_talk_msg_item_info_t ** msg_item)
 {
-       *msg_item = &(s_ai_talk_info->msg_item[msg_index]);
+       //*msg_item = &(s_ai_talk_info->msg_item[msg_index]);
 }
 
 void mmi_ai_talk_info_index_item_delete(uint8_t msg_index)
 {
+#if 0
        if(msg_index >= s_ai_talk_info->msg_count)
                return;
        
        uint8_t i = 0;
-       uint32_t msg_item_info_size = sizeof(nv_watch_wechat_msg_item_info_t);
+       uint32_t msg_item_info_size = sizeof(mmi_ai_talk_msg_item_info_t);
        
        lv_fs_remove(s_ai_talk_info->msg_item[msg_index].msg_data_full_file_name);
        _lv_memset_00(&(s_ai_talk_info->msg_item[msg_index]), msg_item_info_size);
@@ -78,12 +85,14 @@ void mmi_ai_talk_info_index_item_delete(uint8_t msg_index)
                }
        }
        s_ai_talk_info->msg_count--;
+#endif
 }
 
 void mmi_ai_talk_info_all_item_delete(void)
 {
+#if 0
        uint8_t i = 0;
-       uint32_t msg_item_info_size = sizeof(nv_watch_wechat_msg_item_info_t);
+       uint32_t msg_item_info_size = sizeof(mmi_ai_talk_msg_item_info_t);
        
        for(i = 0; i < s_ai_talk_info->msg_count; i++)
        {
@@ -91,21 +100,23 @@ void mmi_ai_talk_info_all_item_delete(void)
                _lv_memset_00(&(s_ai_talk_info->msg_item[i]), msg_item_info_size);
        }
        s_ai_talk_info->msg_count = 0;
+#endif
 }
 
-void mmi_ai_talk_info_new_item_add(nv_watch_wechat_msg_item_info_t * msg_item)
+void mmi_ai_talk_info_new_item_add(mmi_ai_talk_msg_item_info_t * msg_item)
 {
-       uint32_t msg_item_info_size = sizeof(nv_watch_wechat_msg_item_info_t);
+#if 0
+       uint32_t msg_item_info_size = sizeof(mmi_ai_talk_msg_item_info_t);
        
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
-       if(NV_WATCH_WECHAT_NUM_MAX <= s_ai_talk_info->msg_count)
+       if(MMI_AI_TALK_MSG_NUM_MAX <= s_ai_talk_info->msg_count)
        {
                lv_fs_remove(s_ai_talk_info->msg_item[0].msg_data_full_file_name);
                //_lv_memset_00(&(s_ai_talk_info->msg_item[0]), msg_item_info_size);
 
                uint8_t i = 0;
-               for(i = 0; i < NV_WATCH_WECHAT_NUM_MAX - 1; i++)
+               for(i = 0; i < MMI_AI_TALK_MSG_NUM_MAX - 1; i++)
                {
                        _lv_memcpy(&(s_ai_talk_info->msg_item[i]), &(s_ai_talk_info->msg_item[i + 1]), msg_item_info_size);
                }
@@ -116,6 +127,7 @@ void mmi_ai_talk_info_new_item_add(nv_watch_wechat_msg_item_info_t * msg_item)
        
        s_ai_talk_info->msg_count++;
        _lv_memcpy(&(s_ai_talk_info->msg_item[s_ai_talk_info->msg_count - 1]), msg_item, msg_item_info_size);
+#endif
 }
 
 void * mmi_ai_talk_actId_ext_get(lv_watch_Activity_Id_t actId)
@@ -152,6 +164,9 @@ void mmi_ai_talk_prepare_destory(lv_obj_t * activity_obj)
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
+       // close tcp
+       mmi_ai_talk_tcp_disconnect_msg(NULL);
+       
     lv_watch_png_cache_all_free();
 
        lv_ai_talk_ext_t * ext = mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
@@ -159,22 +174,23 @@ void mmi_ai_talk_prepare_destory(lv_obj_t * activity_obj)
                return ;
 
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       if(NULL != ext->delete_timer_id)
-       {
-               Hal_Timer_Stop(ext->delete_timer_id);
-               ext->delete_timer_id = NULL;
-       }
+       //if(NULL != ext->delete_timer_id)
+       //{
+       //      Hal_Timer_Stop(ext->delete_timer_id);
+       //      ext->delete_timer_id = NULL;
+       //}
 
-       mmi_ai_talk_voice_item_playing_stop(ext);
+       //mmi_ai_talk_voice_item_playing_stop(ext);
        mmi_ai_talk_list_msg_item_style_reset(ext);
 
+       // free buffer
+       mmi_ai_talk_receive_item_info_clean();
+       
        //
-       Hal_NFFS_File_Play_End();
+       //Hal_NFFS_File_Play_End();
        Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
-       Hal_Vibrator_Play_End();
+       //Hal_Vibrator_Play_End();
        s_item_receive_playing = false;
-
-       mmi_ai_talk_tcp_disconnect_msg(NULL);
        
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 }
@@ -195,6 +211,7 @@ bool mmi_ai_talk_voice_is_playing(void)
 {
        bool result = false;
        
+#if 0
        lv_ai_talk_ext_t * ext = mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
        if(NULL != ext && NULL != ext->list)
        {
@@ -204,6 +221,7 @@ bool mmi_ai_talk_voice_is_playing(void)
                        result = true;
                }
        }
+#endif
 
        return result;
 }
@@ -298,6 +316,8 @@ void mmi_ai_talk_receive_update_ui(void)
                        //Hal_Vibrator_Play_Onetime(NULL, 1000);
                }
        
+               mmi_ai_talk_sending_screen_exit();
+               
                if(lv_watch_get_activity_obj(ACT_ID_AI_TALK)) 
                {
                        mmi_ai_talk_main_screen_refresh();
@@ -322,7 +342,43 @@ bool mmi_ai_talk_receive_from_server(char * data_buff, int data_buff_len, nv_wec
                return false;
        }
        
-       nv_watch_wechat_msg_item_info_t mmi_ai_talk_item_info = {0};
+#if 1
+
+       if(false == mmi_ai_talk_is_waiting_for_result())
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       mmi_ai_talk_sending_screen_task_stop();
+       mmi_ai_talk_receive_item_info_clean();
+
+       uint32_t file_size = 0;
+       char * file_buf = NULL;
+
+       file_size = data_buff_len;
+       file_buf = lv_mem_alloc(file_size + 1);
+       if(NULL == file_buf)
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       _lv_memset_00(file_buf, file_size + 1);
+       _lv_memcpy(file_buf, data_buff, file_size);
+       s_ai_talk_item_info.msg_data_ptr = file_buf;
+       s_ai_talk_item_info.msg_data_size = file_size;
+       s_ai_talk_item_info.msg_type = type;
+       
+       printf("[@CHENG_DEBUG][%s][%d]: msg_data_size=%d,msg_data_ptr=0x%x\n", __FUNCTION__, __LINE__, s_ai_talk_item_info.msg_data_size, s_ai_talk_item_info.msg_data_ptr);
+
+       // ui
+       mmi_watch_wake_up();
+       mmi_ui_msg_action_ai_talk_incoming();
+
+       return true;
+
+#else
+
+       mmi_ai_talk_msg_item_info_t mmi_ai_talk_item_info = {0};
        hal_rtc_t cur_time = {0};
        char * t_file_ext[WECHAT_MSG_TYPE_MAX] = {AI_TALK_AUDIO_FORMAT_STR, "txt", "png", "png"}; // match nv_wechat_msg_type_e
        
@@ -333,7 +389,7 @@ bool mmi_ai_talk_receive_from_server(char * data_buff, int data_buff_len, nv_wec
        s_ai_talk_item_info.unread_flag = 1;
        s_ai_talk_item_info.msg_type = type; // WECHAT_MSG_TYPE_VOICE;
        s_ai_talk_item_info.msg_data_size = data_buff_len;
-       sprintf(s_ai_talk_item_info.msg_data_full_file_name, "C:/wechat_r%04d%02d%02d_%02d%02d%02d.%s", /*WECHAT_MSG_DATA_FILE_PATH, */
+       sprintf(s_ai_talk_item_info.msg_data_full_file_name, "C:/aitalk_r%04d%02d%02d_%02d%02d%02d.%s", /*WECHAT_MSG_DATA_FILE_PATH, */
                        s_ai_talk_item_info.msg_time.tm_year,
                        s_ai_talk_item_info.msg_time.tm_mon,
                        s_ai_talk_item_info.msg_time.tm_mday,
@@ -348,11 +404,11 @@ bool mmi_ai_talk_receive_from_server(char * data_buff, int data_buff_len, nv_wec
                return false;
        }
 
-//     lv_ai_talk_ext_t * ext = mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
-//     if(NULL != ext) 
-//     {
-//             mmi_ai_talk_voice_item_playing_stop(ext);
-//     }
+       lv_ai_talk_ext_t * ext = mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
+       if(NULL != ext) 
+       {
+               mmi_ai_talk_voice_item_playing_stop(ext);
+       }
        
        mmi_ai_talk_info_new_item_add(&s_ai_talk_item_info);
 
@@ -374,6 +430,7 @@ bool mmi_ai_talk_receive_from_server(char * data_buff, int data_buff_len, nv_wec
        }
 
        return true;
+#endif
 }
 
 bool mmi_ai_talk_send_to_server(void)
@@ -492,199 +549,26 @@ bool mmi_ai_talk_send_to_server(void)
        }
        
        lv_mem_free(file_buf);
-       _lv_memset_00(&s_ai_talk_item_info, sizeof(nv_watch_wechat_msg_item_info_t));
+       _lv_memset_00(&s_ai_talk_item_info, sizeof(mmi_ai_talk_msg_item_info_t));
 #endif
 
        return result;
 }
 
-void mmi_ai_talk_item_delete_success_timer_cb(void *para)
-{
-       //lv_ai_talk_ext_t * ext = (lv_ai_talk_ext_t *)para;
-
-       mmi_ai_talk_main_screen_refresh();
-}
-
-void mmi_ai_talk_item_delete_ok_btn_event_cb(lv_obj_t * obj, lv_event_t e)
-{
-       if(LV_EVENT_CLICKED == e)
-       {
-               lv_ai_talk_ext_t * ext = (lv_ai_talk_ext_t *)mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
-               if(NULL != ext && NULL != ext->delete_bg)
-               {
-                       uint32_t value = lv_watch_get_free_num(obj);
-                       if(0 == value)
-                               mmi_ai_talk_info_index_item_delete(s_ai_talk_selected_item_index);
-                       else if(1 == value)
-                               mmi_ai_talk_info_all_item_delete();
-                       
-                       lv_obj_clean(ext->delete_bg);
-
-                       lv_obj_t * label_prompt = lv_label_create(ext->delete_bg, NULL);
-                       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
-                       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_DEL_SUCCESS);
-                       lv_obj_align(label_prompt, ext->delete_bg, LV_ALIGN_CENTER, 0, -10);
-                       
-                       //ext->delete_timer_id = Hal_Timer_Start(1500, mmi_ai_talk_item_delete_success_timer_cb, ext, false);
-                       ext->delete_timer_id = Hal_Timer_Start(1500, mmi_ai_talk_item_delete_success_timer_cb, NULL, false);
-               }
-       }
-}
-
-void mmi_ai_talk_item_delete_cancel_btn_event_cb(lv_obj_t * obj, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED == e) 
-       {
-               lv_ai_talk_ext_t * ext = (lv_ai_talk_ext_t *)mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
-               if(NULL != ext && NULL != ext->delete_bg)
-               {
-                       lv_obj_del(ext->delete_bg);
-                       ext->delete_bg = NULL;
-               }
-    }
-}
-
-void mmi_ai_talk_item_delete_select_btn_event_cb(lv_obj_t * obj, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e)
-       {
-               return;
-       }
-       
-       lv_ai_talk_ext_t * ext = (lv_ai_talk_ext_t *)mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
-       if(NULL != ext)
-       {
-               uint32_t value = lv_watch_get_free_num(obj);
-               
-               lv_obj_set_hidden(ext->delete_current, true);
-               lv_obj_set_hidden(ext->delete_all, true);
-               lv_obj_set_hidden(ext->delete_back, true);
-
-               lv_obj_set_hidden(ext->delete_label_prompt, false);
-               lv_obj_set_hidden(ext->delete_btn_cancel, false);
-               lv_obj_set_hidden(ext->delete_btn_ok, false);
-               lv_watch_set_free_num(ext->delete_btn_ok, value);
-       }
-}
-
-void mmi_ai_talk_list_msg_item_delete_create(void)
+void mmi_ai_talk_sending_screen_prepare_destory(lv_obj_t * activity_obj)
 {
-       lv_ai_talk_ext_t * ext = (lv_ai_talk_ext_t *)mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
-       if(NULL != ext && NULL != ext->cont)
-       {
-               ext->delete_bg = lv_cont_create(ext->cont, NULL);
-        lv_obj_set_size(ext->delete_bg, LV_HOR_RES, LV_VER_RES);
-        lv_obj_set_style_local_bg_color(ext->delete_bg, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0xB6, 0xF7, 0xFF));
-
-               // current
-           lv_obj_t * btn_delete_current = lv_cont_create(ext->delete_bg, NULL);
-           lv_obj_set_size(btn_delete_current, LV_HOR_RES - 40, 56);
-           lv_obj_set_style_local_bg_color(btn_delete_current, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xB9, 0x86, 0xFF));
-           lv_obj_set_style_local_radius(btn_delete_current, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 10);
-               lv_obj_set_click(btn_delete_current, true);
-           lv_obj_set_event_cb(btn_delete_current, mmi_ai_talk_item_delete_select_btn_event_cb);
-           lv_obj_align(btn_delete_current, NULL, LV_ALIGN_IN_TOP_MID, 0, 40);
-               lv_watch_set_free_num(btn_delete_current, 0);
-               ext->delete_current = btn_delete_current;
-
-           lv_obj_t * label_delete_current = lv_label_create(btn_delete_current, NULL);
-           lv_obj_add_style(label_delete_current, LV_LABEL_PART_MAIN, &lv_watch_font26);
-           lv_label_set_text_id(label_delete_current, WATCH_TEXT_ID_DELETE_CURRENT_ITEM);
-               lv_label_set_align(label_delete_current, LV_LABEL_ALIGN_CENTER);
-           lv_obj_align(label_delete_current, btn_delete_current, LV_ALIGN_CENTER, 0, 0);
-
-               // all
-           lv_obj_t * btn_delete_all = lv_cont_create(ext->delete_bg, btn_delete_current);
-           lv_obj_set_style_local_bg_color(btn_delete_all, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xFF, 0x6F, 0x91));
-           lv_obj_align(btn_delete_all, btn_delete_current, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-               lv_watch_set_free_num(btn_delete_all, 1);
-               ext->delete_all = btn_delete_all;
-
-           lv_obj_t * label_delete_all = lv_label_create(btn_delete_all, NULL);
-           lv_obj_add_style(label_delete_all, LV_LABEL_PART_MAIN, &lv_watch_font26);
-           lv_label_set_text_id(label_delete_all, WATCH_TEXT_ID_DELETE_ALL_ITEM);
-               lv_label_set_align(label_delete_all, LV_LABEL_ALIGN_CENTER);
-           lv_obj_align(label_delete_all, btn_delete_all, LV_ALIGN_CENTER, 0, 0);
-
-               // back
-           lv_obj_t * btn_delete_back = lv_cont_create(ext->delete_bg, btn_delete_current);
-               lv_obj_set_style_local_bg_color(btn_delete_back, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
-           lv_obj_set_event_cb(btn_delete_back, mmi_ai_talk_item_delete_cancel_btn_event_cb);
-           lv_obj_align(btn_delete_back, btn_delete_all, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-               ext->delete_back = btn_delete_back;
-
-           lv_obj_t * label_delete_back = lv_label_create(btn_delete_back, NULL);
-           lv_obj_add_style(label_delete_back, LV_LABEL_PART_MAIN, &lv_watch_font26);
-           lv_label_set_text_id(label_delete_back, WATCH_TEXT_ID_CANCEL);
-               lv_label_set_align(label_delete_back, LV_LABEL_ALIGN_CENTER);
-           lv_obj_align(label_delete_back, btn_delete_back, LV_ALIGN_CENTER, 0, 0);
-
-
-           lv_obj_t * label_prompt = lv_label_create(ext->delete_bg, NULL);
-           lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
-               lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_DEL_Q);
-           lv_obj_align(label_prompt, ext->delete_bg, LV_ALIGN_CENTER, 0, -30);
-               ext->delete_label_prompt = label_prompt;
-
-           lv_obj_t * btn_cancel = lv_btn_create(ext->delete_bg, NULL);
-           lv_obj_set_size(btn_cancel, 100, 56);
-           lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0x47, 0xA6, 0xFF));
-           lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
-           lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0x47, 0xA6, 0xFF));
-           lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
-           lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10, -20);
-           lv_obj_set_event_cb(btn_cancel, mmi_ai_talk_item_delete_cancel_btn_event_cb);
-               ext->delete_btn_cancel = btn_cancel;
-
-           lv_obj_t * label_cancel = lv_label_create(btn_cancel, NULL);
-           lv_obj_add_style(label_cancel, LV_LABEL_PART_MAIN, &lv_watch_font26);
-           lv_label_set_text_id(label_cancel, WATCH_TEXT_ID_CANCEL);
-
-           lv_obj_t * btn_ok = lv_btn_create(ext->delete_bg, btn_cancel);
-           lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0xFF, 0x6F, 0x91));
-           lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0xFF, 0x6F, 0x91));
-           lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -20);
-           lv_obj_set_event_cb(btn_ok, mmi_ai_talk_item_delete_ok_btn_event_cb);
-               ext->delete_btn_ok = btn_ok;
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
-           lv_obj_t * label_ok = lv_label_create(btn_ok, label_cancel);
-           lv_label_set_text_id(label_ok, WATCH_TEXT_ID_OK);
+    lv_watch_png_cache_all_free();
 
-               // display
-               lv_obj_set_hidden(label_prompt, true);
-               lv_obj_set_hidden(btn_cancel, true);
-               lv_obj_set_hidden(btn_ok, true);
-       }
-}
+       mmi_ai_talk_sending_screen_task_stop();
 
-void mmi_ai_talk_sending_anim_cb(lv_anim_t * a)
-{
-    lv_obj_t * img = a->var;
-
-    switch(s_ai_talk_play_anim_count % 3) 
-       {
-        case 0:
-            lv_img_set_src(img, ICON_WECHAT_SENDING_PROMPT1);
-            break;
-                       
-        case 1:
-            lv_img_set_src(img, ICON_WECHAT_SENDING_PROMPT2);
-            break;
-                       
-        case 2:
-            lv_img_set_src(img, ICON_WECHAT_SENDING_PROMPT3);
-            break;
-                       
-        default:
-            break;
-    }
-       s_ai_talk_play_anim_count++;
+       watch_set_suspend_enable(true, ACT_ID_AI_TALK_SENDING, 0);
+       watch_wakeup_time_reset();
 }
 
-void mmi_ai_talk_sending_result_screen_timeout(void *para)
+void mmi_ai_talk_sending_screen_exit(void)
 {
-       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
        mmi_ai_talk_sending_screen_prepare_destory(NULL);
 
        //delete sending screen
@@ -695,58 +579,77 @@ void mmi_ai_talk_sending_result_screen_timeout(void *para)
                printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                lv_obj_del(obj);
        }
+}
+
+void mmi_ai_talk_sending_fail_screen_exit(void)
+{
+       mmi_ai_talk_sending_screen_exit();
        
        //return main list screen
        mmi_ai_talk_main_screen_refresh();
 }
 
-void mmi_ai_talk_sending_screen_timeout(void *para)
-{
-       lv_ai_talk_sending_ext_t * sending_ext = (lv_ai_talk_sending_ext_t *)para;
 
-       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-       if(NULL != sending_ext->sending_timer_id)
-       {
-               Hal_Timer_Stop(sending_ext->sending_timer_id);
-               sending_ext->sending_timer_id = NULL;
-       }
+#define TIMEOUT_SEND_END_CHAR_COUNT    (3) // 500ms *3
+#define TIMEOUT_WAIT_FOR_RESULT_COUNT  (19) // 500ms *3 + 500ms * 16
+#define TIMEOUT_GET_RESULT_FAIL_COUNT  (22) // 500ms *3 + 500ms * 16 + 500ms * 3
 
-    if(NULL != sending_ext->sending_anim.var)
+static bool mmi_ai_talk_is_waiting_for_result(void)
+{
+       bool result = false;
+
+       printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_ai_talk_sending_screen_counter);
+       if(TIMEOUT_SEND_END_CHAR_COUNT < s_ai_talk_sending_screen_counter
+               && TIMEOUT_WAIT_FOR_RESULT_COUNT > s_ai_talk_sending_screen_counter
+               )
        {
-               lv_obj_t * img_bkg = lv_obj_get_parent(sending_ext->sending_anim.var);
-               lv_img_set_src(img_bkg, ((true == sending_ext->send_result) ? ICON_WECHAT_SENDING_SUCC : ICON_WECHAT_SENDING_FAILED));
-               
-               lv_anim_del(sending_ext->sending_anim.var, NULL);
-               lv_obj_del(sending_ext->sending_anim.var);
-               sending_ext->sending_anim.var = NULL;
+               result = true;
        }
 
-       sending_ext->result_timer_id = Hal_Timer_Start(1500, mmi_ai_talk_sending_result_screen_timeout, sending_ext, FALSE);
+       return result;
 }
 
-void mmi_ai_talk_sending_screen_prepare_destory(lv_obj_t * activity_obj)
+static void mmi_ai_talk_sending_screen_task_stop(void)
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-       mmi_ai_talk_audio_data_send_end_char();
-       
-    lv_watch_png_cache_all_free();
-
+               
        lv_ai_talk_sending_ext_t * sending_ext = (lv_ai_talk_sending_ext_t *)mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK_SENDING);
        if(NULL != sending_ext)
        {
-               if(NULL != sending_ext->sending_timer_id)
-               {
-                       Hal_Timer_Stop(sending_ext->sending_timer_id);
-                       sending_ext->sending_timer_id = NULL;
-               }
-               if(NULL != sending_ext->result_timer_id)
+               if(NULL != sending_ext->sending_screen_task_id)
                {
-                       Hal_Timer_Stop(sending_ext->result_timer_id);
-                       sending_ext->result_timer_id = NULL;
+                       lv_task_del(sending_ext->sending_screen_task_id);
+                       sending_ext->sending_screen_task_id = NULL;
                }
        }
+       s_ai_talk_sending_screen_counter = 0;
+}
+
+void mmi_ai_talk_sending_screen_task_cb(lv_task_t * task)
+{
+       s_ai_talk_sending_screen_counter++;
+       printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_ai_talk_sending_screen_counter);
+       
+       switch(s_ai_talk_sending_screen_counter)
+       {
+               case TIMEOUT_SEND_END_CHAR_COUNT:
+                       mmi_ai_talk_audio_data_send_end_char();
+                       break;
+
+               case TIMEOUT_WAIT_FOR_RESULT_COUNT:
+                       lv_ai_talk_sending_ext_t * sending_ext = (lv_ai_talk_sending_ext_t *)(task->user_data);
+                       
+                       lv_obj_set_hidden(sending_ext->label_sending, true);
+                       lv_obj_set_hidden(sending_ext->label_result, false);
+                       break;
+
+               case TIMEOUT_GET_RESULT_FAIL_COUNT:
+                       mmi_ai_talk_sending_fail_screen_exit();
+                       break;
+
+               default:
+                       break;
+       }
 }
 
 lv_obj_t * mmi_ai_talk_sending_screen_create(lv_obj_t * activity_obj)
@@ -773,34 +676,29 @@ lv_obj_t * mmi_ai_talk_sending_screen_create(lv_obj_t * activity_obj)
                return NULL;
                
        mmi_ai_talk_list_set_slide_enable(&sending_ext->old_ext, false); /*prevent to slide out while recording*/
-       _lv_memset_00(&(sending_ext->sending_anim), sizeof(lv_anim_t));
-       sending_ext->send_result = mmi_ai_talk_send_to_server();
-       sending_ext->sending_timer_id = Hal_Timer_Start(1000 * 3, mmi_ai_talk_sending_screen_timeout, sending_ext, FALSE);
-       sending_ext->result_timer_id = NULL;
-
-    lv_obj_t * img_bkg = lv_img_create(obj, NULL);
-    lv_img_set_src(img_bkg, ICON_WECHAT_SENDING_BG);
-    lv_obj_align(img_bkg, obj, LV_ALIGN_CENTER, 0, 0);
-
-    lv_obj_t * img_sending = lv_img_create(img_bkg, NULL);
-    lv_img_set_src(img_sending, ICON_WECHAT_SENDING_PROMPT3);
-#if USE_LV_WATCH_UI_240_320
-       lv_obj_align(img_sending, img_bkg, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
-#elif USE_LV_WATCH_UI_240_280
-    lv_obj_align(img_sending, img_bkg, LV_ALIGN_IN_BOTTOM_MID, 0, -40);
-#else
-    lv_obj_align(img_sending, img_bkg, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
-#endif
 
-       lv_anim_t * a = &(sending_ext->sending_anim);
-    lv_anim_init(a);
-    lv_anim_set_var(a, img_sending);
-    //lv_anim_set_exec_cb(a, (lv_anim_exec_xcb_t)wechat_msg_sending_anim_exec_cb);
-    lv_anim_set_start_cb(a, (lv_anim_ready_cb_t)mmi_ai_talk_sending_anim_cb);
-    lv_anim_set_repeat_count(a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(a, 500);
-    lv_anim_start(a);
-       s_ai_talk_play_anim_count = 0;
+       mmi_ai_talk_send_to_server();
+       s_ai_talk_sending_screen_counter = 0;
+       sending_ext->sending_screen_task_id = lv_task_create(mmi_ai_talk_sending_screen_task_cb, 500, LV_TASK_PRIO_HIGH, sending_ext);
+
+    lv_obj_t * cont = lv_cont_create(obj, NULL);
+    lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
+    lv_obj_align(cont, obj, LV_ALIGN_CENTER, 0, 0);
+    lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(194, 252, 252));
+       
+       sending_ext->label_sending = lv_label_create(cont, NULL);
+       lv_obj_add_style(sending_ext->label_sending, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
+       lv_label_set_text_id(sending_ext->label_sending, WATCH_TEXT_ID_GETTING_RESULT);
+       lv_obj_align(sending_ext->label_sending, NULL, LV_ALIGN_CENTER, 0, -10);
+
+       sending_ext->label_result = lv_label_create(cont, sending_ext->label_sending);
+       lv_label_set_text_id(sending_ext->label_result, WATCH_TEXT_ID_GET_RESULT_FAIL);
+       lv_obj_align(sending_ext->label_result, NULL, LV_ALIGN_CENTER, 0, -10);
+
+       lv_obj_set_hidden(sending_ext->label_sending, false);
+       lv_obj_set_hidden(sending_ext->label_result, true);
+       
+       watch_set_suspend_enable(false, ACT_ID_AI_TALK_SENDING, 0);
 
     return obj;
 }
@@ -1038,16 +936,6 @@ lv_obj_t * mmi_ai_talk_recording_screen_create(lv_obj_t * activity_obj)
     //lv_obj_set_click(cont, true);
     //lv_obj_set_event_cb(cont, mmi_ai_talk_recording_release_event_cb);       
     //lv_obj_add_protect(cont, LV_PROTECT_PRESS_LOST);
-       
-    //lv_obj_t * label_warning = lv_label_create(cont, NULL);
-    //lv_obj_set_style_local_text_font(label_warning, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_FONT_SMALL);
-    //lv_obj_set_style_local_text_color(label_warning, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED);
-       //lv_obj_add_style(label_warning, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
-    //lv_label_set_long_mode(label_warning, LV_LABEL_LONG_BREAK);
-    //lv_obj_set_width(label_warning, lv_obj_get_width(obj) * 2 / 3);
-    //lv_label_set_text_id(label_warning, WATCH_TEXT_ID_SLIDE_UP_WARNING);
-    //lv_label_set_align(label_warning, LV_LABEL_ALIGN_CENTER);
-    //lv_obj_align(label_warning, cont, LV_ALIGN_IN_TOP_MID, 0, 50);
 
     lv_obj_t * label_time = lv_label_create(cont, NULL);
     lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
@@ -1090,12 +978,8 @@ lv_obj_t * mmi_ai_talk_recording_screen_create(lv_obj_t * activity_obj)
 
                if(AUDIO_CTRL_PRIORITY_5 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_5, mmi_ai_talk_recording_audio_ctrl_callback))
                {
-                       //Hal_Record_Buffer_Start_Req(ext->record_buffer,
-                       //                                                      MMI_AI_TALK_DATA_RECORD_SIZE_MAX,
-                       //                                                      MMI_AI_TALK_DATA_RECORD_DURATION_MAX * 1000,
-                       //                                                      mmi_ai_talk_recording_cb);
-
                        s_ai_talk_recording_sent_size = 0;
+                       
                        Hal_Record_Buffer_With_Format_Req(ext->record_buffer,
                                                                                MMI_AI_TALK_DATA_RECORD_SIZE_MAX,
                                                                                MMI_AI_TALK_DATA_RECORD_DURATION_MAX * 1000,
@@ -1192,6 +1076,7 @@ void mmi_ai_talk_voice_item_reset_play_state(lv_ai_talk_list_ext_t * list_page_e
 {
        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__);
@@ -1203,14 +1088,14 @@ void mmi_ai_talk_voice_item_reset_play_state(lv_ai_talk_list_ext_t * list_page_e
        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_ai_talk_voice_item_playing_stop(lv_ai_talk_ext_t * ext)
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       return;
        
-/*
+#if 0
     if(NULL == ext || NULL == ext->list) 
        {
                printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
@@ -1227,7 +1112,7 @@ void mmi_ai_talk_voice_item_playing_stop(lv_ai_talk_ext_t * ext)
        Hal_File_Play_End();
        Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
        mmi_ai_talk_voice_item_reset_play_state(list_page_ext);
-*/
+#endif
 }
 
 void mmi_ai_talk_list_msg_item_style_reset(lv_ai_talk_ext_t * ext)
@@ -1241,8 +1126,7 @@ void mmi_ai_talk_list_msg_item_style_reset(lv_ai_talk_ext_t * ext)
 
        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_text));
+       //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));
 }
@@ -1251,6 +1135,7 @@ void mmi_ai_talk_list_msg_item_time(char * time_str, hal_rtc_t * cur_time, hal_r
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
+#if 0
     if(0 == last_msg_time->tm_year) 
        {
         sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon, msg_time->tm_mday, 
@@ -1342,10 +1227,12 @@ void mmi_ai_talk_list_msg_item_time(char * time_str, hal_rtc_t * cur_time, hal_r
             }
         }
     }
+#endif
 }
 
 void mmi_ai_talk_list_voice_item_playing_anim_cb(lv_anim_t * a)
 {
+#if 0
     lv_obj_t * play_img = (lv_obj_t *)a->var;
        uint8_t msg_from = mmi_ai_talk_info_index_item_msg_from_get(s_ai_talk_selected_item_index);
 
@@ -1369,12 +1256,14 @@ void mmi_ai_talk_list_voice_item_playing_anim_cb(lv_anim_t * a)
                        break;
        }
        s_ai_talk_play_anim_count++;
+#endif
 }
 
 void mmi_ai_talk_list_voice_item_playing_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
 {
        printf("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
        
+#if 0
     if(AUDIO_CTRL_PRIORITY_5 == priority)
     {
         if(false == watch_is_ready()) 
@@ -1391,12 +1280,14 @@ void mmi_ai_talk_list_voice_item_playing_audio_ctrl_callback(AUDIO_CTRL_PRIORITY
                        mmi_ai_talk_voice_item_playing_stop(ext);
                }
     }
+#endif
 }
 
 void mmi_ai_talk_list_voice_item_play_over_cb(void * para)
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
+#if 0
     Hal_File_Play_End();
     Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
        
@@ -1407,12 +1298,14 @@ void mmi_ai_talk_list_voice_item_play_over_cb(void * para)
                return;
     }
        mmi_ai_talk_voice_item_reset_play_state(list_page_ext);   
+#endif
 }
 
 void mmi_ai_talk_list_voice_item_play_action(lv_ai_talk_list_ext_t * list_page_ext, lv_obj_t * play_img, lv_obj_t * unread_img)
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
+#if 0
        //display ui
        lv_anim_t * a = &(list_page_ext->voice_playing_anim);
 
@@ -1424,7 +1317,7 @@ void mmi_ai_talk_list_voice_item_play_action(lv_ai_talk_list_ext_t * list_page_e
        lv_anim_start(a);
        s_ai_talk_play_anim_count = 1;
 
-       nv_watch_wechat_msg_item_info_t * msg_item = NULL;
+       mmi_ai_talk_msg_item_info_t * msg_item = NULL;
        mmi_ai_talk_info_index_item_get(s_ai_talk_selected_item_index, &msg_item);
        msg_item->unread_flag = 0;
        if(NULL != unread_img) 
@@ -1440,10 +1333,12 @@ void mmi_ai_talk_list_voice_item_play_action(lv_ai_talk_list_ext_t * list_page_e
                printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                Hal_File_Play_Onetime(msg_item->msg_data_full_file_name, query_current_volume(), mmi_ai_talk_list_voice_item_play_over_cb, list_page_ext, 0);
        }
+#endif
 }
 
 void mmi_ai_talk_list_voice_item_event_cb(lv_obj_t * cont, lv_event_t e)
 {
+#if 0
        lv_ai_talk_list_item_ext_t * list_item_ext = (lv_ai_talk_list_item_ext_t *)lv_obj_get_ext_attr(cont);
        if(NULL == list_item_ext)
                return;
@@ -1472,7 +1367,7 @@ void mmi_ai_talk_list_voice_item_event_cb(lv_obj_t * cont, lv_event_t e)
        {
                list_page_ext->pressing = false;
                
-               nv_watch_wechat_msg_item_info_t * msg_item = NULL;
+               mmi_ai_talk_msg_item_info_t * msg_item = NULL;
                mmi_ai_talk_info_index_item_get(s_ai_talk_selected_item_index, &msg_item);
 
                if(0 != msg_item->msg_data_size)
@@ -1495,10 +1390,12 @@ void mmi_ai_talk_list_voice_item_event_cb(lv_obj_t * cont, lv_event_t e)
                }               
                }
     }
+#endif
 }
 
 void mmi_ai_talk_list_text_item_event_cb(lv_obj_t * cont, lv_event_t e)
 {
+#if 0
        lv_ai_talk_list_item_ext_t * list_item_ext = (lv_ai_talk_list_item_ext_t *)lv_obj_get_ext_attr(cont);
        if(NULL == list_item_ext)
                return;
@@ -1527,10 +1424,11 @@ void mmi_ai_talk_list_text_item_event_cb(lv_obj_t * cont, lv_event_t e)
        {
                list_page_ext->pressing = false;
     }
+#endif
 }
 
 //display time & content
-lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_msg_item_info_t * msg_item, char * time_str, uint8_t i)
+lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, mmi_ai_talk_msg_item_info_t * msg_item, char * time_str, uint8_t i)
 {
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
@@ -1541,6 +1439,9 @@ lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_m
        lv_obj_t * last_obj = lv_obj_get_child(scrl, NULL);
        lv_coord_t obj_y = 0;
        
+       #if 1
+       obj_y = lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
+       #else
        if(NULL != last_obj) 
        {
                obj_y = lv_obj_get_y(last_obj) + lv_obj_get_height(last_obj) + lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
@@ -1565,10 +1466,14 @@ lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_m
        
        printf("[@CHENG_DEBUG][%s][%d]: msg_type=%d,file=%s,size=%d,obj_y=%d\n", __FUNCTION__, __LINE__, 
                                        msg_item->msg_type, msg_item->msg_data_full_file_name, msg_item->msg_data_size, obj_y);
+       #endif
+       printf("[@CHENG_DEBUG][%s][%d]: msg_type=%d,obj_y=%d,size=%d,buf=0x%x\n", __FUNCTION__, __LINE__, 
+                                       msg_item->msg_type, obj_y, msg_item->msg_data_size, msg_item->msg_data_ptr);
        
        switch(msg_item->msg_type)
        {
                case WECHAT_MSG_TYPE_VOICE:
+                       #if 0
                        lv_obj_t * unread_img = lv_img_create(list_page, NULL);
                        //obj = lv_img_create(list_page, NULL);
                        obj = lv_cont_create(list_page, NULL);
@@ -1652,13 +1557,16 @@ lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_m
                        lv_page_focus(list_page, obj, 0);
                        lv_page_glue_obj(obj, true);
                        lv_watch_obj_add_element(obj);
+                       #endif
                        break;
                        
                case WECHAT_MSG_TYPE_TEXT:
                        obj = lv_cont_create(list_page, NULL);
+                       #if 0
                        list_item_ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_ai_talk_list_item_ext_t));
                        list_item_ext->item_index = i;
                        list_item_ext->unread_img = NULL;
+                       #endif
                        #if 1
                    lv_obj_set_size(obj, LV_HOR_RES - 30, 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);
@@ -1673,6 +1581,11 @@ lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_m
                        lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_LEFT, 10, obj_y);                       
                        #endif
 
+                       #if 1
+                       uint32_t file_size = msg_item->msg_data_size;
+                       char * file_buf = msg_item->msg_data_ptr;
+                       
+                       #else
                        lv_fs_file_t file_p;
                        lv_fs_res_t res;
                        uint32_t file_size = 0, bytes_read = 0;
@@ -1698,6 +1611,7 @@ lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_m
                                break;
                        }
                        printf("[@CHENG_DEBUG][%s][%d]: %d,%d,%s\n", __FUNCTION__, __LINE__, file_size, bytes_read, file_buf);
+                       #endif
                        
                        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));
@@ -1707,14 +1621,18 @@ lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_m
                        lv_label_set_text(label_text, file_buf);
                        lv_obj_align(label_text, obj, LV_ALIGN_IN_LEFT_MID, 10, 0);
 
+                       #if 1
+                       lv_obj_set_click(obj, false);
+                       #else
                        lv_obj_set_click(obj, true);
                        lv_obj_set_event_cb(obj, mmi_ai_talk_list_text_item_event_cb);
+                       #endif
                        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);
                        
-                       lv_mem_free(file_buf);
+                       //lv_mem_free(file_buf);
                        break;
                        
                case WECHAT_MSG_TYPE_EXPRESSION:
@@ -1791,15 +1709,9 @@ void mmi_ai_talk_list_create(lv_obj_t * obj, lv_ai_talk_ext_t * ext)
        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_text));
-       //lv_style_copy(&(list_page_ext->style_text), &lv_style_pretty);
-       //lv_style_set_bg_color(&(list_page_ext->style_text), LV_STATE_DEFAULT, lv_color_make(0xFF, 0xE1, 0xE1));
-       //lv_style_set_border_width(&(list_page_ext->style_text), LV_STATE_DEFAULT, 0);
-       //lv_style_set_shadow_width(&(list_page_ext->style_text), LV_STATE_DEFAULT, 0);
+       //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_font26);
@@ -1825,11 +1737,16 @@ void mmi_ai_talk_list_create(lv_obj_t * obj, lv_ai_talk_ext_t * ext)
        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;
+       //_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;
        ext->list = list_page;
 
+       #if 1
+       mmi_ai_talk_msg_item_info_t * msg_item = &s_ai_talk_item_info;
+       mmi_ai_talk_list_msg_item_add(list_page, msg_item, NULL, 0);
+       #else
+       
        uint8_t i = 0;
        uint8_t msg_count = mmi_ai_talk_info_count_get();
     hal_rtc_t cur_time = {0}, last_msg_item_time = {0}, msg_time = {0};
@@ -1840,7 +1757,7 @@ void mmi_ai_talk_list_create(lv_obj_t * obj, lv_ai_talk_ext_t * ext)
                printf("[@CHENG_DEBUG][%s][%d]: i=%d, msg_count=%d\n", __FUNCTION__, __LINE__, i, msg_count);
                
                char time_str[32] = {0};
-               nv_watch_wechat_msg_item_info_t * msg_item = NULL;
+               mmi_ai_talk_msg_item_info_t * msg_item = NULL;
 
                mmi_ai_talk_info_index_item_get(i, &msg_item);
                _lv_memcpy(&msg_time, &(msg_item->msg_time), sizeof(hal_rtc_t));
@@ -1849,6 +1766,7 @@ void mmi_ai_talk_list_create(lv_obj_t * obj, lv_ai_talk_ext_t * ext)
 
                mmi_ai_talk_list_msg_item_add(list_page, msg_item, time_str, i);
        }
+       #endif
 
        if((lv_obj_get_height(list_page) - lv_obj_get_style_pad_top(list_page, LV_LIST_PART_BG) * 2) > lv_obj_get_height(scrl))
        {
@@ -1866,6 +1784,34 @@ void mmi_ai_talk_main_screen_refresh(void)
        
        printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
+#if 1
+       mmi_ai_talk_list_set_slide_enable(&ext->old_ext, true);
+       mmi_ai_talk_list_msg_item_style_reset(ext);
+       if(NULL != ext->list) 
+       {
+               lv_obj_del(ext->list);
+               ext->list = NULL;
+       }
+       
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);   
+       
+       uint8_t msg_count = mmi_ai_talk_info_count_get();
+       if(0 == msg_count)
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+               lv_obj_set_hidden(ext->label_no_msg, false);
+       }
+       else
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+               lv_obj_set_hidden(ext->label_no_msg, true);
+               mmi_ai_talk_list_create(ext->cont, ext);
+       }
+
+#else
+
        mmi_ai_talk_list_set_slide_enable(&ext->old_ext, true);
        
        mmi_ai_talk_voice_item_playing_stop(ext);
@@ -1909,6 +1855,7 @@ void mmi_ai_talk_main_screen_refresh(void)
                
                mmi_ai_talk_list_create(ext->cont, ext);
        }
+#endif
 }
 
 lv_obj_t * mmi_ai_talk_create(lv_obj_t * activity_obj)
@@ -1937,8 +1884,8 @@ lv_obj_t * mmi_ai_talk_create(lv_obj_t * activity_obj)
 
        ext->cont = NULL;
        ext->list = NULL;
-       ext->delete_timer_id = NULL;
-       ext->delete_bg = NULL;
+       //ext->delete_timer_id = NULL;
+       //ext->delete_bg = NULL;
        ext->record_buffer = NULL;
        ext->record_size = 0;
 
@@ -2023,7 +1970,7 @@ void mmi_ai_talk_create_event_cb(lv_obj_t * btn, lv_event_t e)
                mmi_ai_talk_tcp_connect_msg(NULL);
 
                //
-               mmi_ai_talk_info_init();
+               mmi_ai_talk_receive_item_info_clean();
                
         lv_watch_png_cache_all_free();
         lv_obj_t * obj = mmi_ai_talk_create(NULL);
index dfd2407..7022e71 100644 (file)
@@ -29,13 +29,34 @@ extern "C" {
 #define MMI_AI_TALK_CHAT_TIME_INTERVAL (3 * 60) /*display the time of current chat msg if more than 3 mins from the previous chat msgs*/
 
 
+//#define MMI_AI_TALK_MSG_NUM_MAX              (1)
+//#define MMI_AI_TALK_DATA_FILE_NAME_MAX       (64) // (LV_FS_MAX_PATH_LENGTH / 2)
+
+typedef struct
+{
+       //uint8_t msg_index;
+       //uint8_t msg_from;             // 0-slef; 1-other
+       //uint8_t unread_flag;  // 0-read; 1-unread
+    //hal_rtc_t msg_time;
+       nv_wechat_msg_type_e msg_type;
+       uint32_t msg_data_size;
+       void * msg_data_ptr;
+       //char msg_data_full_file_name[MMI_AI_TALK_DATA_FILE_NAME_MAX];
+} mmi_ai_talk_msg_item_info_t;
+
+//typedef struct
+//{
+//    uint8_t msg_count;
+//    mmi_ai_talk_msg_item_info_t msg_item[MMI_AI_TALK_MSG_NUM_MAX];
+//} mmi_ai_talk_msg_info_t;
+
 
 typedef struct
 {
     lv_watch_obj_ext_t old_ext;
-    lv_anim_t sending_anim;
-       TIMER_ID sending_timer_id, result_timer_id;
-       bool send_result;
+       lv_obj_t * label_sending;
+       lv_obj_t * label_result;
+       lv_task_t * sending_screen_task_id;
 } lv_ai_talk_sending_ext_t;
 
 typedef struct
@@ -53,12 +74,12 @@ typedef struct
 
 typedef struct {
     lv_page_ext_t old_ext;
-    lv_anim_t voice_playing_anim;
-       uint8_t voice_playing_msg_from;         // 0-slef; 1-other
+    //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_label_time;
+    //lv_style_t style_label_time;
     lv_style_t style_label_len_other;
     lv_style_t style_label_len_self;
 } lv_ai_talk_list_ext_t;
@@ -72,14 +93,14 @@ typedef struct
        //lv_obj_t * img_emo;
        lv_obj_t * img_record; // record button
 
-       lv_obj_t * delete_bg; // delete msg
-       lv_obj_t * delete_current;
-       lv_obj_t * delete_all;
-       lv_obj_t * delete_back;
-       lv_obj_t * delete_label_prompt;
-       lv_obj_t * delete_btn_cancel;
-       lv_obj_t * delete_btn_ok;
-       TIMER_ID delete_timer_id;
+       //lv_obj_t * delete_bg; // delete msg
+       //lv_obj_t * delete_current;
+       //lv_obj_t * delete_all;
+       //lv_obj_t * delete_back;
+       //lv_obj_t * delete_label_prompt;
+       //lv_obj_t * delete_btn_cancel;
+       //lv_obj_t * delete_btn_ok;
+       //TIMER_ID delete_timer_id;
 
     MCI_EVNET_T event;
        uint8_t * record_buffer;
@@ -87,7 +108,6 @@ typedef struct
 }lv_ai_talk_ext_t;
 
 
-
 void mmi_ai_talk_create_event_cb(lv_obj_t * btn, lv_event_t e);
 
 #endif 
index 5bf96b7..5619b81 100644 (file)
@@ -206,14 +206,18 @@ bool mmi_receive_info_write_to_file(char * path, char * info_buf, uint32_t info_
 }
 
 
+#define KEY_IS_FINAL                           ("is_final")
+#define KEY_RESULTS                                    ("results")
+#define KEY_TYPE                                       ("type")
+#define VALUE_REAL_ASR                         ("real_asr")
+
+#define VALUE_MODEL_ANSWER                     ("model_answer")
+#define KEY_ANSWER                                     ("answer")
+
 bool mmi_ai_talk_data_receive(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
        cJSON * json_root = NULL;
-       int is_final = 0;
-       char * type_str = NULL;
-       char * result_str = NULL;
-       uint16_t result_str_len = 0;
 
        if(NULL == next_buff || 0 == next_buff_len)
        {
@@ -222,8 +226,9 @@ bool mmi_ai_talk_data_receive(unsigned char * next_buff, unsigned int next_buff_
        }
 
        
-       // write to file
-//     mmi_receive_info_write_to_file(BEI_KE_RECEIVE_FILE, next_buff, next_buff_len);
+       // write to file for debug
+       //mmi_receive_info_write_to_file(BEI_KE_RECEIVE_FILE, next_buff, next_buff_len);
+       
        
        lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_AI_TALK);
        if(NULL == activity_obj) 
@@ -242,33 +247,70 @@ bool mmi_ai_talk_data_receive(unsigned char * next_buff, unsigned int next_buff_
        //Hal_Mem_Free(next_buff);
        //next_buff = NULL;
 
-       is_final = cJSON_GetIntValue(cJSON_GetObjectItem(json_root, "is_final"));
+
+#if 0
+// {"is_final":1,"results":"ÀëÀëÔ­ÉϲÝ","status":"ok","timestamp":{"end":2200,"start":730},"type":"real_asr"}
+       int is_final = 0;
+       char * type_real_asr = NULL;
+       char * str_results = NULL;
+       uint16_t str_results_len = 0;
+       
+       is_final = cJSON_GetIntValue(cJSON_GetObjectItem(json_root, KEY_IS_FINAL));
        if(1 != is_final)
        {
                printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                goto exit_free_res;
        }
 
-    type_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, "type"));
-    if(NULL == type_str)
+    type_real_asr = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_TYPE));
+    if(NULL == type_real_asr)
        {
-               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               printf("[@CHENG_DEBUG][%s][%d]: get type fail\n", __FUNCTION__, __LINE__);
                goto exit_free_res;
        }
-       if(0 != strncmp(type_str, "real_asr", strlen("real_asr")))
+       if(0 != strncmp(type_real_asr, VALUE_REAL_ASR, strlen(VALUE_REAL_ASR)))
        {
                printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                goto exit_free_res;
        }
                
-    result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, "results"));
-    if(NULL == result_str)
+    str_results = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_RESULTS));
+    if(NULL == str_results)
        {
                printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                goto exit_free_res;
        }
-       result_str_len = strlen(result_str);
-       result = mmi_ai_talk_receive_from_server(result_str, result_str_len, WECHAT_MSG_TYPE_TEXT);     
+       str_results_len = strlen(str_results);
+       result = mmi_ai_talk_receive_from_server(str_results, str_results_len, WECHAT_MSG_TYPE_TEXT);   
+#endif
+
+
+// {"type":"model_answer","status":"ok","answer_id":"1698890526941t","answer":"ÀëÀëÔ­Éϲݣ¬Ò»ËêÒ»¿ÝÈÙ¡£\nÒ°»ðÉÕ²»¾¡£¬´º·ç´µÓÖÉú¡£\nÔ¶·¼ÇֹŵÀ£¬Çç´ä½Ó»Ä³Ç¡£\nÓÖËÍÍõËïÈ¥£¬ÝÂÝÂÂú±ðÇé¡£","question":"ÀëÀëÔ­ÉϲÝ"}
+       char * type_model_answer = NULL;
+       char * str_answer = NULL;
+       uint16_t str_answer_len = 0;
+
+       type_model_answer = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_TYPE));
+       if(NULL == type_model_answer)
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: get type fail\n", __FUNCTION__, __LINE__);
+               goto exit_free_res;
+       }
+       if(0 != strncmp(type_model_answer, VALUE_MODEL_ANSWER, strlen(VALUE_MODEL_ANSWER)))
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               goto exit_free_res;
+       }
+
+       str_answer = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_ANSWER));
+       if(NULL == str_answer)
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               goto exit_free_res;
+       }
+       str_answer_len = strlen(str_answer);
+       result = mmi_ai_talk_receive_from_server(str_answer, str_answer_len, WECHAT_MSG_TYPE_TEXT);     
+
 
 exit_free_res:
        //if(NULL != next_buff)
index e51555d..0d9e106 100644 (file)
@@ -14,7 +14,7 @@
 TASK_HANDLE * s_ai_talk_tcp_task_id = NULL;
 TASK_HANDLE * s_ai_talk_send_task_id = NULL;
 
-#define AI_TALK_RECEIVE_BUFF_LEN  (6 * 1024) // (26 * 1024)
+#define AI_TALK_RECEIVE_BUFF_LEN  (10 * 1024) // (26 * 1024)
 
 
 static mmi_ai_talk_tcp_info_t s_ai_talk_tcp_info = {0};