gengxin
author@CHENG <2393524978@qq.com>
Tue, 16 Jul 2024 08:48:31 +0000 (16:48 +0800)
committer@CHENG <2393524978@qq.com>
Tue, 16 Jul 2024 08:48:31 +0000 (16:48 +0800)
sdk/MS_MMI_Main/source/mmi_app/app/mmi_aigc/c/mmi_aigc_data.c
sdk/MS_MMI_Main/source/mmi_app/app/mmi_aigc/c/mmi_aigc_ui.c
sdk/MS_MMI_Main/source/mmi_app/app/mmi_aigc/h/mmi_aigc_internal.h
sdk/MS_MMI_Main/source/mmi_app/common/h/mmi_id.h

index fa51dfa..68bea25 100644 (file)
@@ -1,18 +1,10 @@
 
 
 
-/**--------------------------------------------------------------------------*
-**                         Include Files                                    *
-**--------------------------------------------------------------------------*/
-#include "mmi_app_phone_trc.h"
 #include "mmiphone_export.h"
 #include "window_parse.h"
-#include "guiblock.h"
-#include "mmiidle_export.h"
-#include "mmi_id.h"
-#include "mmieng_export.h"
-#include "mmipub.h"
 #include "mmi_aigc_internal.h"
+#include "../../../../../../MS_Ref/source/aud_dev/inc/cjson.h"
 
 
 #ifdef MMI_CUSTOM_AIGC_SUPPORT
@@ -21,6 +13,13 @@ static BOOLEAN s_aigc_trans_ws_open_flag = FALSE;
 static BOOLEAN s_aigc_chat_ws_open_flag = FALSE;
 static BOOLEAN s_aigc_tts_ws_open_flag = FALSE;
 
+static void mmi_aigc_send_trans_start_data_process(void * data_ptr, uint32 data_len);
+static void mmi_aigc_send_trans_audio_data_process(void * data_ptr, uint32 data_len);
+static void mmi_aigc_send_trans_stop_data_process(void * data_ptr, uint32 data_len);
+static void mmi_aigc_send_chat_text_data_process(void * data_ptr, uint32 data_len);
+static void mmi_aigc_send_tts_text_data_process(void * data_ptr, uint32 data_len);
+
+
 void mmi_aigc_trans_websocket_open(void)
 {
        if(FALSE == s_aigc_trans_ws_open_flag)
@@ -78,1072 +77,485 @@ void mmi_aigc_tts_websocket_close(void)
 
 
 
-#endif
-
-#if 0
-#ifdef MULTI_SIM_GSM_CTA_SUPPORT
-extern BOOLEAN g_is_sim_only_check_status[MMI_DUAL_SYS_MAX];
-#endif
-extern MMISET_PWD_OPERATE_TYPE_E g_mmiset_pwd_type;
-
-
-// the window for startup normal
-WINDOW_TABLE( PHONE_STARTUP_NORMAL_WIN_TAB ) = 
+static int mmi_aigc_trans_websocket_send_text_data(void * data_ptr, uint32 data_len)
 {
-    //CLEAR_LCD,
-    WIN_PRIO( WIN_THREE_LEVEL ),
-    WIN_FUNC( (uint32)HandleNormalStartupWindow ),    
-    WIN_ID( PHONE_STARTUP_NORMAL_WIN_ID ),
-    WIN_HIDE_STATUS,
-    WIN_STYLE(WS_DISABLE_HWICON),
-    WIN_MOVE_STYLE(MOVE_FORBIDDEN),
-    WIN_SUPPORT_ANGLE( WIN_SUPPORT_ANGLE_INIT ),
-    END_WIN
-};
-
-// the window for startup alarm
-WINDOW_TABLE( PHONE_STARTUP_ALARM_WIN_TAB ) = 
+       return 0;
+}
+static int mmi_aigc_trans_websocket_send_binary_data(void * data_ptr, uint32 data_len)
 {
-    //CLEAR_LCD,
-    //WIN_PRIO( WIN_ONE_LEVEL ),
-    WIN_FUNC( (uint32)HandleAlarmStartupWindow ),    
-    WIN_ID( PHONE_STARTUP_ALARM_WIN_ID ),
-    WIN_HIDE_STATUS,
-    END_WIN
-};
-
-// the window for power off
-WINDOW_TABLE( PHONE_POWER_OFF_WIN_TAB ) = 
+       return 0;
+}
+static int mmi_aigc_chat_websocket_send_text_data(void * data_ptr, uint32 data_len)
 {
-    //CLEAR_LCD,
-    WIN_PRIO( WIN_THREE_LEVEL ),
-    WIN_FUNC( (uint32)HandlePowerOffWindow ),
-//    WIN_STYLE(WS_DISABLE_LCD_SWITCH),
-    WIN_MOVE_STYLE(MOVE_FORBIDDEN),
-    WIN_ID( PHONE_POWER_OFF_WIN_ID ),
-    WIN_STYLE(WS_DISABLE_HWICON),
-    WIN_HIDE_STATUS,
-    WIN_SUPPORT_ANGLE( WIN_SUPPORT_ANGLE_INIT ),
-    END_WIN
-};
-/*****************************************************************************/
-//  Description : ÄÖÁåÆô¶¯¿ª»ú½çÃæµÄ³õʼ»¯
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-void MMIAPIPHONE_AlarmInit(void)
+       return 0;
+}
+static int mmi_aigc_tts_websocket_send_text_data(void * data_ptr, uint32 data_len)
 {
-    GUI_LCD_DEV_INFO lcd_dev_info = {GUI_LCD_0, GUI_BLOCK_0};
-    
-    lcd_dev_info.lcd_id = GUI_MAIN_LCD_ID;
-    lcd_dev_info.block_id = GUI_BLOCK_MAIN;
-    
-    // ¼Ç¼¿ª»ú·½Ê½
-    s_startup_condition = STARTUP_ALARM;
-    MMIDEFAULT_InitDefault(FALSE); //¹Ø»úÄÖÖÓÏ죬lcd±³¹âĬÈÏÊǹرյÄ
-    
-    if(!MMIALMSVC_StartService()/*MMIAPIALM_StartAlarm(FALSE)*/)
-    {
-        //¹Ø»ú
-        MMIDEFAULT_TurnOffBackLight();
-        POWER_PowerOff();
-    }
+       return 0;
 }
 
 
-/*****************************************************************************/
-//  Description : ASSERTÆô¶¯µÄ³õʼ»¯,Ö±½Ó½øÈëidle½çÃæ
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-void MMIAPIPHONE_AssertInit(void)
-{
-    // ¼Ç¼¿ª»ú·½Ê½,ËäÈ»ÊÇASSERT¿ª»ú£¬µ«Êdzý¿ª»úÁ÷³Ì²»Ò»ÑùÖ®Í⣬ÆäÓà¶¼Ò»ÑùµÄ
-    s_startup_condition = STARTUP_NORMAL;//STARTUP_ASSERT;
-#ifndef SUBLCD_SIZE_NONE
-    MMISUB_IsPermitUpdate(TRUE);
-#endif
-    // ½øÈëidle½çÃæ
-    MMIAPIIDLE_OpenIdleWin();
 
-    MMIDEFAULT_AllowTurnOffBackLight(TRUE);
-}
 
 
-/*****************************************************************************/
-//     Description : Õý³£¿ª»úУ׼ºó½çÃæµÄ³õʼ»¯
-//    Global resource dependence : 
-//  Author: Robert
-//    Note:
-/*****************************************************************************/
-void MMIAPIPHONE_NormalInitAfterCoordinate(void)
-{    
-
-    if (MMIAPISET_GetPowerOnPwdStatus())//¿ª»úÃÜÂ뿪Æô
-    {
-        g_mmiset_pwd_type = MMISET_PWD_NORMAL;         
-        
-        //open input power on password window
-        MMIAPISET_OpenPowerOnPwdWin();
-    }
-    else
-    {
-        if (MMIAPISET_GetFlyModeSetPowerOn())
-        {
-            MMIAPISET_SetFlyModeOpenPhone();
-        }
-        else
-        {
-            MMIAPIPHONE_NormalInitAfterPwd();
-        }
+// send task
+static BLOCK_ID s_aigc_data_send_task_id = SCI_INVALID_BLOCK_ID;
+
+static void mmi_aigc_data_send_task_msg_send(MMI_AIGC_DATA_SEND_MSG_ID_E msg_id, void * param, uint32 param_size)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+       
+       if(SCI_INVALID_BLOCK_ID != s_aigc_data_send_task_id)
+       {
+               MMI_AIGC_DATA_SIG_T * signal = PNULL;
+               void * temp_ptr = PNULL;
+               
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               if(NULL != param && 0 != param_size)
+               {
+                       temp_ptr = SCI_ALLOC_APPZ(param_size + 1);
+                       if(NULL == temp_ptr)
+                       {
+                               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+                               return;
+                       }
+                       SCI_MEMSET(temp_ptr, 0x0, param_size + 1);
+                       SCI_MEMCPY(temp_ptr, param, param_size);
+               }
+
+               signal = SCI_ALLOC_APPZ(sizeof (MMI_AIGC_DATA_SIG_T));
+               SCI_MEMSET(signal, 0x0, sizeof (MMI_AIGC_DATA_SIG_T));
+               signal->SignalCode = msg_id;
+               signal->SignalSize = sizeof (*signal);
+               signal->Sender = SCI_IdentifyThread();
+               signal->data_ptr = temp_ptr;
+               signal->data_size = param_size;
+               SCI_SendSignal (signal, s_aigc_data_send_task_id);
     }
 }
 
-/*****************************************************************************/
-//  Description : init a virtual window
-//  Global resource dependence : 
-//  Author:
-//  Note:
-/*****************************************************************************/
-PUBLIC void MMIAPIPHONE_VirtualWinInit(void)
+static void mm_aigc_data_send_task_handle(void * param)
 {
-    MMI_APPLET_START_T start ={0};
-    
-    start.guid = SPRD_IDLE_APPLET_ID;
-    
-    MMK_StartApplet( &start );
+       MMI_AIGC_DATA_SIG_T * signal = (MMI_AIGC_DATA_SIG_T *)param;
+       MMI_AIGC_DATA_SEND_MSG_ID_E msg_id = signal->SignalCode;
+       void * msg_param = signal->data_ptr;
+       uint32 param_size = signal->data_size;
+       
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+    switch(msg_id)
+       {
+               case MMI_AIGC_MSG_TRANS_START_SEND:
+                       mmi_aigc_send_trans_start_data_process(msg_param, param_size);
+                       break;
+                       
+        case MMI_AIGC_MSG_TRANS_AUDIO_SEND:
+                       mmi_aigc_send_trans_audio_data_process(msg_param, param_size);
+            break;
+
+               case MMI_AIGC_MSG_TRANS_STOP_SEND:
+                       //mmi_aigc_send_trans_stop_data_process(msg_param, param_size);
+                       break;
+
+               case MMI_AIGC_MSG_CHAT_TEXT_SEND:
+                       mmi_aigc_send_chat_text_data_process(msg_param, param_size);
+                       break;
+
+               case MMI_AIGC_MSG_TTS_TEXT_SEND:
+                       mmi_aigc_send_tts_text_data_process(msg_param, param_size);
+                       break;
+               
+               default:
+                       break;
+    }
 }
 
-/*****************************************************************************/
-//  Description : Õý³£¿ª»ú½çÃæµÄ³õʼ»¯
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-void MMIAPIPHONE_NormalInit(void)
+static void mm_aigc_data_send_task_entry(uint32 argc, void *argv)
 {
-    // ¼Ç¼¿ª»ú·½Ê½
-    s_startup_condition = STARTUP_NORMAL;
-#ifndef SUBLCD_SIZE_NONE    
-    //×ÓÆÁ¿ª»úͼ»­,²»ÔÊÐíˢР  SUBLCDˢбØÐëÔÚ³õʼ»¯Ö®ºó
-    MMISUB_DisplayIdlePic();
-    MMISUB_IsPermitUpdate(TRUE);
-#endif    
-#ifdef MMI_SIM_LOCK_SUPPORT
-    if(!MNPHONE_SIMLockDataIntegrityCheck())
-    {         
-        /*sim lock data error,the ME alert "sim Locked" then power off*/
-        MMIPHONE_SIMLockedOpenShutOffWin();
+    while(SCI_INVALID_BLOCK_ID == s_aigc_data_send_task_id)
+       {
         return;
     }
-    else
-    {
-        MN_SIM_LOCK_STATUS_T* sim_unlock_data = MMIAPIPHONE_GetSIMUnlockConfigDataPtr();
-        
-        /*³õʼ»¯SIM Lock Data*/
-        SCI_MEMSET(sim_unlock_data,0x00,sizeof(MN_SIM_LOCK_STATUS_T));
-        MMIAPIPHONE_UpdateSIMUnlockData();
-    }
-#endif        
 
-#if defined TOUCH_PANEL_SUPPORT && !defined TOUCHPANEL_TYPE_MULTITP
-    // Åж¨ÊÇ·ñµÚÒ»´Î¿ª»ú£¬ ÊÇ´ò¿ªÐ£×¼´°¿Ú
-    if (MMIAPITP_IsPowerOnFirst() && !POWER_IsAutoTestMode())
-    {
-        MMIAPITP_COORDINATE_OpenWin(TRUE);
-    }
-    else
-#endif
-    {        
-        if (MMIAPISET_GetPowerOnPwdStatus())//¿ª»úÃÜÂ뿪Æô
-        {
-            g_mmiset_pwd_type = MMISET_PWD_NORMAL;         
-            
-            //open input power on password window
-            MMIAPISET_OpenPowerOnPwdWin();
-        }
-        else
-        {
-            if (MMIAPISET_GetFlyModeSetPowerOn())
-            {
-                MMIAPISET_SetFlyModeOpenPhone();
-            }
-            else
-            {
-                MMIAPIPHONE_NormalInitAfterPwd();
-            }
-        }
+    while(1)
+       {
+        // receive message
+               xSignalHeaderRec * sig_ptr = SCI_GetSignal(s_aigc_data_send_task_id);
+        if(PNULL != sig_ptr)
+       {
+                       MMI_AIGC_DATA_SIG_T * signal = (MMI_AIGC_DATA_SIG_T *)sig_ptr;
+                       mm_aigc_data_send_task_handle(signal);
+                       
+                       if(PNULL != signal->data_ptr)
+                       SCI_FREE(signal->data_ptr);
+               SCI_FREE(signal);
+       }
     }
+
+       SCI_ThreadExit();       
 }
 
-/*****************************************************************************/
-//  Description : Õý³£¿ª»úÊäÈ뿪»úÃÜÂëºó½çÃæµÄ³õʼ»¯
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-void MMIAPIPHONE_NormalInitAfterPwd(void)
-{    
-#ifdef MULTI_SIM_GSM_CTA_SUPPORT
-    uint32 i = 0;
-
-    for (i = 0; i < MMI_DUAL_SYS_MAX; i++)
-    {
-        g_is_sim_only_check_status[i] = TRUE;
-    }
-#ifndef SUBLCD_SIZE_NONE
-    //×ÓÆÁ¿ª»úͼ»­,²»ÔÊÐíË¢ÐÂ
-    MMISUB_DisplayIdlePic();
-    MMISUB_IsPermitUpdate(TRUE);
-#endif
-    MMIAPIPHONE_StartUpPsAccordingToSetting(TRUE, FALSE);
-#else
-#ifndef APSYS_ONLY
-MMIAPIPHONE_StartUpPsAccordingToSetting(TRUE, TRUE);   
-#endif
-#ifndef SUBLCD_SIZE_NONE
-    //×ÓÆÁ¿ª»úͼ»­,²»ÔÊÐíË¢ÐÂ
-    MMISUB_DisplayIdlePic();
-    MMISUB_IsPermitUpdate(TRUE);
-#endif    
-    // ´ò¿ªÕý³£¿ª»ú´°¿Ú
-    MMIAPIPHONE_OpenNormalStartUpWin();
-#endif
+void mmi_aigc_data_send_task_create(void)
+{
+       if(SCI_INVALID_BLOCK_ID != s_aigc_data_send_task_id)
+               return;
+       
+       s_aigc_data_send_task_id = SCI_CreateThread("T_AIGC_DATA_SEND_TASK",
+                                                                                               "Q_AIGC_DATA_SEND_TASK",
+                                                                                               mm_aigc_data_send_task_entry,
+                                                                                               0,
+                                                                                               0,
+                                                                                               MMI_AIGC_DATA_SEND_TASK_STACK_SIZE,
+                                                                                               MMI_AIGC_DATA_SEND_TASK_MSG_QUEUE_SIZE,
+                                                                                               MMI_AIGC_DATA_SEND_TASK_PRIORITY,
+                                                                                               SCI_PREEMPT,
+                                                                                               SCI_AUTO_START);        
+
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_aigc_data_send_task_id);
 }
 
+void mmi_aigc_data_send_task_delete(void)
+{
+       if(SCI_INVALID_BLOCK_ID != s_aigc_data_send_task_id)
+       {
+               SCI_DeleteThread(s_aigc_data_send_task_id);
+               s_aigc_data_send_task_id = SCI_INVALID_BLOCK_ID;
+       }
+}
+
+
 
-/*****************************************************************************/
-//  Description : get phone start up condition
-//  Global resource dependence : 
-//  Author: bruce.chi
-//  Note:  
-/*****************************************************************************/
-PUBLIC PHONE_STARTUP_CONDITION_E MMIAPIPHONE_GetStartUpCondition(void)
+// trans
+void mmi_aigc_send_trans_start_msg(void * param, uint32 param_size)
 {
-    return s_startup_condition;
+       mmi_aigc_data_send_task_msg_send(MMI_AIGC_MSG_TRANS_START_SEND, NULL, 0);
 }
 
-/*****************************************************************************/
-//  Description : set phone start up condition
-//  Global resource dependence : 
-//  Author: bruce.chi
-//  Note:  
-/*****************************************************************************/
-PUBLIC void MMIAPIPHONE_SetStartUpCondition(PHONE_STARTUP_CONDITION_E e_start_cond)
+void mmi_aigc_send_trans_audio_msg(void * param, uint32 param_size)
 {
-    if(e_start_cond >= STARTUP_MAX)
-    {
-        //SCI_TRACE_LOW:"[POWERONOFF]:MMIAPIPHONE_IsNetworkSelecting e_start_cond = %d"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_ONOFF_381_112_2_18_2_45_25_223,(uint8*)"d",e_start_cond);
-        return ;
-    }
-    
-    s_startup_condition = e_start_cond;
+       mmi_aigc_data_send_task_msg_send(MMI_AIGC_MSG_TRANS_AUDIO_SEND, param, param_size);
 }
-/*****************************************************************************/
-//  Description : ´¦ÀíÕý³£¿ª»ú½çÃæµÄÏûÏ¢(³ýPSÖ®Íâ)
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleNormalStartupWindow(
-                                             MMI_WIN_ID_T    win_id,    // STARTUP NORMAL´°¿ÚµÄID
-                                             MMI_MESSAGE_ID_E   msg_id,     // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                             DPARAM             param       // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                             )
-{   
-    MMI_RESULT_E    result = MMI_RESULT_TRUE;
-    MMISET_POWER_ON_OFF_ANIM_INFO_T power_on_off_anim_info = {0};
-    
-    switch (msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-#ifdef MAINLCD_SIZE_128X64 //added by taiping.lai 2011/01/07
-        {
-            GUI_LCD_DEV_INFO lcd_dev_info = {GUI_LCD_0, GUI_BLOCK_0};
-            GUI_RECT_T   rect = {0, 0, MMI_MAINSCREEN_WIDTH-1, MMI_MAINSCREEN_HEIGHT-1};
-
-            LCD_FillRect((const GUI_LCD_DEV_INFO*)&lcd_dev_info, rect, MMI_WHITE_COLOR);    
-       }
-#endif 
-        MMIDEFAULT_AllowTurnOffBackLight(FALSE);
-        MMIDEFAULT_TurnOnBackLight();
-#ifdef UI_MULTILAYER_SUPPORT
-        UILAYER_SetMainLayerType(DATA_TYPE_RGB565);
-#endif
-        //s_is_play_default = TRUE;
-#ifndef MMI_POWERONOFFMP4_ENABLE
-        s_is_play_power_on_mp4 = TRUE; 
-        SCI_MEMSET(&power_on_off_anim_info,0,sizeof( MMISET_POWER_ON_OFF_ANIM_INFO_T));
-        MMIAPISET_GetPowerOnOffAnimInfo(&power_on_off_anim_info, TRUE);
-
-        //SCI_TRACE_LOW:"[POWERONOFF]:HandleNormalStartupWindow type=%d"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_ONOFF_421_112_2_18_2_45_25_224,(uint8*)"d",power_on_off_anim_info.anim_type);
-        MMI_SetATempImage(IMAGE_POWER_ON, win_id);
-
-        if (MMISET_POWER_ON_OFF_ANIM_DEFAULT == power_on_off_anim_info.anim_type)
-        {
-            PlayDefaultPowerOnOffAnimation(TRUE);
-        }
-        else if((MMISET_POWER_ON_OFF_ANIM_MORE == power_on_off_anim_info.anim_type) 
-                || (MMISET_POWER_ON_OFF_PIC_MORE == power_on_off_anim_info.anim_type))
-        {
-            if(!MMIAPIFMM_IsFileExist(power_on_off_anim_info.more_anim_info.name_wstr,power_on_off_anim_info.more_anim_info.name_wstr_len))
-            {
-                PlayDefaultPowerOnOffAnimation(TRUE);
-            }
-            else
-            {    
-                uint16 suffix_wstr[MMIFMM_FILENAME_LEN + 1]        = {0};
-                uint16 suffix_len = MMIFMM_FILENAME_LEN;
-               #ifdef DRM_SUPPORT            
-                MIME_TYPE_E drmmime = MMIAPIDRM_GetDRMFileMimeType(0, power_on_off_anim_info.more_anim_info.name_wstr);
-               #endif
-                
-                MMIAPIFMM_SplitFileName(power_on_off_anim_info.more_anim_info.name_wstr, 
-                    power_on_off_anim_info.more_anim_info.name_wstr_len, 
-                    PNULL, PNULL, suffix_wstr, &suffix_len);
-
-                if(MMIFMM_FILE_TYPE_PICTURE == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len)
-               #ifdef DRM_SUPPORT
-                     || (MMIFMM_FILE_TYPE_DRM == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len)
-                            &&( drmmime <= MIME_TYPE_IMAGE_IEF && drmmime >= MIME_TYPE_IMAGE_ANY))
-                #endif
-                   )
-                {
-                    PlayMorePowerOnOffAnimation(TRUE,&power_on_off_anim_info);
-                }
-            }
-        }
-#endif
-        if (s_phone_startup_timer_id != 0)
-        {
-            MMK_StopTimer(s_phone_startup_timer_id);
-            s_phone_startup_timer_id = 0;
-        }
-        s_phone_startup_timer_id = MMK_CreateTimer(PHONE_STARTUP_DURING_TIME, FALSE);
-        PlayPowerOnOffMP4(TRUE); 
-        break;
-
-    case MSG_TIMER:
-        if (s_phone_startup_timer_id == *((uint8 *) param))
-        { 
-            s_phone_startup_timer_id = 0;
-            
-            // ¼ì²éAlarmµÄÇé¿ö
-            MMIAPIALM_CheckAndStartDelayedAlarm();            
-            
-            // ¹Ø±Õ±¾´°¿Ú
-            //MMK_CloseWin(win_id);
-            
-            SCI_MEMSET(&power_on_off_anim_info, 0, sizeof(MMISET_POWER_ON_OFF_ANIM_INFO_T));
-            MMIAPISET_GetPowerOnOffAnimInfo(&power_on_off_anim_info, TRUE);
-#ifdef VIDEO_PLAYER_SUPPORT 
-            if((MMISET_POWER_ON_OFF_ANIM_MORE == power_on_off_anim_info.anim_type)
-                || (MMISET_POWER_ON_OFF_PIC_MORE == power_on_off_anim_info.anim_type))
-            {
-                uint16 suffix_wstr[MMIFMM_FILENAME_LEN + 1]        = {0};
-                uint16 suffix_len = MMIFMM_FILENAME_LEN;
-                MMIAPIFMM_SplitFileName(power_on_off_anim_info.more_anim_info.name_wstr, 
-                    power_on_off_anim_info.more_anim_info.name_wstr_len, 
-                    PNULL, PNULL, suffix_wstr, &suffix_len);
-                if(MMIFMM_FILE_TYPE_PICTURE == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len))
-                {
-                    PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                }
-                else
-                {
-#ifdef MMI_POWERONOFFMP4_ENABLE
-                    MMIAPIVP_ExitPlay();
-#else
-                    //if(s_is_play_default)//cr151078
-                    //{
-                    PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                    //}
-#endif
-                }
-            }
-            else if(MMISET_POWER_ON_OFF_ANIM_DEFAULT == power_on_off_anim_info.anim_type)
-            {
-
-#ifdef MMI_POWERONOFFMP4_ENABLE
-                MMIAPIVP_ExitPlay();
-#else
-                PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-#endif
 
-            }
-#else
-            PlayPowerOnOffMP4CallBack();
-#endif
-            // ´ò¿ªIDLE½çÃæ 
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
-     
-    case MSG_LOSE_FOCUS: 
-#ifdef UI_MULTILAYER_SUPPORT
-        UILAYER_SetMainLayerType(MMITHEME_GetMainLayerDefaultType());
-#endif
-#ifdef VIDEO_PLAYER_SUPPORT
-         MMIAPIVP_ExitPlay();
-#endif
-        //cr124655, µ±¿ª»ú´°¿Ú±»´ò¶Ï£¬ÐèÒªÖÐÖ¹¿ª»úÁåÉù
-        MMIAPISET_StopRing(MMISET_RING_TYPE_POWER);
-        MMIAPIIDLE_OpenIdleWin();
-        MMK_CloseWin(win_id);
-        break;
-        
-    case MSG_CLOSE_WINDOW:
-        MMI_ReleaseTempImage();
-
-#ifdef UI_MULTILAYER_SUPPORT
-        UILAYER_SetMainLayerType(MMITHEME_GetMainLayerDefaultType());
+void mmi_aigc_send_trans_stop_msg(void * param, uint32 param_size)
+{
+       //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 data_len)
+{
+       int ret = 0;
+    char send_ptr[512] = {0};
+       int send_len = 0;
+
+       send_len = sprintf(send_ptr, "{\"header\":{\"event\":\"StartTranscription\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\"payload\":{\"format\":\"amr\",\"sample_rate\":8000}}");
+
+       ret = mmi_aigc_trans_websocket_send_text_data(send_ptr, send_len);
+       if(0 > ret)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d,send fail\n", __FUNCTION__, __LINE__, ret);
+
+               mmi_aigc_trans_text_start_msg_send_fail();
+       }
+}
+
+static void mmi_aigc_send_trans_audio_data_process(void * data_ptr, uint32 data_len)
+{
+       int ret = 0;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d,data=%s\n", __FUNCTION__, __LINE__, data_len, data_ptr);
+       
+       ret = mmi_aigc_trans_websocket_send_binary_data(data_ptr, data_len);
+       if(0 > ret)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d,send fail\n", __FUNCTION__, __LINE__, ret);
+
+               mmi_aigc_trans_text_audio_msg_send_fail();
+       }
+}
+
+static void mmi_aigc_send_trans_stop_data_process(void * data_ptr, uint32 data_len)
+{
+#if 0
+    char send_ptr[512] = {0};
+       int send_len = 0;
+
+       send_len = sprintf(send_ptr, "{\"header\":{\"event\":\"StopTranscription\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"}}");
+
+       int ret = mmi_aigc_trans_websocket_send_text_data(send_ptr, send_len);
+       if(0 > ret)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d,send fail\n", __FUNCTION__, __LINE__, ret);
+       }
 #endif
-        // ¹Ø±Õ¿ª»ú´°¿Ú¶¨Ê±Æ÷
-        if( 0 != s_phone_startup_timer_id )
-        {
-            // ¼ì²éAlarmµÄÇé¿ö
-            MMIAPIALM_CheckAndStartDelayedAlarm();
-            MMK_StopTimer(s_phone_startup_timer_id);
-            s_phone_startup_timer_id = 0;
-            MMIAPIIDLE_OpenIdleWin();
-        }
-#ifdef VIDEO_PLAYER_SUPPORT
-        MMIAPIVP_ExitPlay();
+}
+
+void mmi_aigc_trans_websocket_recv_data_handler(char * data_ptr, int data_len)
+{
+       cJSON * json_root = PNULL;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d\n", __FUNCTION__, __LINE__, data_len);
+       
+       if(NULL == data_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: no data\n", __FUNCTION__, __LINE__);
+               return;
+       }
+
+#ifdef MMI_AIGC_DEBUG_TO_FILE
+       mmi_debug_info_write_to_file(AIGC_RECV_TRANS_FILE, data_ptr, data_len);
 #endif
-#if defined(MMI_POWERONOFFMP4_ENABLE)
-               if (PNULL != s_poweronoff_buffer_ptr)
+
+       json_root = cJSON_Parse(data_ptr);
+       if(NULL != json_root)
+       {
+               // "event"
+               char * value_event_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, "event"));
+               if(0 == strncmp(value_event_str, "TranscriptionStarted", strlen("TranscriptionStarted")))
                {
-                       SCI_FREE(s_poweronoff_buffer_ptr);
-                       s_poweronoff_buffer_ptr = PNULL;
+                       // start
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: transcription start\n", __FUNCTION__, __LINE__);
+                       mmi_aigc_trans_text_msg_send_action();
                }
-#endif
-        //cr124655, µ±¿ª»ú´°¿Ú±»´ò¶Ï£¬ÐèÒªÖÐÖ¹¿ª»úÁåÉù
-        MMIAPISET_StopRing(MMISET_RING_TYPE_POWER);
-        MMIAPIPHONE_SetPowerAnimMpeg4Flag(FALSE);
-#ifdef MSDC_CARD_SUPPORT        
-        MMIAPISD_CheckAllDelayedDevice();
-#endif
-        //MMIAPIPHONE_ResumeAllDelaiedEvent();
-//        if (MMIAPIUdisk_IsUSBDelay())
-//        {        
-//            MMIAPIUdisk_OpenUsbOperWindow();
-//            MMIAPIUdisk_SetUSBDelay(FALSE);     
-//         }
-        //MMIDEFAULT_EnableKeyRing(TRUE);
-        //MMIDEFAULT_EnableTpRing(TRUE);
-        MMIDEFAULT_AllowTurnOffBackLight(TRUE);
-        MMI_RestoreFreq();
-        break;
-       
-#ifdef LCD_SLIDE_SUPPORT
-    case MSG_KEYDOWN_SLIDE:
-    case MSG_KEYUP_SLIDE:
-#endif     
-    case MSG_KEYDOWN_UPSIDE:
-    case MSG_KEYDOWN_DOWNSIDE:
-    case MSG_KEYREPEAT_UPSIDE:
-    case MSG_KEYREPEAT_DOWNSIDE:
-    case MSG_APP_RED:
-    case MSG_KEYLONG_RED:
-        break;
-
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        MMIDEFAULT_HandleFlipKey(FALSE);
-        break;
-#endif
-        
-    default:
-        result = MMI_RESULT_FALSE;
-        break;
-    }
-    
-    return (result);
+               else if(0 == strncmp(value_event_str, "Changed", strlen("Changed")))
+               {
+                       // changed
+                       cJSON * json_result = cJSON_GetObjectItem(json_root, "result");
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: changed\n", __FUNCTION__, __LINE__);
+                       if(NULL != json_result)
+                       {
+                               char * value_result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_result, "result"));
+                               uint32 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_aigc_trans_text_middle_screen_update();                                   
+                               }
+                       }
+               }               
+               else if(0 == strncmp(value_event_str, "SentenceEnd", strlen("SentenceEnd")))
+               {
+                       // end
+                       cJSON * json_result = cJSON_GetObjectItem(json_root, "result");
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: transcription end\n", __FUNCTION__, __LINE__);
+                       if(NULL != json_result)
+                       {
+                               char * value_result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_result, "result"));
+                               uint32 value_result_len = strlen(value_result_str);
+                               
+                               if(true == mmi_aigc_trans_result_text_store(value_result_str, value_result_len, true))
+                               {
+                                       // refresh ui
+                                       mmi_aigc_trans_text_stop_screen_update();                                       
+                               }
+                       }
+               }
+               else if(0 == strncmp(value_event_str, "TranscriptionCompleted", strlen("TranscriptionCompleted")))
+               {
+                       // stop
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: transcription stop\n", __FUNCTION__, __LINE__);
+
+               }
+       }
+
+EXIT_AND_FREE:
+       if(NULL != json_root)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__);
+               cJSON_Delete(json_root);
+               json_root = PNULL;
+       }
 }
 
-/*****************************************************************************/
-//  Description : ´¦ÀíÄÖÁåÆô¶¯¿ª»ú½çÃæµÄÏûÏ¢(³ýPSÖ®Íâ)
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleAlarmStartupWindow (
-                                             MMI_WIN_ID_T    win_id,    // STARTUP ALARM´°¿ÚµÄID
-                                             MMI_MESSAGE_ID_E   msg_id,     // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                             DPARAM             param       // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                             )
+
+
+// chat
+void mmi_aigc_send_chat_text_msg(void * param, uint32 param_size)
 {
-    MMI_RESULT_E    result = MMI_RESULT_TRUE;
-    GUI_LCD_DEV_INFO    lcd_dev_info = {GUI_LCD_0, GUI_BLOCK_0};
-    
-    lcd_dev_info.lcd_id = GUI_MAIN_LCD_ID;
-    lcd_dev_info.block_id = GUI_BLOCK_MAIN;
-    
-    switch (msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-        MMK_StopTimer(s_3sec_timer_id);
-        s_3sec_timer_id = 0;
-        break;
-        
-    case MSG_FULL_PAINT:
-        //ÉèÖÃÄÖÖÓ±³¾°Í¼
-        if(MMK_IsOpenWin(MMIPUB_QUERY_WIN_ID))
-        {
-            MMK_CloseWin(MMIPUB_QUERY_WIN_ID);
-        }
-        //ѯÎÊÊÇ·ñ¿ª»ú!!
-        MMIPUB_OpenQueryWinByTextId(TXT_STARTUP_OR_NOT,IMAGE_PUBWIN_QUERY,PNULL,HandleStartOrNotWindow);
-        if (s_3sec_timer_id != 0)
-        {
-            MMK_StopTimer(s_3sec_timer_id);
-            s_3sec_timer_id = 0;
-        }
-        s_3sec_timer_id = MMK_CreateTimer(ALM_3SEC_TIME, FALSE);
-        break;
-        
-    case MSG_TIMER:
-        if (s_3sec_timer_id == *((uint8 *)param))
-        {
-            MMK_StopTimer(s_3sec_timer_id);
-            s_3sec_timer_id = 0;
-            
-            //¹Ø±ÕѯÎÊ´°¿Ú
-            MMIPUB_CloseQuerytWin(PNULL);
-            
-            //destroyÄÖÁå½çÃæ
-            MMK_CloseWin(PHONE_STARTUP_ALARM_WIN_ID);
-            
-            if (STARTUP_ALARM == MMIAPIPHONE_GetStartUpCondition() || STARTUP_CHARGE == MMIAPIPHONE_GetStartUpCondition())
-            {
-                //POWER_PowerOff()֮ǰ¹Ø±Õ±³¹â
-                MMIDEFAULT_TurnOffBackLight();
-                MMIDEFAULT_SetKeybadBackLight(FALSE);
-                
-                // ¹Ø»ú
-                POWER_PowerOff();
-            }
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
-        
-    case MSG_PROMPTWIN_OK:
-    case MSG_KEYLONG_RED:
-        MMK_StopTimer(s_3sec_timer_id);
-        s_3sec_timer_id = 0;
-        //¹Ø±ÕѯÎÊ´°¿Ú
-        MMIPUB_CloseQuerytWin(PNULL);
-        
-        //destroyÄÖÁå½çÃæ
-        MMK_CloseWin(PHONE_STARTUP_ALARM_WIN_ID);
-        
-        // ¿ª»ú
-        MMIAPIPHONE_PowerReset();
-        // ¼Ç¼¿ª»ú·½Ê½
-        MMIAPIPHONE_SetStartUpCondition(STARTUP_NORMAL);
-        break;
-        
-    case MSG_PROMPTWIN_CANCEL:
-    case MSG_APP_RED:
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.    
-    case MSG_APP_FLIP:
-#endif    
-        MMK_StopTimer(s_3sec_timer_id);
-        s_3sec_timer_id = 0;
-
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-        if(MSG_APP_FLIP == msg_id)
-        {
-            MMIDEFAULT_HandleFlipKey(FALSE);
-        }
-#endif
-        
-        //¹Ø±ÕѯÎÊ´°¿Ú
-        MMIPUB_CloseQuerytWin(PNULL);
-        
-        //destroyÄÖÁå½çÃæ
-        MMK_CloseWin(PHONE_STARTUP_ALARM_WIN_ID);
-        
-        if (STARTUP_ALARM == MMIAPIPHONE_GetStartUpCondition() || STARTUP_CHARGE == MMIAPIPHONE_GetStartUpCondition())
-        {
-            //POWER_PowerOff()֮ǰ¹Ø±Õ±³¹â
-            MMIDEFAULT_TurnOffBackLight();
-            MMIDEFAULT_SetKeybadBackLight(FALSE);
-            
-            // ¹Ø»ú
-            POWER_PowerOff();
-        }
-        break;
-    case MSG_CLOSE_WINDOW:
-        if(0!=s_3sec_timer_id)
-        {
-            MMK_StopTimer(s_3sec_timer_id);
-            s_3sec_timer_id = 0;
-        }
-        break;
-        
-    default:
-        result = MMI_RESULT_FALSE;
-        break;
-    }
-    
-    return (result);
+       mmi_aigc_data_send_task_msg_send(MMI_AIGC_MSG_CHAT_TEXT_SEND, param, param_size);
 }
 
-/*****************************************************************************/
-//  Description : ¹Ø»úÄÖÖÓºó£¬ÊÇ·ñ¿ª»úѯÎÊ´°¿Ú´¦Àíº¯Êý
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleStartOrNotWindow( 
-                                          MMI_WIN_ID_T     win_id, 
-                                          MMI_MESSAGE_ID_E    msg_id, 
-                                          DPARAM              param
-                                          )
+static void mmi_aigc_send_chat_text_data_process(void * data_ptr, uint32 data_len)
 {
-    MMI_RESULT_E result = MMI_RESULT_TRUE;
-    
-    switch(msg_id)
-    {
-    case MSG_KEYLONG_RED:
-        //¹Ø±ÕѯÎÊ´°¿Ú
-        MMIPUB_CloseQuerytWin(PNULL);
-        
-        //destroyÄÖÁå½çÃæ
-        MMK_CloseWin(PHONE_STARTUP_ALARM_WIN_ID);
-        
-        // ¿ª»ú
-        MMIAPIPHONE_PowerReset();
-        // ¼Ç¼¿ª»ú·½Ê½
-        MMIAPIPHONE_SetStartUpCondition(STARTUP_NORMAL);
-        break;
-
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        MMIDEFAULT_HandleFlipKey(FALSE);
-        //¹Ø±ÕѯÎÊ´°¿Ú
-        MMIPUB_CloseQuerytWin(PNULL);
-        
-        //destroyÄÖÁå½çÃæ
-        MMK_CloseWin(PHONE_STARTUP_ALARM_WIN_ID);
-        
-        if (STARTUP_ALARM == MMIAPIPHONE_GetStartUpCondition())
-        {
-            // ¹Ø»ú
-            MMIDEFAULT_TurnOffBackLight();
-            MMIDEFAULT_SetKeybadBackLight(FALSE);
-            POWER_PowerOff();
-        }
-        break;
-#endif
-        
-    default:
-        result = MMIPUB_HandleQueryWinMsg(win_id,msg_id,param);
-        break;
-    }
-    
-    return (result);
+       int ret = 0;
+       uint32 temp_len = 0;
+       uint32 send_buff_len = data_len + 128;
+       char * send_buff_ptr = SCI_ALLOC_APPZ(send_buff_len);
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d,data=%s\n", __FUNCTION__, __LINE__, data_len, data_ptr);
+       
+       if(NULL == send_buff_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       SCI_MEMSET(send_buff_ptr, 0x0, send_buff_len);
+       
+       temp_len = sprintf(send_buff_ptr, "{\"type\":\"chat\",\"content\":\"%s\"}", data_ptr);
+
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: send_len=%d\n", __FUNCTION__, __LINE__, temp_len);
+       ret = mmi_aigc_chat_websocket_send_text_data(send_buff_ptr, temp_len);
+       if(0 > ret)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d,send fail\n", __FUNCTION__, __LINE__, ret);
+       }
+
+       if(NULL != send_buff_ptr)
+       {
+               SCI_FREE(send_buff_ptr);
+               send_buff_ptr = NULL;
+       }
 }
 
-/*****************************************************************************/
-//  Description : ´¦Àí¹Ø»ú½çÃæ
-//  Global resource dependence : 
-//  Author: Jassmine
-//  Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandlePowerOffWindow(
-                                        MMI_WIN_ID_T     win_id,    // STARTUP NORMAL´°¿ÚµÄID
-                                        MMI_MESSAGE_ID_E    msg_id,     // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                        DPARAM              param       // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                        )
-{   
-    MMI_RESULT_E    result = MMI_RESULT_TRUE;
-    static uint8    s_power_off_timer_id = 0;             // ¹Ø»ú½çÃæ³ÖÐøÊ±¼äµÄIDºÅ
-    MMISET_POWER_ON_OFF_ANIM_INFO_T power_on_off_anim_info = {0};
-    
-    switch (msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-#ifdef UI_MULTILAYER_SUPPORT
-        UILAYER_SetMainLayerType(DATA_TYPE_RGB565);
-#endif
-#ifdef MAINLCD_SIZE_128X64 //added by taiping.lai 2011/01/12
-        {
-            GUI_LCD_DEV_INFO lcd_dev_info = {GUI_LCD_0, GUI_BLOCK_0};
-            GUI_RECT_T   rect = {0, 0, MMI_MAINSCREEN_WIDTH-1, MMI_MAINSCREEN_HEIGHT-1};
-
-            LCD_FillRect((const GUI_LCD_DEV_INFO*)&lcd_dev_info, rect, MMI_WHITE_COLOR);    
-       }
-#endif 
-        MMIDEFAULT_AllowTurnOffBackLight(FALSE);
-        MMIAPISET_StopAllRing(TRUE);  
-        //s_is_play_default = TRUE;
-#ifndef MMI_POWERONOFFMP4_ENABLE
-        s_is_play_power_on_mp4 = FALSE; 
-        SCI_MEMSET(&power_on_off_anim_info,0,sizeof( MMISET_POWER_ON_OFF_ANIM_INFO_T));
-        MMIAPISET_GetPowerOnOffAnimInfo(&power_on_off_anim_info, FALSE);
-        if (MMISET_POWER_ON_OFF_ANIM_DEFAULT == power_on_off_anim_info.anim_type)
-        {
-            PlayDefaultPowerOnOffAnimation(FALSE);
-        }
-        else if((MMISET_POWER_ON_OFF_ANIM_MORE == power_on_off_anim_info.anim_type) 
-                || (MMISET_POWER_ON_OFF_PIC_MORE == power_on_off_anim_info.anim_type))
-        {
-            if(!MMIAPIFMM_IsFileExist(power_on_off_anim_info.more_anim_info.name_wstr,power_on_off_anim_info.more_anim_info.name_wstr_len))
-            {
-                PlayDefaultPowerOnOffAnimation(FALSE);
-            }
-            else
-            {    
-                uint16 suffix_wstr[MMIFMM_FILENAME_LEN + 1]        = {0};
-                uint16 suffix_len = MMIFMM_FILENAME_LEN;
-               #ifdef DRM_SUPPORT            
-                MIME_TYPE_E drmmime = MMIAPIDRM_GetDRMFileMimeType(0, power_on_off_anim_info.more_anim_info.name_wstr);
-               #endif
-                MMIAPIFMM_SplitFileName(power_on_off_anim_info.more_anim_info.name_wstr, 
-                    power_on_off_anim_info.more_anim_info.name_wstr_len, 
-                    PNULL, PNULL, suffix_wstr, &suffix_len);
-
-                if(MMIFMM_FILE_TYPE_PICTURE == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len)
-               #ifdef DRM_SUPPORT
-                     || (MMIFMM_FILE_TYPE_DRM == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len)
-                            &&( drmmime <= MIME_TYPE_IMAGE_IEF && drmmime >= MIME_TYPE_IMAGE_ANY))
-                #endif
-                    )
-                {
-                    PlayMorePowerOnOffAnimation(FALSE,&power_on_off_anim_info);
-                }
-            }
-
-        }
-#endif
-        // ¿ªÆô´°¿Ú¶¨Ê±Æ÷
-        if (s_power_off_timer_id != 0)
-        {
-            MMK_StopTimer(s_power_off_timer_id);
-            s_power_off_timer_id = 0;
-        }
-        s_power_off_timer_id = MMK_CreateTimer(PHONE_POWER_OFF_DURING_TIME, FALSE);
-        break;
-        
-    case MSG_FULL_PAINT:
-
-        #ifdef VIDEO_PLAYER_SUPPORT 
-        MMIAPIVP_ExitPlay();//andy.he_crNEWMS00116228
-        #endif
-        
-        PlayPowerOnOffMP4(FALSE);
-        break;
-
-    case MSG_TIMER:
-        if (s_power_off_timer_id == *((uint8 *) param))
-        {
-            // ¹Ø±Õ¹Ø»ú´°¿Ú¶¨Ê±Æ÷
-            MMK_StopTimer(s_power_off_timer_id);
-            s_power_off_timer_id = 0;                    
-            SCI_MEMSET(&power_on_off_anim_info, 0, sizeof(MMISET_POWER_ON_OFF_ANIM_INFO_T));
-            MMIAPISET_GetPowerOnOffAnimInfo(&power_on_off_anim_info, FALSE);
-#ifdef VIDEO_PLAYER_SUPPORT               
-            if((MMISET_POWER_ON_OFF_ANIM_MORE == power_on_off_anim_info.anim_type)
-                || (MMISET_POWER_ON_OFF_PIC_MORE == power_on_off_anim_info.anim_type))
-            {
-                uint16 suffix_wstr[MMIFMM_FILENAME_LEN + 1]        = {0};
-                uint16 suffix_len = MMIFMM_FILENAME_LEN;
-                MMIAPIFMM_SplitFileName(power_on_off_anim_info.more_anim_info.name_wstr, 
-                    power_on_off_anim_info.more_anim_info.name_wstr_len, 
-                    PNULL, PNULL, suffix_wstr, &suffix_len);
-                if(MMIFMM_FILE_TYPE_PICTURE == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len))
-                {
-                    PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                }
-                else
-                {
-#ifdef MMI_POWERONOFFMP4_ENABLE
-                    MMIAPIVP_ExitPlay();
-#else
-                    //if(s_is_play_default)//cr151078
-                    //{
-                    PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                    //}
-#endif
-                }
-
-            }
-            else if(MMISET_POWER_ON_OFF_ANIM_DEFAULT == power_on_off_anim_info.anim_type)
-            {
-#ifdef MMI_POWERONOFFMP4_ENABLE
-                MMIAPIVP_ExitPlay();
-#else
-                PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-#endif
-            }
-#else
-            PlayPowerOnOffMP4CallBack();
-#endif
-            
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
-        
-    case MSG_GET_FOCUS:  
-        MMK_CloseWin(win_id);        
-        break;
-        
-    case MSG_LOSE_FOCUS: 
-#ifdef UI_MULTILAYER_SUPPORT
-        UILAYER_SetMainLayerType(MMITHEME_GetMainLayerDefaultType());
-#endif
-#ifdef VIDEO_PLAYER_SUPPORT
-       MMIAPIVP_ExitPlay();
-#endif
-        break;
-        
-    case MSG_CLOSE_WINDOW:
-#ifdef UI_MULTILAYER_SUPPORT
-        UILAYER_SetMainLayerType(MMITHEME_GetMainLayerDefaultType());
-#endif
-        // ¹Ø±Õ¹Ø»ú´°¿Ú¶¨Ê±Æ÷
-        if (s_power_off_timer_id != 0)
-        {
-            MMK_StopTimer(s_power_off_timer_id);
-            s_power_off_timer_id = 0;
-        }
-
-#ifdef VIDEO_PLAYER_SUPPORT
-        MMIAPIVP_ExitPlay();
+
+void mmi_aigc_chat_websocket_recv_data_handler(char * data_ptr, int data_len)
+{
+       cJSON * json_root = PNULL;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d\n", __FUNCTION__, __LINE__, data_len);
+       
+       if(NULL == data_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: no data\n", __FUNCTION__, __LINE__);
+               return;
+       }
+
+#ifdef MMI_AIGC_DEBUG_TO_FILE
+       mmi_debug_info_write_to_file(AIGC_RECV_CHAT_FILE, data_ptr, data_len);
 #endif
-#if defined(MMI_POWERONOFFMP4_ENABLE)
-               if (PNULL != s_poweronoff_buffer_ptr)
+
+       json_root = cJSON_Parse(data_ptr);
+       if(NULL != json_root)
+       {
+               // "type"
+               char * value_type_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, "type"));
+               if(0 == strncmp(value_type_str, "start", strlen("start")))
                {
-                       SCI_FREE(s_poweronoff_buffer_ptr);
-                       s_poweronoff_buffer_ptr = PNULL;
+                       // start
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: chat start\n", __FUNCTION__, __LINE__);
+                       
                }
-#endif
-        //¹Ø»ú
-        MMIDEFAULT_TurnOffBackLight();
-        MMIDEFAULT_SetKeybadBackLight(FALSE);
-        //any way
-        //MMIDEFAULT_EnableKeyRing(TRUE);
-        //MMIDEFAULT_EnableTpRing(TRUE);
-        MMIDEFAULT_AllowTurnOffBackLight(TRUE);
-        //ΪÁËÏû³ý¶ú»úģʽÇé¿öϳöÏÖµÄpuÒô
-        MMIAPISET_StopAllRing(TRUE);
-        SCI_Sleep(2000);
-#ifdef ENG_SUPPORT
-        MMIAPIENG_SaveLastTime();
-#endif
-        POWER_PowerOff();
-        break;
-        
-#ifdef LCD_SLIDE_SUPPORT
-    case MSG_KEYDOWN_SLIDE:
-    case MSG_KEYUP_SLIDE:
-#endif
-    case MSG_KEYDOWN_UPSIDE:
-    case MSG_KEYDOWN_DOWNSIDE:
-    case MSG_KEYREPEAT_UPSIDE:
-    case MSG_KEYREPEAT_DOWNSIDE:
-    case MSG_APP_RED:
-    case MSG_KEYLONG_RED:
-       case MSG_KEYUP_RED:
-        break;
-
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        MMIDEFAULT_HandleFlipKey(FALSE);
-        break;
-#endif
-        
-    default:
-        result = MMI_RESULT_FALSE;
-        break;
-    }
-    
-    return (result);
+               else if(0 == strncmp(value_type_str, "middle", strlen("middle")))
+               {
+                       // middle
+                       char * value_content_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, "content"));
+                       uint32 value_content_len = strlen(value_content_str);
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: chat middle\n", __FUNCTION__, __LINE__);
+                       
+                       if(true == mmi_aigc_chat_result_text_store(value_content_str, value_content_len))
+                       {
+                               // refresh ui
+                               //mmi_aigc_chat_text_middle_screen_update();
+                       }
+               }
+               else if(0 == strncmp(value_type_str, "end", strlen("end")))
+               {
+                       // stop
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: chat stop\n", __FUNCTION__, __LINE__);
+
+                       // refresh ui
+                       mmi_aigc_chat_text_stop_screen_update();
+               }
+       }
+
+EXIT_AND_FREE:
+       if(NULL != json_root)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__);
+               cJSON_Delete(json_root);
+               json_root = NULL;
+       }
 }
 
-/*****************************************************************************/
-//  Description : Play mpeg4 as power on off animation.
-//  Global resource dependence : 
-//  Author: bruce.chi
-//  Note: Modified by apple.zhang
-/*****************************************************************************/
-LOCAL BOOLEAN PlayPowerOnOffMP4(BOOLEAN is_power_on_off)    //TRUE:power on, FALSE:power off
+
+
+// tts
+void mmi_aigc_send_tts_text_msg(void * param, uint32 param_size)
 {
-#ifdef VIDEO_PLAYER_SUPPORT   
-    MMIAUD_RING_DATA_INFO_T         file_info = {0};/*lint !e64*/ 
-    uint8                           power_midi_volume = MMISET_VOL_ZERO;
-    VP_PLAY_PARAM_T                     play_param  = {0};
-    MMISET_POWER_ON_OFF_ANIM_INFO_T power_on_off_anim_info = {0};
-    GUI_RECT_T                     full_rect = {0};
-   
-
-    s_is_play_power_on_mp4 = is_power_on_off;
-    //SCI_TRACE_LOW:"[POWERONOFF]:PlayPowerOnOffMP4:is_power_on=%d"
-    SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_ONOFF_970_112_2_18_2_45_26_225,(uint8*)"d", is_power_on_off);
-    
-    SCI_MEMSET(&file_info, 0, sizeof(MMIAUD_RING_DATA_INFO_T));  
-    SCI_MEMSET(&power_on_off_anim_info,0,sizeof(MMISET_POWER_ON_OFF_ANIM_INFO_T));
-    
-    MMIAPISET_GetPowerOnOffAnimInfo(
-        &power_on_off_anim_info, 
-        is_power_on_off
-        );
-    
-    if(0 == MMIAPIENVSET_GetActiveModeOptValue(MN_DUAL_SYS_1,POWER_RING_SWITCH))
-    {
-        power_midi_volume = MMIAPIENVSET_GetActiveModeRingVol(MMISET_RING_TYPE_POWER);
-    }
-    MMIAPIPHONE_SetPowerAnimMpeg4Flag(TRUE);
-
-    SCI_MEMSET(&play_param,0,sizeof(VP_PLAY_PARAM_T));
-    play_param.dual_sys = MN_DUAL_SYS_1;
-    play_param.is_random_play = FALSE;
-    play_param.mode = VP_REPEAT_PLAY_MODE_CLOSE;
-    play_param.url_ptr = PNULL;
-    play_param.display_param.audioSupport = 1;
-    play_param.display_param.videoSupport = 1;
-    play_param.is_scal_up = TRUE;
-    play_param.display_param.RotateAngle = GUILCD_GetLogicAngle(GUI_MAIN_LCD_ID); 
-    full_rect = MMITHEME_GetFullScreenRect();
-
-    if (LCD_ANGLE_0 == play_param.display_param.RotateAngle)
-    {
-        play_param.display_param.RotateAngle = LCD_ANGLE_90;
-        play_param.display_param.disp_rect.dy = full_rect.right - full_rect.left + 1;           
-        play_param.display_param.disp_rect.dx = full_rect.bottom - full_rect.top + 1;
-    }
-    else if(LCD_ANGLE_180 == play_param.display_param.RotateAngle)
-    {
-        play_param.display_param.RotateAngle = LCD_ANGLE_270;
-        play_param.display_param.disp_rect.dy = full_rect.right - full_rect.left + 1;           
-        play_param.display_param.disp_rect.dx = full_rect.bottom - full_rect.top + 1;
-    }
-    else
-    {
-        play_param.display_param.disp_rect.dx = full_rect.right - full_rect.left + 1;           
-        play_param.display_param.disp_rect.dy = full_rect.bottom - full_rect.top + 1;
-    }
-                
-    
-
-    play_param.display_param.target_rect.x = play_param.display_param.disp_rect.x;
-    play_param.display_param.target_rect.y = play_param.display_param.disp_rect.y;
-    play_param.display_param.target_rect.dx = play_param.display_param.disp_rect.dx;
-    play_param.display_param.target_rect.dy = play_param.display_param.disp_rect.dy;
-
-    play_param.display_param.disp_mode = DPLAYER_DISP_CUSTOMIZE;
-
-    switch (power_on_off_anim_info.anim_type)
-    {
-    case MMISET_POWER_ON_OFF_ANIM_DEFAULT:
-#if defined(MMI_POWERONOFFMP4_ENABLE)
-        MMI_GetRingInfo(OPEN_MP4, &file_info); 
-        play_param.play_type = VP_PLAY_FROM_BUFFER;
-        play_param.video_buf_info.type = MMICOM_VIDEO_TYPE_3GP;
-        play_param.video_buf_info.video_buf_len = file_info.data_len;
-        play_param.video_buf_info.video_buf_ptr = SCI_ALLOCA(file_info.data_len);
-               if (PNULL == play_param.video_buf_info.video_buf_ptr)
-               {
-                       PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                       break;
-               }
-               SCI_MEMSET(play_param.video_buf_info.video_buf_ptr,0,file_info.data_len);
-               SCI_MEMCPY(play_param.video_buf_info.video_buf_ptr,file_info.data_ptr,file_info.data_len);
-               s_poweronoff_buffer_ptr = play_param.video_buf_info.video_buf_ptr;    
-        play_param.vol = power_midi_volume;
-        if(!MMIAPIVP_Play(&play_param, HandleVideoPowerOnOffMsg, 0))
-        {
-            PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-        }
+       mmi_aigc_data_send_task_msg_send(MMI_AIGC_MSG_TTS_TEXT_SEND, param, param_size);
+}
+
+static void mmi_aigc_send_tts_text_data_process(void * data_ptr, uint32 data_len)
+{
+       int ret = 0;
+       uint32 temp_len = 0;
+       uint32 send_buff_len = data_len + 256;
+       char * send_buff_ptr = SCI_ALLOC_APPZ(send_buff_len);
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d\n", __FUNCTION__, __LINE__, data_len);
+       
+       if(NULL == send_buff_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       SCI_MEMSET(send_buff_ptr, 0x0, send_buff_len);
+       
+       temp_len = 0;
+       temp_len += sprintf(send_buff_ptr + temp_len, "{\"header\":{\"event\":\"LongTextStream\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"},");
+       temp_len += sprintf(send_buff_ptr + temp_len, "\"payload\":{\"voice\":\"xiaoyun\",\"format\":\"mp3\",\"sample_rate\":8000,\"volume\":50,\"speech_rate\":2,"); // 0,");
+       temp_len += sprintf(send_buff_ptr + temp_len, "\"text\":\"%s\"}}", data_ptr); // 185 + data_len
+
+#ifdef MMI_AIGC_DEBUG_TO_FILE
+       mmi_debug_info_write_to_file(AIGC_SEND_TTS_TEXT_FILE, send_buff_ptr, temp_len);
+#endif
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: send_len=%d\n", __FUNCTION__, __LINE__, temp_len);
+       ret = mmi_aigc_tts_websocket_send_text_data(send_buff_ptr, temp_len);
+       if(0 > ret)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d,send fail\n", __FUNCTION__, __LINE__, ret);
+               //mmi_aigc_list_screen_signal_weak_prompt();
+       }
+
+       if(NULL != send_buff_ptr)
+       {
+               SCI_FREE(send_buff_ptr);
+               send_buff_ptr = NULL;
+       }
+}
+
+void mmi_aigc_tts_websocket_recv_data_handler(char * data_ptr, int data_len)
+{
+       cJSON * json_root = PNULL;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d\n", __FUNCTION__, __LINE__, data_len);
+       
+       if(NULL == data_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: no data\n", __FUNCTION__, __LINE__);
+               return;
+       }
+
+#ifdef MMI_AIGC_DEBUG_TO_FILE
+       mmi_debug_info_write_to_file(AIGC_RECV_TTS_FILE, data_ptr, data_len);
 #endif
-        break;
-
-
-    case MMISET_POWER_ON_OFF_ANIM_MORE:
-    case MMISET_POWER_ON_OFF_PIC_MORE:
-        if(MMIAPIFMM_IsFileExist(power_on_off_anim_info.more_anim_info.name_wstr,power_on_off_anim_info.more_anim_info.name_wstr_len))
-        {   
-            uint16 suffix_wstr[MMIFMM_FILENAME_LEN + 1]        = {0};
-            uint16 suffix_len = MMIFMM_FILENAME_LEN;
-           #ifdef DRM_SUPPORT            
-            MIME_TYPE_E drmmime = MMIAPIDRM_GetDRMFileMimeType(0, power_on_off_anim_info.more_anim_info.name_wstr);
-           #endif
-            MMIAPIFMM_SplitFileName(power_on_off_anim_info.more_anim_info.name_wstr, 
-                power_on_off_anim_info.more_anim_info.name_wstr_len, 
-                PNULL, PNULL, suffix_wstr, &suffix_len);
-
-            if(MMIFMM_FILE_TYPE_PICTURE == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len)
-           #ifdef DRM_SUPPORT
-                 || (MMIFMM_FILE_TYPE_DRM == MMIAPIFMM_ConvertFileType(suffix_wstr,suffix_len)
-                        &&( drmmime <= MIME_TYPE_IMAGE_IEF && drmmime >= MIME_TYPE_IMAGE_ANY))
-            #endif
-                )
-            {
-                PlayMorePowerOnOffAnimation(is_power_on_off,&power_on_off_anim_info);
-            }
-            else
-            {
-                play_param.play_type = VP_PLAY_FROM_FILE;
-                play_param.full_path_len = power_on_off_anim_info.more_anim_info.name_wstr_len;
-                play_param.full_path_ptr = power_on_off_anim_info.more_anim_info.name_wstr; 
-                play_param.vol = power_midi_volume;
-                //s_is_play_default = FALSE;
-                if(!MMIAPIVP_Play(&play_param, HandleVideoPowerOnOffMsg, 0))
-                {
-                    PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                }  
-            }
-        }
-        else
-        {
-            #if defined(MMI_POWERONOFFMP4_ENABLE)
-            MMI_GetRingInfo(OPEN_MP4, &file_info); 
-            play_param.play_type = VP_PLAY_FROM_BUFFER;
-            play_param.video_buf_info.type = MMICOM_VIDEO_TYPE_3GP;
-            play_param.video_buf_info.video_buf_len = file_info.data_len;
-                       play_param.video_buf_info.video_buf_ptr = SCI_ALLOCA(file_info.data_len);
-                       if (PNULL == play_param.video_buf_info.video_buf_ptr)
+
+       json_root = cJSON_Parse(data_ptr);
+       if(NULL != json_root)
+       {
+               cJSON * json_header = cJSON_GetObjectItem(json_root, "header");
+               if(NULL != json_header)
+               {
+                       char * value_event_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_header, "event"));
+                       if(0 == strncmp(value_event_str, "EndSynthesis", strlen("EndSynthesis")))
                        {
-                               PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-                               break;
+                               // end
+                               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: EndSynthesis\n", __FUNCTION__, __LINE__);
+                               
+                               mmi_aigc_tts_end_synthesis_action();
                        }
-                       SCI_MEMSET(play_param.video_buf_info.video_buf_ptr,0,file_info.data_len);
-                       SCI_MEMCPY(play_param.video_buf_info.video_buf_ptr,file_info.data_ptr,file_info.data_len);
-                       s_poweronoff_buffer_ptr = play_param.video_buf_info.video_buf_ptr;    
-              
-            play_param.vol = power_midi_volume;
-            if(!MMIAPIVP_Play(&play_param, HandleVideoPowerOnOffMsg, 0))
-            {
-                PlayPowerOnOffMP4CallBack(VP_PLAY_END_END_SUCCESS);
-            }            
-            #endif
-        }
-        break;
-
-    default:
-        //SCI_TRACE_LOW:"[POWERONOFF]:PlayPowerOnOffMP4:anim_type=%d"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_ONOFF_1086_112_2_18_2_45_27_226,(uint8*)"d", power_on_off_anim_info.anim_type);
-        break;
-    }
-    
-#endif
-    return TRUE;
+               }
+       }
+       else
+       {
+               // tts data
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: tts data\n", __FUNCTION__, __LINE__);
 
+               if(true == mmi_aigc_tts_audio_store(data_ptr, data_len))
+               {
+               
+               }
+       }
+
+       if(NULL != json_root)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__);
+               cJSON_Delete(json_root);
+               json_root = NULL;
+       }
 }
 
 
index 09290de..3012c3f 100644 (file)
 #include "mn_api.h"
 #include "guictrl_api.h"
 #include "mmidisplay_data.h"
+#include "guianim.h"
 #include "mmi_aigc_internal.h"
+#include "mmi_link.h"
 
 
 #ifdef MMI_CUSTOM_AIGC_SUPPORT
 
 static MMI_AIGC_UI_STATE_E s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
+static MMI_AIGC_UI_ITEM_INFO_T s_aigc_self_item_t = {0};
+static MMI_AIGC_UI_ITEM_INFO_T s_aigc_other_item_t = {0};
+
+static char * s_aigc_record_buffer = PNULL;
+static uint32 s_aigc_record_size = 0;
+static wchar s_aigc_record_file[64] = {0};
+static MMISRV_HANDLE_T s_aigc_record_handle = INVALID_HANDLE;
+static MMISRV_HANDLE_T s_aigc_audio_handle = INVALID_HANDLE;
+
+static uint8 s_aigc_timer_id = 0;
+
+static uint32 s_aigc_recording_sent_size = 0;
+static uint32 s_aigc_tts_text_sent_size = 0;
+static BOOLEAN s_aigc_trans_text_end = FALSE;
+static BOOLEAN s_aigc_tts_audio_playing = FALSE;
+
+static MMI_LINK_NODE_T * s_aigc_tts_audio_ll_ptr = PNULL;
+
+
+#define MMI_AIGC_SEND_TTS_TEXT_MAX (150) // 50
+#define MMI_AIGC_SEND_TTS_TEXT_MIN (99) // 33
+
+
+#define MMI_AIGC_SELF_ITEM_BACKGROUND_COLOR (GUI_RGB2RGB565(79, 195, 76))
+#define MMI_AIGC_OTHER_ITEM_BACKGROUND_COLOR (GUI_RGB2RGB565(25, 25, 25))
+
+
+//#define __RECORD_USE_BUF__
+
+
+static void mmi_aigc_chat_text_download_requst(void);
+static void mmi_aigc_tts_audio_download_requst(void);
+static void mmi_aigc_tts_audio_ll_clean(void);
+static MMI_LINK_NODE_T * mmi_aigc_tts_audio_ll_add_tail_node(void);
+LOCAL void mmi_aigc_audio_play_start(void);
+LOCAL void mmi_aigc_audio_record_stop(void);
+LOCAL void mmi_aigc_update_to_list_win(void);
+LOCAL void mmi_aigc_update_to_thinking_win(void);
 
 
 /*
@@ -51,2143 +91,1740 @@ static MMI_AIGC_UI_STATE_E s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
     
 */
 
-
-
-LOCAL void mmi_aigc_thinking_win_display(void)
+static void mmi_aigc_all_data_clean(void)
 {
-       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
-       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
-       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
-       GUI_FONT_ALL_T font_all = {SONG_FONT_30, MMI_WHITE_COLOR};
-       GUI_BG_T ctrl_bg = {0};
-       GUI_RECT_T ctrl_rect = {0};
-       MMI_STRING_T display_text = {0};
-       uint16 image_width = 0;
-       uint16 image_height = 0;
-       GUI_POINT_T display_point = {0};
-       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
+       if(PNULL != s_aigc_self_item_t.text_data_ptr)
+       {
+               SCI_FREE(s_aigc_self_item_t.text_data_ptr);
+               s_aigc_self_item_t.text_data_ptr = PNULL;
+       }
+       s_aigc_self_item_t.text_data_size = 0;
        
-       MMIDEFAULT_AllowTurnOffBackLight(FALSE);
+       if(PNULL != s_aigc_other_item_t.text_data_ptr)
+       {
+               SCI_FREE(s_aigc_other_item_t.text_data_ptr);
+               s_aigc_other_item_t.text_data_ptr = PNULL;
+       }
+       s_aigc_other_item_t.text_data_size = 0;
 
-       // background
-       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
+#ifdef __RECORD_USE_BUF__      
+       if(PNULL != s_aigc_record_buffer)
+       {
+               SCI_FREE(s_aigc_record_buffer);
+               s_aigc_record_buffer = PNULL;
+       }
+       s_aigc_record_size = 0;
+#else
+       if(TRUE == MMIAPIFMM_IsFileExist(s_aigc_record_file, MMIAPICOM_Wstrlen(s_aigc_record_file)))
+       {
+               MMIAPIFMM_DeleteFile(s_aigc_record_file, PNULL);
+       }
+#endif
+
+       mmi_aigc_tts_audio_ll_clean();
+}
 
+BOOLEAN mmi_aigc_listening_stop(BOOLEAN is_cancel)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       mmi_aigc_audio_record_stop();
 
+       if(true == is_cancel)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       #ifdef __RECORD_USE_BUF__
+               if(PNULL != s_aigc_record_buffer)
+               {
+                       SCI_FREE(s_aigc_record_buffer);
+                       s_aigc_record_buffer = PNULL;
+               }
+               s_aigc_record_size = 0;
+       #else
+               if(TRUE == MMIAPIFMM_IsFileExist(s_aigc_record_file, MMIAPICOM_Wstrlen(s_aigc_record_file)))
+               {
+                       MMIAPIFMM_DeleteFile(s_aigc_record_file, PNULL);
+               }
+       #endif
+       
+        return FALSE;
+    }
 
+       return TRUE;
 }
 
-LOCAL void mmi_aigc_listening_win_display(void)
+char * mmi_aigc_trans_result_text_get(uint32 * data_len)
 {
-       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
-       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
-       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
-       GUI_FONT_ALL_T font_all = {SONG_FONT_30, MMI_WHITE_COLOR};
-       GUI_BG_T ctrl_bg = {0};
-       GUI_RECT_T ctrl_rect = {0};
-       MMI_STRING_T display_text = {0};
-       uint16 image_width = 0;
-       uint16 image_height = 0;
-       GUI_POINT_T display_point = {0};
-       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+       * data_len = s_aigc_self_item_t.text_data_size;
+       return (s_aigc_self_item_t.text_data_ptr);
+}
 
+BOOLEAN mmi_aigc_trans_result_text_store(char * data_buff, uint32 data_len, BOOLEAN is_end)
+{
+       char * temp_ptr = PNULL;
        
-       MMIDEFAULT_AllowTurnOffBackLight(FALSE);
+       if(NULL == data_buff || 0 == data_len)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return FALSE;
+       }
 
-       // background
-       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
+       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;
 
+       temp_ptr = SCI_ALLOC_APPZ(data_len + 1);
+       if(NULL == temp_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+               return FALSE;
+       }
+       SCI_MEMSET(temp_ptr, 0x0, data_len + 1);
+       SCI_MEMCPY(temp_ptr, data_buff, data_len);
+       
+       if(PNULL != s_aigc_self_item_t.text_data_ptr)
+       {
+               SCI_FREE(s_aigc_self_item_t.text_data_ptr);
+               s_aigc_self_item_t.text_data_ptr = NULL;
+       }
+       s_aigc_self_item_t.text_data_ptr = temp_ptr;
+       s_aigc_self_item_t.text_data_size = data_len;
+       
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, s_aigc_self_item_t.text_data_size, s_aigc_self_item_t.text_data_ptr);
 
+#ifdef MMI_AIGC_DEBUG_TO_FILE
+       mmi_debug_info_write_to_file(AIGC_RECV_TRANS_RESULT_FILE, s_aigc_self_item_t.text_data_ptr, s_aigc_self_item_t.text_data_size);
+#endif
 
+       return TRUE;
 }
 
-LOCAL void mmi_aigc_default_win_display(void)
+void mmi_aigc_trans_text_middle_screen_update(void)
 {
-       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
-       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
-       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
-       GUI_FONT_ALL_T font_all = {SONG_FONT_30, MMI_WHITE_COLOR};
-       GUI_BG_T ctrl_bg = {0};
-       GUI_RECT_T ctrl_rect = {0};
-       MMI_STRING_T display_text = {0};
-       uint16 image_width = 0;
-       uint16 image_height = 0;
-       GUI_POINT_T display_point = {0};
-       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+#if 0
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: ui_state=%d\n", __FUNCTION__, __LINE__, s_aigc_ui_state);
+               
+       if(MMI_AIGC_UI_STATE_LISTENING == s_aigc_ui_state || MMI_AIGC_UI_STATE_LISTENING_MIDDLE == s_aigc_ui_state)
+       {               
+               if(0 != mmi_aigc_msg_count_get())
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
+                       mmi_aigc_listening_middle_screen_display();
+               }
+       }
+#endif
+}
 
-       MMIDEFAULT_AllowTurnOffBackLight(FALSE);
+void mmi_aigc_trans_text_stop_screen_update(void)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: ui_state=%d\n", __FUNCTION__, __LINE__, s_aigc_ui_state);
 
-       // background
-       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
+       // wb
+       mmi_aigc_trans_websocket_close();
+       mmi_aigc_chat_websocket_open();
 
-       // label 0
-       ctrl_rect.left = 0;
-       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
-       ctrl_rect.top = 50;
-       ctrl_rect.bottom = ctrl_rect.top + 40;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_NONE;
-       //ctrl_bg.img_id = ;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_AIGC_ASSITANT, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+       mmi_aigc_chat_text_download_requst();
+       //s_aigc_timer_id = MMK_CreateTimerCallback(1500, mmi_aigc_listening_middle_win_timer_cb, 0, FALSE);
+}
 
-/*
-       // image
-       image_id = IMAGE_AIGC_DEFAULT;
-       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
-       display_point.x = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
-       display_point.y = (MMI_MAINSCREEN_HEIGHT- image_height) / 2 - 30;
-       IMG_EnableTransparentColor(TRUE);
-       GUIRES_DisplayImg(&display_point,
-                       PNULL,
-                       PNULL,
-                       win_id,
-                       image_id,
-                       dev_info_ptr);
-       IMG_EnableTransparentColor(FALSE);
-*/
-       // label 1
-       image_id = IMAGE_AIGC_DEFAULT;
-       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
-       ctrl_rect.top = (MMI_MAINSCREEN_HEIGHT- image_height) / 2 - 30;
-       ctrl_rect.bottom = ctrl_rect.top + image_height;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_IMG;
-       ctrl_bg.img_id = IMAGE_AIGC_PROMPT;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_2_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_AIGC_OPEN_FAIL, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_2_CTRL_ID, &display_text, FALSE);
+void mmi_aigc_trans_text_msg_send_action(void)
+{
+#ifndef __RECORD_USE_BUF__
+       char * temp_buf = PNULL;
+       uint32 temp_size = 0;
+       MMIFILE_HANDLE file_handle = SFS_INVALID_HANDLE;
+       MMIFILE_ERROR_E file_error = SFS_NO_ERROR;
 
-       // label 2
-       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+       if(TRUE != MMIAPIFMM_IsFileExist(s_aigc_record_file, MMIAPICOM_Wstrlen(s_aigc_record_file)))
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               goto EXIT_AND_FREE;
+       }
 
-       // label 3
-       ctrl_rect.top = 250;
-       ctrl_rect.bottom = ctrl_rect.top + 50;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_IMG;
-       ctrl_bg.img_id = IMAGE_AIGC_RECORD_BUTTON_DEFAULT;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_AIGC_CONVERSATION, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
-       
-       // anim
-       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+       temp_buf = SCI_ALLOC_APPZ(MMI_AIGC_DATA_RECORD_SIZE_MAX);
+       if(PNULL == temp_buf)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               goto EXIT_AND_FREE;
+       }
+       SCI_MEMSET(temp_buf, 0x0, MMI_AIGC_DATA_RECORD_SIZE_MAX);
+       temp_size = 0;
+
+       file_handle = MMIAPIFMM_CreateFile(temp_buf, SFS_MODE_OPEN_EXISTING|SFS_MODE_READ, 0, 0);
+       if (SFS_INVALID_HANDLE == file_handle)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               goto EXIT_AND_FREE;
+       }
+       file_error = MMIAPIFMM_ReadFile(file_handle, temp_buf, MMI_AIGC_DATA_RECORD_SIZE_MAX, &temp_size, 0);
+       if (SFS_NO_ERROR != file_error)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: file_error=%d\n", __FUNCTION__, __LINE__, file_error);
+               goto EXIT_AND_FREE;
+       }
+
+       mmi_aigc_send_trans_audio_msg(temp_buf, temp_size);
+
+EXIT_AND_FREE:
+       if(PNULL != temp_buf)
+       {
+               SCI_FREE(temp_buf);
+               temp_buf = PNULL;
+       }
+       if(SFS_INVALID_HANDLE != file_handle)
+       {
+               MMIAPIFMM_CloseFile(file_handle);
+       }
+#endif
 }
 
-LOCAL void mmi_aigc_no_network_win_display(void)
+void mmi_aigc_trans_text_start_msg_send_fail(void)
 {
-       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
-       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
-       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
-       GUI_FONT_ALL_T font_all = {SONG_FONT_30, MMI_WHITE_COLOR};
-       GUI_BG_T ctrl_bg = {0};
-       GUI_RECT_T ctrl_rect = {0};
-       MMI_STRING_T display_text = {0};
-       char text_ptr[64] = {0};
-       wchar text_dis[64] = {0};
-       uint16 image_width = 0;
-       uint16 image_height = 0;
-       GUI_POINT_T display_point = {0};
-       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+       mmi_aigc_trans_websocket_close();
+       //mmi_aigc_listening_stop(true);        
        
+       //mmi_aigc_update_to_default_win();     
+}
 
-       // background
-       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
-
-       // label 0
-       ctrl_rect.left = 0;
-       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
-       ctrl_rect.top = 50;
-       ctrl_rect.bottom = ctrl_rect.top + 40;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_NONE;
-       //ctrl_bg.img_id = ;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_AIGC_ASSITANT, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+void mmi_aigc_trans_text_audio_msg_send_fail(void)
+{
+       mmi_aigc_trans_websocket_close();
+       mmi_aigc_trans_websocket_open();
+}
 
-/*
-       // image
-       image_id = IMAGE_AIGC_PROMPT;
-       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
-       display_point.x = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
-       display_point.y = 100;
-       IMG_EnableTransparentColor(TRUE);
-       GUIRES_DisplayImg(&display_point,
-                       PNULL,
-                       PNULL,
-                       win_id,
-                       image_id,
-                       dev_info_ptr);
-       IMG_EnableTransparentColor(FALSE);
-*/
-       // label 1
-       image_id = IMAGE_AIGC_PROMPT;
-       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
-       ctrl_rect.top = 100;
-       ctrl_rect.bottom = ctrl_rect.top + image_height;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_IMG;
-       ctrl_bg.img_id = IMAGE_AIGC_PROMPT;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_2_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_AIGC_OPEN_FAIL, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_2_CTRL_ID, &display_text, FALSE);
 
-       // label 2
-       ctrl_rect.top = MMI_MAINSCREEN_HEIGHT/ 2;
-       ctrl_rect.bottom = ctrl_rect.top + 70;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_NONE;
-       //ctrl_bg.img_id = ;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_2_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_AIGC_OPEN_FAIL, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_2_CTRL_ID, &display_text, FALSE);
-                       
-       // label 3
-       ctrl_rect.top = 250;
-       ctrl_rect.bottom = ctrl_rect.top + 50;
-       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
-       ctrl_bg.bg_type = GUI_BG_IMG;
-       ctrl_bg.img_id = IMAGE_AIGC_RECORD_BUTTON_PRESSED;
-       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
-       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
-       MMI_GetLabelTextByLang(TXT_COMMON_OK, &display_text);
-       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
-       
-       // anim
-       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+char * mmi_aigc_chat_result_text_get(uint32 * data_len)
+{
+       * data_len = s_aigc_other_item_t.text_data_size;
+       return (s_aigc_other_item_t.text_data_ptr);
 }
 
-LOCAL void mmi_aigc_main_win_open(void)
+BOOLEAN mmi_aigc_chat_result_text_store(char * data_buff, uint32 data_len)
 {
-       if((FALSE == MMIAPIPHONE_IsSimAvailable(MN_DUAL_SYS_1))
-               #if defined MULTI_SIM_SYS_DUAL
-               && (FALSE == MMIAPIPHONE_IsSimAvailable(MN_DUAL_SYS_2))
-               #endif
-               )
+       if(NULL == data_buff || 0 == data_len)
        {
-               s_aigc_ui_state = MMI_AIGC_UI_STATE_OPEN_FAIL;
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return FALSE;
+       }
+       
+       if(NULL == s_aigc_other_item_t.text_data_ptr)
+       {
+               char * temp_ptr = SCI_ALLOC_APPZ(data_len + 1);
+               if(PNULL == temp_ptr)
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+                       return FALSE;
+               }
+               SCI_MEMSET(temp_ptr, 0x0, data_len + 1);
+               SCI_MEMCPY(temp_ptr, data_buff, data_len);
+
+               s_aigc_other_item_t.text_data_ptr = temp_ptr;
+               s_aigc_other_item_t.text_data_size = data_len;
        }
        else
        {
-               s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
+               char * temp_ptr = SCI_REALLOC(s_aigc_other_item_t.text_data_ptr, s_aigc_other_item_t.text_data_size + data_len + 1);
+               if(NULL == temp_ptr)
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: realloc memory fail\n", __FUNCTION__, __LINE__);
+                       return FALSE;
+               }
+               SCI_MEMSET(temp_ptr + s_aigc_other_item_t.text_data_size, 0x0, data_len + 1);
+               SCI_MEMCPY(temp_ptr + s_aigc_other_item_t.text_data_size, data_buff, data_len);
+
+               s_aigc_other_item_t.text_data_ptr = temp_ptr;
+               s_aigc_other_item_t.text_data_size += data_len;
        }
+       
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, s_aigc_other_item_t.text_data_size, s_aigc_other_item_t.text_data_ptr);
+
+#ifdef MMI_AIGC_DEBUG_TO_FILE
+       mmi_debug_info_write_to_file(AIGC_RECV_CHAT_RESULT_FILE, s_aigc_other_item_t.text_data_ptr, s_aigc_other_item_t.text_data_size);
+#endif
+
+       return TRUE;
 }
 
-LOCAL void mmi_aigc_main_win_display(void)
+void mmi_aigc_chat_text_middle_screen_update(void)
 {
-       switch(s_aigc_ui_state)
+#if 0
+       if(MMI_AIGC_UI_STATE_THINKING == s_aigc_ui_state)
        {
-               case MMI_AIGC_UI_STATE_NONE:
-                       mmi_aigc_default_win_display();
-                       break;
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+               if(NULL != ext->thinking_task_p)
+               {
+                       lv_task_del(ext->thinking_task_p);
+                       ext->thinking_task_p = NULL;
+               }
 
-               case MMI_AIGC_UI_STATE_OPEN_FAIL:
-                       mmi_aigc_no_network_win_display();
-                       break;
-
-               case MMI_AIGC_UI_STATE_LISTENING:
-                       mmi_aigc_listening_win_display();
-                       break;
+               mmi_aigc_list_screen_display();
+       }
+       else if(MMI_AIGC_UI_STATE_LIST == s_aigc_ui_state)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-               case MMI_AIGC_UI_STATE_THINKING:
-                       mmi_aigc_thinking_win_display();
-                       break;
-                       
-               case MMI_AIGC_UI_STATE_CONNECT_TIMEOUT:
-               
-                       break;
+               mmi_aigc_msg_item_info_t * msg_item = &(s_aigc_info_p->msg_item[1]);
+               char * file_buf = msg_item->text_data_ptr;
 
+               lv_label_set_text(ext->list_other_label, file_buf);
        }
+#endif
 }
 
-LOCAL void mmi_aigc_main_win_key_menu_process(void)
+void mmi_aigc_chat_text_stop_screen_update(void)
 {
-       switch(s_aigc_ui_state)
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: ui_state=%d\n", __FUNCTION__, __LINE__, s_aigc_ui_state);
+
+       // wb
+       mmi_aigc_chat_websocket_close();
+       mmi_aigc_tts_websocket_open();
+
+       if((MMI_AIGC_UI_STATE_THINKING == s_aigc_ui_state) || (MMI_AIGC_UI_STATE_LIST == s_aigc_ui_state))
        {
-               case MMI_AIGC_UI_STATE_NONE:
-                       s_aigc_ui_state = MMI_AIGC_UI_STATE_LISTENING;
-                       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
-                       {
-                               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
-                       }
-                       break;
+               mmi_aigc_update_to_list_win();
 
-               case MMI_AIGC_UI_STATE_OPEN_FAIL:
-                       //if(MMK_IsOpenWin(MMI_AIGC_MAIN_WIN_ID))
-                       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
-                       {
-                               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_APP_CANCEL, PNULL);
-                               //MMK_PostMsg
-                       }
-                       break;
+               mmi_aigc_tts_audio_download_requst();
+       }
+}
 
-               case MMI_AIGC_UI_STATE_LISTENING:
+static void mmi_aigc_chat_text_download_requst(void)
+{
+       uint32 data_len = 0;
+       char * data_ptr = mmi_aigc_trans_result_text_get(&data_len);
 
-                       break;
+       if(NULL != data_ptr && 0 != data_len)
+       {
+               mmi_aigc_send_chat_text_msg(data_ptr, data_len);
+       }
+}
 
-               case MMI_AIGC_UI_STATE_THINKING:
-                       s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
-                       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
-                       {
-                               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
-                       }
-                       break;
-                       
-               case MMI_AIGC_UI_STATE_CONNECT_TIMEOUT:
-                       s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
-                       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
-                       {
-                               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
-                       }
-                       break;
 
+static void mmi_utf8_complete_character_judge(char * data_ptr, uint32 data_len, uint32 * output_len)
+{
+       uint32 i = 0;
+       uint32 p = 0;
+       char ch = 0;
+       while(1)
+       {
+               ch = data_ptr[i];
+
+               //#1111110x
+               if(ch >= 252)
+                       p = p + 6;
+               //#111110xx
+               else if(ch >= 248)
+                       p = p + 5;
+               //#11110xxx
+               else if(ch >= 240)
+                       p = p + 4;
+               //#1110xxxx
+               else if(ch >= 224)
+                       p = p + 3;
+               //#110xxxxx
+               else if(ch >= 192)
+                       p = p + 2;
+               else
+                       p = p + 1;
+
+               if(p >= data_len)
+                       break;
+               else
+                       i = p;
        }
 
+       * output_len = i;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: output_len=%d\n", __FUNCTION__, __LINE__, *output_len);
 }
 
-LOCAL void mmi_aigc_main_win_key_ok_process(void)
+void mmi_aigc_send_tts_text_seperate(char * data_ptr, uint32 data_len, uint32 * output_len)
 {
+       // cn ,
+       char cn_comma_str[4] = {0};
+       // cn .
+       char cn_period_str[4] = {0};
+       // cn ?
+       char cn_query_str[4] = {0};
+       // cn !
+       char cn_mark_str[4] = {0};
+       char * temp_ptr = PNULL;
+       char * offset_ptr = PNULL;
+       
+       cn_comma_str[0] = 0XEF;
+       cn_comma_str[1] = 0XBC;
+       cn_comma_str[2] = 0X8C;
+       
+       cn_period_str[0] = 0XE3;
+       cn_period_str[1] = 0X80;
+       cn_period_str[2] = 0X82;
+
+       cn_query_str[0] = 0XEF;
+       cn_query_str[1] = 0XBC;
+       cn_query_str[2] = 0X9F;
+
+       cn_mark_str[0] = 0XEF;
+       cn_mark_str[1] = 0XBC;
+       cn_mark_str[2] = 0X81;
+
+
+       if(MMI_AIGC_SEND_TTS_TEXT_MAX >= data_len)
+       {
+               * output_len = data_len;
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: output_len=%d\n", __FUNCTION__, __LINE__, *output_len);
+               return;
+       }
+
+       temp_ptr = SCI_ALLOC_APPZ(MMI_AIGC_SEND_TTS_TEXT_MAX + 1);
+       if(NULL == temp_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+               return ;
+       }
+       SCI_MEMSET(temp_ptr, 0x0, (MMI_AIGC_SEND_TTS_TEXT_MAX + 1));
+       SCI_MEMCPY(temp_ptr, data_ptr, MMI_AIGC_SEND_TTS_TEXT_MAX);
+       
+       offset_ptr = strstr(temp_ptr, cn_comma_str);
+       if(NULL != offset_ptr)
+       {
+               * output_len = offset_ptr - temp_ptr + 2;
+               goto EXIT;
+       }
+       
+       offset_ptr = strstr(temp_ptr, cn_period_str);
+       if(NULL != offset_ptr)
+       {
+               * output_len = offset_ptr - temp_ptr + 2;
+               goto EXIT;
+       }
+       
+       offset_ptr = strstr(temp_ptr, cn_query_str);
+       if(NULL != offset_ptr)
+       {
+               * output_len = offset_ptr - temp_ptr + 2;
+               goto EXIT;
+       }
+       
+       offset_ptr = strstr(temp_ptr, cn_mark_str);
+       if(NULL != offset_ptr)
+       {
+               * output_len = offset_ptr - temp_ptr + 2;
+               goto EXIT;
+       }
+       
+       if(NULL == offset_ptr)
+       {
+               mmi_utf8_complete_character_judge(temp_ptr, MMI_AIGC_SEND_TTS_TEXT_MIN, output_len);
+       }
 
+EXIT:
+       SCI_FREE(temp_ptr);
+       temp_ptr = NULL;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: output_len=%d\n", __FUNCTION__, __LINE__, *output_len);
 }
 
-LOCAL void mmi_aigc_main_win_close(void)
+uint32 mmi_aigc_send_tts_text_data_escape_character(char * data_buff, int data_len, char * output_data)
 {
-       mmi_aigc_trans_websocket_close();
-       mmi_aigc_chat_websocket_close();
-       mmi_aigc_tts_websocket_close();
-
-       s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
+       uint32 curr_p = 0, i = 0;
+       
+    if (NULL == data_buff || 0 == data_len)
+               return;
+       
+       for(i = 0; i < data_len; i++)
+       {
+               if(0X0A == data_buff[i]) // 0X0A -> 0X5C 0X6E 
+               {
+                       output_data[curr_p++] = 0X5C;
+                       output_data[curr_p++] = 0X6E;
+               }
+               else if(0X22 == data_buff[i]) // 0X22 -> 0X5C 0X22
+               {
+                       output_data[curr_p++] = 0X5C;
+                       output_data[curr_p++] = 0X22;
+               }
+               else
+               {
+                       output_data[curr_p++] = data_buff[i];
+               }
+       }
 
-       MMIDEFAULT_AllowTurnOffBackLight(TRUE);
+       return curr_p;
 }
 
-LOCAL MMI_RESULT_E mmi_aigc_main_win_handle(MMI_WIN_ID_T win_id, MMI_MESSAGE_ID_E msg_id, DPARAM param)
+void mmi_aigc_send_tts_text_action(char * data_ptr, uint32 data_len)
 {
-    MMI_RESULT_E result = MMI_RESULT_TRUE;
+       uint32 output_len = 0;
+       uint32 send_len = 0;
+       char * send_ptr = PNULL;
+       
+       mmi_aigc_send_tts_text_seperate(data_ptr, data_len, &output_len);
+       
+       send_ptr = SCI_ALLOC_APPZ((output_len + output_len / 9 + 1));
+       if(PNULL == send_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+               return ;
+       }
+       SCI_MEMSET(send_ptr, 0x0, (output_len + output_len / 9 + 1));
+       send_len = mmi_aigc_send_tts_text_data_escape_character(data_ptr, output_len, send_ptr);
 
-    switch (msg_id)
-    {
-           case MSG_OPEN_WINDOW:
-               mmi_aigc_main_win_open();
-               break;
+       mmi_aigc_send_tts_text_msg(send_ptr, send_len);
+       s_aigc_tts_text_sent_size += output_len;
 
-           case MSG_FULL_PAINT:
-                       mmi_aigc_main_win_display();
-                       break;
+       SCI_FREE(send_ptr);
+       send_ptr = NULL;
+}
 
-               case MSG_APP_MENU:
-               case MSG_APP_WEB:
-               case MSG_CTL_MIDSK:
-                       mmi_aigc_main_win_key_menu_process();
-                       break;
+void mmi_aigc_send_tts_text_action_pre(void)
+{
+       uint32 node_total = MMILINK_GetListNodesNum(s_aigc_tts_audio_ll_ptr);
+       uint32 data_len = 0;
+       char * data_ptr = mmi_aigc_chat_result_text_get(&data_len);
 
-               case MSG_APP_OK:
-               case MSG_CTL_OK:
-                       mmi_aigc_main_win_key_ok_process();
-                       break;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: data_len=%d,sent_len=%d, node_total=%d\n", __FUNCTION__, __LINE__, data_len, s_aigc_tts_text_sent_size, node_total);
+       if((NULL != data_ptr) && (data_len > s_aigc_tts_text_sent_size))
+       {
+               //mmi_aigc_tts_audio_ll_new_tail_node();
+               
+               mmi_aigc_send_tts_text_action(data_ptr + s_aigc_tts_text_sent_size, data_len - s_aigc_tts_text_sent_size);
+       }
+}
 
-               case MSG_APP_CANCEL:
-               case MSG_CTL_CANCEL:
-                       MMK_CloseWin(win_id);      
-                       break;
+static void mmi_aigc_tts_audio_download_requst(void)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-           case MSG_APP_RED:
-                       MMK_CloseWin(win_id);
-               break;
+       s_aigc_tts_text_sent_size = 0;
+       s_aigc_tts_audio_playing = false;
+       mmi_aigc_tts_audio_ll_clean();
+       mmi_aigc_tts_audio_ll_add_tail_node();
+       mmi_aigc_send_tts_text_action_pre();
+}
 
-           case MSG_CLOSE_WINDOW:
-               mmi_aigc_main_win_close();
-               break;
-                       
-           default:
-               result = MMI_RESULT_FALSE;
-               break;
+static void mmi_aigc_tts_ll_destroy_cb(MMI_LINK_NODE_T const * node_ptr)
+{
+       MMI_AIGC_TTS_LL_NODE_T * node_data_ptr = (MMI_AIGC_TTS_LL_NODE_T *)(node_ptr->data);
+       if(PNULL != node_data_ptr->audio_data_ptr)
+       {
+               SCI_FREE(node_data_ptr->audio_data_ptr);
+               node_data_ptr->audio_data_ptr = PNULL;
        }
-       
-    return (result);
+       node_data_ptr->audio_data_size = 0;
 }
 
-WINDOW_TABLE(MMI_AIGC_MAIN_WIN_TAB) = 
+static void mmi_aigc_tts_audio_ll_clean(void)
 {
-    WIN_FUNC((uint32)mmi_aigc_main_win_handle),    
-    WIN_ID(MMI_AIGC_MAIN_WIN_ID),
-       //WIN_STATUSBAR,
-       WIN_HIDE_STATUS,
-    WIN_TITLE(TXT_NULL),
-    WIN_SOFTKEY(TXT_NULL, TXT_NULL, TXT_NULL),
-       //WIN_STYLE(WS_DISABLE_COMMON_BG | WS_DISABLE_RETURN_WIN),
-       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_0_CTRL_ID),
-       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_1_CTRL_ID),
-       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_2_CTRL_ID),
-       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_3_CTRL_ID),
-       CREATE_ANIM_CTRL(MMI_AIGC_ANIM_CTRL_ID, MMI_AIGC_MAIN_WIN_ID),
-       //CREATE_TEXT_CTRL(MMI_AIGC_TEXT_0_CTRL_ID),
-       //CREATE_BUTTON_CTRL(IMAGE_AIGC_RECORD_BUTTON_DEFAULT, MMI_AIGC_BUTTON_0_CTRL_ID),
-    END_WIN
-};
+       if(PNULL != s_aigc_tts_audio_ll_ptr)
+       {
+               MMILINK_DestroyLink(s_aigc_tts_audio_ll_ptr, mmi_aigc_tts_ll_destroy_cb);               
+               s_aigc_tts_audio_ll_ptr = PNULL;
+       }
+}
 
-PUBLIC void MMIAPIAIGC_EnterWin(void)
+static MMI_LINK_NODE_T * mmi_aigc_tts_audio_ll_add_tail_node(void)
 {
-       SCI_TRACE_LOW("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       MMI_LINK_NODE_T * node_ptr = PNULL;
+       MMI_AIGC_TTS_LL_NODE_T * node_data_ptr = PNULL;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       node_data_ptr = (MMI_AIGC_TTS_LL_NODE_T *)SCI_ALLOC_APPZ(sizeof(MMI_AIGC_TTS_LL_NODE_T));
+       if (PNULL == node_data_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+               return PNULL;
+       }
+       SCI_MEMSET(node_data_ptr, 0x0, sizeof(MMI_AIGC_TTS_LL_NODE_T));
 
-       if(MMK_IsOpenWin(MMI_AIGC_MAIN_WIN_ID))
+       if(PNULL == s_aigc_tts_audio_ll_ptr)
        {
-               MMK_CloseWin(MMI_AIGC_MAIN_WIN_ID);
+               node_ptr = MMILINK_CreateHead((uint32)node_data_ptr);
+               if (PNULL == node_ptr)
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: create head fail\n", __FUNCTION__, __LINE__);
+                       return PNULL;
+               }
+               s_aigc_tts_audio_ll_ptr = node_ptr;
+       }
+       else
+       {
+               node_ptr = MMILINK_CreateNode((uint32)node_data_ptr);
+               if (PNULL == node_ptr)
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: create node fail\n", __FUNCTION__, __LINE__);
+                       return PNULL;
+               }
+               MMILINK_AddNodeBeforeBaseNode(s_aigc_tts_audio_ll_ptr, node_ptr);
        }
        
-       MMK_CreateWin((uint32 *) MMI_AIGC_MAIN_WIN_TAB, PNULL);
+       return node_ptr;
 }
 
-#if 0
-/*****************************************************************************/
-//     Description : ´¦ÀíÊäÈëµÄPINÂë
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL void HandlePinInputingString(
-                                   MMI_STRING_T *pin_ptr
-                                   )
+void mmi_aigc_tts_audio_ll_remove_head_node(void)
 {
-    MN_BLOCK_T      pin_value = {0};
-    MMI_STRING_T    wait_text = {0};
-    
-    if(PNULL == pin_ptr)
-    {
-        //SCI_TRACE_LOW:"HandlePinInputingString pin_ptr is NULL"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_1209_112_2_18_2_45_30_230,(uint8*)"");
-        return;
-    }
-    
-    SCI_MEMSET(&pin_value, 0, sizeof(MN_BLOCK_T));
-    
-    //ת»»PINµÄ½á¹¹
-    pin_value.blocklen = pin_ptr->wstr_len;
-
-    MMI_WSTRNTOSTR((uint8 *)pin_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        pin_ptr->wstr_ptr,
-        pin_value.blocklen,
-        pin_value.blocklen);
-        
-#ifdef MMI_SIM_LOCK_SUPPORT
-    SCI_MEMCPY(&g_pin_value[MMIAPIPHONE_GetCurResponsePinSimID()],
-                         &pin_value,
-                         sizeof(MN_BLOCK_T)); //¼Ç¼ÐµÄpin1Âë
-#endif
+       if(PNULL != s_aigc_tts_audio_ll_ptr)
+       {
+               MMI_LINK_NODE_T * new_head_ptr = MMILINK_RemoveNode(s_aigc_tts_audio_ll_ptr, s_aigc_tts_audio_ll_ptr);
+               MMI_AIGC_TTS_LL_NODE_T * node_data_ptr = (MMI_AIGC_TTS_LL_NODE_T *)(s_aigc_tts_audio_ll_ptr->data);
 
-    //response pin before receive signal of sim is ready
-    MNPHONE_ResponsePinEx(MMIAPIPHONE_GetCurResponsePinSimID(), MNSIM_PIN1, FALSE, &pin_value, PNULL);
-    
-    MMK_CloseWin(PHONE_PIN_WAIT_WIN_ID);
-    
-    //½øÈëµÈ´ý½çÃæ
-    MMI_GetLabelTextByLang(TXT_COMMON_WAITING, &wait_text);
-    MMIPUB_OpenWaitWin(1,&wait_text,PNULL,PNULL,PHONE_PIN_WAIT_WIN_ID,IMAGE_NULL,
-        ANIM_PUBWIN_WAIT,WIN_ONE_LEVEL,MMIPUB_SOFTKEY_NONE,HandlePukWaitingWindow);
+               if(PNULL != node_data_ptr->audio_data_ptr)
+               {
+                       SCI_FREE(node_data_ptr->audio_data_ptr);
+                       node_data_ptr->audio_data_ptr = PNULL;
+               }
+               SCI_FREE(s_aigc_tts_audio_ll_ptr);
+               s_aigc_tts_audio_ll_ptr = PNULL;
 
-    MMK_SetWinDisplayStyleState(PHONE_PIN_WAIT_WIN_ID, WS_DISABLE_RETURN_WIN, TRUE);
+               s_aigc_tts_audio_ll_ptr = new_head_ptr;
+       }
 }
 
+BOOLEAN mmi_aigc_tts_audio_store(char * data_buff, uint32 data_len)
+{
+       MMI_LINK_NODE_T * node_ptr = s_aigc_tts_audio_ll_ptr->prev_ptr;
+       MMI_AIGC_TTS_LL_NODE_T * node_data_ptr = PNULL;
+       char * temp_ptr = PNULL;
+       
+       if(PNULL == data_buff || 0 == data_len)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return FALSE;
+       }
+
+       if(PNULL == node_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: no node\n", __FUNCTION__, __LINE__);
+               return FALSE;
+       }       
+
+       node_data_ptr = (MMI_AIGC_TTS_LL_NODE_T *)(node_ptr->data);
+       if(PNULL == node_data_ptr->audio_data_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+               temp_ptr = SCI_ALLOC_APPZ(data_len + 1);
+               if(NULL == temp_ptr)
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
+                       return FALSE;
+               }
+               SCI_MEMSET(temp_ptr, 0x0, data_len + 1);
+               SCI_MEMCPY(temp_ptr, data_buff, data_len);
+
+               node_data_ptr->audio_data_ptr = temp_ptr;
+               node_data_ptr->audio_data_size = data_len;
+       }
+       else
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+               temp_ptr = SCI_REALLOC(node_data_ptr->audio_data_ptr, node_data_ptr->audio_data_size + data_len + 1);
+               if(NULL == temp_ptr)
+               {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: realloc memory fail\n", __FUNCTION__, __LINE__);
+                       return FALSE;
+               }
+               SCI_MEMSET(temp_ptr + node_data_ptr->audio_data_size, 0x0, data_len + 1);
+               SCI_MEMCPY(temp_ptr + node_data_ptr->audio_data_size, data_buff, data_len);
+
+               node_data_ptr->audio_data_ptr = temp_ptr;
+               node_data_ptr->audio_data_size += data_len;
+       }
 
-/*****************************************************************************/
-//     Description : ´¦ÀíÊäÈëµÄPuk modify pinÂë
-//  **05*PUK*NEW_PIN*NEW_PIN# to change pin   **052*PUK2*NEW_PIN2*NEW_PIN2# to change pin2
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL void HandlePukModifyPin(
-                              uint8 *puk_pin_str
-                              )
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: size=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, node_data_ptr->audio_data_size, node_data_ptr->audio_data_ptr);
+
+       return TRUE;
+}
+
+LOCAL void mmi_aigc_audio_play_stop(void)
 {
-    MMI_PIN_INFO_T  pin_info = {0};
-    MMI_STRING_T    wait_text = {0};
-    
-    SCI_MEMSET(((void*)&pin_info), 0, sizeof(MMI_PIN_INFO_T));
-    
-    //parse input str
-    if (PARS_RESULT_SUCCESS == MMIAPIPARSE_ParsePukAndPinStr((char *)puk_pin_str,&pin_info))
-    {
-        //response pin before receive signal of sim is ready
-        MNPHONE_ResponsePinEx(MMIAPIPHONE_GetCurResponsePinSimID(), MNSIM_PIN1, TRUE, &(pin_info.pin_value), &(pin_info.ext_pin_value));
-        
-        MMK_CloseWin(PHONE_PIN_WAIT_WIN_ID);
-        
-        //½øÈëµÈ´ý½çÃæ
-        MMI_GetLabelTextByLang(TXT_COMMON_WAITING, &wait_text);
-        MMIPUB_OpenWaitWin(1,&wait_text,PNULL,PNULL,PHONE_PIN_WAIT_WIN_ID,IMAGE_NULL,
-            ANIM_PUBWIN_WAIT,WIN_ONE_LEVEL,MMIPUB_SOFTKEY_NONE,HandlePukWaitingWindow);
-
-        MMK_SetWinDisplayStyleState(PHONE_PIN_WAIT_WIN_ID, WS_DISABLE_RETURN_WIN, TRUE);
-    }
-    else
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    if (INVALID_HANDLE != s_aigc_audio_handle)
     {
-        MMIPUB_OpenAlertWinByTextId(PNULL,TXT_INPUT_ERROR,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePukAlertWindow);
-        
-        //Çå¿Õpassword
-        GUIEDIT_ClearAllStr(PHONE_PUK_EDITBOX_CTRL_ID);
+        MMISRVAUD_Stop(s_aigc_audio_handle);
+        MMISRVMGR_Free(s_aigc_audio_handle);
+        s_aigc_audio_handle = INVALID_HANDLE;
     }
 }
 
-/*****************************************************************************/
-//     Description : PUKÊäÈë½çÃæ´ò¿ªÊ±£¬µÈ´ý½çÃæ²»ÔÊÐí·µ»Ø£¬pin£¬new pin½çÃæ²»ÔÊÐíred key,flip·µ»Ø
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandlePukWaitingWindow (
-                                           MMI_WIN_ID_T      win_id,   // ´°¿ÚµÄID
-                                           MMI_MESSAGE_ID_E     msg_id,        // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                           DPARAM                      param           // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                           )
+LOCAL void mmi_aigc_audio_play_end_cb(void)
 {
-    MMI_RESULT_E result = MMI_RESULT_TRUE;
-    
-    switch (msg_id)
-    {
-    case MSG_APP_RED://pukÊäÈë½çÃæ´æÔÚ,wait window²»ÔÊÐí·µ»Ø
-        break;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       mmi_aigc_audio_play_stop();
+       s_aigc_tts_audio_playing = false;
 
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        MMIDEFAULT_HandleFlipKey(FALSE);
-        break;
-#endif
+       mmi_aigc_tts_audio_ll_remove_head_node();
 
-    case MSG_OPEN_WINDOW:
-        MMK_SetWinDisplayStyleState(win_id, WS_DISABLE_RETURN_WIN, TRUE);
-        result = MMIPUB_HandleWaitWinMsg(win_id, msg_id, param);
-        break;
-        
-    default:
-        result = MMIPUB_HandleWaitWinMsg(win_id, msg_id, param);
-        break;
-    }
-    
-    return (result);
+       mmi_aigc_audio_play_start();
 }
 
-/*****************************************************************************/
-//     Description : PUKÊäÈë½çÃæ´ò¿ªÊ±£¬alert½çÃæ.²»ÔÊÐíred key,flip·µ»Ø(Æô¶¯¹ý³Ì)
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandlePukAlertWindow(
-                                        MMI_WIN_ID_T     win_id,       // ´°¿ÚµÄID
-                                        MMI_MESSAGE_ID_E       msg_id,         // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                        DPARAM                         param           // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                        )
+LOCAL void mmi_aigc_audio_play_notify(MMISRV_HANDLE_T handle, MMISRVMGR_NOTIFY_PARAM_T *param)
 {
-    MMI_RESULT_E result = MMI_RESULT_TRUE;
-    
-    switch (msg_id)
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, param->event, param->ind_data, param->data);
+    if(param != PNULL && handle > 0)
     {
-    case MSG_APP_RED://puk½çÃæ´æÔÚ£¬red and flip²»ÔÊÐí·µ»Ø
-        if (MMK_IsOpenWin(PHONE_PUK_INPUT_WIN_ID))
-        {
-            MMK_CloseWin(win_id);
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
-
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.
-    case MSG_APP_FLIP:
-        if (MMK_IsOpenWin(PHONE_PUK_INPUT_WIN_ID))
-        {
-            MMIDEFAULT_HandleFlipKey(FALSE);
-            MMK_CloseWin(win_id);
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
+        MMISRVAUD_REPORT_T * report_ptr = (MMISRVAUD_REPORT_T *)param->data;
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, report_ptr->report, report_ptr->data1, report_ptr->data2);
+               
+        if(report_ptr != PNULL)
+        {            
+            switch(report_ptr->report)
+            {
+                   case MMISRVAUD_REPORT_END:
+                                       mmi_aigc_audio_play_end_cb();
+                       break;
+                                       
+                   case MMISRVAUD_REPORT_PLAY:
+                   case MMISRVAUD_REPORT_STOP:
+                   case MMISRVAUD_REPORT_RESUME:
+                   case MMISRVAUD_REPORT_PAUSE:
+                   default:
+                       break;
+            }
         }
-        break;
-#endif        
-        
-    default:
-        result = MMIPUB_HandleAlertWinMsg(win_id,msg_id,param);
-        break;
     }
-    
-    return (result);
 }
 
-/*****************************************************************************/
-//     Description : ´¦Àínew pin INPUTINGµÄÏûÏ¢
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleNewPinInputWindow (
-                                            MMI_WIN_ID_T     win_id,   // new pin input´°¿ÚµÄID
-                                            MMI_MESSAGE_ID_E   msg_id,         // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                            DPARAM                     param           // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                            )
+LOCAL void mmi_aigc_audio_play_start(void)
 {
-    MMI_RESULT_E    result = MMI_RESULT_TRUE;
-    MMI_STRING_T   puk_value = {0};
-    MMI_STRING_T   new_pin_value = {0};
-    MMI_STRING_T   new_pin_again_value = {0};
-    GUI_BOTH_RECT_T edit_both_rect = {0};
-    BOOLEAN is_input_emergency_call = FALSE;
-    uint16 emergency_call_len = 0;
-    
-    switch (msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-        MMIDEFAULT_AllowOpenKeylocWin(FALSE);
-#ifdef MAINLCD_SIZE_128X64 //added by taiping.lai 2011/01/03
-               {
-                   GUI_RECT_T title_rect = GetPasswordTitleRect();
-
-              GUIWIN_SetTitleRect(win_id, title_rect); 
+       MMI_LINK_NODE_T * node_ptr = s_aigc_tts_audio_ll_ptr;
+       MMI_AIGC_TTS_LL_NODE_T * node_data_ptr = PNULL;
        
-               }
-        edit_both_rect = GetPinPukEditRect(win_id, FALSE);
-#else
-        edit_both_rect = GetPinPukEditRect(win_id, FALSE);
-#endif 
-        GUIAPICTRL_SetBothRect(PHONE_NEW_PIN_EDITBOX_CTRL_ID, &edit_both_rect);
-
-        GUIEDIT_SetPasswordStyle(PHONE_NEW_PIN_EDITBOX_CTRL_ID,GUIEDIT_PASSWORD_STYLE_DIGITAL_PIN);
+       if(TRUE == s_aigc_tts_audio_playing)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return ;
+       }
 
-        //set left softkey
-        GUIEDIT_SetSoftkey(PHONE_NEW_PIN_EDITBOX_CTRL_ID, 0, MMI_PIN_MIN_LENGTH,TXT_NULL,TXT_COMMON_OK, PinPukInputWinSoftkey);
-        MMK_SetAtvCtrl(win_id,PHONE_NEW_PIN_EDITBOX_CTRL_ID);
-        break;
+       if(PNULL == node_ptr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return ;
+       }
+       node_data_ptr = (MMI_AIGC_TTS_LL_NODE_T *)(node_ptr->data);
+       if((PNULL != node_data_ptr->audio_data_ptr) && (0 != node_data_ptr->audio_data_size))
+       {
+           MMISRVMGR_SERVICE_REQ_T req = {0};
+           MMISRVAUD_TYPE_T audio_srv = {0};
+           MMISRV_HANDLE_T handle = INVALID_HANDLE;
+           
+               // req
+           req.pri = MMISRVAUD_PRI_HIGH;
+           req.is_async = FALSE;
+           req.is_auto_resume_off = TRUE;
+           req.is_auto_free = TRUE;
+           req.notify = mmi_aigc_audio_play_notify;
+
+               // audio
+           audio_srv.volume = MMISRVAUD_VOLUME_LEVEL_MAX;
+           audio_srv.play_times = 1;
+           audio_srv.all_support_route = MMISRVAUD_ROUTE_SPEAKER | MMISRVAUD_ROUTE_EARPHONE | MMISRVAUD_ROUTE_EARFREE;
+           audio_srv.default_route = MMISRVAUD_ROUTE_SPEAKER;
+
+               audio_srv.info.type = MMISRVAUD_TYPE_RING_BUF;
+           audio_srv.info.ring_buf.type = MMISRVAUD_TYPE_RING_BUF;
+           audio_srv.info.ring_buf.fmt = MMI_AIGC_DATA_AUDIO_FORMAT;
+           audio_srv.info.ring_buf.data = node_data_ptr->audio_data_ptr;
+           audio_srv.info.ring_buf.data_len = node_data_ptr->audio_data_size;
+           
+           //construct handle
+           handle = MMISRVMGR_Request(STR_SRV_AUD_NAME, &req, &audio_srv);
+           //if handle > 0 && play success
+           if((handle > 0) && (MMISRVAUD_RET_OK == MMISRVAUD_Play(handle, 0)))
+           {
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: play success\n", __FUNCTION__, __LINE__);
+               s_aigc_audio_handle = handle;
+                       s_aigc_tts_audio_playing = TRUE;
+           }
+           else
+           {
+               //destroy handle
+                       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: play fail\n", __FUNCTION__, __LINE__);
+                       if(handle > 0)
+                   {
+                   MMISRVMGR_Free(handle);
+                               handle = INVALID_HANDLE;
+                   }
+           }            
+       }
+}
 
-#if 0
-#ifdef MMI_PDA_SUPPORT
-    case MSG_NOTIFY_EDITBOX_UPDATE_STRNUM:
-        {
-            MMI_STRING_T str_info = {0};
-            GUIEDIT_GetString(PHONE_NEW_PIN_EDITBOX_CTRL_ID, &str_info);       
-        
-            is_input_emergency_call = MMIAPICC_IsInputEmergencyCall(&str_info, &emergency_call_len, MMIAPIPHONE_GetCurResponsePinSimID());
-            if ((is_input_emergency_call) &&
-                (str_info.wstr_len == emergency_call_len))
-            {    
-                MMIPUB_SetWinSoftkey(win_id, TXT_SOS, STXT_RETURN,TRUE);
-            }
-            else
-            {
-                MMIPUB_SetWinSoftkey(win_id, TXT_COMMON_OK, STXT_RETURN,TRUE);
-            }
-        }
-        break;
-#endif
-#endif
-        
-#ifndef MMI_PDA_SUPPORT
-    case MSG_FULL_PAINT:
-        SetPasswordBackground(win_id,PHONE_NEW_PIN_EDITBOX_CTRL_ID,FALSE);
-        break;
-#endif
+void mmi_aigc_tts_end_synthesis_action(void)
+{
+       mmi_aigc_tts_audio_ll_add_tail_node();
+       mmi_aigc_send_tts_text_action_pre();
+       
+       //
+       mmi_aigc_audio_play_start();
+}
 
-#ifdef TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_PENOK:
-#endif //TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_MIDSK:
-    case MSG_CTL_OK:
-    case MSG_APP_OK:
-    case MSG_APP_WEB:
-    case MSG_APP_GREEN:
-    case MSG_APP_CALL2:
-     case MSG_APP_CALL3:
-     case MSG_APP_CALL4:   
-        // get the value about new PIN
-        GUIEDIT_GetString(PHONE_NEW_PIN_EDITBOX_CTRL_ID,&new_pin_value);
-        
-        is_input_emergency_call = MMIAPICC_IsInputEmergencyCall(&new_pin_value, &emergency_call_len, MMIAPIPHONE_GetCurResponsePinSimID());
-
-        if ((is_input_emergency_call) &&
-            (new_pin_value.wstr_len == emergency_call_len))
-        {
-            MakeEmergencyCall(&new_pin_value);
-        }
-        else if (PIN_LEN_IS_IN_RANGE(new_pin_value.wstr_len) 
-                    && MSG_APP_GREEN != msg_id 
-                    && MSG_APP_CALL2 != msg_id
-                    && MSG_APP_CALL3 != msg_id
-                    && MSG_APP_CALL4 != msg_id)
-        {
-            //open the window of input new pin again
-            MMK_CreatePubEditWin((uint32*)PHONE_NEW_PIN_AGAIN_INPUTING_WIN_TAB,PNULL);
-        }
-        break;
-        
-    case MSG_SET_NEW_PIN_AGAIN:
-        // get the value about new PIN again
-        GUIEDIT_GetString(PHONE_NEW_PIN_AGAIN_EDITBOX_CTRL_ID,&new_pin_again_value);
-        
-        // get the value about new PIN
-        GUIEDIT_GetString(PHONE_NEW_PIN_EDITBOX_CTRL_ID,&new_pin_value);
-        
-        //±È½ÏÁ½¸öPINÊÇ·ñÏàͬ
-        if( MMIAPICOM_StrCompare( &new_pin_value, &new_pin_again_value ) )
-        //if (MMIAPICOM_CompareTwoTeleNum( new_pin_again_value.wstr_ptr, new_pin_again_value.wstr_len, new_pin_value.wstr_ptr, new_pin_value.wstr_len))
-        {
-            // get the value about PUK
-            GUIEDIT_GetString(PHONE_PUK_EDITBOX_CTRL_ID,&puk_value);
-            
-            HandlePukAndNewPin(&puk_value,&new_pin_value);
-            
-            //close input new pin and input new pin again window
-            MMK_CloseWin(PHONE_NEW_PIN_INPUT_WIN_ID);
-            MMK_CloseWin(PHONE_NEW_PIN_AGAIN_INPUT_WIN_ID);
-        }
-        else
-        {
-            //Ìáʾ´íÎó´°¿Ú,Á½´ÎÊäÈëµÄPIN²»Ò»ÖÂ
-            #ifdef MMI_PDA_SUPPORT
-            MMIPUB_OpenAlertWinByTextId(PNULL,TXT_INPUT_CONFLICT,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePukAlertWindow);            
-            #else
-            MMIPUB_OpenAlertWinByTextId(PNULL,TXT_MSGBOX_PIN_CONFLICT,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePukAlertWindow);
-            #endif
-            //Çå¿Õpassword
-            GUIEDIT_ClearAllStr(PHONE_NEW_PIN_EDITBOX_CTRL_ID);
-            
-            //close input new pin again window
-            MMK_CloseWin(PHONE_NEW_PIN_AGAIN_INPUT_WIN_ID);
-            
-            MMK_SetAtvCtrl(win_id,PHONE_NEW_PIN_EDITBOX_CTRL_ID);
-        }
-        break;
-        
-    case MSG_CTL_CANCEL:
-    case MSG_APP_CANCEL:
-        MMK_CloseWin( win_id );
-        break;
-        
-    case MSG_APP_RED://puk½çÃæ´æÔÚ£¬red and flip²»ÔÊÐí·µ»Ø
-        if (!MMK_IsOpenWin(PHONE_PUK_INPUT_WIN_ID))
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
+LOCAL void mmi_aigc_audio_record_stop(void)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        if (!MMK_IsOpenWin(PHONE_PUK_INPUT_WIN_ID))
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        else
-        {
-            MMIDEFAULT_HandleFlipKey(FALSE);
-        }
-        break;
-#endif        
-
-    case MSG_GET_FOCUS:
-        MMIDEFAULT_AllowOpenKeylocWin(FALSE);
-        break;
-
-    case MSG_CLOSE_WINDOW:
-        MMIDEFAULT_AllowOpenKeylocWin(TRUE);
-        break;
-        
-    default:
-        result = MMI_RESULT_FALSE;
-        break;
+    if (INVALID_HANDLE != s_aigc_record_handle)
+    {
+        MMISRVAUD_Stop(s_aigc_record_handle);
+        MMISRVMGR_Free(s_aigc_record_handle);
+        s_aigc_record_handle = INVALID_HANDLE;
     }
-    
-    return (result);
 }
 
-
-/*****************************************************************************/
-//     Description : ´¦ÀíÊäÈëµÄPuk and new pinÂë
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL void HandlePukAndNewPin(
-                              MMI_STRING_T *puk_ptr,
-                              MMI_STRING_T *pin_ptr
-                              )
+LOCAL void mmi_aigc_audio_record_notify(MMISRV_HANDLE_T handle, MMISRVMGR_NOTIFY_PARAM_T *param)
 {
-    MN_BLOCK_T  puk_value = {0};
-    MN_BLOCK_T  pin_value = {0};
-    MMI_STRING_T    wait_text = {0};
-    
-    if(PNULL == pin_ptr ||PNULL == puk_ptr)
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, param->event, param->ind_data, param->data);
+    if(param != PNULL && handle > 0)
     {
-        //SCI_TRACE_LOW:"HandlePinInputingString pin_ptr=%d ||puk_ptr=%d"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_1899_112_2_18_2_45_32_231,(uint8*)"dd", pin_ptr, puk_ptr);
-        return;
+        MMISRVAUD_REPORT_T * report_ptr = (MMISRVAUD_REPORT_T *)param->data;
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, report_ptr->report, report_ptr->data1, report_ptr->data2);
+               
+        if(report_ptr != PNULL)
+        {            
+            switch(report_ptr->report)
+            {
+                   case MMISRVAUD_REPORT_END:
+                                       //mmi_aigc_audio_record_end_cb();
+                                       //mmi_aigc_listening_stop(FALSE);
+                       break;
+                                       
+                   case MMISRVAUD_REPORT_PLAY:
+                   case MMISRVAUD_REPORT_STOP:
+                   case MMISRVAUD_REPORT_RESUME:
+                   case MMISRVAUD_REPORT_PAUSE:
+                   default:
+                       break;
+            }
+        }
     }
-    
-    //ת»»PUKµÄ½á¹¹
-    puk_value.blocklen = puk_ptr->wstr_len;
-
-    MMI_WSTRNTOSTR((uint8 *)puk_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        puk_ptr->wstr_ptr,
-        puk_value.blocklen,
-        puk_value.blocklen);
-    
-    //ת»»PINµÄ½á¹¹
-    pin_value.blocklen = pin_ptr->wstr_len;
+}
 
-    MMI_WSTRNTOSTR((uint8 *)pin_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        pin_ptr->wstr_ptr,
-        pin_value.blocklen,
-        pin_value.blocklen);
+LOCAL void mmi_aigc_audio_record_start(void)
+{
+       MMISRVMGR_SERVICE_REQ_T req = {0};
+       MMISRVAUD_TYPE_T audio_srv = {0};
+       MMISRV_HANDLE_T handle = INVALID_HANDLE;
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    //response pin before receive signal of sim is ready
-    MNPHONE_ResponsePinEx(MMIAPIPHONE_GetCurResponsePinSimID(), MNSIM_PIN1, TRUE, &pin_value, &puk_value);
-    
-    MMK_CloseWin(PHONE_PIN_WAIT_WIN_ID);
-    
-    //½øÈëµÈ´ý½çÃæ
-    MMI_GetLabelTextByLang(TXT_COMMON_WAITING, &wait_text);
-    MMIPUB_OpenWaitWin(1,&wait_text,PNULL,PNULL,PHONE_PIN_WAIT_WIN_ID,IMAGE_NULL,
-        ANIM_PUBWIN_WAIT,WIN_ONE_LEVEL,MMIPUB_SOFTKEY_NONE,HandlePukWaitingWindow);
+#ifdef __RECORD_USE_BUF__      
+       if(PNULL != s_aigc_record_buffer)
+       {
+               SCI_FREE(s_aigc_record_buffer);
+               s_aigc_record_buffer = PNULL;
+       }
+       s_aigc_record_buffer = SCI_ALLOC_APPZ(MMI_AIGC_DATA_RECORD_SIZE_MAX);
+       if(PNULL == s_aigc_record_buffer)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       SCI_MEMSET(s_aigc_record_buffer, 0x0, MMI_AIGC_DATA_RECORD_SIZE_MAX);
+       s_aigc_record_size = 0;
+#else
+       if(TRUE == MMIAPIFMM_IsFileExist(s_aigc_record_file, MMIAPICOM_Wstrlen(s_aigc_record_file)))
+       {
+               MMIAPIFMM_DeleteFile(s_aigc_record_file, PNULL);
+       }
+       MMIAPICOM_Wstrcpy(s_aigc_record_file, (wchar *)MMI_AIGC_DATA_RECORD_FILE_NAME);
+#endif
 
-    MMK_SetWinDisplayStyleState(PHONE_PIN_WAIT_WIN_ID, WS_DISABLE_RETURN_WIN, TRUE);
+       // req
+       req.pri = MMISRVAUD_PRI_HIGH;
+       req.is_async = FALSE;
+       req.is_auto_resume_off = TRUE;
+       req.is_auto_free = FALSE;
+       req.notify = mmi_aigc_audio_record_notify;
+       
+       // audio
+    audio_srv.duation = 0;
+    audio_srv.interval = 0;
+    audio_srv.eq_mode = 0;
+    audio_srv.is_mixing_enable = FALSE;
+       audio_srv.volume = MMISRVAUD_VOLUME_LEVEL_MAX;
+    audio_srv.play_times = 1;
+    audio_srv.all_support_route = MMISRVAUD_ROUTE_NONE;
+
+#ifdef __RECORD_USE_BUF__      
+    audio_srv.info.type = MMISRVAUD_TYPE_RECORD_BUF;
+    audio_srv.info.record_buf.type = MMISRVAUD_TYPE_RECORD_BUF;
+    audio_srv.info.record_buf.fmt  = MMISRVAUD_RECORD_FMT_AMR;
+    audio_srv.info.record_buf.source  = MMISRVAUD_RECORD_SOURCE_NORMAL;
+    audio_srv.info.record_buf.frame_len = MMISRVAUD_RECORD_FRAME_LEN_DEFAULT;
+    audio_srv.info.record_buf.data = s_aigc_record_buffer;
+    audio_srv.info.record_buf.data_len = MMI_AIGC_DATA_RECORD_SIZE_MAX;
+#else
+       audio_srv.info.type = MMISRVAUD_TYPE_RECORD_FILE;
+    audio_srv.info.record_file.type = MMISRVAUD_TYPE_RECORD_FILE;
+    audio_srv.info.record_file.fmt  = MMISRVAUD_RECORD_FMT_AMR;
+    audio_srv.info.record_file.source  = MMISRVAUD_RECORD_SOURCE_NORMAL;
+       audio_srv.info.record_file.frame_len = MMISRVAUD_RECORD_FRAME_LEN_DEFAULT;
+       audio_srv.info.record_file.name = s_aigc_record_file;
+       audio_srv.info.record_file.name_len = MMIAPICOM_Wstrlen(s_aigc_record_file);
+#endif
+       
+       handle = MMISRVMGR_Request(STR_SRV_AUD_NAME, &req, &audio_srv);
+       if((0 < handle) && (MMISRVAUD_RET_OK == MMISRVAUD_Play(handle, 0)))
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: record success\n", __FUNCTION__, __LINE__);
+               s_aigc_record_handle = handle;
+       }
+       else
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: record fail\n", __FUNCTION__, __LINE__);
+               //destroy handle
+               if(handle > 0)
+               {
+                       MMISRVAUD_Stop(handle);
+                       MMISRVMGR_Free(handle);
+                       handle = INVALID_HANDLE;
+               }
+       }                        
 }
 
 
-/*****************************************************************************/
-//     Description : handle pin and puk flow
-//     Global resource dependence : 
-//  Author:jassmine.meng
-//     Note: 
-/*****************************************************************************/
-void MMIAPIPHONE_HandlePinAndPukFlow(
-                             MNSIM_PIN_REQ_TYPE_E       operate_type,   //PINµÄ²Ù×÷±êʶ
-                             MNSIM_PIN_INDICATION_E     pin_num,        //MNSIM_PIN1 or MNSIM_PIN2
-                             uint32                     win_tab,
-                             BOOLEAN is_special_func
-                             )
+LOCAL void mmi_aigc_list_win_display(void)
 {
-    MNSIM_PIN_STATUS_E  pin_status = MNSIM_PIN_READY;
-    MMI_OPERATE_PIN_T   *opreate_pin_ptr = SCI_ALLOC_APPZ(sizeof(MMI_OPERATE_PIN_T));
-    SIM_STATUS_E sim_status = SIM_STATUS_OK;
-    
-    opreate_pin_ptr->operate_type = operate_type;
-    opreate_pin_ptr->pin_num = pin_num;
-    g_operate_pin_win_tab = win_tab;
-    g_is_operate_pin_special_func = is_special_func;
-    
-    //get the status of PIN
-    pin_status = MNSIM_GetPinStatusEx(MMIAPIPHONE_GetCurHandlingPinSimID(), pin_num);
-    if (MNSIM_PIN_BLOCKED == pin_status)//PUK±»Ëø
-    {
-        sim_status = MMIAPIPHONE_GetSimStatus(MMIAPIPHONE_GetCurHandlingPinSimID());
-        
-        if (SIM_STATUS_NO_SIM == sim_status)
-        {
-            MMIPUB_OpenAlertWarningWin(TXT_NO_SIM);
-        }
-        else if((SIM_STATUS_REGISTRATION_FAILED == sim_status) || (SIM_STATUS_REJECTED == sim_status))
-        {
-#ifndef MMI_IDLE_MINI_SUPPORT
-            MMIPUB_OpenAlertWarningWin(TXT_SIM_REGISTRATION_FAILED);
-#else
-            MMIPUB_OpenAlertWarningWin(TXT_SIM_REGISTRATION_FAILED_MINI);
-#endif
+       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
+       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
+       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
+       GUI_FONT_ALL_T font_all = {SONG_FONT_24, MMI_WHITE_COLOR};
+       GUI_BG_T ctrl_bg = {0};
+       GUI_RECT_T ctrl_rect = {0};
+       MMI_STRING_T display_text = {0};
+       char text_ptr[64] = {0};
+       wchar text_dis[64] = {0};
+       uint16 image_width = 0;
+       uint16 image_height = 0;
+       GUI_POINT_T display_point = {0};
+       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
 
-        }
-        else
-        {
-            if (MNSIM_PIN1 == pin_num)//PIN1
-            {
-                MMIPUB_OpenAlertWarningWin(TXT_PUK_BLOCKED);
-            }
-            else//PIN2
-            {
-                MMIPUB_OpenAlertWarningWin(TXT_PUK2_BLOCKED);
-            }
-        }
-    }
-    else
-    {
-        if (MNSIM_PIN_PUK == pin_status)//PIN±»Ëø£¬ÒªÇóÊäÈëPUK
-        {
-            if (MNSIM_PIN1 == pin_num)//PIN1
-            {
-                MMK_CloseWin(MMI_PUK_INPUTING_WIN_ID);
+       GUISTR_STYLE_T text_style = {0};
+       GUISTR_STATE_T text_state = (GUISTR_STATE_SINGLE_LINE | GUISTR_STATE_ALIGN | GUISTR_STATE_EFFECT);
+       MMI_STRING_T text_str = {0};
+       GUISTR_INFO_T text_info = {0};
+       char * trans_text_str = PNULL;
+       wchar * trans_text_wstr = PNULL;
+       uint32 trans_text_len = 0;
+       char * chat_text_str = PNULL;
+       wchar * chat_text_wstr = PNULL;
+       uint32 chat_text_len = 0;
+       uint16 item_height = 0;
+       
 
-                opreate_pin_ptr->operate_type = MNSIM_PIN_UNBLOCK;
-                // ´ò¿ªÊäÈëPUKµÄ½çÃæ
-                MMK_CreatePubEditWin((uint32*)MMI_PUK_INPUTING_WIN_TAB,(ADD_DATA)opreate_pin_ptr);
-            }
-            else//PIN2±»ËøsimÈÔÈ»¿ÉÒÔÓÃ
-            {
-                SCI_MEMSET(&s_operate_pin2_blocked_info,0,sizeof(MMI_OPERATE_PIN_T));
-                s_operate_pin2_blocked_info.operate_type = operate_type;
-                s_operate_pin2_blocked_info.pin_num = pin_num;
-                MMIPUB_CloseAlertWin();
-                MMIPUB_OpenAlertWinByTextId(PNULL,TXT_PIN2_BLOCKED,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePin2BlockedExceptPhone);
-
-                SCI_FREE(opreate_pin_ptr);
-                opreate_pin_ptr = PNULL;
-            }
-        }
-        else//PIN2ûÓб»Ëø£¬ÒªÇóÊäÈëPIN2
-        {
-            MMK_CloseWin(MMI_PIN_INPUTING_WIN_ID);
+       MMIDEFAULT_AllowTurnOffBackLight(TRUE);
 
-            // ´ò¿ªÊäÈëPINµÄ½çÃæ
-            MMK_CreatePubEditWin((uint32*)MMI_PIN_INPUTING_WIN_TAB,(ADD_DATA)opreate_pin_ptr);
-        }
-    }
-}
+       // background
+       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
 
-LOCAL void HandlePukModifyPinExceptPhone(
-                                         uint8                      *puk_pin_str,
-                                         MNSIM_PIN_INDICATION_E     pin_num
-                                         )
-{
-    MMI_PIN_INFO_T  pin_info = {0};
-    MMI_STRING_T    wait_text = {0};
-    
-    SCI_MEMSET(((void*)&pin_info), 0, sizeof(MMI_PIN_INFO_T));
-    
-    //parse input str
-    if (PARS_RESULT_SUCCESS == MMIAPIPARSE_ParsePukAndPinStr((char *)puk_pin_str,&pin_info))
-    {
-        //operate pin
-        MNPHONE_OperatePinEx(MMIAPIPHONE_GetCurHandlingPinSimID(), MNSIM_PIN_UNBLOCK,pin_num,&pin_info.ext_pin_value,&pin_info.pin_value);
-        
-        MMK_CloseWin(PHONE_PIN_WAIT_WIN_ID);
-        
-        //½øÈëµÈ´ý½çÃæ
-        MMI_GetLabelTextByLang(TXT_COMMON_WAITING, &wait_text);
-        MMIPUB_OpenWaitWin(1,&wait_text,PNULL,PNULL,PHONE_PIN_WAIT_WIN_ID,IMAGE_NULL,
-            ANIM_PUBWIN_WAIT,WIN_ONE_LEVEL,MMIPUB_SOFTKEY_NONE,HandlePukWaitingWindow);
-    }
-    else
-    {
-        if (MNSIM_PIN1 == pin_num)
-        {
-            MMIPUB_OpenAlertWinByTextId(PNULL,TXT_INPUT_ERROR,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePukAlertWindowExceptPhone);
-        }
-        else
-        {
-            MMIPUB_OpenAlertWarningWin(TXT_INPUT_ERROR);
-        }
-        
-        //Çå¿Õpassword
-        GUIEDIT_ClearAllStr(MMI_PUK_INPUT_EDITBOX_CTRL_ID);
-    }
-}
+       // label 0
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
+       // label 1
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-/*****************************************************************************/
-//     Description : ´¦Àínew pin INPUTINGµÄÏûÏ¢,³ýÈ¥¿ª¹Ø»úreponse PINµÄÇé¿ö
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleNewPinInputExceptPhone (
-                                                 MMI_WIN_ID_T    win_id,       // new pin input´°¿ÚµÄID
-                                                 MMI_MESSAGE_ID_E      msg_id,         // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                                 DPARAM                    param               // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                                 )
-{
-    MMI_OPERATE_PIN_T   *operate_pin_ptr = (MMI_OPERATE_PIN_T *)MMK_GetWinAddDataPtr(win_id);
-    MMI_RESULT_E    result = MMI_RESULT_TRUE;
-    MMI_STRING_T   puk_value = {0};
-    MMI_STRING_T   old_pin_value = {0};
-    MMI_STRING_T   new_pin_value = {0};
-    MMI_STRING_T   new_pin_again_value = {0};
-    GUI_BOTH_RECT_T edit_both_rect = {0};
+       // label 2
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-    switch (msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-#ifdef MAINLCD_SIZE_128X64 //added by taiping.lai 2011/01/03
-               {
-                       GUI_RECT_T title_rect = GetPasswordTitleRect();
+       // label 3
+       image_id = IMAGE_AIGC_RECORD_BUTTON_PRESSED;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = 75;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_CONTINUE, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_3_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-                       GUIWIN_SetTitleRect(win_id, title_rect);        
-               }
-        edit_both_rect = GetPinPukEditRect(win_id, FALSE);
-#else
-        edit_both_rect = GetPinPukEditRect(win_id, TRUE);     
-#endif 
-        GUIAPICTRL_SetBothRect(MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID, &edit_both_rect);
-
-        GUIEDIT_SetPasswordStyle(MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID,GUIEDIT_PASSWORD_STYLE_DIGITAL_PIN);
-       //set left softkey
-        GUIEDIT_SetSoftkey(MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID,0,MMI_PIN_MIN_LENGTH,TXT_NULL,TXT_COMMON_OK,PNULL);
-         MMK_SetAtvCtrl(win_id,MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID);
-        break;
-        
-    case MSG_FULL_PAINT:
-        //set title
-        if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-        {
-            GUIWIN_SetTitleTextId(MMI_NEW_PIN_INPUTING_WIN_ID,TXT_ENTER_NEW_PIN,FALSE);
-        }
-        else
-        {
-            GUIWIN_SetTitleTextId(MMI_NEW_PIN_INPUTING_WIN_ID,TXT_ENTER_NEW_PIN2,FALSE);
-        }
-#if !defined(MMI_PDA_SUPPORT) && !defined(MMIPUBWIN_PDASTYLE_SUPPORT)
-#if !defined(MAINLCD_SIZE_176X220) && !defined(MAINLCD_SIZE_128X160)
-        SetPasswordBackground(win_id,MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID,FALSE);
-#else
-        SetPasswordBackground(win_id,MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID,TRUE);
-#endif
-#endif
-        break;
-        
-#ifdef TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_PENOK:
-#endif //TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_MIDSK:
-    case MSG_CTL_OK:
-    case MSG_APP_OK:
-    case MSG_APP_WEB:
-        // get the value about new PIN
-        GUIEDIT_GetString(MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID,&new_pin_value);
-        
-        if (PIN_LEN_IS_IN_RANGE(new_pin_value.wstr_len))
-        {
-            MMI_OPERATE_PIN_T   *new_opreate_pin_ptr = SCI_ALLOC_APPZ(sizeof(MMI_OPERATE_PIN_T));
-            MMI_MEMCPY(new_opreate_pin_ptr,sizeof(MMI_OPERATE_PIN_T),
-                operate_pin_ptr,sizeof(MMI_OPERATE_PIN_T),
-                sizeof(MMI_OPERATE_PIN_T));
-            
-            //open the window of input new pin again
-            MMK_CreatePubEditWin((uint32*)MMI_NEW_PIN_AGAIN_INPUTING_WIN_TAB,(ADD_DATA)new_opreate_pin_ptr);
-        }
-        break;
-        
-    case MSG_SET_NEW_PIN_AGAIN:
-        // get the value about new PIN again
-        GUIEDIT_GetString(MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID,&new_pin_again_value);
-        
-        // get the value about new PIN
-        GUIEDIT_GetString(MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID,&new_pin_value);
-        
-        //±È½ÏÁ½¸öPINÊÇ·ñÏàͬ
-        
-        if( MMIAPICOM_StrCompare( &new_pin_value, &new_pin_again_value ) )
-        //if (MMIAPICOM_CompareTwoTeleNum( new_pin_again_value.str_ptr, new_pin_again_value.str_len, new_pin_value.str_ptr, new_pin_value.str_len))
-        {
-            if (MNSIM_PIN_CHANGE == operate_pin_ptr->operate_type)//pin modify pin
-            {
-                // get the value about old PIN
-                GUIEDIT_GetString(MMI_PIN_INPUT_EDITBOX_CTRL_ID,&old_pin_value);
-                HandleOperatePinAndNewPin(operate_pin_ptr,&old_pin_value,&new_pin_value);
-            }
-            else//puk modify pin
-            {
-                // get the value about PUK
-                GUIEDIT_GetString(MMI_PUK_INPUT_EDITBOX_CTRL_ID,&puk_value);
-                HandleOperatePukAndNewPin(operate_pin_ptr,&puk_value,&new_pin_value);
-            }
-            
-            //close input new pin and input new pin again window
-            MMK_CloseWin(MMI_NEW_PIN_INPUTING_WIN_ID);
-            MMK_CloseWin(MMI_NEW_PIN_AGAIN_INPUTING_WIN_ID);
-        }
-        else
-        {
-            if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-            {
-                //Ìáʾ´íÎó´°¿Ú,Á½´ÎÊäÈëµÄPIN²»Ò»ÖÂ
-                #ifdef MMI_PDA_SUPPORT
-                MMIPUB_OpenAlertWinByTextId(PNULL,TXT_INPUT_CONFLICT,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePukAlertWindowExceptPhone);
-                #else
-                MMIPUB_OpenAlertWinByTextId(PNULL,TXT_MSGBOX_PIN_CONFLICT,TXT_NULL,IMAGE_PUBWIN_WARNING,PNULL,PNULL,MMIPUB_SOFTKEY_ONE,HandlePukAlertWindowExceptPhone);
-                #endif
-            }
-            else
-            {
-                #ifdef MMI_PDA_SUPPORT 
-                MMIPUB_OpenAlertWarningWin(TXT_INPUT_CONFLICT);
-                #else
-                MMIPUB_OpenAlertWarningWin(TXT_MSGBOX_PIN2_CONFLICT);
-                #endif
-            }
-            
-            //Çå¿Õpassword
-            GUIEDIT_ClearAllStr(MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID);
-            
-            //close input new pin again window
-            MMK_CloseWin(MMI_NEW_PIN_AGAIN_INPUTING_WIN_ID);
-            
-            MMK_SetAtvCtrl(win_id,MMI_NEW_PIN_INPUT_EDITBOX_CTRL_ID);
-        }
-        break;
-        
-    case MSG_CTL_CANCEL:
-    case MSG_APP_CANCEL:
-        MMK_CloseWin( win_id );
-        break;
-        
-    case MSG_APP_RED://puk½çÃæ´æÔÚ£¬red and flip²»ÔÊÐí·µ»Ø
-        if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-        {
-            if (!MMK_IsOpenWin(MMI_PUK_INPUTING_WIN_ID))
-            {
-                result = MMI_RESULT_FALSE;
-            }
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
+       // label 4
+       image_id = IMAGE_AIGC_CANCEL_BUTTON;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = 20;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_4_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_4_CTRL_ID, &ctrl_bg);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_4_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+       
+       // anim
+       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-        {
-            if (!MMK_IsOpenWin(MMI_PUK_INPUTING_WIN_ID))
-            {
-                result = MMI_RESULT_FALSE;
-            }
-            else
-            {
-                MMIDEFAULT_HandleFlipKey(FALSE);
-            }
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
-#endif        
-        
-    case MSG_CLOSE_WINDOW:
-        MMK_FreeWinAddData(MMI_NEW_PIN_INPUTING_WIN_ID);
-        break;
-        
-    default:
-        result = MMI_RESULT_FALSE;
-        break;
-    }
-    
-    return (result);
-}
+       // text 1
+       text_style.effect = FONT_EFFECT_NONE; 
+       text_style.align = ALIGN_LVMIDDLE;
+       text_style.font = SONG_FONT_24;
+       text_style.font_color = MMI_WHITE_COLOR;
+       
+       trans_text_str = mmi_aigc_trans_result_text_get(&trans_text_len);
+       trans_text_wstr = SCI_ALLOC_APPZ((trans_text_len + 1) * sizeof(wchar));
+       if(PNULL == trans_text_wstr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       SCI_MEMSET(trans_text_wstr, 0x0, ((trans_text_len + 1) * sizeof(wchar)));
+       MMIAPICOM_StrToWstr(trans_text_str, trans_text_wstr);
+       text_str.wstr_ptr = trans_text_wstr;
+       text_str.wstr_len = MMIAPICOM_Wstrlen(trans_text_wstr);
+       GUISTR_GetStringInfo(&text_style, &text_str, text_state, &text_info);   
+
+       ctrl_rect.top = 30;
+       ctrl_rect.left = 25;
+       ctrl_rect.right = full_rect.right - 10;
+       item_height = ((text_info.width) / (ctrl_rect.right - ctrl_rect.left) + 1) * (text_info.height + 10);
+       ctrl_rect.bottom = ctrl_rect.top + item_height;
+       LCD_FillRoundedRect(dev_info_ptr, ctrl_rect, ctrl_rect, MMI_AIGC_SELF_ITEM_BACKGROUND_COLOR);
+
+       GUITEXT_SetRect(MMI_AIGC_TEXT_0_CTRL_ID, &ctrl_rect);
+       GUITEXT_SetFont(MMI_AIGC_TEXT_0_CTRL_ID, &text_style.font, text_style.font_color); 
+       GUITEXT_SetAlign(MMI_AIGC_TEXT_0_CTRL_ID, text_style.align);
+       GUITEXT_SetString(MMI_AIGC_TEXT_0_CTRL_ID, text_str.wstr_ptr, text_str.wstr_len, FALSE);
+
+       if(PNULL = trans_text_wstr)
+       {
+               SCI_FREE(trans_text_wstr);
+               trans_text_wstr = PNULL;
+       }
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-/*****************************************************************************/
-//     Description : ´¦Àínew pin again INPUTINGµÄÏûÏ¢,³ýÈ¥¿ª¹Ø»úreponse PINµÄÇé¿ö
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleNewPinAgainInputExceptPhone (
-                                                      MMI_WIN_ID_T   win_id,   // new pin input´°¿ÚµÄID
-                                                      MMI_MESSAGE_ID_E         msg_id,         // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                                      DPARAM            param          // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                                      )
-{
-    MMI_OPERATE_PIN_T   *operate_pin_ptr = (MMI_OPERATE_PIN_T *)MMK_GetWinAddDataPtr(win_id);
-    MMI_RESULT_E        result = MMI_RESULT_TRUE;
-    MMI_STRING_T       new_pin_again_value = {0};
-    GUI_BOTH_RECT_T edit_both_rect = {0};
-    
-    switch (msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-#ifdef MAINLCD_SIZE_128X64 //added by taiping.lai 2011/01/03
-               {
-                       GUI_RECT_T title_rect = GetPasswordTitleRect();
+       // text 2
+       chat_text_str = mmi_aigc_trans_result_text_get(&chat_text_len);
+       chat_text_wstr = SCI_ALLOC_APPZ((chat_text_len + 1) * sizeof(wchar));
+       if(PNULL == chat_text_wstr)
+       {
+               AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       SCI_MEMSET(chat_text_wstr, 0x0, ((chat_text_len + 1) * sizeof(wchar)));
+       MMIAPICOM_StrToWstr(chat_text_str, chat_text_wstr);
+       text_str.wstr_ptr = chat_text_wstr;
+       text_str.wstr_len = MMIAPICOM_Wstrlen(chat_text_wstr);
+       GUISTR_GetStringInfo(&text_style, &text_str, text_state, &text_info);   
+
+       ctrl_rect.top = ctrl_rect.bottom + 20;
+       ctrl_rect.left = 10;
+       ctrl_rect.right = full_rect.right - 25;
+       item_height = ((text_info.width) / (ctrl_rect.right - ctrl_rect.left) + 1) * (text_info.height + 10);
+       ctrl_rect.bottom = ctrl_rect.top + item_height;
+       if(240 < ctrl_rect.bottom) // button top position
+       {
+               ctrl_rect.bottom = 240;
+       }
+       LCD_FillRoundedRect(dev_info_ptr, ctrl_rect, ctrl_rect, MMI_AIGC_OTHER_ITEM_BACKGROUND_COLOR);
 
-                       GUIWIN_SetTitleRect(win_id, title_rect);                                        
-               }
-        edit_both_rect = GetPinPukEditRect(win_id, FALSE);
-#else
-        edit_both_rect = GetPinPukEditRect(win_id, TRUE);
-#endif
-        GUIAPICTRL_SetBothRect(MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID, &edit_both_rect);
-
-        GUIEDIT_SetPasswordStyle(MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID,GUIEDIT_PASSWORD_STYLE_DIGITAL_PIN);
-
-        //set left softkey
-        GUIEDIT_SetSoftkey(MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID,0,MMI_PIN_MIN_LENGTH,TXT_NULL,TXT_COMMON_OK,PNULL);
-        MMK_SetAtvCtrl(win_id,MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID);
-        break;
-        
-    case MSG_FULL_PAINT:
-        //set title
-        if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-        {
-            GUIWIN_SetTitleTextId(MMI_NEW_PIN_AGAIN_INPUTING_WIN_ID,TXT_ENTER_PIN_CNF,FALSE);
-        }
-        else
-        {
-            GUIWIN_SetTitleTextId(MMI_NEW_PIN_AGAIN_INPUTING_WIN_ID,TXT_ENTER_PIN2_CNF,FALSE);
-        }
-#if !defined(MMI_PDA_SUPPORT) && !defined(MMIPUBWIN_PDASTYLE_SUPPORT)
-#if !defined(MAINLCD_SIZE_176X220) && !defined(MAINLCD_SIZE_128X160)
-        SetPasswordBackground(win_id,MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID,FALSE);
-#else
-        SetPasswordBackground(win_id,MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID,TRUE);
-#endif
-#endif
-        break;
-        
-#ifdef TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_PENOK:
-#endif //TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_MIDSK:
-    case MSG_CTL_OK:
-    case MSG_APP_OK:
-    case MSG_APP_WEB:
-        // get the value about new PIN again
-        GUIEDIT_GetString(MMI_NEW_PIN_AGAIN_INPUT_EDITBOX_CTRL_ID,&new_pin_again_value);
-        
-        if (PIN_LEN_IS_IN_RANGE(new_pin_again_value.wstr_len))
-        {
-            //send the new pin again to input new pin window
-            MMK_SendMsg(MMI_NEW_PIN_INPUTING_WIN_ID,MSG_SET_NEW_PIN_AGAIN,PNULL);
-        }
-        break;
-        
-    case MSG_CTL_CANCEL:
-    case MSG_APP_CANCEL:
-        MMK_CloseWin( win_id );
-        break;
-        
-    case MSG_APP_RED://puk½çÃæ´æÔÚ£¬red and flip²»ÔÊÐí·µ»Ø
-        if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-        {
-            if (!MMK_IsOpenWin(MMI_PUK_INPUTING_WIN_ID))
-            {
-                result = MMI_RESULT_FALSE;
-            }
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
+       GUITEXT_SetRect(MMI_AIGC_TEXT_1_CTRL_ID, &ctrl_rect);
+       GUITEXT_SetFont(MMI_AIGC_TEXT_1_CTRL_ID, &text_style.font, text_style.font_color); 
+       GUITEXT_SetAlign(MMI_AIGC_TEXT_1_CTRL_ID, text_style.align);
+       GUITEXT_SetString(MMI_AIGC_TEXT_1_CTRL_ID, text_str.wstr_ptr, text_str.wstr_len, FALSE);
 
-#ifdef FLIP_PHONE_SUPPORT  //close flip ring codes, just open for flip phone.        
-    case MSG_APP_FLIP:
-        if (MNSIM_PIN1 == operate_pin_ptr->pin_num)
-        {
-            if (!MMK_IsOpenWin(MMI_PUK_INPUTING_WIN_ID))
-            {
-                result = MMI_RESULT_FALSE;
-            }
-            else
-            {
-                MMIDEFAULT_HandleFlipKey(FALSE);
-            }
-        }
-        else
-        {
-            result = MMI_RESULT_FALSE;
-        }
-        break;
-#endif        
-        
-    case MSG_CLOSE_WINDOW:
-        MMK_FreeWinAddData(MMI_NEW_PIN_AGAIN_INPUTING_WIN_ID);
-        break;
-        
-    default:
-        result = MMI_RESULT_FALSE;
-        break;
-    }
-    
-    return (result);
+       if(PNULL = chat_text_wstr)
+       {
+               SCI_FREE(chat_text_wstr);
+               chat_text_wstr = PNULL;
+       }
+       MMK_SetAtvCtrl(win_id, MMI_AIGC_TEXT_1_CTRL_ID);
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 }
 
-/*****************************************************************************/
-//     Description : handle display imei when no sim or sim error
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleDisplayImei (
-                                      MMI_WIN_ID_T   win_id,   // ´°¿ÚµÄID
-                                      MMI_MESSAGE_ID_E         msg_id,         // ´°¿ÚµÄÄÚ²¿ÏûÏ¢ID
-                                      DPARAM            param          // ÏàÓ¦ÏûÏ¢µÄ²ÎÊý
-                                      )
+LOCAL void mmi_aigc_timeout_win_display(void)
 {
-    MMI_RESULT_E  recode = MMI_RESULT_TRUE;
-    
-    switch(msg_id)
-    {
-    case MSG_OPEN_WINDOW:
-        AppendIMEIDetail(MMIPHONE_DISPLAY_IMEI_CTRL_ID);
-
-        //set softkey
-        GUIWIN_SetSoftkeyTextId(win_id, TXT_NULL, TXT_NULL, STXT_RETURN,FALSE);
-
-        MMK_SetAtvCtrl(win_id, MMIPHONE_DISPLAY_IMEI_CTRL_ID);
-        break;
-
-    case MSG_CTL_CANCEL:
-    case MSG_APP_CANCEL:
-        MMK_CloseWin(win_id);
-        break;
-        
-    default:
-        recode = MMI_RESULT_FALSE;
-        break;
-    }
-    
-    return recode;
+       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
+       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
+       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
+       GUI_FONT_ALL_T font_all = {SONG_FONT_24, MMI_WHITE_COLOR};
+       GUI_BG_T ctrl_bg = {0};
+       GUI_RECT_T ctrl_rect = {0};
+       MMI_STRING_T display_text = {0};
+       char text_ptr[64] = {0};
+       wchar text_dis[64] = {0};
+       uint16 image_width = 0;
+       uint16 image_height = 0;
+       GUI_POINT_T display_point = {0};
+       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+       
+
+       MMIDEFAULT_AllowTurnOffBackLight(TRUE);
+       
+       // background
+       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
+
+       // label 0
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = 35;
+       ctrl_rect.bottom = ctrl_rect.top + 35;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_ASSITANT, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 1
+       image_id = IMAGE_AIGC_PROMPT;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 100;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_1_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg(MMI_AIGC_LABEL_1_CTRL_ID, &ctrl_bg);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 2
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = MMI_MAINSCREEN_HEIGHT / 2;
+       ctrl_rect.bottom = ctrl_rect.top + 70;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_2_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_TIMEOUT, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_2_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 3
+       image_id = IMAGE_AIGC_RECORD_BUTTON_PRESSED;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_COMMON_OK, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_3_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 4
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_4_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+       
+       // anim
+       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // text 1
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // text 2
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 }
 
-/*****************************************************************************/
-//     Description : ´¦ÀíÊäÈëµÄPuk and new pinÂ룬³ýÈ¥¿ª¹Ø»úreponse PINµÄÇé¿ö
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL void HandleOperatePukAndNewPin(
-                                     MMI_OPERATE_PIN_T  *operate_pin_info,
-                                     MMI_STRING_T      *puk_ptr,
-                                     MMI_STRING_T      *pin_ptr
-                                     )
+LOCAL void mmi_aigc_thinking_win_display(void)
 {
-    MN_BLOCK_T      puk_value = {0};
-    MN_BLOCK_T      pin_value = {0};
-    MMI_STRING_T    wait_text = {0};
-    
-    if(PNULL == pin_ptr ||PNULL == puk_ptr ||PNULL == operate_pin_info)
-    {
-        //SCI_TRACE_LOW:"HandleOperatePukAndNewPin pin_ptr=%d, puk_ptr= %d , operate_pin_info=%d"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_2865_112_2_18_2_45_34_234,(uint8*)"ddd", pin_ptr, puk_ptr, operate_pin_info);
-        return;
-    }
-    
-    //ת»»PUKµÄ½á¹¹
-    puk_value.blocklen = puk_ptr->wstr_len;
-
-    MMI_WSTRNTOSTR((uint8 *)puk_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        puk_ptr->wstr_ptr,
-        puk_value.blocklen,
-        puk_value.blocklen);
-
-    //ת»»PINµÄ½á¹¹
-    pin_value.blocklen = pin_ptr->wstr_len;
-
-    MMI_WSTRNTOSTR((uint8 *)pin_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        pin_ptr->wstr_ptr,
-        pin_value.blocklen,
-        pin_value.blocklen);
-
-    //operate pin
-    MNPHONE_OperatePinEx(MMIAPIPHONE_GetCurHandlingPinSimID(), MNSIM_PIN_UNBLOCK,operate_pin_info->pin_num,&puk_value,&pin_value);
-    
-    MMK_CloseWin(PHONE_PIN_WAIT_WIN_ID);
-    
-    //½øÈëµÈ´ý½çÃæ
-    MMI_GetLabelTextByLang(TXT_COMMON_WAITING, &wait_text);
-    MMIPUB_OpenWaitWin(1,&wait_text,PNULL,PNULL,PHONE_PIN_WAIT_WIN_ID,IMAGE_NULL,
-        ANIM_PUBWIN_WAIT,WIN_ONE_LEVEL,MMIPUB_SOFTKEY_NONE,HandlePukWaitingWindow);
+       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
+       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
+       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
+       GUI_FONT_ALL_T font_all = {SONG_FONT_24, MMI_WHITE_COLOR};
+       GUI_BG_T ctrl_bg = {0};
+       GUI_RECT_T ctrl_rect = {0};
+       MMI_STRING_T display_text = {0};
+       uint16 image_width = 0;
+       uint16 image_height = 0;
+       GUI_POINT_T display_point = {0};
+       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+
+       
+       MMIDEFAULT_AllowTurnOffBackLight(FALSE);
+
+       // background
+       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
+
+       // label 0
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = 35;
+       ctrl_rect.bottom = ctrl_rect.top + 40;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_THINKING, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 1
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // label 2
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // label 3
+       image_id = IMAGE_AIGC_RECORD_BUTTON_PRESSED;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(STXT_CANCEL, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_3_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 4
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_4_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // anim
+       {
+               GUIANIM_RESULT_E anim_result = GUIANIM_RESULT_SUCC;
+               GUIANIM_CTRL_INFO_T control_info = {0};
+               GUIANIM_DATA_INFO_T data_info = {0};
+               GUIANIM_DISPLAY_INFO_T display_info = {0};
+               
+               control_info.is_ctrl_id = TRUE;
+               control_info.ctrl_id = MMI_AIGC_ANIM_CTRL_ID;
+               
+               //data_info.anim_id = ANIM_AIGC_THINKING;
+           data_info.img_id = ANIM_AIGC_THINKING;
+               
+               display_info.align_style = GUIANIM_ALIGN_HVMIDDLE;
+               display_info.is_play_once = FALSE;
+               //display_info.is_update = TRUE;
+               
+               anim_result = GUIANIM_SetParam(&control_info, &data_info, PNULL, &display_info);
+       }
+       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // text 1
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // text 2
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 }
 
-/*****************************************************************************/
-//     Description : PINÐÞ¸ÄPIN£¬³ýÈ¥¿ª¹Ø»úreponse PINµÄÇé¿ö
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-LOCAL void HandleOperatePinAndNewPin(
-                                     MMI_OPERATE_PIN_T  *operate_pin_info,
-                                     MMI_STRING_T      *old_pin_ptr,
-                                     MMI_STRING_T      *new_pin_ptr
-                                     )
+LOCAL void mmi_aigc_listening_middle_win_display(void)
 {
-    MN_BLOCK_T      old_pin_value = {0};
-    MN_BLOCK_T      new_pin_value = {0};
-    MMI_STRING_T    wait_text = {0};
-    
-    if(PNULL == old_pin_ptr ||PNULL == new_pin_ptr ||PNULL == operate_pin_info)
-    {
-        //SCI_TRACE_LOW:"HandleOperatePinAndNewPin pin_ptr=%d, puk_ptr= %d , operate_pin_info=%d"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_2914_112_2_18_2_45_34_235,(uint8*)"ddd", old_pin_ptr, new_pin_ptr, operate_pin_info);
-        return;
-    }
-    
-    //ת»»old PINµÄ½á¹¹
-    old_pin_value.blocklen = old_pin_ptr->wstr_len;
-
-    MMI_WSTRNTOSTR((uint8 *)old_pin_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        old_pin_ptr->wstr_ptr,
-        old_pin_value.blocklen,
-        old_pin_value.blocklen);
-
-    //ת»»new PINµÄ½á¹¹
-    new_pin_value.blocklen = new_pin_ptr->wstr_len;
-
-    MMI_WSTRNTOSTR((uint8 *)new_pin_value.blockbuf,
-        MN_MAX_BLOCK_LEN,
-        new_pin_ptr->wstr_ptr,
-        new_pin_value.blocklen,
-        new_pin_value.blocklen);
-        
-#ifdef MMI_SIM_LOCK_SUPPORT
-    SCI_MEMCPY(&g_pin_value[MMIAPIPHONE_GetCurHandlingPinSimID()],
-                         &new_pin_value,
-                         sizeof(MN_BLOCK_T)); //¼Ç¼ÐµÄpin1Âë
-#endif    
-    //operate pin
-    MNPHONE_OperatePinEx(MMIAPIPHONE_GetCurHandlingPinSimID(), MNSIM_PIN_CHANGE,operate_pin_info->pin_num,&old_pin_value,&new_pin_value);
-    
-    MMK_CloseWin(PHONE_PIN_WAIT_WIN_ID);
-    
-    //½øÈëµÈ´ý½çÃæ
-    MMI_GetLabelTextByLang(TXT_COMMON_WAITING, &wait_text);
-    MMIPUB_OpenWaitWin(1,&wait_text,PNULL,PNULL,PHONE_PIN_WAIT_WIN_ID,IMAGE_NULL,
-        ANIM_PUBWIN_WAIT,WIN_ONE_LEVEL,MMIPUB_SOFTKEY_NONE,PNULL);
+       
 }
 
-/*****************************************************************************/
-//     Description : HandlePoweroffQueryWin
-//     Global resource dependence :                                
-//      Author: wancan.you
-//     Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandlePoweroffQueryWin(MMI_WIN_ID_T win_id, MMI_MESSAGE_ID_E msg_id, DPARAM param)
+LOCAL void mmi_aigc_listening_win_display(void)
 {
-    MMI_RESULT_E result = MMI_RESULT_TRUE;
+       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
+       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
+       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
+       GUI_FONT_ALL_T font_all = {SONG_FONT_24, MMI_WHITE_COLOR};
+       GUI_BG_T ctrl_bg = {0};
+       GUI_RECT_T ctrl_rect = {0};
+       MMI_STRING_T display_text = {0};
+       uint16 image_width = 0;
+       uint16 image_height = 0;
+       GUI_POINT_T display_point = {0};
+       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
 
-    switch(msg_id)
-    {
-    case MSG_APP_OK:
-#ifdef TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_PENOK:
-#endif //TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_MIDSK:
-    case MSG_CTL_OK:
-    case MSG_APP_WEB:
-        MMIPHONE_PowerOff();
-        break;
-
-    case MSG_APP_CANCEL:
-    case MSG_CTL_CANCEL:
-        MMK_CloseWin(win_id);
-        break;
-
-    default:
-        result = MMIPUB_HandleQueryWinMsg(win_id,msg_id,param);
-        break;
-    }
+       
+       MMIDEFAULT_AllowTurnOffBackLight(FALSE);
+
+       // background
+       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
+
+       // label 0
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = 35;
+       ctrl_rect.bottom = ctrl_rect.top + 40;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_LISTENING, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 1
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+       
+       // label 2
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // label 3
+       image_id = IMAGE_AIGC_RECORD_BUTTON_PRESSED;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_TALK_FINISH, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_3_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 4
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_4_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+
+       // anim
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = 90;
+       ctrl_rect.bottom = 230;
+       GUIANIM_SetCtrlRect(MMI_AIGC_ANIM_CTRL_ID, &ctrl_rect);
+       {
+           GUIANIM_RESULT_E anim_result = GUIANIM_RESULT_SUCC;
+           GUIANIM_CTRL_INFO_T control_info = {0};
+           GUIANIM_DATA_INFO_T data_info = {0};
+           GUIANIM_DISPLAY_INFO_T display_info = {0};
+           
+           control_info.is_ctrl_id = TRUE;
+           control_info.ctrl_id = MMI_AIGC_ANIM_CTRL_ID;
+           
+           //data_info.anim_id = ANIM_AIGC_LISTENING;
+           data_info.img_id = ANIM_AIGC_LISTENING;
+           
+           display_info.align_style = GUIANIM_ALIGN_HVMIDDLE;
+           display_info.is_play_once = FALSE;
+           //display_info.is_update = TRUE;
+           
+           anim_result = GUIANIM_SetParam(&control_info, &data_info, PNULL, &display_info);
+       }
+       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // text 1
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-    return result;
+       // text 2
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 }
 
-/*****************************************************************************/
-//     Description : open query power off 
-//     Global resource dependence : 
-//  Author: wancan.you
-//     Note:
-/*****************************************************************************/
-PUBLIC void MMIPHONE_OpenQueryPowerOff(MMIPHONE_QUERY_POWER_OFF_TYPE_E query_type)
+LOCAL void mmi_aigc_default_win_display(void)
 {
-    MMI_TEXT_ID_T text_id = TXT_NULL;
-    MMI_WIN_ID_T win_id = MMIPHONE_QUERY_POWEROFF_WIN_ID;
+       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
+       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
+       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
+       GUI_FONT_ALL_T font_all = {SONG_FONT_24, MMI_WHITE_COLOR};
+       GUI_BG_T ctrl_bg = {0};
+       GUI_RECT_T ctrl_rect = {0};
+       MMI_STRING_T display_text = {0};
+       uint16 image_width = 0;
+       uint16 image_height = 0;
+       GUI_POINT_T display_point = {0};
+       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
 
-    //SCI_TRACE_LOW:"MMIPHONE_OpenQueryPoweroff=%d"
-    SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_3035_112_2_18_2_45_34_238,(uint8*)"d", query_type);
 
-    if (MMIPHONE_QUERY_POWER_OFF_DOWNLOAD == query_type)
-    {
-        text_id = TXT_QUERY_POWEROFF_DOWNLOAD;
-    }
+       MMIDEFAULT_AllowTurnOffBackLight(FALSE);
 
-    if (TXT_NULL != text_id)
-    {
-        MMK_CloseWin(win_id);
-        MMIPUB_OpenQueryWinByTextId(text_id, IMAGE_PUBWIN_QUERY, &win_id, HandlePoweroffQueryWin);
-    }
-    else
-    {
-        MMIPHONE_PowerOff();
-    }
-}
+       // background
+       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
 
+       // label 0
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = 35;
+       ctrl_rect.bottom = ctrl_rect.top + 35;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_ASSITANT, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-LOCAL void AppendIMEIDetail(MMI_CTRL_ID_T ctrl_id)
-{
-    uint16 index = 0;
-    GUIRICHTEXT_ITEM_T item_data = {0};/*lint !e64*/
-    MMI_STRING_T string = {0};
-    wchar item_text[GUIRICHTEXT_TEXT_MAX_LEN + 1] = {0};
-    MN_IMEISVN_T imeisvn = {0};/*lint !e64*/
-    uint8 imei_str[(MN_MAX_IMEI_LENGTH<<1) + 1] = {0};
-    // wchar imei_wstr[(MN_MAX_IMEI_LENGTH<<1) + 1] = {0};
-    uint16 imei_len = 0;
-    uint8 svn_str[(MN_MAX_IMEI_LENGTH<<1) + 1] = {0};
-    wchar svn_wstr[(MN_MAX_IMEI_LENGTH<<1) + 1] = {0};
-    wchar imei_string[(MN_MAX_IMEI_LENGTH<<1) + 1] = {0};
-    uint16 svn_len = 0;
-    uint32 i = MN_DUAL_SYS_1;
-
-    item_data.img_type = GUIRICHTEXT_IMAGE_NONE;
-    item_data.text_type = GUIRICHTEXT_TEXT_BUF; 
-
-    //IMEI:
-    for(i = MN_DUAL_SYS_1; i < MMI_DUAL_SYS_MAX; i++)
-    {
-        if (MNNV_GetIMEISVNEx(i, &imeisvn))
-        {
-            MMI_GetLabelTextByLang(TXT_IMEI_DISPLAY, &string);
+       // label 1
+       image_id = IMAGE_AIGC_DEFAULT;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = (MMI_MAINSCREEN_HEIGHT - image_height) / 2;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_1_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_1_CTRL_ID, &ctrl_bg);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-            item_data.text_data.buf.len = MIN(GUIRICHTEXT_TEXT_MAX_LEN, string.wstr_len);
-            item_data.text_data.buf.str_ptr = string.wstr_ptr;
+       // label 2
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-            GUIRICHTEXT_AddItem(ctrl_id, &item_data, &index);
+       // label 3
+       image_id = IMAGE_AIGC_RECORD_BUTTON_DEFAULT;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_CONVERSATION, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_3_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-            MMIAPICOM_BcdToStr(PACKED_LSB_FIRST, (uint8 *)imeisvn.imei, MN_MAX_IMEI_LENGTH<<1, (char*)imei_str);
-            
-            imei_len = (uint16)strlen((char *)imei_str) - 1;
+       // label 4
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_4_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+       
+       // anim
+       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-            item_data.text_data.buf.len = MIN(GUIRICHTEXT_TEXT_MAX_LEN, imei_len);
+       // text 1
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-            MMI_STRNTOWSTR(imei_string,
-                           GUIRICHTEXT_TEXT_MAX_LEN,
-                           (uint8 *)&imei_str[1],
-                           imei_len,
-                           item_data.text_data.buf.len);
+       // text 2
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+}
 
-            item_data.text_data.buf.str_ptr = imei_string;
+LOCAL void mmi_aigc_no_network_win_display(void)
+{
+       MMI_WIN_ID_T win_id = MMI_AIGC_MAIN_WIN_ID;
+       GUI_LCD_DEV_INFO *dev_info_ptr = MMITHEME_GetDefaultLcdDev();
+       GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
+       GUI_FONT_ALL_T font_all = {SONG_FONT_24, MMI_WHITE_COLOR};
+       GUI_BG_T ctrl_bg = {0};
+       GUI_RECT_T ctrl_rect = {0};
+       MMI_STRING_T display_text = {0};
+       char text_ptr[64] = {0};
+       wchar text_dis[64] = {0};
+       uint16 image_width = 0;
+       uint16 image_height = 0;
+       GUI_POINT_T display_point = {0};
+       MMI_IMAGE_ID_T image_id = IMAGE_NULL;
+       
 
-            GUIRICHTEXT_AddItem(ctrl_id, &item_data, &index);
-        }
-        else
-        {
-            //SCI_TRACE_LOW:"AppendIMEIDetail Read MN_DUAL_SYS_%d MNNV_GetIMEISVNEx Error!"
-            SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_3115_112_2_18_2_45_34_239,(uint8*)"d", i + 1);
-        }
-    }
-    
-    //IMEISV:
-    if (MNNV_GetIMEISVNEx(MN_DUAL_SYS_1, &imeisvn))
-    {
-        if (imeisvn.svn_flag)
-        {
-            item_data.text_frame_type = GUIRICHTEXT_FRAME_NONE;
+       MMIDEFAULT_AllowTurnOffBackLight(TRUE);
+       
+       // background
+       GUI_FillRect(dev_info_ptr, full_rect, MMI_BLACK_COLOR);
 
-            MMI_GetLabelTextByLang(TXT_IMEISVN_DISPLAY, &string);
+       // label 0
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = 35;
+       ctrl_rect.bottom = ctrl_rect.top + 35;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_0_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_0_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_ASSITANT, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_0_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
+
+       // label 1
+       image_id = IMAGE_AIGC_PROMPT;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 100;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_1_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg(MMI_AIGC_LABEL_1_CTRL_ID, &ctrl_bg);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-            SCI_MEMSET(item_text, 0, sizeof(item_text));
-            item_data.text_data.buf.len = MMIAPICOM_CopyStr2Buf(item_text, &string, GUIRICHTEXT_TEXT_MAX_LEN);
-            item_data.text_data.buf.str_ptr = item_text;
+       // label 2
+       ctrl_rect.left = 0;
+       ctrl_rect.right = MMI_MAINSCREEN_WIDTH;
+       ctrl_rect.top = MMI_MAINSCREEN_HEIGHT / 2;
+       ctrl_rect.bottom = ctrl_rect.top + 70;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_NONE;
+       //ctrl_bg.img_id = ;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_2_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_2_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_AIGC_OPEN_FAIL, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_2_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_2_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-            GUIRICHTEXT_AddItem(ctrl_id, &item_data, &index);
+       // label 3
+       image_id = IMAGE_AIGC_RECORD_BUTTON_PRESSED;
+       GUIRES_GetImgWidthHeight(&image_width, &image_height, image_id, win_id);
+       ctrl_rect.left = (MMI_MAINSCREEN_WIDTH - image_width) / 2;
+       ctrl_rect.right = ctrl_rect.left + image_width;
+       ctrl_rect.top = 250;
+       ctrl_rect.bottom = ctrl_rect.top + image_height;
+       GUILABEL_SetRect( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_rect, FALSE);
+       ctrl_bg.bg_type = GUI_BG_IMG;
+       ctrl_bg.img_id = image_id;
+       GUILABEL_SetBg( MMI_AIGC_LABEL_3_CTRL_ID, &ctrl_bg);
+       GUILABEL_SetFont( MMI_AIGC_LABEL_3_CTRL_ID, font_all.font, font_all.color);
+       MMI_GetLabelTextByLang(TXT_COMMON_OK, &display_text);
+       GUILABEL_SetText( MMI_AIGC_LABEL_3_CTRL_ID, &display_text, FALSE);
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_3_CTRL_ID, GUICTRL_STATE_INVISIBLE, FALSE);
 
-            item_data.text_frame_type = GUIRICHTEXT_FRAME_NONE;
+       // label 4
+       GUIAPICTRL_SetState(MMI_AIGC_LABEL_4_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+       
+       // anim
+       GUIAPICTRL_SetState(MMI_AIGC_ANIM_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-            sprintf((char *)svn_str, "%d", imeisvn.svn);
-            
-            svn_len = (uint16)strlen((char *)svn_str);
+       // text 1
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_0_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
 
-            MMI_STRNTOWSTR( svn_wstr,
-                                        (MN_MAX_IMEI_LENGTH<<1),
-                                        (uint8 *)svn_str,
-                                        svn_len,
-                                        svn_len );
+       // text 2
+       GUIAPICTRL_SetState(MMI_AIGC_TEXT_1_CTRL_ID, GUICTRL_STATE_INVISIBLE, TRUE);
+}
 
-            item_data.text_data.buf.str_ptr = (wchar *)svn_wstr;
-            item_data.text_data.buf.len = svn_len;
+LOCAL void mmi_aigc_update_to_list_win(void)
+{
+       s_aigc_ui_state = MMI_AIGC_UI_STATE_LIST;
+       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
+       {
+               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
+       }
+}
 
-            GUIRICHTEXT_AddItem(ctrl_id, &item_data, &index);
-        }
-        else
-        {
-            //SCI_TRACE_LOW:"AppendIMEIDetail SVN Not Exist!"
-            SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_3153_112_2_18_2_45_35_240,(uint8*)"");
-        }
-    }
-    else
-    {
-        //SCI_TRACE_LOW:"AppendIMEIDetail Read MN_DUAL_SYS_1MNNV_GetIMEISVNEx Error!"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_3158_112_2_18_2_45_35_241,(uint8*)"");
-    }
+LOCAL void mmi_aigc_update_to_thinking_win(void)
+{
+       s_aigc_ui_state = MMI_AIGC_UI_STATE_THINKING;
+       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
+       {
+               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
+       }
 }
 
+LOCAL void mmi_aigc_update_to_listening_win(void)
+{
+       s_aigc_ui_state = MMI_AIGC_UI_STATE_LISTENING;
+       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
+       {
+               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
+       }
+}
 
-/*****************************************************************************/
-//     Description : handle udisk exception
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note:
-/*****************************************************************************/
-PUBLIC void MMIAPIPHONE_HandleUdiskException(
-                                          BOOLEAN   is_assert
-                                          )
+LOCAL void mmi_aigc_update_to_default_win(void)
 {
-#ifdef MMI_UDISK_MEM_ENABLE
-    uint16              str_rect_height = 0;
-    GUI_RECT_T          rect = MMITHEME_GetFullScreenRect();
-    GUI_RECT_T          str_rect = MMITHEME_GetFullScreenRect();
-    MMI_STRING_T        prompt_str = {0};
-    GUISTR_STYLE_T      str_style  = {0};
-    GUISTR_STATE_T      str_state  = GUISTR_STATE_ALIGN|GUISTR_STATE_WORDBREAK|GUISTR_STATE_SINGLE_LINE;
-    const GUI_LCD_DEV_INFO  *lcd_dev_ptr = MMITHEME_GetDefaultLcdDev();
-
-    //judge need erase
-#ifdef WIN32
-    if (0)
-#else
-    if (Umem_GetExceptionState())
-#endif
-    {
-        MMIAPISET_UpdateLCDContrast(GUI_MAIN_LCD_ID, MMISET_CONTRAST_FIVE);
-        
-        if (is_assert)
-        {
-            //open lcd backlight
-            MMIDEFAULT_InitDefault(FALSE);
-            MMIDEFAULT_TurnOnLCDBackLight();
-        }
-        
-        //MMIAPISET_InitLanguageSetting();
+       s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
+       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
+       {
+               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_FULL_PAINT, PNULL);
+       }
+}
 
-        //fill color
-        GUI_FillRect(lcd_dev_ptr,
-            rect,
-            MMI_BLACK_COLOR);
+LOCAL void mmi_aigc_main_win_open(void)
+{
+       if((FALSE == MMIAPIPHONE_IsSimAvailable(MN_DUAL_SYS_1))
+               #if defined MULTI_SIM_SYS_DUAL
+               && (FALSE == MMIAPIPHONE_IsSimAvailable(MN_DUAL_SYS_2))
+               #endif
+               )
+       {
+               s_aigc_ui_state = MMI_AIGC_UI_STATE_OPEN_FAIL;
+       }
+       else
+       {
+               s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
+       }
+}
 
-        //ge string rect height
-        str_rect_height = (int16)((rect.bottom+1) / 3);
+LOCAL void mmi_aigc_main_win_display(void)
+{
+       switch(s_aigc_ui_state)
+       {
+               case MMI_AIGC_UI_STATE_NONE:
+                       mmi_aigc_default_win_display();
+                       break;
 
-        //set string rect
-        str_rect.bottom = (int16)(str_rect_height - 1);
-        
-        //set string style
-        str_style.font       =   MMI_DEFAULT_TEXT_FONT;
-        str_style.font_color =   MMI_WHITE_COLOR;
-        str_style.align      =   ALIGN_HVMIDDLE;
+               case MMI_AIGC_UI_STATE_OPEN_FAIL:
+                       mmi_aigc_no_network_win_display();
+                       break;
 
-        //get string
-        MMI_GetLabelTextByLang(TXT_STARTUP_ERASE_WAITING1,&prompt_str);
+               case MMI_AIGC_UI_STATE_LISTENING:
+                       mmi_aigc_listening_win_display();
+                       break;
 
-        //display string
-        GUISTR_DrawTextToLCDInRect(lcd_dev_ptr, &str_rect, &str_rect, &prompt_str, &str_style, str_state, GUISTR_TEXT_DIR_AUTO);
+               case MMI_AIGC_UI_STATE_LISTENING_MIDDLE:
+                       mmi_aigc_listening_middle_win_display();
+                       break;
+                       
+               case MMI_AIGC_UI_STATE_THINKING:
+                       mmi_aigc_thinking_win_display();
+                       break;
+                       
+               case MMI_AIGC_UI_STATE_CONNECT_TIMEOUT:
+                       mmi_aigc_timeout_win_display();
+                       break;
 
-        //set string rect
-        str_rect.top    = (int16)(str_rect.bottom + 1);
-        str_rect.bottom = (int16)(str_rect.top + str_rect_height - 1);
+               case MMI_AIGC_UI_STATE_LIST:
+                       mmi_aigc_list_win_display();
+                       break;
 
-        //get string
-        MMI_GetLabelTextByLang(TXT_STARTUP_ERASE_WAITING2,&prompt_str);
+               default:
+                       break;
+       }
+}
 
-        //display string
-        GUISTR_DrawTextToLCDInRect(lcd_dev_ptr, &str_rect, &str_rect, &prompt_str, &str_style, str_state, GUISTR_TEXT_DIR_AUTO);
+LOCAL void mmi_aigc_main_win_key_menu_process(void)
+{
+       switch(s_aigc_ui_state)
+       {
+               case MMI_AIGC_UI_STATE_NONE:
+               case MMI_AIGC_UI_STATE_LIST:
+                       // wb
+                       mmi_aigc_tts_websocket_close();
+                       mmi_aigc_trans_websocket_open();
+                       
+                       mmi_aigc_all_data_clean(); 
+                       mmi_aigc_audio_record_start();
+                       mmi_aigc_update_to_listening_win();
+                       break;
 
-        //set string rect
-        str_rect.top    = (int16)(str_rect.bottom + 1);
-        str_rect.bottom = MMI_MAINSCREEN_BOTTOM_MAX_PIXEL;
+               case MMI_AIGC_UI_STATE_OPEN_FAIL:
+                       //if(MMK_IsOpenWin(MMI_AIGC_MAIN_WIN_ID))
+                       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
+                       {
+                               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_CLOSE_WINDOW, PNULL);
+                               //MMK_PostMsg
+                       }
+                       break;
 
-        //get string
-        MMI_GetLabelTextByLang(TXT_COMMON_WAITING,&prompt_str);
+               case MMI_AIGC_UI_STATE_LISTENING:
+                       mmi_aigc_listening_stop(FALSE);
+                       mmi_aigc_send_trans_start_msg(PNULL, 0);
+                       mmi_aigc_update_to_thinking_win();
+                       break;
 
-        //display string
-        GUISTR_DrawTextToLCDInRect(lcd_dev_ptr, &str_rect, &str_rect, &prompt_str, &str_style, str_state, GUISTR_TEXT_DIR_AUTO);
+               case MMI_AIGC_UI_STATE_THINKING:
+               case MMI_AIGC_UI_STATE_CONNECT_TIMEOUT:
+                       mmi_aigc_update_to_default_win();
+                       break;
 
-        MMITHEME_UpdateRect();
-        
-        //do erase ,after display waiting window
-#ifndef WIN32
-        Umem_ExceptionHandler();
-#endif
-    }
-#endif
+               default:
+                       break;
+       }
 }
 
-/*****************************************************************************/
-//     Description : PIN/PUK input window softkey
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note: 
-/*****************************************************************************/
-LOCAL BOOLEAN PinPukInputWinSoftkey(
-                                      wchar         *str_ptr,   //in
-                                      uint16        str_len,    //in
-                                      MMI_TEXT_ID_T *text_id_ptr//in/out:
-                                      )
+LOCAL void mmi_aigc_main_win_key_ok_process(void)
 {
-    BOOLEAN  result = FALSE;
-    BOOLEAN is_input_emergency_call = FALSE;
-    uint16 emergency_call_len = 0;
-    MMI_STRING_T    str_info = {0};
-
-    //set string info
-    str_info.wstr_ptr = str_ptr;
-    str_info.wstr_len = str_len;
-
-    is_input_emergency_call = MMIAPICC_IsInputEmergencyCall(&str_info, &emergency_call_len, MMIAPIPHONE_GetCurResponsePinSimID());
-    if ((is_input_emergency_call) &&
-        (str_len == emergency_call_len))
-    {
-        *text_id_ptr = TXT_SOS;
-        result = TRUE;
-    }
-    else if (str_len >= MMI_PIN_MIN_LENGTH)
-    {
-        *text_id_ptr = TXT_COMMON_OK;
-        result = TRUE;
-    }
+       switch(s_aigc_ui_state)
+       {
+               case MMI_AIGC_UI_STATE_LIST:
+                       s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
+                       if(MMK_IsFocusWin(MMI_AIGC_MAIN_WIN_ID))
+                       {
+                               MMK_SendMsg(MMI_AIGC_MAIN_WIN_ID, MSG_CLOSE_WINDOW, PNULL);
+                       }
+                       break;
 
-    return (result);
+               default:
+                       break;
+       }
 }
 
-/*****************************************************************************/
-//     Description : Make Emergency Call
-//     Global resource dependence : 
-//  Author: Jassmine
-//     Note: 
-/*****************************************************************************/
-LOCAL void MakeEmergencyCall(MMI_STRING_T *str_info)
+LOCAL void mmi_aigc_main_win_close(void)
 {
-    uint8 *emergency_call_ptr = PNULL;
-
-    if (PNULL == str_info || PNULL == str_info->wstr_ptr || 0 == str_info->wstr_len)
-    {
-        return;
-    }
+       mmi_aigc_trans_websocket_close();
+       mmi_aigc_chat_websocket_close();
+       mmi_aigc_tts_websocket_close();
 
-    emergency_call_ptr = (uint8 *)SCI_ALLOCAZ(str_info->wstr_len + 1);
-    if (PNULL == emergency_call_ptr)
-    {
-        return;
-    }
+       mmi_aigc_audio_play_stop();
+       mmi_aigc_audio_record_stop();
+       
+       mmi_aigc_all_data_clean();
 
-    //SCI_MEMSET(emergency_call_ptr, 0x00, (str_info->wstr_len + 1));
-
-    MMI_WSTRNTOSTR(emergency_call_ptr,
-                                str_info->wstr_len,
-                                str_info->wstr_ptr,
-                                str_info->wstr_len,
-                                str_info->wstr_len);
-
-    MMIAPICC_MakeCall(
-                                        MMIAPIPHONE_GetCurResponsePinSimID(),
-                                        emergency_call_ptr,
-                                        (uint8)str_info->wstr_len,
-                                        PNULL,
-                                        PNULL,
-                                        MMIAPICC_GetCallSimType(MMIAPIPHONE_GetCurResponsePinSimID()),
-                                        CC_CALL_NORMAL_CALL,
-                                        PNULL
-                                        );
-
-    SCI_FREE(emergency_call_ptr);
-    emergency_call_ptr = PNULL;
-}
+       s_aigc_ui_state = MMI_AIGC_UI_STATE_NONE;
 
-/*****************************************************************************/
-//  Description : set list rect
-//  Global resource dependence : 
-//  Author: Sam.hua
-//  Note:
-/*****************************************************************************/
-LOCAL void PUBLIST_SetListRect(
-                       MMIPUB_INFO_T *win_info_ptr
-                       )
-{
-    GUILIST_SetRect( win_info_ptr->ctrl_handle, &win_info_ptr->client_rect );
+       MMIDEFAULT_AllowTurnOffBackLight(TRUE);
 }
 
-
-/*****************************************************************************/
-//  Description : handle message of sim list pub window 
-//  Global resource dependence : none
-//  Author: Sam.Hua
-//  Note:
-/*****************************************************************************/
-LOCAL MMI_RESULT_E HandleSIMSelectCommonFuncWinMsg(
-                                    MMI_WIN_ID_T        win_id, 
-                                    MMI_MESSAGE_ID_E    msg_id, 
-                                    DPARAM              param
-                                    )
+LOCAL MMI_RESULT_E mmi_aigc_main_win_handle(MMI_WIN_ID_T win_id, MMI_MESSAGE_ID_E msg_id, DPARAM param)
 {
-    MMI_RESULT_E  retcode = MMI_RESULT_FALSE;
-    MMI_CTRL_ID_T   ctrl_id = 0;
-    MMIPUB_INFO_T   *win_info_ptr = MMIPUB_GetWinAddDataPtr(win_id);
-    MMIPHONE_SELECT_SIM_DATA_T* selectSim_data_ptr;
-    MN_DUAL_SYS_E dual_sys = MN_DUAL_SYS_1;
-    uint16 cur_index = 0;
-    uint16 top_index = 0;
-
-    //coverity 12954
-    if ( PNULL == win_info_ptr )
-    {
-        //Error //but how to back?? 
-        return MMI_RESULT_FALSE;
-    }
-       
-       if ( PNULL==win_info_ptr->extra_data_ptr )
-    {
-        //Error //but how to back?? 
-        return MMI_RESULT_FALSE;
-    }
-       ctrl_id = win_info_ptr->ctrl_handle;
-#ifdef MMIPUBWIN_PDASTYLE_SUPPORT
-    //תÒåÏûÏ¢
-    if ( MMI_RESULT_TRUE == ( retcode = MMIPUBHandleButtonMsg( win_info_ptr, msg_id, param ) ) )
-    {
-        return retcode;
-    }
-#endif
-    if ( !MMK_IsOpenWin( win_id ) )
-    {
-        return retcode;
-    }
-
-    selectSim_data_ptr =(MMIPHONE_SELECT_SIM_DATA_T*)win_info_ptr->extra_data_ptr;
+    MMI_RESULT_E result = MMI_RESULT_TRUE;
 
     switch (msg_id)
     {
-    case MSG_OPEN_WINDOW:
-        MMK_SetAtvCtrl(win_id, ctrl_id);
-        MMIAPIPHONE_SetNeedUpdateNetworkStatusWin(win_id);//
-        break;
-
-    case MSG_FULL_PAINT:
-        cur_index = GUILIST_GetCurItemIndex(ctrl_id);
-        top_index = GUILIST_GetTopItemIndex(ctrl_id);
-
-        GUILIST_SetMaxItem(ctrl_id, MMI_DUAL_SYS_MAX + 1, FALSE );//max item 
-        if (MMIPHONE_SELECTION_SIM_ONLY & selectSim_data_ptr->select_type)/*lint !e655*/
-        {
-            GUIWIN_SetTitleTextId(win_id, TXT_SIM_SEL , FALSE);
-            MMIAPISET_AppendMultiSimName(ctrl_id, TXT_COMMON_OK, MMI_DUAL_SYS_MAX, (MMISET_APPEND_SIM_TYPE_E)selectSim_data_ptr->append_type);
-         }
-#if defined(WIFI_SUPPORT)
-        if (MMIPHONE_SELECTION_WLAN_ONLY & selectSim_data_ptr->select_type)/*lint !e655*/
-        {
-            GUIWIN_SetTitleTextId(win_id, TXT_NETWORK_SELECT , FALSE);
-            //MMIAPISET_AppendMultiSimName(ctrl_id, STXT_OK, MMI_DUAL_SYS_MAX, (MMISET_APPEND_SIM_TYPE_E)selectSim_data_ptr->append_type);
-            SelectSIMList_AppendWifiItem(ctrl_id);
-        }
-#endif
-        
-#if defined(BT_DIALER_SUPPORT)
-        
-               if (!(MMIPHONE_SELECTION_SIM_NO_BT & selectSim_data_ptr->select_type))
-        {
-            MMIAPISET_AppendBtItem(ctrl_id);
-               
-                       if(MMIAPIBT_IsConnectDevice())
-                       {
-                               GUILIST_SetItemGray(ctrl_id, GUILIST_GetTotalItemNum(ctrl_id) - 1, FALSE);
-                               GUILIST_SetItemInvalid(ctrl_id, GUILIST_GetTotalItemNum(ctrl_id) - 1, FALSE);
-                       }
-                       else
-                       {
-                               GUILIST_SetItemGray(ctrl_id, GUILIST_GetTotalItemNum(ctrl_id) - 1, TRUE);
-                               GUILIST_SetItemInvalid(ctrl_id, GUILIST_GetTotalItemNum(ctrl_id) - 1, TRUE);
-                       }
-               }
-#endif         
-
-#ifdef MMIPUBWIN_PDASTYLE_SUPPORT
-        if ( !win_info_ptr->is_layout )
-        {
-            win_info_ptr->line_num = GUILIST_GetTotalItemNum( win_info_ptr->ctrl_handle );
+           case MSG_OPEN_WINDOW:
+               mmi_aigc_main_win_open();
+               break;
 
-            MMIPUB_ReleaseLayer( win_info_ptr );
+           case MSG_FULL_PAINT:
+                       mmi_aigc_main_win_display();
+                       break;
 
-            MMIPUBLayout( win_info_ptr );
-            PUBLIST_SetListRect( win_info_ptr );
-            MMIPUBSetButton( win_info_ptr, FALSE );
-        }
+               case MSG_APP_MENU:
+               case MSG_APP_WEB:
+               case MSG_CTL_MIDSK:
+                       mmi_aigc_main_win_key_menu_process();
+                       break;
 
-        MMIPUBDisplayWin( win_info_ptr );
-#endif
+               case MSG_APP_OK:
+               case MSG_CTL_OK:
+                       mmi_aigc_main_win_key_ok_process();
+                       break;
 
-        GUILIST_SetCurItemIndex(ctrl_id, cur_index);
-        GUILIST_SetTopItemIndex(ctrl_id, cur_index);
-        break;
-
-    case MSG_GET_FOCUS:
-        MMIAPIPHONE_SetNeedUpdateNetworkStatusWin(win_id);
-        break;
-
-#ifdef MMIPUBWIN_PDASTYLE_SUPPORT
-    case MSG_LCD_SWITCH:
-        MMIPUB_HandleLcdSwitch( win_info_ptr );
-        break;
-    case MSG_NOTIFY_UPDATE:
-        MMIPUBClearClientRectBg( win_info_ptr, param );
-        break;
-#endif
+               case MSG_APP_CANCEL:
+               case MSG_CTL_CANCEL:
+                       break;
 
-#ifdef TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_PENOK:
-#endif //TOUCH_PANEL_SUPPORT //IGNORE9527
-    case MSG_CTL_OK:
-    case MSG_APP_OK:
-    case MSG_APP_WEB:
-    case MSG_CTL_MIDSK:
-        {
-            uint16 cur_selection = 0;
-            uint32 item_data = 0;
-
-            cur_selection = GUILIST_GetCurItemIndex(ctrl_id);
-            if(GUILIST_IsCurrItemInvalid(ctrl_id))
-            {
-                break;
-            }
+           case MSG_APP_RED:
+                       MMK_CloseWin(win_id);
+               break;
 
-#if defined(BT_DIALER_SUPPORT) && defined(BT_MAP_SUPPORT)
-                       
-            if(MMIAPISMS_GetCurOperIsPush())
-            {
-                if((cur_selection == GUILIST_GetTotalItemNum(ctrl_id) - 1) 
-                    && !(MMK_IsOpenWin(MMISET_SET_SECURITY_WIN_ID)))//BUG683374
-                {
-                    if(MMIAPIBT_IsConnectDevice())
-                    {
-                        if(MMK_IsOpenWin(MMISMS_EDIT_SMS_WIN_ID))
-                        {
-                            MMISMS_BtSendItem(FALSE);
-                        }
-                        else
-                        {
-                            if(!MMK_IsOpenWin(MMISET_COM_SELECT_SIM_WIN_ID))
-                            {
-                                MMISMS_BtResendCallback(MMI_DUAL_SYS_MAX);
-                            }
-                        }
-                        MMK_CloseWin(win_id);
-                        break;
-                    }
-                }
-            }
-#endif
+           case MSG_CLOSE_WINDOW:
+               mmi_aigc_main_win_close();
+               break;
                        
-            GUILIST_GetItemData(ctrl_id, cur_selection, &item_data);        
-#if defined(WIFI_SUPPORT)
-            if( item_data <MMI_DUAL_SYS_MAX+1)
-#else
-            if( item_data <MMI_DUAL_SYS_MAX)
-#endif
-            {       
-               dual_sys = item_data ;  
-            }
-            else        //Error,call user_func and close win,
-            {   
-                //SCI_TRACE_LOW:"SelectSIM COM WIN,dual_sys[%d]>=MMI_DUAL_SYS_MAX/MMI_DUAL_SYS_MAX+1 in wifi "
-                SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_5307_112_2_18_2_45_39_257,(uint8*)"d",item_data);
-                retcode = selectSim_data_ptr->callback_func(MMI_DUAL_SYS_MAX, FALSE,selectSim_data_ptr->extra_data);
-                MMK_CloseWin(win_id);
-                break;
-            }
-
-            //call use func to do it again
-            retcode = selectSim_data_ptr->callback_func( dual_sys, TRUE,selectSim_data_ptr->extra_data);
-            if (retcode)    //if callback return ture, means should close the window
-            {
-                MMK_CloseWin(win_id);
-            }
-        }
-        break;
-
-    case MSG_CTL_CANCEL:
-    case MSG_APP_CANCEL:
-        retcode = selectSim_data_ptr->callback_func(MMI_DUAL_SYS_MAX, FALSE,PNULL);
-        MMK_CloseWin(win_id);
-        break;
-
-    case MSG_CLOSE_WINDOW:
-        //Free    extra_data_ptr
-/*            if (PNULL != selectSim_data_ptr->extra_data)    //help caller to free it ??
-        {
-            SCI_FREE(selectSim_data_ptr->extra_data);
-        }
-*/            
-        if (PNULL !=win_info_ptr->extra_data_ptr)
-        {
-            SCI_FREE(win_info_ptr->extra_data_ptr);
-        }
-        MMIPUB_DestroyWinData( win_info_ptr );
-        break;
-
-    default:
-        retcode = MMI_RESULT_FALSE;
-        break;
-    }
-
-    return retcode;
-}//End of HandleSIMSelectCommonWinMsg
+           default:
+               result = MMI_RESULT_FALSE;
+               break;
+       }
+       
+    return (result);
+}
 
-/*****************************************************************************/
-//  Description : creat and open Select SIM window by parameters
-//  Global resource dependence : 
-//  Author: sam.hua
-//  Note:
-/*****************************************************************************/
-PUBLIC  MMI_RESULT_E MMIAPIPHONE_OpenSelectSimWin(MMIPHONE_SELECT_SIM_DATA_T* selectsim_input_ptr)
+WINDOW_TABLE(MMI_AIGC_MAIN_WIN_TAB) = 
 {
-    BOOLEAN             result = FALSE;
-    MMI_WIN_ID_T        win_id = MMIPUB_LIST_WIN_ID;
-    MMIPUB_INFO_T       *win_info_ptr = PNULL;
-    MMIAPIPHONE_SELECTSIM_FUNC     handle_function = PNULL;//(PROCESSMSG_FUNC)HandleDefaultWinMsg;
-    MMI_WINDOW_CREATE_T win_create = {0};
-    MMI_HANDLE_T        win_handle = 0;
-    MMIPHONE_SELECT_SIM_DATA_T* temp_data_ptr=PNULL;
-
-    //Return FALSE if input win_id and handler id is PNULL
-    if (selectsim_input_ptr == PNULL)
-    {
-        //SCI_TRACE_LOW:"MMIAPIPHONE_OpenSelectSimWin:select sim_input_ptr couldn't be PNULL !"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_5366_112_2_18_2_45_39_258,(uint8*)"");
-        return MMI_RESULT_FALSE;
-    }
-
-
-    if( (PNULL == selectsim_input_ptr->win_id_ptr) ||
-        (PNULL == selectsim_input_ptr->callback_func)||
-        selectsim_input_ptr->publist_id==NULL)
-    {
-        //SCI_TRACE_LOW:"MMIAPIPHONE_OpenSelectSimWin:win_id_ptr or  handle_func couldn't be PNULL !"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_5375_112_2_18_2_45_39_259,(uint8*)"");
-        return MMI_RESULT_FALSE;
-    }
-
-    win_id = *(selectsim_input_ptr->win_id_ptr);
-
-    //judge window is already open
-    if ( !MMK_IsOpenWin( MMK_GetWinHandle(MMK_GetFirstAppletHandle(), win_id ) ) )
-    {
-        //set call back function
-        handle_function = selectsim_input_ptr->callback_func;
-
-        //MMIPUB_InitPubListWin
-
-        //set window parameter
-        win_info_ptr = SCI_ALLOC_APPZ(sizeof(MMIPUB_INFO_T));
-        //SCI_MEMSET(win_info_ptr,0,sizeof(MMIPUB_INFO_T));
-
-        temp_data_ptr = SCI_ALLOC_APPZ(sizeof(MMIPHONE_SELECT_SIM_DATA_T));
-        //Set it 
-        SCI_MEMCPY(temp_data_ptr,selectsim_input_ptr,sizeof(MMIPHONE_SELECT_SIM_DATA_T));
-
-        win_info_ptr->extra_data_ptr =temp_data_ptr;
-        //set user data
-        win_info_ptr->user_data       = PNULL;
-        //set prompt image id
-#ifdef DPHONE_SUPPORT 
-        win_info_ptr->prompt_image_id = IMAGE_NULL;
-#else        
-#ifdef MMIPUBWIN_PDASTYLE_SUPPORT
-               win_info_ptr->prompt_image_id = IMAGE_PUBWIN_DOWNARROW;
-#else 
-               win_info_ptr->prompt_image_id = IMAGE_NULL;
-#endif
-#endif//syy modify 2010.11.30 -end        
-
-        //set softkey style
-        win_info_ptr->softkey_style = MMIPUB_SOFTKEY_CUSTOMER;
-        win_info_ptr->win_id = win_id;
-        //win_info_ptr->type = MMIPUBWIN_LIST;
-        MMIPUB_SetPubListWinType(win_info_ptr);
-        //win_info_ptr->user_func = handle_function;
-        //get pubwin theme
-        MMITHEME_GetPubTheme( win_info_ptr->type, &win_info_ptr->pubwin_theme );
-
-        win_create.applet_handle = MMK_GetFirstAppletHandle();
-        win_create.win_id = win_id;
-        win_create.func = HandleSIMSelectCommonFuncWinMsg;
-        win_create.win_priority = WIN_ONE_LEVEL;
-        win_create.add_data_ex_ptr = win_info_ptr;
-        win_create.add_data_ptr= selectsim_input_ptr->user_data;    //user_call_data
-
-        //   No use if MMI_PDA_SUPPORT == FALSE
-        win_create.window_style = WS_HAS_TRANSPARENT|WS_HAS_PROMPT_WIN;
-        //  set style because MMIPUB_GetWinAddDataPtr need check it.
-        win_create.window_move_style = MOVE_NOT_FULL_SCREEN_WINDOW;
-
-        if( 0 != ( win_handle= win_info_ptr->win_handle = MMK_CreateWindow( &win_create ) ) )
-        {
-            result = TRUE;
-        }
-        if (result)
-        {
-            GUILIST_INIT_DATA_T  init_data   = {0};
-            MMI_CONTROL_CREATE_T create      = {0};
-            MMI_CTRL_ID_T        ctrl_id     = selectsim_input_ptr->publist_id;
-            GUI_BOTH_RECT_T rect = {0};   
-
-#ifdef MMIPUBWIN_PDASTYLE_SUPPORT
-            MMIPUBCreatSoftkeyCtrl( win_handle );
-    #ifdef MMI_PDA_SUPPORT
-            MMIPUB_SetWinSoftkey(win_id,TXT_NULL,STXT_RETURN,FALSE);
-    #else
-            MMIPUB_SetWinSoftkey(win_id,TXT_COMMON_OK,STXT_RETURN,FALSE);
-    #endif
-
-#else
-            GUIWIN_CreateSoftkeyDyn(win_handle,TXT_COMMON_OK,TXT_NULL,STXT_RETURN);
-            GUIWIN_CreateTitleDyna(win_handle, TXT_SIM_SEL);
-#endif
-            GUIWIN_SetTitleTextAlign(win_handle,ALIGN_LVMIDDLE);
-            //Create List Ctrl
-            rect = MMITHEME_GetWinClientBothRect(win_handle);
-            init_data.type           = GUILIST_TEXTLIST_E;
-            init_data.both_rect = rect;
-            create.ctrl_id           = ctrl_id;
-            create.guid              =SPRD_GUI_LIST_ID;
-            create.parent_win_handle = win_info_ptr->win_handle;
-            create.init_data_ptr     = &init_data;
-
-            MMK_CreateControl( &create );
-
-            //Save publist ctrl_id to win_info
-            win_info_ptr->ctrl_handle = MMK_GetCtrlHandleByWin( win_info_ptr->win_handle, ctrl_id );
-#ifdef MMIPUBWIN_PDASTYLE_SUPPORT
-            if( 0 != win_info_ptr->ctrl_handle )    //Set  list properties
-            {
-                GUILIST_SetTextFont(
-                        win_info_ptr->ctrl_handle,
-                        win_info_ptr->pubwin_theme.normal_font,
-                        win_info_ptr->pubwin_theme.layout.button_font.color);
-
-                GUILIST_SetBgColor(
-                        win_info_ptr->ctrl_handle,
-                        win_info_ptr->pubwin_theme.layout.ctrl_bg_color);
-            }
-#endif
-        }
+    WIN_FUNC((uint32)mmi_aigc_main_win_handle),    
+    WIN_ID(MMI_AIGC_MAIN_WIN_ID),
+       //WIN_STATUSBAR,
+       WIN_HIDE_STATUS,
+    //WIN_TITLE(TXT_NULL),
+    //WIN_SOFTKEY(TXT_NULL, TXT_NULL, TXT_NULL),
+       //WIN_STYLE(WS_DISABLE_COMMON_BG | WS_DISABLE_RETURN_WIN),
+       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_0_CTRL_ID),
+       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_1_CTRL_ID),
+       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_2_CTRL_ID),
+       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_3_CTRL_ID),
+       CREATE_LABEL_CTRL(GUILABEL_ALIGN_MIDDLE, MMI_AIGC_LABEL_4_CTRL_ID),
+       CREATE_ANIM_CTRL(MMI_AIGC_ANIM_CTRL_ID, MMI_AIGC_MAIN_WIN_ID),
+       CREATE_TEXT_CTRL(MMI_AIGC_TEXT_0_CTRL_ID),
+       CREATE_TEXT_CTRL(MMI_AIGC_TEXT_1_CTRL_ID),
+       //CREATE_BUTTON_CTRL(IMAGE_AIGC_RECORD_BUTTON_DEFAULT, MMI_AIGC_BUTTON_0_CTRL_ID),
+    END_WIN
+};
 
-        if (!result)
-        {
-            if (!MMK_IsOpenWin( win_handle ))   //Create fail,free memory
-            {
-                if (PNULL !=win_info_ptr->extra_data_ptr)
-                SCI_FREE(win_info_ptr->extra_data_ptr);
-                SCI_FREE(win_info_ptr);
-            }
-        }
-    }
-    else
-    {
-        //SCI_TRACE_LOW:"MMISET_OpenSelectSimWin:win_id %d is already open!"
-        SCI_TRACE_ID(TRACE_TOOL_CONVERT,MMIPHONE_WINTAB_5488_112_2_18_2_45_39_260,(uint8*)"d", win_id);
-    }
-    return MMI_RESULT_TRUE;
-}//End of MMICOM_OpenSelectSimWin 
-#endif
+PUBLIC void MMIAPIAIGC_EnterWin(void)
+{
+       AIGC_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
+       if(MMK_IsOpenWin(MMI_AIGC_MAIN_WIN_ID))
+       {
+               MMK_CloseWin(MMI_AIGC_MAIN_WIN_ID);
+       }
+       
+       MMK_CreateWin((uint32 *) MMI_AIGC_MAIN_WIN_TAB, PNULL);
+}
 
 #endif
 
index 744d97e..912ef25 100644 (file)
 
 #ifdef MMI_CUSTOM_AIGC_SUPPORT
 
+
+#define __MMI_AIGC_DEBUG__
+#ifdef __MMI_AIGC_DEBUG__
+#define AIGC_DEBUG_PRINTF(fmt, ...)    SCI_TRACE_LOW("[AIGC]"fmt, ##__VA_ARGS__)
+#else
+#define AIGC_DEBUG_PRINTF(fmt, ...)
+#endif
+
+
+#define MMI_AIGC_DATA_AUDIO_FORMAT (MMISRVAUD_RING_FMT_MP3)
+#define MMI_AIGC_DATA_RECORD_FORMAT (MMISRVAUD_RECORD_FMT_AMR)
+
+#define MMI_AMR_BUFSIZE_HEAD_SIZE              (6)
+#define MMI_AMR_BUFSIZE_PER_SECOND             (1600)
+#define MMI_AIGC_DATA_RECORD_DURATION_MAX              (60) // seconds
+#define MMI_AIGC_DATA_RECORD_SIZE_MAX          ((MMI_AIGC_DATA_RECORD_DURATION_MAX + 2) * MMI_AMR_BUFSIZE_PER_SECOND + MMI_AMR_BUFSIZE_HEAD_SIZE)
+
+#define MMI_AIGC_DATA_RECORD_FILE_NAME (L"D:\\aigc_record.amr")
+
+#define MMI_AIGC_DATA_SEND_TASK_PRIORITY 220
+#define MMI_AIGC_DATA_SEND_TASK_MSG_QUEUE_SIZE (16)
+#define MMI_AIGC_DATA_SEND_TASK_STACK_SIZE (16 * 1024)
+
+
 typedef enum
 {
        MMI_AIGC_UI_STATE_NONE,
@@ -36,29 +60,43 @@ typedef enum
 }MMI_AIGC_UI_STATE_E;
 
 
-#if 0
-// ¼Ç¼µ±Ç°ÍøÂçµÄ״̬¡£
-typedef struct
+typedef enum
 {
-    uint8 rssiLevel;
-    BOOLEAN is_first_rssi;
-    uint8 batteryLevel;
-    BOOLEAN isInCharging;
+       MMI_AIGC_MSG_SEND_ID_START,
+   
+    MMI_AIGC_MSG_TRANS_START_SEND,
+       MMI_AIGC_MSG_TRANS_AUDIO_SEND,
+       MMI_AIGC_MSG_TRANS_STOP_SEND,
+       MMI_AIGC_MSG_CHAT_TEXT_SEND,
+       MMI_AIGC_MSG_TTS_START_SEND,
+       MMI_AIGC_MSG_TTS_TEXT_SEND,
+       MMI_AIGC_MSG_TTS_STOP_SEND,
     
-    BOOLEAN isRoaming;    // if plmn is roaming plmn
-    BOOLEAN is_slecting;  // 
-    MN_PLMN_T plmn;
-    uint16 lac;
-    uint16 cell_id;
-    MN_PHONE_PLMN_STATUS_E plmn_status;  // plmn statue        
-    BOOLEAN gprs_support;
-    BOOLEAN mbms_support;              //TRUE means support
-    BOOLEAN edge_support;              //TRUE means support
-    BOOLEAN hsdpa_support;             //TRUE means support
-    BOOLEAN hsupa_support;             //TRUE means support, always FALSE for Tianlong R5    
-
-}__SERVICE_STATUS_T;
-#endif
+    MMI_AIGC_MSG_SEND_ID_END
+}MMI_AIGC_DATA_SEND_MSG_ID_E;
+
+
+typedef struct
+{
+    SIGNAL_VARS
+    void * data_ptr;
+       uint32 data_size;
+}MMI_AIGC_DATA_SIG_T;
+
+
+typedef struct
+{
+       void * text_data_ptr;
+       uint32 text_data_size;
+       //void * audio_data_ptr;
+       //uint32 audio_data_size;
+} MMI_AIGC_UI_ITEM_INFO_T;
+
+typedef struct
+{
+       void * audio_data_ptr;
+       uint32 audio_data_size;
+} MMI_AIGC_TTS_LL_NODE_T;
 
 
 void mmi_aigc_trans_websocket_open(void);
index 51522c1..274d4db 100644 (file)
@@ -393,6 +393,7 @@ typedef enum
        MMI_AIGC_LABEL_1_CTRL_ID,
        MMI_AIGC_LABEL_2_CTRL_ID,
        MMI_AIGC_LABEL_3_CTRL_ID,
+       MMI_AIGC_LABEL_4_CTRL_ID,
 #endif
 
    TOTAL_CONTROL_ID_NUMBER         // ¿Ø¼þIDµÄ×ÜÊýÄ¿