gengxin
author@CHENG <2393524978@qq.com>
Fri, 17 May 2024 07:05:02 +0000 (15:05 +0800)
committer@CHENG <2393524978@qq.com>
Fri, 17 May 2024 07:05:02 +0000 (15:05 +0800)
2.sdk/sdk/gui/lv_watch/lv_apps/dial/dial_element.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_jrtc_client_hzch.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call.h
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call_hzch.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call_hzch.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd_content.c

index 959d2c2..d0562de 100644 (file)
@@ -656,7 +656,9 @@ static void dial_update_canvas_label(watch_element_base_t * base)
                                uint32_t signal_value = 0;
                                if(true == watch_modem_sim_present_check_req())
                                {
-                                       signal_value = watch_modem_get_signal_bar_req() * 20;
+                                       signal_value = watch_modem_get_signal_bar_req() * 25; // four levels
+                                       if(100 < signal_value)
+                                               signal_value = 100;
                                }
                 snprintf(infotxt, len, "%d%%", signal_value);
                 dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
index e944476..be3c0df 100644 (file)
@@ -5,8 +5,6 @@
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
 
-#if 1
-
 typedef enum jrtc_state video_call_jrtc_state_e;
 typedef enum jrtc_error video_call_jrtc_error_e;
 typedef struct jrtc_image_t video_call_jrtc_image_t;
@@ -143,15 +141,28 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
            case JRTC_TALKING:
                        mmi_vc_call_action_connected();
 
-               /* Get image */
-               if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get()) 
+                       if(1 == mmi_vc_call_referral_flag_get())
+                       {
+                               lv_obj_set_hidden(mmi_vc_call_get_ext()->canvas, true);
+                               lv_obj_set_hidden(mmi_vc_call_get_ext()->img_referral, false);
+                               lv_obj_set_hidden(mmi_vc_call_get_ext()->btn_referral, false);
+                       }
+                       else
                        {
-                   void *buf = mmi_video_call_phone_get_video_buffer();
-                   if(voip_jrtc_get_image(buf)) 
+                               lv_obj_set_hidden(mmi_vc_call_get_ext()->canvas, false);
+                               lv_obj_set_hidden(mmi_vc_call_get_ext()->img_referral, true);
+                               lv_obj_set_hidden(mmi_vc_call_get_ext()->btn_referral, true);
+                               
+                       /* Get image */
+                       if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get()) 
                                {
-                       lv_canvas_set_buffer(mmi_vc_call_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
-                   }
-               }
+                           void *buf = mmi_video_call_phone_get_video_buffer();
+                           if(voip_jrtc_get_image(buf)) 
+                                       {
+                               lv_canvas_set_buffer(mmi_vc_call_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
+                           }
+                       }
+                       }
                break;
 
            default:
@@ -315,256 +326,5 @@ static uint8_t voip_jrtc_get_image(void * preview_buf)
     return ret;
 }
 
-
-#else
-typedef enum jrtc_state video_call_jrtc_state_e;
-typedef enum jrtc_error video_call_jrtc_error_e;
-typedef struct jrtc_image_t video_call_jrtc_image_t;
-
-typedef struct 
-{
-    void /*lv_task_t*/ *state_task;
-    video_call_jrtc_image_t txframe;
-    video_call_jrtc_image_t rxframe;
-    void* jrtc_ptr;
-    TIMER_ID closed_timer_id;
-    uint8_t closing;
-} MMI_VIDEO_CALL_JRTC_T;
-
-
-static MMI_VIDEO_CALL_JRTC_T s_video_call_jrtc;
-
-
-static uint8_t voip_jrtc_get_image(void * preview_buf);
-
-extern UINT32  OsaGetTicks(void *pForFutureUse);
-
-
-void mmi_video_call_jrtc_config_init_00(void)
-{
-#ifdef __VIDEO_CALL_TEST__
-       char appkey[24+1] = "dc1db81c19d1da4f5fb4a197";
-       char key[16+1] = "K75A1vS562671d38";
-       char uid[64+1] = {0};
-       char tokens[128+1] = "";
-       
-       char imei[16] = {0};
-       app_adp_get_imei_req(imei);
-       strncpy(uid, imei, 16);
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-       jrtc_config(appkey, uid, key, tokens);
-    Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-#endif
-}
-
-void mmi_video_call_jrtc_config_init(char * t_appkey, char * t_secret, char * t_tokens, char * t_uid)
-{
-#ifndef __VIDEO_CALL_TEST__
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(t_appkey), t_appkey);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(t_uid), t_uid);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(t_secret), t_secret);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(t_tokens), t_tokens);
-       
-       jrtc_config(t_appkey, t_uid, t_secret, t_tokens);
-       Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-#endif
-}
-
-static void mmi_video_call_jrtc_clean_up(void)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    if(NULL != s_video_call_jrtc.state_task) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-        lv_task_del(s_video_call_jrtc.state_task);
-    }
-
-    Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-}
-
-static void mmi_video_call_jrtc_timeout_cb(void * para)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    mmi_video_call_jrtc_clean_up();
-}
-
-static void mmi_video_call_jrtc_on_state(lv_task_t * task)
-{
-    static int8_t oldstate = -1;
-    video_call_jrtc_state_e state = jrtc_state(s_video_call_jrtc.jrtc_ptr);
-
-    if(state != oldstate) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: oldstate=%d,state=%d\n", __FUNCTION__, __LINE__, oldstate, state);
-    }
-
-    switch(state) 
-       {
-           case JRTC_CLOSED:
-               if((NULL != s_video_call_jrtc.jrtc_ptr) && (NULL == s_video_call_jrtc.closed_timer_id)) 
-                       {
-                       video_call_jrtc_error_e err = jrtc_error(s_video_call_jrtc.jrtc_ptr);
-                               
-                               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err);
-
-                   if(!s_video_call_jrtc.closing) 
-                               {
-                       jrtc_close(s_video_call_jrtc.jrtc_ptr, JRTC_ENIL);
-                       s_video_call_jrtc.closing = 1;
-                   }
-
-                   s_video_call_jrtc.closed_timer_id = Hal_Timer_Start(100, mmi_video_call_jrtc_timeout_cb, NULL, 0);
-               }
-
-               if(MMI_VIDEO_CALL_STATE_NONE != mmi_video_call_params_state_get()) 
-                       {
-                               mmi_vc_ring_off_screen();
-               }
-               break;
-
-           case JRTC_LEAVING:
-               break;
-
-           case JRTC_OPENED:
-               break;
-
-           case JRTC_JOINING:
-               break;
-
-           case JRTC_JOINED:
-               break;
-
-           case JRTC_TALKING:
-                       mmi_vc_call_action_connected();
-
-               /* Get image */
-               if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get()) 
-                       {
-                   void *buf = mmi_video_call_phone_get_video_buffer();
-                   if(voip_jrtc_get_image(buf)) 
-                               {
-                       lv_canvas_set_buffer(mmi_vc_call_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
-                   }
-               }
-               break;
-
-           default:
-               break;
-    }
-
-    oldstate = state;
-}
-
-
-static int8_t mmi_video_call_jrtc_open(char * t_number, char * t_ticket)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_number);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_ticket);
-
-    if (NULL == t_number || NULL == t_ticket) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: params error\n", __FUNCTION__, __LINE__);
-        mmi_video_call_jrtc_clean_up();
-        return -1;
-    }
-
-    Hal_Mem_Set(&s_video_call_jrtc, 0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-       
-    s_video_call_jrtc.rxframe.width  = s_video_call_jrtc.txframe.width  = 176;
-    s_video_call_jrtc.rxframe.height = s_video_call_jrtc.txframe.height = 144;
-    s_video_call_jrtc.rxframe.fps    = s_video_call_jrtc.txframe.fps    = 8; // 10;
-    s_video_call_jrtc.rxframe.kbps   = s_video_call_jrtc.txframe.kbps   = 120; // 240;
-
-       //mci_videocall_camera_set_sensor(1); // 0:rear camera; 1:front camera
-       
-    s_video_call_jrtc.jrtc_ptr= jrtc_open(t_number, t_ticket, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe);
-
-    if (!s_video_call_jrtc.jrtc_ptr) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-        mmi_video_call_jrtc_clean_up();
-        return -1;
-    }
-    jrtc_activate(s_video_call_jrtc.jrtc_ptr, JRTC_AUDIO);
-
-    s_video_call_jrtc.state_task = lv_task_create(mmi_video_call_jrtc_on_state, VIDEO_RENDER_PERIOD, LV_TASK_PRIO_HIGH, NULL);
-    return 0;
-}
-
-int8_t mmi_video_call_dial_req(char * t_number, char * t_ticket)
-{
-    int8_t ret = -1;
-
-    if (NULL == s_video_call_jrtc.jrtc_ptr)
-       {
-        ret = mmi_video_call_jrtc_open(t_number, t_ticket);
-       }
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p, %d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, ret);
-
-    return ret;
-}
-
-void mmi_video_call_hangup_req(BOOL bye)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
-
-       mmi_vc_call_operate_send_to_server();
-       
-    if (NULL != s_video_call_jrtc.jrtc_ptr) 
-       {
-        video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
-
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, err);
-               
-               if(!s_video_call_jrtc.closing)
-               {
-               jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
-               s_video_call_jrtc.closing = 1;
-               }
-    } 
-       else
-       {
-               mmi_vc_ring_off_screen();
-    }
-}
-
-
-//extern unsigned yuv420_scale(int src_width, int src_height, int dst_width, int dst_height,     unsigned char *src_buf, unsigned char *dst_buf, unsigned char semi);
-//extern unsigned rgb565_scale(int32_t src_width, int32_t src_height, int32_t dst_width, int32_t dst_height, uint8_t *src_buf, uint8_t *dst_buf);
-//extern void yuv420_2_rgb565(int width, int height, const unsigned char *src, unsigned short *dst, unsigned semi);
-
-static uint8_t voip_jrtc_get_image(void * preview_buf)
-{
-    uint8_t ret = 0;
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    LV_ASSERT_MEM(ext);
-
-    video_call_jrtc_image_t * frame = NULL;
-    if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE)
-        frame = &s_video_call_jrtc.rxframe;
-    else
-        frame = &s_video_call_jrtc.txframe;
-
-    if (frame->put != frame->get) {
-#if (ENABLE_VIDEO_SCALE == 0)
-        yuv420_2_rgb565(frame->width, frame->height, frame->data, preview_buf, frame->format);
-#else
-        Hal_Yuv420_Render(frame->width, frame->height, canvas_width, canvas_heigh, frame->data, preview_buf, frame->format);
-#endif
-
-        frame->get = frame->put;
-        ret = 1;
-        voip_fps_check(frame->fps);
-    }
-
-    return ret;
-}
-#endif
-
 #endif
 
index 1f31121..1cf7dad 100644 (file)
@@ -199,6 +199,10 @@ typedef struct {
     enum enum_canvas_button_hidden_flag canvas_button_hidden_flag;
     lv_obj_t * signal_weak_label;
     lv_obj_t * canvas;
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
+       lv_obj_t * img_referral;
+       lv_obj_t * btn_referral;
+#endif
 }lv_vc_call_obj_ext_t;
 
 
index f64a70f..0653c4d 100644 (file)
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
 
-
-#if 1
-
-//static lv_signal_cb_t ancestor_signal;
-#if VIDEO_SIGNAL_CHECK
-static lv_task_t * signal_check_task = NULL;
-#endif
-static lv_task_t * rat_check_task = NULL;
-
-static MMI_VIDEO_CALL_PARAMS_T s_video_call_params = {0};
-lv_color_t g_cbuf[canvas_width * canvas_heigh + 8]  __attribute__((aligned(8)));
-
-static uint8_t s_vc_contact_selected_index = 0;
-
-static char s_video_call_ticket[MMI_WATCH_VC_TICKET_LEN] = {0};
-static char s_video_call_tokens[MMI_WATCH_VC_TOKENS_LEN] = {0};
-
-
-/**********************
-*  STATIC PROTOTYPES
-**********************/
-static void voip_phone_left_slide_callback(lv_obj_t * obj);
-static void voip_phone_right_slide_callback(lv_obj_t * obj);
-static void voip_phone_down_slide_callback(lv_obj_t * obj);
-static void voip_volume_btn_action(lv_obj_t * obj, lv_event_t e);
-static void voip_slider_action(lv_obj_t * slider, lv_event_t e);
-static void voip_phone_obj_hide_anim_end(lv_anim_t * anim);
-static void voip_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x);
-static void voip_set_volume_when_slider_act(void);
-static void voip_local_remote_switch_action(lv_obj_t * btn, lv_event_t e);
-static void canvas_button_hidden_event_cb(lv_obj_t * obj, lv_event_t e);
-static void voip_signal_check_start(void * ext);
-static void voip_signal_check_stop(void);
-static bool is_rat_gsm(void);
-static void voip_rat_check_start(void);
-static void voip_rat_check_stop(void);
-
-
-void mmi_vc_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, priority);
-       
-    if(AUDIO_CTRL_PRIORITY_2 > priority)
-    {
-        lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-        if(activity_obj == NULL)
-       {
-                       return;
-       }
-        mmi_vc_activity_destroy_req();
-        Hal_Vibrator_Play_End();
-               Hal_Tone_Play_End();
-        Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-    }
-}
-
-void * mmi_video_call_phone_get_video_buffer()
-{
-    return g_cbuf;
-}
-
-/**********************
-*   STATIC FUNCTIONS
-**********************/
-static lv_obj_t * mmi_vc_call_get_activity_obj(void)
-{
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-
-    return(activity_obj);
-}
-
-static lv_obj_t * mmi_vc_call_get_obj(void)
-{
-    lv_obj_t * watch_obj = NULL;
-
-    lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
-
-    if(activity_obj) 
-       {
-        lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
-    }
-
-    return(watch_obj);
-}
-
-lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void)
-{
-    lv_vc_call_obj_ext_t * ext = NULL;
-    lv_obj_t * watch_obj = mmi_vc_call_get_obj();
-
-    if(watch_obj) 
-       {
-        ext = lv_obj_get_ext_attr(watch_obj);
-    }
-
-    return(ext);
-}
-
-static void mmi_vc_call_params_clean(void)
-{
-       _lv_memset_00(&s_video_call_params, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-}
-
-static void mmi_vc_call_screen_clean(void)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * slider_activit_obj = lv_watch_get_activity_obj(ACT_ID_SLIDER);
-
-    if(slider_activit_obj)
-       {
-        lv_obj_del(slider_activit_obj);
-    }
-
-    lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
-    if(activity_obj) 
-       {
-        lv_obj_del(activity_obj);
-    }
-}
-
-static void voip_phone_left_slide_callback(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-        if((MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state)
-                && (MODEM_VIDEO_CALL_TYPE_VIDEO == s_video_call_params.call_type))
-               {
-            voip_local_remote_switch_action(NULL, LV_EVENT_CLICKED);
-        }
-}
-
-static void voip_phone_right_slide_callback(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-static void voip_phone_down_slide_callback(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    voip_volume_btn_action(NULL, LV_EVENT_CLICKED);
-}
-
-static void voip_slider_action(lv_obj_t * slider, lv_event_t e)
-{
-    if(e == LV_EVENT_VALUE_CHANGED)
-    {
-        printf("%s %d\n", __FUNCTION__, __LINE__);
-
-        uint8_t v = lv_slider_get_value(slider);
-
-        // set speaker volume
-        if(!Hal_Set_BT_Audio_Path((HAL_SPEAKER_GAIN)v))
-            Hal_Call_Speaker(HAL_CALL_SPK_ON, (HAL_SPEAKER_GAIN)v);
-        s_video_call_params.speaker_volume = v;
-    }
-}
-
-static void voip_volume_btn_action(lv_obj_t * obj, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    slider_create(NULL, SETTING_VOIP_SPEAKER, 40, voip_slider_action);
-}
-
-static void mmi_vc_get_time_elaps(uint32_t last_time, char * str, int8_t size)
-{
-    hal_rtc_t rtc_curr;            // current rtc time
-    uint32_t  second_curr = 0;     // seconds of current time
-
-    Hal_Rtc_Gettime(&rtc_curr);
-    second_curr = time_to_seconds(&rtc_curr);
-
-    uint32_t elaps = second_curr - last_time;
-    uint32_t seconds = elaps % 60;
-    uint32_t minutes = elaps / 60;
-    uint32_t hours = minutes / 60;
-    minutes = minutes % 60;
-
-    if(hours == 0)
-        snprintf(str, size, "%.2d:%.2d", minutes, seconds);
-    else
-        snprintf(str, size, "%.2d:%.2d:%.2d", hours, minutes, seconds);
-}
-
-static lv_obj_t * mmi_vc_ring_off_content_create(lv_obj_t * par)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    if(par == NULL) {
-        par = lv_scr_act();
-    }
-
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return(NULL);
-    }
-
-    lv_obj_t * obj = lv_obj_create(par, NULL);
-    LV_ASSERT_MEM(obj);
-    if(obj == NULL) {
-        return(NULL);
-    }
-    lv_obj_set_size(obj, lv_obj_get_width(par), lv_obj_get_height(par));
-    lv_obj_add_style(obj, LV_OBJ_PART_MAIN, &lv_style_transp_tight);
-
-    lv_obj_t * content = lv_cont_create(obj, NULL);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return(NULL);
-    }
-    lv_obj_set_style_local_radius(content, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 15);
-    //lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_cont_opa1);
-    lv_obj_set_size(content, LV_HOR_RES - 40, 50);
-       lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, -10);
-    lv_cont_set_layout(content, LV_LAYOUT_CENTER);
-    lv_obj_set_click(content, false);
-
-    lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26); // &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-
-    if(is_rat_gsm()) 
-       {
-        lv_label_set_text_id(label, WATCH_TEXT_ID_NETWORK_WRONG);
-    } 
-       else 
-       {
-        if(ext->vc_ui == MMI_VC_UI_CONNECTED) 
-               {
-            char tmp[20] = "";
-            char str[30] = "";
-            mmi_vc_get_time_elaps(ext->connect_start_time, tmp, 20);
-            snprintf(str, 30, "%s(%s)", (char *)lv_lang_get_text(WATCH_TEXT_ID_RING_OFF), tmp);
-            lv_label_set_text(label, str);
-        } 
-               else 
-               {
-            lv_label_set_text_id(label, WATCH_TEXT_ID_RING_OFF);
-        }
-    }
-
-    lv_obj_set_click(label, false);
-
-    return(obj);
-}
-
-static void voip_anim_fp_connecting_ring(lv_obj_t * obj, int32_t x)
-{
-    if(obj != NULL) {
-        lv_obj_set_x(obj, x);
-    }
-}
-
-static void mmi_vc_connecting_animation(lv_obj_t * par)
-{
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    lv_obj_t * img = lv_img_create(mmi_vc_call_get_obj(), NULL);
-    lv_img_set_src(img, LV_SYMBOL_LOOP);
-    lv_obj_add_style(img, LV_OBJ_PART_MAIN, &lv_watch_image);
-    lv_obj_set_style_local_text_font(img, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_SYMBOL_NORMAL);
-    lv_obj_set_y(img, lv_obj_get_y(par) + lv_obj_get_y(lv_obj_get_parent(par)));
-    ext->phone_animation_obj = img;
-
-    /*Create an animation to move the button continuously left to right*/
-    lv_anim_t a;
-    lv_anim_path_t path;
-    lv_anim_value_t start = lv_obj_get_x(par) + lv_obj_get_width(par) + 6;
-    lv_anim_value_t end = start + 30;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_linear);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, img);
-    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)voip_anim_fp_connecting_ring);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_values(&a, start, end);
-    lv_anim_set_time(&a, 400);
-    lv_anim_set_playback_time(&a, 400);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 500);
-
-    lv_anim_start(&a);
-}
-
-static void voip_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x)
-{
-    if(obj != NULL) {
-        lv_obj_set_x(obj, x);
-    }
-}
-
-static void mmi_vc_dialing_animation(lv_obj_t * par)
-{
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    lv_obj_t * img = lv_img_create(mmi_vc_call_get_obj(), NULL);
-    lv_img_set_src(img, LV_SYMBOL_RIGHT);
-    lv_obj_add_style(img, LV_OBJ_PART_MAIN, &lv_watch_image);
-    lv_obj_set_style_local_text_font(img, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_SYMBOL_NORMAL);
-    lv_obj_set_y(img, lv_obj_get_y(par) + lv_obj_get_y(lv_obj_get_parent(par)));
-    ext->phone_animation_obj = img;
-
-    /*Create an animation to move the button continuously left to right*/
-    lv_anim_t a;
-    lv_anim_path_t path;
-    lv_anim_value_t start = lv_obj_get_x(par) + lv_obj_get_width(par) + 6;
-    lv_anim_value_t end = start + 30;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_linear);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, img);
-    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)voip_anim_fp_dialing_ring);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_values(&a, start, end);
-    lv_anim_set_time(&a, 400);
-    lv_anim_set_playback_time(&a, 400);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 500);
-
-    lv_anim_start(&a);
-}
-
-static void mmi_vc_ring_animation(lv_obj_t * par)
-{
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    lv_obj_t * img = lv_img_create(mmi_vc_call_get_obj(), NULL);
-    lv_img_set_src(img, LV_SYMBOL_LEFT);
-    lv_obj_add_style(img, LV_OBJ_PART_MAIN, &lv_watch_image);
-    lv_obj_set_style_local_text_font(img, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_SYMBOL_NORMAL);
-    lv_obj_set_y(img, lv_obj_get_y(par) + lv_obj_get_y(lv_obj_get_parent(par)));
-    ext->phone_animation_obj = img;
-
-    /*Create an animation to move the button continuously left to right*/
-    lv_anim_t a;
-    lv_anim_path_t path;
-    lv_anim_value_t start = lv_obj_get_x(par) - 20;
-    lv_anim_value_t end = start - 30;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_linear);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, img);
-    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)voip_anim_fp_dialing_ring);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_values(&a, start, end);
-    lv_anim_set_time(&a, 400);
-    lv_anim_set_playback_time(&a, 400);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 500);
-
-    lv_anim_start(&a);
-}
-
-static void mmi_vc_anim_fp_connected(lv_anim_t * anim)
-{
-    lv_obj_t * obj = (lv_obj_t *)anim->var;
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    char str[20] = "";
-    mmi_vc_get_time_elaps(ext->connect_start_time, str, 20);
-    if(obj) {
-        lv_label_set_text(obj, str);
-    }
-}
-
-static void mmi_vc_connected_animation(lv_obj_t * obj)
-{
-    lv_anim_t a;
-    lv_anim_path_t path;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_step);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, obj);
-    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_vc_anim_fp_connected);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_time(&a, 1);
-    lv_anim_set_playback_time(&a, 0);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 1000);
-
-    lv_anim_start(&a);
-}
-
-static void mmi_vc_ring_off_obj_hide_anim_end(lv_anim_t * anim)
-{
-    (void)anim;
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    mmi_vc_call_screen_clean();
-}
-
-void mmi_vc_ring_off_screen(void)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    // stop playing tone
-    Hal_Tone_Play_End();
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-
-    // stop timer
-    mmi_vc_all_timer_stop();
-
-       //
-    voip_signal_check_stop();
-    voip_rat_check_stop();
-       
-    // create ring off UI
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(NULL != ext) 
-       {
-           //if(ext->vc_ui == MMI_VC_UI_INCOMING || ext->vc_ui == MMI_VC_UI_DIALING) 
-               {
-               if(ext->phone_status_label)
-                       {
-                   //lv_label_set_text(ext->phone_status_label, "");
-                               lv_obj_set_hidden(ext->phone_status_label, true);
-               }
-           }
-        mmi_vc_ring_off_content_create(mmi_vc_call_get_obj());
-
-           if(ext->phone_animation_obj)
-               {
-               lv_obj_del(ext->phone_animation_obj);
-               ext->phone_animation_obj = NULL;
-           }
-
-           /* set speaker volume to nv when leaving activiry's slider */
-           voip_set_volume_when_slider_act();
-
-           /* phone cleanup when anim end*/
-           lv_anim_t a;
-           lv_anim_init(&a);
-           lv_anim_set_var(&a, mmi_vc_call_get_obj());
-           lv_anim_set_ready_cb(&a, (lv_anim_ready_cb_t)mmi_vc_ring_off_obj_hide_anim_end);
-           lv_anim_set_time(&a, MMI_VC_RING_OFF_ANIM_TIMEOUT);
-           lv_anim_start(&a);
-       }
-
-    if(MMI_MODEM_CALL_STATE_NULL != phone_get_call_state()) 
-       {
-        printf("%s tele call is on going, keep para of audio\n", __FUNCTION__);
-        Hal_Set_Voice_Call_Status(VOICE_CALL_END);
-        Hal_Disconnect_BT_Audio_Path();
-    }
-    watch_wakeup_time_reset();
-
-       mmi_vc_call_params_clean();
-}
-
-static bool mmi_vc_check_mo_permission(void)
-{
-    if((!watch_modem_sim_present_check_req())
-               || (MMI_MODEM_SIGNAL_BAR_0 == watch_modem_get_signal_bar_req())
-//       || (MODEM_VIDEO_CALL_REG_OK != watch_modem_video_call_get_reg_stat_req())
-               || (is_rat_gsm())
-               ) 
-       {
-               return false;
-       }
-       
-    return true;
-}
-
-static void voip_local_remote_switch_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-    if(!activity_obj) {
-        return;
-    }
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(!ext) {
-        return;
-    }
-    if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_NULL) {
-        return;
-    }
-    if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE) {
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_LOCAL;
-    } else {
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_REMOTE;
-    }
-}
-
-static lv_res_t video_call_element_signal_func(lv_obj_t * element, lv_signal_t sign, void * param)
-{
-    lv_res_t res;
-
-    //printf("%s, sign=%d\n", __FUNCTION__, sign);
-    /* if not click signs, invoke ancient handler and return */
-    if(sign != LV_SIGNAL_PRESSING && sign != LV_SIGNAL_PRESSED && sign != LV_SIGNAL_RELEASED && sign != LV_SIGNAL_PRESS_LOST) {
-        /* Include the ancient signal function */
-        lv_signal_cb_t sign_func = (lv_signal_cb_t)(lv_obj_get_user_data(element).user_data);
-        res = sign_func(element, sign, param);
-        if(res != LV_RES_OK) {
-            return(res);
-        }
-
-        return(LV_RES_OK);
-    }
-
-    lv_obj_t * obj = lv_obj_get_parent(element);
-    while(obj) {
-        if(lv_obj_get_signal_cb(obj) != lv_watch_obj_signal) {
-            obj = lv_obj_get_parent(obj);
-        } else {
-            break;
-        }
-    }
-    if(obj == NULL) {
-        return(LV_RES_INV);
-    }
-
-    res = lv_watch_obj_signal(obj, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    /* Include the ancient signal function */
-    lv_signal_cb_t sign_func = (lv_signal_cb_t)(lv_obj_get_user_data(element).user_data);
-    res = sign_func(element, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    return(LV_RES_OK);
-} /* video_call_element_signal_func */
-
-static void video_call_add_element(lv_obj_t * element)
-{
-    lv_watch_set_free_ptr(element, lv_obj_get_signal_cb(element));
-    lv_obj_set_signal_cb(element, video_call_element_signal_func);
-    lv_obj_add_protect(element, LV_PROTECT_PRESS_LOST | LV_PROTECT_CLICK_FOCUS);
-}
-
-static void canvas_button_hidden_event_cb(lv_obj_t * obj, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED == e) 
-       {
-        printf("%s %d\n", __FUNCTION__, __LINE__);
-        lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-        if(!ext) {
-            return;
-        }
-        if(ext->canvas_button_hidden_flag == NOT_HIDDEN) {
-            ext->canvas_button_hidden_flag = HIDDEN;
-        } else {
-            ext->canvas_button_hidden_flag = NOT_HIDDEN;
-        }
-
-        lv_obj_set_hidden(ext->connect_time, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->volume_button, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->view_switch_button, true); // lv_obj_set_hidden(ext->view_switch_button, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->ring_off_button, ext->canvas_button_hidden_flag);
-    }
-}
-
-static void voip_set_volume_when_slider_act(void)
-{
-    printf("%s\n", __FUNCTION__);
-    if(lv_watch_get_activity_obj(ACT_ID_SLIDER)) {
-        if(MMI_VIDEO_CALL_STATE_NONE != s_video_call_params.state) {
-            uint8_t volume = mmi_vc_get_call_volume();
-            printf("set nv, speaker volume is %d.\n", volume);
-            UI_NV_Write_Req(NV_SECTION_UI_PHONE, 0, 1, &volume);
-        }
-    }
-}
-
-#if VIDEO_SIGNAL_CHECK
-static void signal_check(lv_task_t *task)
-{
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(!ext) return;
-
-    if((false == is_rat_gsm()) &&
-       (watch_modem_get_signal_bar_req() < MMI_MODEM_SIGNAL_BAR_3)) {
-        lv_obj_set_hidden(ext->signal_weak_label, false);
-    } else {
-        lv_obj_set_hidden(ext->signal_weak_label, true);
-    }
-}
-#endif
-
-static void voip_signal_check_start(void * ext)
-{
-#if VIDEO_SIGNAL_CHECK
-    if(NULL == signal_check_task)
-        signal_check_task = lv_task_create(signal_check, VIDEO_SIGNAL_CHECK_PERIOD, LV_TASK_PRIO_HIGH, NULL);
-#endif
-}
-
-static void voip_signal_check_stop(void)
-{
-#if VIDEO_SIGNAL_CHECK
-    if(signal_check_task) {
-        lv_task_del(signal_check_task);
-        signal_check_task = NULL;
-    }
-#endif
-}
-
-static bool is_rat_gsm(void)
-{
-    MMI_MODEM_PLMN_RAT rat;
-
-    watch_modem_get_operator_req(&rat);
-    if(MMI_MODEM_PLMN_RAT_GSM == rat)
-        return true;
-    else
-        return false;
-}
-
-static void rat_check(lv_task_t *task)
-{
-    if(is_rat_gsm()) {
-        mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-    }
-}
-
-static void voip_rat_check_start(void)
-{
-    if(NULL == rat_check_task)
-        rat_check_task = lv_task_create(rat_check, VIDEO_RAT_CHECK_PERIOD, LV_TASK_PRIO_HIGH, NULL);
-}
-
-static void voip_rat_check_stop(void)
-{
-    if(rat_check_task) {
-        lv_task_del(rat_check_task);
-        rat_check_task = NULL;
-    }
-}
-
-void voip_fps_check(int8_t fps)
-{
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(NULL != ext) {
-        if((VIDEO_CALL_FPS_CHECK_LIMIT >= fps) && (0 != fps)) {
-            printf("%s %d\n", __FUNCTION__, fps);
-            if(lv_obj_get_hidden(ext->signal_weak_label) == false) return;
-            lv_obj_set_hidden(ext->signal_weak_label, false);
-        } else {
-            if(lv_obj_get_hidden(ext->signal_weak_label) == true) return;
-            lv_obj_set_hidden(ext->signal_weak_label, true);
-        }
-    }
-}
-
-
-
-
-static nv_watch_vc_contact_t s_vc_contact = {0};
-static TIMER_ID fail_timer_id = NULL;
-static MMI_VIDEO_CALL_UI_E s_vc_call_ui = MMI_VC_UI_INVALID;
-
-char * mmi_video_call_params_number_get(void)
-{
-       return (s_video_call_params.number);
-}
-
-MMI_VIDEO_CALL_STATE_E mmi_video_call_params_state_get(void)
-{
-       return (s_video_call_params.state);
-}
-
-MODEM_VIDEO_CALL_TYPE mmi_video_call_params_type_get(void)
-{
-       return (s_video_call_params.call_type);
-}
-
-
-
-void mmi_video_call_contact_nv_write(void)
-{
-       uint32_t nv_data_length = sizeof(nv_watch_vc_contact_t);
-       
-       if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_VC_CONTACT, 0, nv_data_length, (uint8_t *)&s_vc_contact))
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: nv write fail\n", __FUNCTION__, __LINE__);
-       }
-}
-
-void mmi_video_call_contact_nv_read(void)
-{
-       uint32_t nv_data_length = sizeof(nv_watch_vc_contact_t);
-       
-       if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_VC_CONTACT, 0, nv_data_length, (uint8_t *)&s_vc_contact))
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
-       }
-}
-
-void mmi_vc_contact_set(nv_watch_vc_contact_t * contact_list)
-{
-    if(NULL == contact_list) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-        return;
-    }
-
-       _lv_memcpy(&s_vc_contact, contact_list, sizeof(nv_watch_vc_contact_t));
-       mmi_video_call_contact_nv_write();
-
-
-    //phonebook_update_ui(contact_list, count, 0, 0);
-
-}
-
-bool mmi_vc_is_in_call(void)
-{
-       if(MMI_VIDEO_CALL_STATE_NONE == s_video_call_params.state || MMI_VIDEO_CALL_STATE_INVALID == s_video_call_params.state)
-               return false;
-
-       return true;
-}
-
-//
-void mmi_vc_call_operate_send_to_server(void)
-{
-       mmi_protocol_fzd_action_VC_CALL_RESPONSE(s_video_call_params.number, s_video_call_ticket, s_video_call_params.call_type);
-}
-
-void mmi_vc_ring_off_timer_stop(void)
-{
-       if(NULL != s_video_call_params.ring_off_timer_id) 
-       {
-               Hal_Timer_Stop(s_video_call_params.ring_off_timer_id);
-               s_video_call_params.ring_off_timer_id = NULL;
-       }
-}
-
-void mmi_vc_dialing_timer_stop(void)
-{
-       if(NULL != s_video_call_params.dialing_timer_id) 
-       {
-               Hal_Timer_Stop(s_video_call_params.dialing_timer_id);
-               s_video_call_params.dialing_timer_id = NULL;
-       }
-}
-
-void mmi_vc_connecting_timer_stop(void)
-{
-       if(NULL != s_video_call_params.connecting_timer_id) 
-       {
-               Hal_Timer_Stop(s_video_call_params.connecting_timer_id);
-               s_video_call_params.connecting_timer_id = NULL;
-       }
-}
-
-void mmi_vc_all_timer_stop(void)
-{
-       mmi_vc_dialing_timer_stop();
-       mmi_vc_connecting_timer_stop();
-       mmi_vc_ring_off_timer_stop();
-}
-
-static void mmi_vc_ui_prepare_destory(lv_obj_t * activity_obj)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    lv_watch_png_cache_all_free();
-
-    // ring off
-    mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-static void mmi_vc_hook_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) 
-       {
-        return;
-    }
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-       //
-       Hal_Vibrator_Play_End();
-    Hal_Tone_Play_End();
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-
-    // stop timer
-    mmi_vc_all_timer_stop();
-
-       mmi_vc_call_action_connecting();
-       
-       //mmi_video_call_jrtc_config_init_01(s_video_call_tokens);
-    int8_t ret = mmi_video_call_answer_req(s_video_call_ticket);
-    if(ret < 0) 
-       {
-        mmi_vc_ring_off_screen();
-    }
-}
-
-void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) 
-       {
-        return;
-    }
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
-
-    // stop playing tone
-       Hal_Vibrator_Play_End();
-    Hal_Tone_Play_End();
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-       
-       //
-    voip_signal_check_stop();
-    voip_rat_check_stop();
-       
-    // stop timer
-    mmi_vc_all_timer_stop();
-
-    switch(s_video_call_params.state) 
-       {
-        case MMI_VIDEO_CALL_STATE_NONE:
-        case MMI_VIDEO_CALL_STATE_INVALID:
-            // do noting
-            break;
-
-        case MMI_VIDEO_CALL_STATE_INCOMING:
-            mmi_video_call_reject_req(TRUE);
-            break;
-
-        default:
-            mmi_video_call_hangup_req(TRUE);
-            break;
-       }
-    // watch_wakeup_time_reset();
-    // watch_set_suspend_enable(true, ACT_ID_VOIPPHONE, 0);
-}
-
-void mmi_ui_msg_update_vc_call_stop(void)
-{
-       mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);         
-}
-
-void mmi_vc_call_action_call_stop(void)
-{
-       if(true != mmi_vc_is_in_call())
-       {
-               return;
-       }
-       
-       mmi_watch_wake_up();
-       mmi_ui_msg_action_vc_call_stop();
-}
-
-static void mmi_vc_ui_dialing(lv_obj_t * content)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(ext == NULL) 
-       {
-        return;
-    }
-
-       lv_obj_t * label;
-       uint32_t text_id = WATCH_TEXT_ID_VIDEO_CALL_DAILING;
-       if(MODEM_VIDEO_CALL_TYPE_VIDEO != s_video_call_params.call_type)
-               text_id = WATCH_TEXT_ID_VOICE_CALL_DAILING;
-
-    // label dialing
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text_id(label, text_id);
-    lv_obj_set_click(label, false);
-       lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
-    ext->phone_status_label = label;
-
-    // img
-    lv_obj_t * img = lv_img_create(content, NULL);
-       lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
-       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-    lv_obj_set_click(img, false);
-
-    // name
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-       lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-    if(strlen(s_video_call_params.name) > 0) 
-       {
-        lv_label_set_text(label, s_video_call_params.name);
-    } 
-       else 
-       {
-        lv_label_set_text(label, s_video_call_params.number);
-    }
-#if USE_LV_WATCH_UI_240_280
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-#else
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-#endif
-    lv_obj_set_click(label, false);
-
-       #if 0
-    // btn volume
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-    lv_obj_set_event_cb(btn, voip_volume_btn_action);
-    lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-       #endif
-
-    // btn ring off
-    lv_obj_t * btn = lv_imgbtn_create(content, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-    lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-}
-
-static void mmi_vc_ui_incoming(lv_obj_t * content)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(ext == NULL) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-        return;
-    }
-    lv_obj_t * label;
-       uint32_t text_id = WATCH_TEXT_ID_VIDEO_CALL_RINGING;
-       if(MODEM_VIDEO_CALL_TYPE_VIDEO != s_video_call_params.call_type)
-               text_id = WATCH_TEXT_ID_VOICE_CALL_RINGING;
-
-    // label ringing
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text_id(label, text_id);
-    lv_obj_set_click(label, false);
-       lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
-    ext->phone_status_label = label;
-
-    // img
-    lv_obj_t * img = lv_img_create(content, NULL);
-       lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
-       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-    lv_obj_set_click(img, false);
-
-    // name
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-       lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-    if(strlen(s_video_call_params.name) > 0) 
-       {
-        lv_label_set_text(label, s_video_call_params.name);
-    } 
-       else 
-       {
-        lv_label_set_text(label, s_video_call_params.number);
-    }
-#if USE_LV_WATCH_UI_240_280
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-#else
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-#endif
-    lv_obj_set_click(label, false);
-
-    // btn ring off
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(content, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-    lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-
-    // btn ring hook
-    btn = lv_imgbtn_create(content, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_ANSWER_BTN);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_ANSWER_BTN);
-    lv_obj_set_event_cb(btn, mmi_vc_hook_action);
-    lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_INCOMING_HOOK_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-}
-
-static void mmi_vc_ui_connecting(lv_obj_t * content)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-       lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
-       LV_ASSERT_MEM(ext);
-       if(ext == NULL) {
-               return;
-       }
-       lv_obj_t * label;
-
-       // label ringing
-       label = lv_label_create(content, NULL);
-       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_text_id(label, WATCH_TEXT_ID_CONNECTING);
-       lv_obj_set_click(label, false);
-       lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
-       ext->phone_status_label = label;
-
-       // img
-       lv_obj_t * img = lv_img_create(content, NULL);
-       lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
-       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-       lv_obj_set_click(img, false);
-
-       // name
-       label = lv_label_create(content, NULL);
-       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-       lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-       if(strlen(s_video_call_params.name) > 0) 
-       {
-               lv_label_set_text(label, s_video_call_params.name);
-       } 
-       else 
-       {
-               lv_label_set_text(label, s_video_call_params.number);
-       }
-#if USE_LV_WATCH_UI_240_280
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-#else
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-#endif
-       lv_obj_set_click(label, false);
-
-    // btn ring off
-    lv_obj_t * btn = lv_imgbtn_create(content, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-    lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-}
-
-static void mmi_vc_ui_connected(lv_obj_t * content)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-    if(ext == NULL) 
-       {
-        return;
-    }
-
-       lv_obj_t * label;
-       lv_obj_t * btn;
-       hal_rtc_t rtc_curr = {0};                                  // current rtc time
-       Hal_Rtc_Gettime(&rtc_curr);
-       
-    if(s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VOICE) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-        ext->connect_start_time = time_to_seconds(&rtc_curr);
-
-               ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
-
-        //lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-        lv_obj_t * img = lv_img_create(content, NULL);
-               lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
-               lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 30);
-               lv_obj_set_click(img, false);
-               
-        // name
-               label = lv_label_create(content, NULL);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-               lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-               lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-               if(strlen(s_video_call_params.name) > 0) 
-               {
-                       lv_label_set_text(label, s_video_call_params.name);
-               } 
-               else 
-               {
-                       lv_label_set_text(label, s_video_call_params.number);
-               }
-               lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-               lv_obj_set_click(label, false);
-
-               //duration
-               lv_obj_t * time_label = lv_label_create(content, NULL);
-               lv_obj_add_style(time_label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-               lv_label_set_align(time_label, LV_LABEL_ALIGN_CENTER);
-               lv_label_set_text(time_label, "00:00");
-               lv_obj_set_click(time_label, false);
-               lv_obj_set_base_dir(time_label, LV_BIDI_DIR_LTR);
-               lv_obj_align(time_label, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-               ext->phone_status_label = time_label;
-
-               //btn volume
-               btn = lv_imgbtn_create(content, NULL);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOLUME_BTN);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
-               lv_obj_set_event_cb(btn, voip_volume_btn_action);
-               lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //20, -50);
-
-               //btn ring off
-               btn = lv_imgbtn_create(content, NULL);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-               lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-               lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //-20, -50);
-
-        //watch_set_suspend_enable(false, ACT_ID_VOIPPHONE, 0);
-    } 
-       else
-       {
-        lv_obj_t * canvas;
-
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: format=%d\n", __FUNCTION__, __LINE__, ext->voiph263fmt);
-
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_REMOTE;
-        if((ext->voiph263fmt == VOIP_H263_FMT_SQCIF) || (ext->voiph263fmt == VOIP_H263_FMT_QCIF)) 
-               {
-            ext->connect_start_time = time_to_seconds(&rtc_curr);
-
-            /*Create the canvas object*/
-            canvas = lv_canvas_create(content, NULL);
-            lv_obj_set_click(canvas, true);
-            lv_obj_set_event_cb(canvas, canvas_button_hidden_event_cb);
-            video_call_add_element(canvas);
-            ext->canvas = canvas;
-
-            lv_obj_align(canvas, content, LV_ALIGN_IN_TOP_MID, 0, 0);
-            /*Assign the buffer to the canvas*/
-            lv_img_set_src(canvas, ICON_BACKGROUND);
-            voip_signal_check_start(ext);
-
-            // duration
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_label_set_text(label, "00:00");
-            lv_obj_set_click(label, false);
-            lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-                       lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
-            ext->phone_status_label = label;
-
-            // signal weak notification
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-            lv_label_set_text_id(label, WATCH_TEXT_ID_SIGNAL_WEAK);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_obj_align(label, canvas, LV_ALIGN_CENTER, 0, -10);
-            lv_obj_set_click(label, false);
-            lv_obj_set_hidden(label, true);
-            ext->signal_weak_label = label;
-
-            // btn volume
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOLUME_BTN);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
-            lv_obj_set_event_cb(btn, voip_volume_btn_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-
-            // btn switch video
-            //btn = lv_imgbtn_create(canvas, NULL);
-            //lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_SETTING_VOLTE);
-            //lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_SETTING_VOLTE);
-            //lv_obj_set_event_cb(btn, voip_local_remote_switch_action);
-            //lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
-
-            // btn ring off
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-            lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);           
-        } 
-               else if((ext->voiph263fmt == VOIP_H263_FMT_CIF)
-                  || (ext->voiph263fmt == VOIP_H263_FMT_4CIF)
-                  || (ext->voiph263fmt == VOIP_H263_FMT_16CIF)
-                  || (ext->voiph263fmt == VOIP_H263_FMT_OTHER)) 
-               {
-            /*Create the canvas object*/
-            canvas = lv_canvas_create(content, NULL);
-            lv_obj_set_click(canvas, true);
-            lv_obj_set_event_cb(canvas, canvas_button_hidden_event_cb);
-            video_call_add_element(canvas);
-            ext->canvas = canvas;
-
-            /*Assign the buffer to the canvas*/
-            lv_img_set_src(canvas, ICON_BACKGROUND);
-            voip_signal_check_start(ext);
-
-            // duration
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_label_set_text(label, "00:00");
-            lv_obj_set_click(label, false);
-            lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-                       lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
-            ext->phone_status_label = label;
-            ext->connect_time       = label;
-
-            // signal weak notification
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-            lv_label_set_text_id(label, WATCH_TEXT_ID_SIGNAL_WEAK);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_obj_align(label, canvas, LV_ALIGN_CENTER, 0, -10);
-            lv_obj_set_click(label, false);
-            lv_obj_set_hidden(label, true);
-            ext->signal_weak_label = label;
-
-            // btn volume
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOLUME_BTN);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
-            lv_obj_set_event_cb(btn, voip_volume_btn_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-            lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-            ext->volume_button = btn;
-
-            // btn switch video
-            btn = lv_imgbtn_create(canvas, NULL);
-            //lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_SETTING_VOLTE);
-            //lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_SETTING_VOLTE);
-            //lv_obj_set_event_cb(btn, voip_local_remote_switch_action);
-            //lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
-            //lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-            ext->view_switch_button = btn;     
-
-            // btn ring off
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-            lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-            lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-            ext->ring_off_button = btn;
-
-            lv_obj_set_hidden(ext->connect_time, ext->canvas_button_hidden_flag);
-            lv_obj_set_hidden(ext->volume_button, ext->canvas_button_hidden_flag);
-                       lv_obj_set_hidden(ext->view_switch_button, true); // lv_obj_set_hidden(ext->view_switch_button, ext->canvas_button_hidden_flag);
-            lv_obj_set_hidden(ext->ring_off_button, ext->canvas_button_hidden_flag);
-        }
-
-        if(mmi_vc_call_get_obj()) {
-            lv_watch_obj_set_down_slide_cb(mmi_vc_call_get_obj(), voip_phone_down_slide_callback);
-        }
-    }
-}
-
-static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj)
-{
-    if(MMI_VC_UI_CONNECTED == s_vc_call_ui) 
-       {
-        /* set speaker volume to nv when leaving activiry's slider */
-        voip_set_volume_when_slider_act();
-    }
-
-    mmi_vc_call_screen_clean();
-
-    //lv_watch_png_cache_all_free();
-       
-    if(activity_obj == NULL) 
-       {
-        lv_watch_activity_ext_t activity_ext = {0};
-
-        activity_ext.actId           = ACT_ID_VOIPPHONE;
-        activity_ext.create          = NULL; // mmi_vc_ui_create;
-        activity_ext.prepare_destory = mmi_vc_ui_prepare_destory;
-        activity_obj = lv_watch_creat_activity_obj(&activity_ext);
-        if(NULL == activity_obj) 
-               {
-            return NULL;
-        }
-    }
-
-    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
-    if(obj == NULL)
-       {
-        return NULL;
-    }
-    lv_watch_obj_set_anim_mode(obj, LV_WATCH_LEFT_OR_RIGHT_SLIDE_CALLBACK);
-    lv_watch_obj_set_left_slide_cb(obj, voip_phone_left_slide_callback);
-    lv_watch_obj_set_right_slide_cb(obj, voip_phone_right_slide_callback);
-
-    lv_vc_call_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_vc_call_obj_ext_t));
-    if(ext == NULL) 
-       {
-        return NULL;
-    }
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    ext->phone_status_label       = NULL;
-    ext->phone_animation_obj      = NULL;
-    ext->vc_ui = s_vc_call_ui;
-    ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
-#if ENABLE_VIDEO_SCALE == 0
-    ext->voiph263fmt = VOIP_H263_FMT_QCIF;
-#else
-    ext->voiph263fmt = VOIP_H263_FMT_OTHER;
-#endif
-
-    hal_rtc_t rtc_curr;            // current rtc time
-    Hal_Rtc_Gettime(&rtc_curr);
-    ext->connect_start_time = time_to_seconds(&rtc_curr);
-    ext->connect_time = NULL;
-    ext->volume_button = NULL;
-    ext->view_switch_button = NULL;
-    ext->ring_off_button = NULL;
-    ext->canvas_button_hidden_flag = NOT_HIDDEN;
-
-    /* content */
-    lv_obj_t * content = lv_cont_create(obj, NULL);
-    lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
-    //lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-       //lv_obj_set_style_local_bg_color(content, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-       lv_watch_obj_add_element(content);
-    lv_obj_set_click(content, false);
-    lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
-
-       switch(ext->vc_ui)
-       {
-               case MMI_VC_UI_INCOMING:
-                       mmi_vc_ui_incoming(content);
-                       //mmi_vc_ring_animation(ext->phone_status_label);
-                       break;
-                       
-               case MMI_VC_UI_DIALING:
-                       mmi_vc_ui_dialing(content);
-                       //mmi_vc_dialing_animation(ext->phone_status_label);
-                       break;
-                       
-               case MMI_VC_UI_CONNECTING:
-                       mmi_vc_ui_connecting(content);
-                       //mmi_vc_connecting_animation(ext->phone_status_label);
-                       break;
-                       
-               case MMI_VC_UI_CONNECTED:
-               mmi_vc_ui_connected(content);
-               mmi_vc_connected_animation(ext->phone_status_label);
-                       break;
-
-               default:
-                       break;
-       }
-
-    return obj;
-}
-
-void mmi_ui_msg_update_vc_call_incoming(void)
-{
-#ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
-       if(true == mmi_health_measure_state_is_ui_measure())
-       {
-               mmi_health_heart_rate_screen_clean();
-               mmi_health_spo2_screen_clean();
-       #ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
-               mmi_health_temperature_screen_clean();
-       #endif
-       }
-#endif
-
-       lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VC_DIAL_BTN);
-       if(NULL != activity_obj)
-       {
-               lv_obj_del(activity_obj);
-       }
-       
-       s_vc_call_ui = MMI_VC_UI_INCOMING;
-       mmi_vc_ui_create(NULL);
-}
-
-void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type, char * t_ticket, char * t_tokens)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    if(AUDIO_CTRL_PRIORITY_2 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, mmi_vc_audio_ctrl_callback))
-    {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-               mmi_vc_call_params_clean();
-               s_video_call_params.call_type = type;
-               s_video_call_params.state = MMI_VIDEO_CALL_STATE_INCOMING;
-               strncpy(s_video_call_params.number, number, NV_WATCH_VC_CONTACT_NUMBER_LEN - 1);
-               uint8_t i = 0;
-               for(i = 0; i < s_vc_contact.total; i++) 
-               {
-                       if(0 == strncmp(s_video_call_params.number, s_vc_contact.number[i], strlen(s_video_call_params.number)))
-                       {
-                               strncpy(s_video_call_params.name, s_vc_contact.name[i], NV_WATCH_VC_CONTACT_NAME_LEN - 1);
-                               break;
-                       }
-               }
-
-               memset(s_video_call_ticket, 0x0, MMI_WATCH_VC_TICKET_LEN);
-               strncpy(s_video_call_ticket, t_ticket, MMI_WATCH_VC_TICKET_LEN - 1);
-               
-               memset(s_video_call_tokens, 0x0, MMI_WATCH_VC_TOKENS_LEN);
-               strncpy(s_video_call_tokens, t_tokens, MMI_WATCH_VC_TOKENS_LEN - 1);
-               
-               // ring
-               uint8_t volume = 0;
-       #ifdef __MMI_USER_PROFILE_SUPPORT__
-               volume = mmi_user_profile_current_mode_remind_volume_get();
-       #else
-               volume = query_current_volume();
-       #endif
-               if(!Hal_Set_BT_Audio_Path(volume))
-               {
-                       Hal_Call_Speaker(HAL_CALL_SPK_ON, volume);
-               }
-        Hal_NFFS_File_Play_Repeat(AUDIO_INCOMING_CALL, volume);
-
-        // vibrate
-               if(true == mmi_watch_vibrate_is_permitted())
-               {
-               Hal_Vibrator_Play_Repeat();
-               }
-
-               //
-               mmi_video_call_jrtc_config_init_01(s_video_call_tokens);
-               
-               mmi_watch_wake_up();
-               
-        voip_rat_check_start();
-               
-               // ui
-               mmi_ui_msg_action_vc_call_incoming();
-    }
-}
-
-bool mmi_vc_call_action_incoming_no_permission(void)
-{
-       if(true == mmi_active_screen_is_prohibit_interrupted()
-               || true == is_rat_gsm()
-               #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
-               || true == mmi_watch_is_in_do_not_disturb_time()
-               #endif
-               || true == mmi_vc_is_in_call()
-               )
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-        return true;
-    }
-               
-    return false;
-}
-
-static void mmi_vc_call_connecting_timeout_cb(void * para)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-       mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-void mmi_vc_call_action_connecting(void)
-{
-       if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state
-               || MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state
-               )
-       {
-               return;
-       }
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-       s_video_call_params.state = MMI_VIDEO_CALL_STATE_CONNECTING;
-
-       // stop timer
-    mmi_vc_all_timer_stop();
-
-       // stop playing tone
-       Hal_Tone_Play_End();
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-
-       if(NULL == s_video_call_params.connecting_timer_id) 
-       {
-               s_video_call_params.connecting_timer_id = Hal_Timer_Start(MMI_VC_CONNECTING_TIMEOUT, mmi_vc_call_connecting_timeout_cb, NULL, 0);
-       }
-
-       s_vc_call_ui = MMI_VC_UI_CONNECTING;
-       mmi_vc_ui_create(NULL);
-}
-
-void mmi_vc_call_action_connected(void)
-{
-    if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state)
-       {
-        return;
-    }
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-    s_video_call_params.state = MMI_VIDEO_CALL_STATE_CALLING;
-
-    // stop timer
-    mmi_vc_all_timer_stop();
-
-    // stop playing tone
-    Hal_Tone_Play_End();
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-
-    Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-
-       s_vc_call_ui = MMI_VC_UI_CONNECTED;
-       mmi_vc_ui_create(NULL);
-}
-
-static void mmi_vc_call_dialing_timeout_cb(void * para)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-       mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-void mmi_vc_call_action_dialing_ext(char * t_tokens, char * t_ticket)
-{
-       if(MMI_VIDEO_CALL_STATE_DIALING != s_video_call_params.state)
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               return;
-       }
-       
-       memset(s_video_call_ticket, 0x0, MMI_WATCH_VC_TICKET_LEN);
-       strncpy(s_video_call_ticket, t_ticket, MMI_WATCH_VC_TICKET_LEN - 1);
-       
-       memset(s_video_call_tokens, 0x0, MMI_WATCH_VC_TOKENS_LEN);
-       strncpy(s_video_call_tokens, t_tokens, MMI_WATCH_VC_TOKENS_LEN - 1);
-       
-       mmi_video_call_jrtc_config_init_01(s_video_call_tokens);
-       int8_t ret = mmi_video_call_dial_req(s_video_call_params.call_type, s_video_call_params.number, s_video_call_ticket);
-       if(0 > ret)
-       {
-               mmi_vc_call_dialing_timeout_cb(NULL);
-       }
-}
-
-void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type)
-{
-    // check call state
-    if(MMI_VIDEO_CALL_STATE_NONE != s_video_call_params.state)
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
-        return;
-    }
-
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, type);
-
-    // stop timer
-    mmi_vc_all_timer_stop();
-
-       mmi_vc_call_params_clean();
-    s_video_call_params.state = MMI_VIDEO_CALL_STATE_DIALING;
-    s_video_call_params.call_type = type;
-    strcpy(s_video_call_params.number, number);
-       uint8_t i = 0;
-       for(i = 0; i < s_vc_contact.total; i++) 
-       {
-               if(0 == strncmp(s_video_call_params.number, s_vc_contact.number[i], strlen(s_video_call_params.number)))
-               {
-                       strncpy(s_video_call_params.name, s_vc_contact.name[i], NV_WATCH_VC_CONTACT_NAME_LEN - 1);
-                       break;
-               }
-       }
-       
-       mmi_protocol_fzd_action_VC_CALL_REQUEST(s_video_call_params.number, s_video_call_params.call_type);
-    s_video_call_params.dialing_timer_id = Hal_Timer_Start(MMI_VC_DIALING_TIMEOUT, mmi_vc_call_dialing_timeout_cb, NULL, 0);
-
-    voip_rat_check_start();
-
-       s_vc_call_ui = MMI_VC_UI_DIALING;
-       mmi_vc_ui_create(NULL);
-
-    Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, mmi_vc_audio_ctrl_callback);
-    Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-}
-
-static void mmi_vc_main_prepare_destory(lv_obj_t * activity_obj)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-    lv_watch_png_cache_all_free();
-
-       if(NULL != fail_timer_id)
-       {
-               Hal_Timer_Stop(fail_timer_id);
-               fail_timer_id = NULL;
-       }
-}
-
-void mmi_vc_call_fail_timeout_cb(void *para)
-{
-       mmi_vc_main_prepare_destory(NULL);
-}
-
-static void mmi_vc_call_action_no_permission(void)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
-       
-       lv_obj_t * cont = lv_cont_create(obj, NULL);
-       lv_cont_set_fit(cont, LV_FIT_NONE);
-       lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
-       lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-       lv_cont_set_layout(cont, LV_LAYOUT_OFF);
-       lv_obj_set_click(cont, false);
-
-       lv_obj_t * label = lv_label_create(cont, NULL);
-       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_obj_set_click(label, false);
-       lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
-       lv_obj_align(label, cont, LV_ALIGN_CENTER, 0, 0);
-
-       fail_timer_id = Hal_Timer_Start(2*1000, mmi_vc_call_fail_timeout_cb, NULL, FALSE);
-}
-
-static void mmi_vc_voice_btn_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e)
-       {
-        return;
-    }
-
-       if(true == mmi_vc_is_in_call())
-       {
-               return;
-       }
-
-       lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VC_DIAL_BTN);
-       if(NULL != activity_obj)
-       {
-               lv_obj_del(activity_obj);
-       }
-       uint8_t index = s_vc_contact_selected_index;
-       
-    if(true == mmi_vc_check_mo_permission())
-       {
-               mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VOICE);
-    } 
-       else 
-       {
-        mmi_vc_call_action_no_permission();
-    }
-}
-
-static void mmi_vc_video_btn_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e)
-       {
-        return;
-    }
-
-       if(true == mmi_vc_is_in_call())
-       {
-               return;
-       }
-
-       lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VC_DIAL_BTN);
-       if(NULL != activity_obj)
-       {
-               lv_obj_del(activity_obj);
-       }
-       uint8_t index = s_vc_contact_selected_index;
-       
-    if(true == mmi_vc_check_mo_permission()) 
-       {
-               mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VIDEO);
-    } 
-       else 
-       {
-        mmi_vc_call_action_no_permission();
-    }
-}
-
-static void mmi_vc_dial_btn_screen_prepare_destory(lv_obj_t * activity_obj)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-    lv_watch_png_cache_all_free();
-}
-
-static lv_obj_t * mmi_vc_dial_btn_screen_create(lv_obj_t * activity_obj)
-{
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-    if(activity_obj == NULL) 
-       {
-        lv_watch_activity_ext_t activity_ext = {0};
-
-        activity_ext.actId = ACT_ID_VC_DIAL_BTN;
-        activity_ext.create = mmi_vc_dial_btn_screen_create;
-        activity_ext.prepare_destory = mmi_vc_dial_btn_screen_prepare_destory;
-        activity_obj = lv_watch_creat_activity_obj(&activity_ext);
-        if(NULL == activity_obj)
-            return NULL;
-    }
-
-    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
-    if(NULL == obj)
-        return NULL;
-
-       lv_obj_t * cont = lv_cont_create(obj, NULL);
-       lv_cont_set_fit(cont, LV_FIT_NONE);
-       lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES); // lv_obj_get_width(obj), lv_obj_get_height(obj));
-       lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-       lv_cont_set_layout(cont, LV_LAYOUT_OFF);
-       lv_obj_set_click(cont, false);
-
-       lv_obj_t * voicebtn = lv_imgbtn_create(cont, NULL);
-       lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOICE_BTN);
-       lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOICE_BTN);
-#ifdef USE_LV_WATCH_UI_CIRCLE
-       lv_obj_align(voicebtn, cont, LV_ALIGN_IN_LEFT_MID, 5, 0);
-#else
-       lv_obj_align(voicebtn, cont, LV_ALIGN_IN_TOP_MID, 0, 10);
-#endif
-       lv_obj_set_event_cb(voicebtn, mmi_vc_voice_btn_action);
-       
-       lv_obj_t * videobtn = lv_imgbtn_create(cont, NULL);
-       lv_imgbtn_set_src(videobtn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VIDEO_BTN);
-       lv_imgbtn_set_src(videobtn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VIDEO_BTN);
-#ifdef USE_LV_WATCH_UI_CIRCLE
-       lv_obj_align(videobtn, cont, LV_ALIGN_IN_RIGHT_MID, -5, 0);
-#else
-       lv_obj_align(videobtn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
-#endif
-       lv_obj_set_event_cb(videobtn, mmi_vc_video_btn_action);
-
-    return obj;
-}
-
-static void mmi_vc_contact_event_cb(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e)
-       {
-        return;
-    }
-
-       if(true == mmi_vc_is_in_call())
-       {
-               return;
-       }
-
-       s_vc_contact_selected_index = lv_watch_get_free_num(btn);
-       mmi_vc_dial_btn_screen_create(NULL);
-}
-
-static lv_obj_t * mmi_vc_contact_list_create(lv_obj_t * obj)
-{
-       /*Allocate the object type specific extended data*/
-       lv_vc_contact_list_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_vc_contact_list_obj_ext_t));
-       /*ext realloc based on watch_obj_ext, do not memeset it*/
-       if(NULL == ext)
-       {
-               return NULL;
-       }
-
-       //ext->title = NULL;
-       ext->list = NULL;
-
-       /* content */
-       lv_obj_t * content = lv_cont_create(obj, NULL);
-       lv_cont_set_fit(content, LV_FIT_NONE);
-       lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
-       lv_obj_add_style(content,LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-       lv_obj_set_style_local_bg_color(content, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-       lv_cont_set_layout(content, LV_LAYOUT_OFF); // lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
-       lv_obj_set_click(content, false);
-       lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
-
-       lv_obj_t * label = lv_label_create(content, NULL);
-       lv_obj_set_size(label, LV_HOR_RES, 40); // 30);
-       lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font20_gray);
-       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_text_id(label, WATCH_TEXT_ID_VIDEOCALL);
-       lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10);
-       lv_obj_set_click(label, false);
-       //ext->title = label;
-
-       lv_obj_t * list = lv_list_create(content, NULL);
-       if(list == NULL) 
-       {
-               return NULL;
-       }
-    lv_watch_obj_add_element(list);
-       lv_watch_obj_add_element(lv_page_get_scrl(list));
-       lv_obj_add_style(list, LV_LIST_PART_BG, &lv_watch_style_transp);
-       //lv_obj_add_style(list, LV_LIST_PART_SCROLLABLE, &lv_watch_style_transp);
-       //lv_obj_set_style_local_pad_top(list, LV_LIST_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
-       //lv_obj_set_style_local_pad_bottom(list, LV_LIST_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
-       lv_list_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF); // lv_page_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);
-       lv_obj_set_width(list, lv_obj_get_width(content));
-       lv_coord_t height = lv_obj_get_height(content) - 40; // lv_obj_get_height(label);
-       lv_obj_set_height(list, height);
-       lv_obj_align(list, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
-       lv_obj_set_click(list, false);
-       ext->list = list;
-
-       int8_t i = 0;
-       lv_obj_t * btn;
-
-       for(i = 0; i < s_vc_contact.total; i++) 
-       {
-               char t_str[NV_WATCH_VC_CONTACT_NUMBER_LEN] = {0};
-
-               if(0 < strlen(s_vc_contact.name[i]))
-                       strcpy(t_str, s_vc_contact.name[i]);
-               else
-                       strcpy(t_str, s_vc_contact.number[i]);
-                       
-       #if 0
-               btn = lv_list_add_btn(list, NULL, NULL);
-               //lv_page_glue_obj(btn, true);
-               //lv_obj_add_protect(btn, LV_PROTECT_PRESS_LOST);
-               lv_obj_set_event_cb(btn, mmi_vc_contact_event_cb);
-               lv_watch_obj_add_element(btn);
-               
-               lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-               lv_obj_set_style_local_pad_top(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 5);
-               lv_obj_set_style_local_pad_bottom(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 5);
-               lv_obj_set_style_local_pad_left(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 15);
-               lv_obj_set_style_local_pad_right(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 15);
-               lv_obj_set_style_local_pad_inner(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 10);
-               
-               //label = lv_obj_get_child(btn, NULL);
-               //label = lv_list_get_btn_label(btn);
-               label = lv_label_create(btn, NULL);
-        //lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL); // LV_LABEL_LONG_SROLL_CIRC
-               lv_obj_set_width(label, lv_obj_get_width(btn));
-               lv_label_set_text(label, t_str);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_align(label, LV_LABEL_ALIGN_LEFT);
-        lv_obj_set_click(label, false);
-               //lv_obj_align(label, btn, LV_ALIGN_IN_LEFT_MID, 0, 0);
-               
-               lv_watch_set_free_num(btn, i);
-       #else
-
-               btn = lv_list_add_btn(list, NULL, NULL);
-               lv_btn_set_layout(btn, LV_LAYOUT_ROW_MID);
-               //lv_obj_set_event_cb(btn, mmi_vc_contact_event_cb);
-               //lv_watch_set_free_num(btn, i);
-               
-               lv_obj_t * cont = lv_cont_create(btn, NULL);
-               lv_cont_set_layout(cont, LV_LAYOUT_OFF);
-               lv_obj_set_width(cont, lv_obj_get_width(btn));
-               lv_obj_set_height(cont, 56); // LV_VER_RES / 4); //lv_obj_get_height(btn));
-               lv_obj_add_style(cont, LV_CONT_PART_MAIN, &lv_style_transp);
-               lv_page_glue_obj(cont, true);
-               lv_watch_obj_add_element(cont);
-               lv_obj_set_click(cont, true);
-               lv_obj_set_event_cb(cont, mmi_vc_contact_event_cb);
-               lv_watch_set_free_num(cont, i);
-               
-               label = lv_label_create(cont, NULL);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-               lv_obj_set_width(label, lv_obj_get_width(cont) - 40);
-               lv_label_set_text(label, t_str);
-               lv_obj_align(label, cont, LV_ALIGN_IN_LEFT_MID, 20, 0);
-               
-               lv_watch_obj_add_element(btn);
-       #endif
-       }
-
-       return obj;
-}
-
-static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
-{
-    if(activity_obj == NULL) 
-       {
-        lv_watch_activity_ext_t activity_ext = {0};
-
-        activity_ext.actId = ACT_ID_VOIP_PHONEBOOK;
-        activity_ext.create = mmi_vc_main_create;
-        activity_ext.prepare_destory = mmi_vc_main_prepare_destory;
-        activity_obj = lv_watch_creat_activity_obj(&activity_ext);
-        if(NULL == activity_obj)
-            return NULL;
-    }
-
-    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
-    if(NULL == obj)
-        return NULL;
-
-    if(false == mmi_vc_check_mo_permission()) 
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-               lv_obj_t * label = lv_label_create(obj, NULL);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-               lv_obj_set_click(label, false);
-               lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
-               lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
-    } 
-    else if(true != mmi_watch_tcp_connect_state_get()
-                       || true != mmi_protocol_watch_bind_state_get()
-                       )
-    {
-               // not bind
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-               lv_obj_t * label = lv_label_create(obj, NULL);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-               lv_obj_set_click(label, false);
-               lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NOT_BIND);
-               lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
-    }
-       else if(0 == s_vc_contact.total)
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-               lv_obj_t * label = lv_label_create(obj, NULL);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-               lv_obj_set_click(label, false);
-               lv_label_set_text_id(label, WATCH_TEXT_ID_NO_CONTACTS);
-               lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
-       }
-       else
-       {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-               mmi_vc_contact_list_create(obj);
-    }
-
-    return obj;
-}
-
-void mmi_video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
-{
-#ifdef __VIDEO_CALL_TEST__
-       nv_watch_vc_contact_t t_test_contact = 
-               {
-                       3,
-                       {"test001", "test002", "test003"},
-                       {"jrtc001", "jrtc002", "jrtc003"}
-               };
-
-       _lv_memcpy(&s_vc_contact, &t_test_contact, sizeof(nv_watch_vc_contact_t));
-#endif
-
-    if(LV_EVENT_CLICKED == e) 
-       {               
-        lv_watch_png_cache_all_free();
-        mmi_vc_main_create(NULL);
-    }
-    else if(LV_EVENT_LONG_PRESSED == e)
-       {
-
-       }
-}
-
-
-
-#else
 //static lv_signal_cb_t ancestor_signal;
 #if VIDEO_SIGNAL_CHECK
 static lv_task_t * signal_check_task = NULL;
@@ -2023,12 +15,8 @@ static lv_task_t * rat_check_task = NULL;
 static MMI_VIDEO_CALL_PARAMS_T s_video_call_params = {0};
 lv_color_t g_cbuf[canvas_width * canvas_heigh + 8]  __attribute__((aligned(8)));
 
-static char s_hzch_vc_appkey[MMI_WATCH_VC_APPKEY_LEN] = {0};
-static char s_hzch_vc_secret[MMI_WATCH_VC_SECRET_LEN] = {0};
-static char s_hzch_vc_tokens[MMI_WATCH_VC_TOKENS_LEN] = {0};
-static char s_hzch_vc_number[MMI_WATCH_VC_NUMBER_LEN] = {0};
-static char s_hzch_vc_ticket[MMI_WATCH_VC_TICKET_LEN] = {0};
-static char s_hzch_vc_uid[MMI_WATCH_VC_UID_LEN] = {0};
+static char s_video_call_ticket[MMI_WATCH_VC_TICKET_LEN] = {0};
+static char s_video_call_tokens[MMI_WATCH_VC_TOKENS_LEN] = {0};
 
 
 /**********************
@@ -2704,11 +692,15 @@ void voip_fps_check(int8_t fps)
 
 
 
-
-static nv_watch_vc_contact_t s_vc_contact = {0};
+static uint8_t s_vc_referral_flag = 0; // 0-default; 1-referral
 static TIMER_ID fail_timer_id = NULL;
 static MMI_VIDEO_CALL_UI_E s_vc_call_ui = MMI_VC_UI_INVALID;
 
+char * mmi_video_call_params_number_get(void)
+{
+       return (s_video_call_params.number);
+}
+
 MMI_VIDEO_CALL_STATE_E mmi_video_call_params_state_get(void)
 {
        return (s_video_call_params.state);
@@ -2719,8 +711,23 @@ MODEM_VIDEO_CALL_TYPE mmi_video_call_params_type_get(void)
        return (s_video_call_params.call_type);
 }
 
+
+
+void mmi_video_call_contact_nv_write(void)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+}
+
 void mmi_video_call_contact_nv_read(void)
 {
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+}
+
+void mmi_vc_contact_set(nv_watch_vc_contact_t * contact_list)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
 }
 
@@ -2735,7 +742,7 @@ bool mmi_vc_is_in_call(void)
 //
 void mmi_vc_call_operate_send_to_server(void)
 {
-       mmi_protocol_fzd_action_VC_CALL_CANCEL(s_hzch_vc_number, s_hzch_vc_ticket);
+       mmi_protocol_fzd_action_VC_CALL_RESPONSE(s_video_call_params.number, s_video_call_ticket);
 }
 
 void mmi_vc_ring_off_timer_stop(void)
@@ -2782,6 +789,12 @@ static void mmi_vc_ui_prepare_destory(lv_obj_t * activity_obj)
     mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
 }
 
+static void mmi_vc_hook_action(lv_obj_t * btn, lv_event_t e)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+}
+
 void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
 {
     if(LV_EVENT_CLICKED != e) 
@@ -2811,6 +824,7 @@ void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
             break;
 
         case MMI_VIDEO_CALL_STATE_INCOMING:
+            mmi_video_call_reject_req(TRUE);
             break;
 
         default:
@@ -2837,23 +851,6 @@ void mmi_vc_call_action_call_stop(void)
        mmi_ui_msg_action_vc_call_stop();
 }
 
-
-void mmi_ui_msg_update_vc_call_referral(void)
-{
-       //mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);       
-}
-
-void mmi_vc_call_action_call_referral(void)
-{
-       if(true != mmi_vc_is_in_call())
-       {
-               return;
-       }
-       
-       mmi_watch_wake_up();
-       //mmi_ui_msg_action_vc_call_stop();
-}
-
 static void mmi_vc_ui_dialing(lv_obj_t * content)
 {
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
@@ -2864,77 +861,30 @@ static void mmi_vc_ui_dialing(lv_obj_t * content)
         return;
     }
 
-       // connecting
-       lv_obj_t * img = lv_img_create(content, NULL);
+    // img
+    lv_obj_t * img = lv_img_create(content, NULL);
        lv_img_set_src(img, ICON_VIDEO_CALL_WAITTING);
        lv_obj_align(img, NULL, LV_ALIGN_CENTER, 0, 0);
-       lv_obj_set_click(img, false);
+    lv_obj_set_click(img, false);
 
-       lv_obj_t * btn = lv_btn_create(img, NULL);
-       lv_obj_set_size(btn, 80, 80);
-       //lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
-       //lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
-       //lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
-       //lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
-       lv_obj_add_style(btn, LV_BTN_PART_MAIN, &lv_style_transp_fit);
-       lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
+    // btn ring off
+    lv_obj_t * btn = lv_imgbtn_create(content, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
     lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
+    lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, -8);
 }
 
-static void mmi_vc_ui_connecting(lv_obj_t * content)
+static void mmi_vc_ui_incoming(lv_obj_t * content)
 {
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-       lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
-       LV_ASSERT_MEM(ext);
-       if(ext == NULL) {
-               return;
-       }
-       lv_obj_t * label;
-
-       // label ringing
-       label = lv_label_create(content, NULL);
-       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_text_id(label, WATCH_TEXT_ID_CONNECTING);
-       lv_obj_set_click(label, false);
-       lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
-       ext->phone_status_label = label;
-
-       // img
-       lv_obj_t * img = lv_img_create(content, NULL);
-       lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
-       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-       lv_obj_set_click(img, false);
+}
 
-       // name
-       label = lv_label_create(content, NULL);
-       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-       lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-       lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-       if(strlen(s_video_call_params.name) > 0) 
-       {
-               lv_label_set_text(label, s_video_call_params.name);
-       } 
-       else 
-       {
-               lv_label_set_text(label, s_video_call_params.number);
-       }
-#if USE_LV_WATCH_UI_240_280
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
-#else
-       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-#endif
-       lv_obj_set_click(label, false);
+static void mmi_vc_ui_connecting(lv_obj_t * content)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    // btn ring off
-    lv_obj_t * btn = lv_imgbtn_create(content, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-    lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
 }
 
 static void mmi_vc_ui_connected(lv_obj_t * content)
@@ -2947,6 +897,25 @@ static void mmi_vc_ui_connected(lv_obj_t * content)
         return;
     }
 
+    // img
+    lv_obj_t * img_referral = lv_img_create(content, NULL);
+       lv_img_set_src(img_referral, ICON_VIDEO_CALL_WAITTING);
+       lv_obj_align(img_referral, NULL, LV_ALIGN_CENTER, 0, 0);
+    lv_obj_set_click(img_referral, false);
+
+    // btn ring off
+    lv_obj_t * btn_referral = lv_imgbtn_create(content, NULL);
+    lv_imgbtn_set_src(btn_referral, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
+    lv_imgbtn_set_src(btn_referral, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
+    lv_obj_set_event_cb(btn_referral, mmi_vc_ring_off_action);
+    lv_obj_align(btn_referral, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -8);
+       
+       lv_obj_set_hidden(img_referral, true);
+       lv_obj_set_hidden(btn_referral, true);
+       ext->img_referral = img_referral;
+       ext->btn_referral = btn_referral;
+       
+
        lv_obj_t * label;
        lv_obj_t * btn;
        hal_rtc_t rtc_curr = {0};                                  // current rtc time
@@ -2956,58 +925,6 @@ static void mmi_vc_ui_connected(lv_obj_t * content)
        {
                VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
-        ext->connect_start_time = time_to_seconds(&rtc_curr);
-
-               ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
-
-        //lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-        lv_obj_t * img = lv_img_create(content, NULL);
-               lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
-               lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 30);
-               lv_obj_set_click(img, false);
-               
-        // name
-               label = lv_label_create(content, NULL);
-               lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
-               lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-               lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-               lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-               if(strlen(s_video_call_params.name) > 0) 
-               {
-                       lv_label_set_text(label, s_video_call_params.name);
-               } 
-               else 
-               {
-                       lv_label_set_text(label, s_video_call_params.number);
-               }
-               lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-               lv_obj_set_click(label, false);
-
-               //duration
-               lv_obj_t * time_label = lv_label_create(content, NULL);
-               lv_obj_add_style(time_label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-               lv_label_set_align(time_label, LV_LABEL_ALIGN_CENTER);
-               lv_label_set_text(time_label, "00:00");
-               lv_obj_set_click(time_label, false);
-               lv_obj_set_base_dir(time_label, LV_BIDI_DIR_LTR);
-               lv_obj_align(time_label, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
-               ext->phone_status_label = time_label;
-
-               //btn volume
-               btn = lv_imgbtn_create(content, NULL);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOLUME_BTN);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
-               lv_obj_set_event_cb(btn, voip_volume_btn_action);
-               lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //20, -50);
-
-               //btn ring off
-               btn = lv_imgbtn_create(content, NULL);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
-               lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-               lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
-               lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //-20, -50);
-
-        //watch_set_suspend_enable(false, ACT_ID_VOIPPHONE, 0);
     } 
        else
        {
@@ -3223,13 +1140,18 @@ static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj)
 
        switch(ext->vc_ui)
        {
+               case MMI_VC_UI_INCOMING:
+                       //mmi_vc_ui_incoming(content);
+                       //mmi_vc_ring_animation(ext->phone_status_label);
+                       break;
+                       
                case MMI_VC_UI_DIALING:
                        mmi_vc_ui_dialing(content);
                        //mmi_vc_dialing_animation(ext->phone_status_label);
                        break;
                        
                case MMI_VC_UI_CONNECTING:
-                       mmi_vc_ui_connecting(content);
+                       //mmi_vc_ui_connecting(content);
                        //mmi_vc_connecting_animation(ext->phone_status_label);
                        break;
                        
@@ -3245,45 +1167,50 @@ static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj)
     return obj;
 }
 
-void mmi_ui_msg_update_vc_call_incoming(void)
+uint8_t mmi_vc_call_referral_flag_get(void)
 {
+       return s_vc_referral_flag;
+}
 
+void mmi_vc_call_referral_flag_set(uint8_t flag)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: flag=%d\n", __FUNCTION__, __LINE__, flag)
+               ;
+       if(0 != flag && 1 != flag)
+               return;
+       
+       s_vc_referral_flag = flag;
 }
 
-static void mmi_vc_call_connecting_timeout_cb(void * para)
+void mmi_ui_msg_update_vc_call_incoming(void)
 {
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+    
+}
 
-       mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
+void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type, char * t_ticket, char * t_tokens)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+    
 }
 
-void mmi_vc_call_action_connecting(void)
+bool mmi_vc_call_action_incoming_no_permission(void)
 {
-       if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state
-               || MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state
-               )
-       {
-               return;
-       }
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);    
+               
+    return false;
+}
 
+static void mmi_vc_call_connecting_timeout_cb(void * para)
+{
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-       
-       s_video_call_params.state = MMI_VIDEO_CALL_STATE_CONNECTING;
-
-       // stop timer
-    mmi_vc_all_timer_stop();
 
-       // stop playing tone
-       Hal_Tone_Play_End();
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
+}
 
-       if(NULL == s_video_call_params.connecting_timer_id) 
-       {
-               s_video_call_params.connecting_timer_id = Hal_Timer_Start(MMI_VC_CONNECTING_TIMEOUT, mmi_vc_call_connecting_timeout_cb, NULL, 0);
-       }
+void mmi_vc_call_action_connecting(void)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-       s_vc_call_ui = MMI_VC_UI_CONNECTING;
-       mmi_vc_ui_create(NULL);
 }
 
 void mmi_vc_call_action_connected(void)
@@ -3317,7 +1244,7 @@ static void mmi_vc_call_dialing_timeout_cb(void * para)
        mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
 }
 
-void mmi_vc_call_action_dialing_ext(char * t_appkey, char * t_secret, char * t_tokens, char * t_number, char * t_ticket)
+void mmi_vc_call_action_dialing_ext(char * t_tokens, char * t_room_id, char * t_ticket)
 {
        if(MMI_VIDEO_CALL_STATE_DIALING != s_video_call_params.state)
        {
@@ -3325,28 +1252,17 @@ void mmi_vc_call_action_dialing_ext(char * t_appkey, char * t_secret, char * t_t
                return;
        }
        
-       _lv_memset_00(s_hzch_vc_appkey, MMI_WATCH_VC_APPKEY_LEN);
-       strncpy(s_hzch_vc_appkey, t_appkey, MMI_WATCH_VC_APPKEY_LEN - 1);
-       
-       _lv_memset_00(s_hzch_vc_secret, MMI_WATCH_VC_SECRET_LEN);
-       strncpy(s_hzch_vc_secret, t_secret, MMI_WATCH_VC_SECRET_LEN - 1);
-       
-       _lv_memset_00(s_hzch_vc_tokens, MMI_WATCH_VC_TOKENS_LEN);
-       strncpy(s_hzch_vc_tokens, t_tokens, MMI_WATCH_VC_TOKENS_LEN - 1);
-
-       _lv_memset_00(s_hzch_vc_number, MMI_WATCH_VC_NUMBER_LEN);
-       strncpy(s_hzch_vc_number, t_number, MMI_WATCH_VC_NUMBER_LEN - 1);
+       memset(s_video_call_ticket, 0x0, MMI_WATCH_VC_TICKET_LEN);
+       strncpy(s_video_call_ticket, t_ticket, MMI_WATCH_VC_TICKET_LEN - 1);
        
-       _lv_memset_00(s_hzch_vc_ticket, MMI_WATCH_VC_TICKET_LEN);
-       strncpy(s_hzch_vc_ticket, t_ticket, MMI_WATCH_VC_TICKET_LEN - 1);
+       memset(s_video_call_tokens, 0x0, MMI_WATCH_VC_TOKENS_LEN);
+       strncpy(s_video_call_tokens, t_tokens, MMI_WATCH_VC_TOKENS_LEN - 1);
 
-       char imei[16] = {0};
-       app_adp_get_imei_req(imei);
-       _lv_memset_00(s_hzch_vc_uid, MMI_WATCH_VC_UID_LEN);
-       strncpy(s_hzch_vc_uid, imei, MMI_WATCH_VC_UID_LEN - 1);
+       _lv_memset_00(s_video_call_params.number, NV_WATCH_VC_CONTACT_NUMBER_LEN);
+    strncpy(s_video_call_params.number, t_room_id, NV_WATCH_VC_CONTACT_NUMBER_LEN - 1);
        
-       mmi_video_call_jrtc_config_init(s_hzch_vc_appkey, s_hzch_vc_secret, s_hzch_vc_tokens, s_hzch_vc_uid);
-       int8_t ret = mmi_video_call_dial_req(s_hzch_vc_number, s_vc_ticket);
+       mmi_video_call_jrtc_config_init_01(s_video_call_tokens);
+       int8_t ret = mmi_video_call_dial_req(s_video_call_params.call_type, s_video_call_params.number, s_video_call_ticket);
        if(0 > ret)
        {
                mmi_vc_call_dialing_timeout_cb(NULL);
@@ -3355,6 +1271,13 @@ void mmi_vc_call_action_dialing_ext(char * t_appkey, char * t_secret, char * t_t
 
 void mmi_vc_call_action_dialing(void)
 {
+    // check call state
+    if(MMI_VIDEO_CALL_STATE_NONE != s_video_call_params.state)
+       {
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
+        return;
+    }
+
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
     // stop timer
@@ -3364,7 +1287,7 @@ void mmi_vc_call_action_dialing(void)
     s_video_call_params.state = MMI_VIDEO_CALL_STATE_DIALING;
     s_video_call_params.call_type = MODEM_VIDEO_CALL_TYPE_VIDEO;
        
-       mmi_protocol_fzd_action_VC_CALL_DIAL();
+       mmi_protocol_fzd_action_VC_CALL_REQUEST();
     s_video_call_params.dialing_timer_id = Hal_Timer_Start(MMI_VC_DIALING_TIMEOUT, mmi_vc_call_dialing_timeout_cb, NULL, 0);
 
     voip_rat_check_start();
@@ -3376,6 +1299,47 @@ void mmi_vc_call_action_dialing(void)
     Hal_Set_Voice_Call_Status(VOICE_CALL_START);
 }
 
+static void mmi_vc_main_prepare_destory(lv_obj_t * activity_obj)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+    lv_watch_png_cache_all_free();
+
+       if(NULL != fail_timer_id)
+       {
+               Hal_Timer_Stop(fail_timer_id);
+               fail_timer_id = NULL;
+       }
+}
+
+void mmi_vc_call_fail_timeout_cb(void *para)
+{
+       mmi_vc_main_prepare_destory(NULL);
+}
+
+static void mmi_vc_call_action_no_permission(void)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
+       
+       lv_obj_t * cont = lv_cont_create(obj, NULL);
+       lv_cont_set_fit(cont, LV_FIT_NONE);
+       lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
+       lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       lv_cont_set_layout(cont, LV_LAYOUT_OFF);
+       lv_obj_set_click(cont, false);
+
+       lv_obj_t * label = lv_label_create(cont, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+       lv_obj_set_click(label, false);
+       lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
+       lv_obj_align(label, cont, LV_ALIGN_CENTER, 0, 0);
+
+       fail_timer_id = Hal_Timer_Start(2*1000, mmi_vc_call_fail_timeout_cb, NULL, FALSE);
+}
+
 static void * mmi_vc_main_ext_get(void)
 {
        lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
@@ -3413,6 +1377,7 @@ static void mmi_vc_call_btn_event_cb(lv_obj_t * btn, lv_event_t e)
                lv_obj_set_hidden(ext->button_call, true);
                lv_obj_set_hidden(ext->button_cancel, true);
                lv_obj_set_hidden(ext->img_no_signal, false);
+               lv_obj_set_hidden(ext->img_illegal, true);
        }
        else
        {
@@ -3480,31 +1445,44 @@ static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
        ext->img_no_signal = obj_temp;
        lv_obj_set_hidden(ext->img_no_signal, true);
 
+       // illegal
+       obj_temp = lv_img_create(cont, NULL);
+       lv_img_set_src(obj_temp, ICON_VIDEO_CALL_ILLEGAL);
+       lv_obj_align(obj_temp, NULL, LV_ALIGN_CENTER, 0, 0);
+       lv_obj_set_click(obj_temp, false);
+       ext->img_illegal = obj_temp;
+       lv_obj_set_hidden(ext->img_illegal, true);
+       
        // default
        obj_temp = lv_img_create(cont, NULL);
        lv_img_set_src(obj_temp, ICON_VIDEO_CALL_DEFAULT);
        lv_obj_align(obj_temp, NULL, LV_ALIGN_CENTER, 0, 0);
        lv_obj_set_click(obj_temp, false);
-       ext->img_default = obj_temp;
+       ext->img_call_cancel = obj_temp;
 
-       obj_temp = lv_btn_create(ext->img_default, NULL);
-       lv_obj_set_size(obj_temp, LV_HOR_RES, LV_VER_RES / 2);
+       obj_temp = lv_btn_create(ext->img_call_cancel, NULL);
+       lv_obj_set_size(obj_temp, LV_HOR_RES, 146);
        //lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
        //lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
        //lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
        //lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
-    lv_obj_add_style(obj_temp, LV_BTN_PART_MAIN, &lv_style_transp_fit);
+       lv_obj_set_style_local_radius(obj_temp, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0);
+       lv_obj_set_style_local_radius(obj_temp, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 0);
+    lv_obj_add_style(obj_temp, LV_BTN_PART_MAIN, &lv_style_transp_tight);
        lv_obj_align(obj_temp, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
        lv_obj_set_event_cb(obj_temp, mmi_vc_call_btn_event_cb);
        ext->button_call = obj_temp;
 
-       obj_temp = lv_btn_create(ext->img_default, NULL);
-       lv_obj_set_size(obj_temp, LV_HOR_RES, LV_VER_RES / 2);
-    lv_obj_add_style(obj_temp, LV_BTN_PART_MAIN, &lv_style_transp_fit);
+       obj_temp = lv_btn_create(ext->img_call_cancel, NULL);
+       lv_obj_set_size(obj_temp, LV_HOR_RES, 280 - 146);
+       lv_obj_set_style_local_radius(obj_temp, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0);
+       lv_obj_set_style_local_radius(obj_temp, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 0);
+    lv_obj_add_style(obj_temp, LV_BTN_PART_MAIN, &lv_style_transp_tight);
+    //lv_obj_add_style(obj_temp, LV_BTN_PART_MAIN, &lv_style_transp_fit);
        lv_obj_align(obj_temp, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
        lv_obj_set_event_cb(obj_temp, mmi_vc_cancel_btn_event_cb);
        ext->button_cancel = obj_temp;
-       lv_obj_set_hidden(ext->img_default, false);
+       lv_obj_set_hidden(ext->img_call_cancel, false);
        lv_obj_set_hidden(ext->button_call, false);
        lv_obj_set_hidden(ext->button_cancel, false);
 
@@ -3515,17 +1493,6 @@ static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
 
 void mmi_video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
 {
-#ifdef __VIDEO_CALL_TEST__
-       nv_watch_vc_contact_t t_test_contact = 
-               {
-                       3,
-                       {"test001", "test002", "test003"},
-                       {"jrtc001", "jrtc002", "jrtc003"}
-               };
-
-       _lv_memcpy(&s_vc_contact, &t_test_contact, sizeof(nv_watch_vc_contact_t));
-#endif
-
     if(LV_EVENT_CLICKED == e) 
        {               
         lv_watch_png_cache_all_free();
@@ -3536,7 +1503,7 @@ void mmi_video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
 
        }
 }
-#endif
+
 
 
 //interface
index a2f3658..2a1f8e9 100644 (file)
@@ -22,38 +22,6 @@ extern "C" {
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
 
-#if 1
-
-lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void);
-
-bool check_voipcall_enter_pm_ind(void);
-void watch_voip_message_handle_init(void);
-
-
-void mmi_video_call_jrtc_config_init_00(void);
-void mmi_video_call_jrtc_config_init_01(char * t_tokens);
-void mmi_video_call_contact_nv_read(void);
-void mmi_vc_contact_set(nv_watch_vc_contact_t * contact_list);
-
-void * mmi_video_call_phone_get_video_buffer(void);
-void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type);
-void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type, char * t_ticket, char * t_tokens);
-void mmi_vc_call_action_connecting(void);
-void mmi_vc_call_action_connected(void);
-
-void mmi_ui_msg_update_vc_call_stop(void);
-void mmi_vc_call_action_call_stop(void);
-void mmi_ui_msg_update_vc_call_incoming(void);
-bool mmi_vc_call_action_incoming_no_permission(void);
-
-int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri, char * t_ticket);
-void mmi_video_call_hangup_req(BOOL bye);
-int8_t mmi_video_call_answer_req(char * t_ticket);
-void mmi_video_call_reject_req(BOOL bye);
-void voip_fps_check(int8_t fps);
-
-
-#else
 typedef struct
 {
     lv_watch_obj_ext_t lv_watch_obj;
@@ -63,10 +31,10 @@ typedef struct
        lv_obj_t * button_call;
        lv_obj_t * button_cancel;
        lv_obj_t * img_no_signal;
+       lv_obj_t * img_illegal;
 }lv_hzch_vc_call_obj_ext_t;
 
 
-
 lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void);
 
 bool check_voipcall_enter_pm_ind(void);
@@ -74,22 +42,29 @@ void watch_voip_message_handle_init(void);
 
 
 void mmi_video_call_jrtc_config_init_00(void);
-void mmi_video_call_jrtc_config_init(char * t_tokens);
+void mmi_video_call_jrtc_config_init_01(char * t_tokens);
 void mmi_video_call_contact_nv_read(void);
+void mmi_vc_contact_set(nv_watch_vc_contact_t * contact_list);
 
 void * mmi_video_call_phone_get_video_buffer(void);
-void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type);
+void mmi_vc_call_action_dialing(void);
+void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type, char * t_ticket, char * t_tokens);
 void mmi_vc_call_action_connecting(void);
 void mmi_vc_call_action_connected(void);
 
 void mmi_ui_msg_update_vc_call_stop(void);
 void mmi_vc_call_action_call_stop(void);
 void mmi_ui_msg_update_vc_call_incoming(void);
+bool mmi_vc_call_action_incoming_no_permission(void);
 
-int8_t mmi_video_call_dial_req(char * t_number, char * t_ticket);
+uint8_t mmi_vc_call_referral_flag_get(void);
+void mmi_vc_call_referral_flag_set(uint8_t flag);
+
+int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri, char * t_ticket);
 void mmi_video_call_hangup_req(BOOL bye);
+int8_t mmi_video_call_answer_req(char * t_ticket);
+void mmi_video_call_reject_req(BOOL bye);
 void voip_fps_check(int8_t fps);
-#endif
 
 #endif
 
index e22ae9c..d79ca85 100644 (file)
@@ -685,9 +685,7 @@ bool mmi_protocol_fzd_parse_ACTION_BIND(unsigned char * next_buff, unsigned int
 
                        //video call
                #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-               #if 1 // ndef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
                        mmi_protocol_fzd_action_get_vc_config();
-               #endif
                #endif
 
                        // hengai
@@ -2418,7 +2416,7 @@ bool mmi_protocol_fzd_action_VC_CALL_RESPONSE(char * number, uint8_t state)
 }
 #endif
 
-#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__)
+#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__)
 bool mmi_protocol_fzd_action_get_vc_config(void)
 {
        return mmi_protocol_fzd_send_without_data(MMI_FZD_WATCH_GET_VC_CONFIG);
@@ -2964,14 +2962,20 @@ bool mmi_protocol_fzd_action_VC_CALL_RESPONSE(char * number, char * ticket, MODE
 }
 #endif
 
-#if 0 // def __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
-bool mmi_protocol_fzd_action_VC_CALL_DIAL(void);
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
+bool mmi_protocol_fzd_action_get_vc_config(void)
 {
-       return mmi_protocol_fzd_send_without_data(MMI_FZD_ACTION_VC_CALL_DIAL);
+       return false;
+}
+
+bool mmi_protocol_fzd_action_VC_CALL_REQUEST(void)
+{
+       return mmi_protocol_fzd_send_without_data(MMI_FZD_WATCH_VC_CALL_REQUEST);
 }
        
-// [XX*YY*LEN*VC_DIAL,state,appKey,secret,tokens,number,ticket]
-bool mmi_protocol_fzd_parse_VC_CALL_DIAL(unsigned char * next_buff, unsigned int next_buff_len)
+// [XT*334588000000156*0006*AGTALK,0,efef2323423423,room_456,123]
+// 0-continue; other-stop
+bool mmi_protocol_fzd_parse_WATCH_VC_CALL_REQUEST(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
 
@@ -2984,91 +2988,86 @@ bool mmi_protocol_fzd_parse_VC_CALL_DIAL(unsigned char * next_buff, unsigned int
        result = true;
 
        char * t_value = NULL;
+       char * t_tokens = NULL;
+       char * t_room_id = NULL;
+       char * t_ticket = NULL;
+
        t_value = km_strtok_r(NULL, ",", &next_buff);
+       t_tokens = km_strtok_r(NULL, ",", &next_buff);
+       t_room_id = km_strtok_r(NULL, ",", &next_buff);
+       t_ticket = next_buff;
+
        PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: t_value=%s\n", __FUNCTION__, __LINE__, t_value);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%d]: t_tokens,%d,%s\n", __LINE__, strlen(t_tokens), t_tokens+0);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%d]: t_room_id,%d,%s\n", __LINE__, strlen(t_room_id), t_room_id+0);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%d]: t_ticket,%d,%s\n", __LINE__, strlen(t_ticket), t_ticket+0);
+       
        if(0 == atoi(t_value))
        {
-               // stop
-               //mmi_vc_call_action_call_stop();
+               // go on
+               mmi_vc_call_action_dialing_ext(t_tokens, t_room_id, t_ticket);  
        }
        else
        {
-               // go on
-               char * t_appkey = NULL;
-               char * t_secret = NULL;
-               char * t_tokens = NULL;
-               char * t_number = NULL;
-               char * t_ticket = NULL;
-               
-               t_appkey = km_strtok_r(NULL, ",", &next_buff);
-               t_secret = km_strtok_r(NULL, ",", &next_buff);
-               t_tokens = km_strtok_r(NULL, ",", &next_buff);
-               t_number = km_strtok_r(NULL, ",", &next_buff);
-               t_ticket = next_buff;
-               
-               mmi_vc_call_action_dialing_ext(t_appkey, t_secret, t_tokens, t_number, t_ticket);
+               // stop
+               mmi_vc_call_action_call_stop();
        }
        
        return result;
 }
 
-// [XX*YY*LEN*VC_CANCEL,number,ticket]
-bool mmi_protocol_fzd_action_VC_CALL_CANCEL(char * t_number, char * t_ticket);
-{
-       bool result = false;
-       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_ACTION_VC_CALL_CANCEL;
-       unsigned char content_buff[MMI_WATCH_VC_NUMBER_LEN + MMI_WATCH_VC_TICKET_LEN] = {0};
-       unsigned int content_lenth = 0;
-
-       sprintf(content_buff, ",%s,%d", t_number, t_ticket);
-       content_lenth = strlen(content_buff);
-
-       result = mmi_protocol_fzd_send_with_data(action, content_buff, content_lenth);
-
-       return result;
-}
-
-// [XX*YY*LEN*VC_REFERRAL]
-bool mmi_protocol_fzd_parse_SERVER_VC_CALL_REFERRAL(unsigned char * next_buff, unsigned int next_buff_len)
+// reject
+bool mmi_protocol_fzd_parse_SERVER_VC_CALL_RESPONSE(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
-       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_VC_CALL_REFERRAL;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_VC_CALL_RESPONSE;
 
        result = true;
        mmi_protocol_fzd_send_without_data(action);
 
-       mmi_vc_call_action_call_referral();
+       // the other party is reject
+       mmi_vc_call_action_call_stop();
        
        return result;
 }
 
-// [XX*YY*LEN*VC_RECOVER]
-bool mmi_protocol_fzd_parse_SERVER_VC_CALL_RECOVER(unsigned char * next_buff, unsigned int next_buff_len)
+// [XT*YYYYYYYYYYYYYYY*LEN*RCALLING,������id,����id(û�������գ���λ�ñ�����,��Ƶ������Ƶ��0Ϊ��Ƶ��1Ϊ��Ƶ��]
+bool mmi_protocol_fzd_action_VC_CALL_RESPONSE(char * number, char * ticket)
 {
        bool result = false;
-       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_VC_CALL_RECOVER;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_WATCH_VC_CALL_RESPONSE;
 
-       result = true;
-       mmi_protocol_fzd_send_without_data(action);
+       unsigned char content_buff[NV_WATCH_VC_CONTACT_NUMBER_LEN + 64 + 8] = {0};
+       unsigned int content_lenth = 0;
+
+       sprintf(content_buff, ",%s,%s", number, ticket);
+       content_lenth = strlen(content_buff);
+
+       result = mmi_protocol_fzd_send_with_data(action, content_buff, content_lenth);
 
-       // the other party is reject
-       //mmi_vc_call_action_call_stop();
-       
        return result;
 }
 
-// [XX*YY*LEN*VC_OFF]
-bool mmi_protocol_fzd_parse_SERVER_VC_CALL_CANCEL(unsigned char * next_buff, unsigned int next_buff_len)
+// [XX*YY*LEN*VC_REFERRAL,1]
+bool mmi_protocol_fzd_parse_SERVER_VC_CALL_REFERRAL(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
-       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_VC_CALL_CANCEL;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_VC_CALL_REFERRAL;
+
+       if(NULL == next_buff || 0 == next_buff_len)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
 
        result = true;
        mmi_protocol_fzd_send_without_data(action);
 
-       // the other party is reject
-       //mmi_vc_call_action_call_stop();
+       uint8_t flag = 0;
+       flag = atoi(next_buff);
        
+       mmi_vc_call_referral_flag_set(flag);
+
        return result;
 }
 #endif
@@ -4068,6 +4067,10 @@ bool mmi_protocol_fzd_action_send_telecom_info(void)
        strcat(content_buff, ",VERSION:");
        strcat(content_buff, version_str);
        
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%d]: %s\n", __LINE__, content_buff);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%d]: %s\n", __LINE__, content_buff + 96);
+       
        content_lenth = strlen(content_buff);
        result = mmi_protocol_fzd_send_with_data(action, content_buff, content_lenth);
        
index 054cae2..98acec8 100644 (file)
@@ -144,8 +144,7 @@ typedef enum
        MMI_FZD_ACTION_GET_APP_QRCODE,
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__) \
-       || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__)
+#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__)
        MMI_FZD_WATCH_GET_VC_CONFIG,
        MMI_FZD_WATCH_GET_VC_CONTACT,
        MMI_FZD_WATCH_VC_CALL_REQUEST,
@@ -153,12 +152,11 @@ typedef enum
        MMI_FZD_SERVER_VC_CALL_REQUEST,
        MMI_FZD_WATCH_VC_CALL_RESPONSE,
 #endif
-#if 0 // def __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
-       MMI_FZD_ACTION_VC_CALL_DIAL,
-       MMI_FZD_ACTION_VC_CALL_CANCEL,
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
+       MMI_FZD_WATCH_VC_CALL_REQUEST,
+       MMI_FZD_SERVER_VC_CALL_RESPONSE,
+       MMI_FZD_WATCH_VC_CALL_RESPONSE,
        MMI_FZD_SERVER_VC_CALL_REFERRAL,
-       MMI_FZD_SERVER_VC_CALL_RECOVER,
-       MMI_FZD_SERVER_VC_CALL_CANCEL,
 #endif
 #endif
 
@@ -327,18 +325,14 @@ bool mmi_protocol_fzd_action_get_app_qrcode(void);
 bool mmi_protocol_fzd_parse_ACTION_GET_APP_QRCODE(unsigned char * next_buff, unsigned int next_buff_len);
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__) \
-       || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__)
+#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__)
 bool mmi_protocol_fzd_action_get_vc_config(void);
 bool mmi_protocol_fzd_action_VC_CALL_REQUEST(char * number, uint8_t call_type);
 #endif
-#if 0 // def __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
-bool mmi_protocol_fzd_action_VC_CALL_DIAL(void);
-bool mmi_protocol_fzd_parse_VC_CALL_DIAL(unsigned char * next_buff, unsigned int next_buff_len);
-bool mmi_protocol_fzd_action_VC_CALL_CANCEL(char * t_number, char * t_ticket);
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
+bool mmi_protocol_fzd_action_get_vc_config(void);
+bool mmi_protocol_fzd_action_VC_CALL_REQUEST(void);
 bool mmi_protocol_fzd_parse_SERVER_VC_CALL_REFERRAL(unsigned char * next_buff, unsigned int next_buff_len);
-bool mmi_protocol_fzd_parse_SERVER_VC_CALL_RECOVER(unsigned char * next_buff, unsigned int next_buff_len);
-bool mmi_protocol_fzd_parse_SERVER_VC_CALL_CANCEL(unsigned char * next_buff, unsigned int next_buff_len);
 #endif
 #endif
 
index 365f65c..c055b67 100644 (file)
@@ -77,7 +77,7 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
                        {MMI_FZD_SERVER_VC_CALL_REQUEST, "jup_hoo_request"},
                        {MMI_FZD_WATCH_VC_CALL_RESPONSE, "jup_hoo_response"},
                #endif
-               #if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__)
+               #if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__)
                        {MMI_FZD_WATCH_GET_VC_CONFIG, "JPREG"},
                        {MMI_FZD_WATCH_GET_VC_CONTACT, "MEMBERS"},
                        {MMI_FZD_WATCH_VC_CALL_REQUEST, "AGTALK"},
@@ -85,12 +85,11 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
                        {MMI_FZD_SERVER_VC_CALL_REQUEST, "CALLING"},
                        {MMI_FZD_WATCH_VC_CALL_RESPONSE, "RCALLING"},
                #endif
-               #if 0 // def __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
-                       {MMI_FZD_ACTION_VC_CALL_DIAL, "VC_DIAL"},
-                       {MMI_FZD_ACTION_VC_CALL_CANCEL, "VC_CANCEL"},
+               #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
+                       {MMI_FZD_WATCH_VC_CALL_REQUEST, "AGTALK"},
+                       {MMI_FZD_SERVER_VC_CALL_RESPONSE, "RTALK"},
+                       {MMI_FZD_WATCH_VC_CALL_RESPONSE, "RCALLING"},
                        {MMI_FZD_SERVER_VC_CALL_REFERRAL, "VC_REFERRAL"},
-                       {MMI_FZD_SERVER_VC_CALL_RECOVER, "VC_RECOVER"},
-                       {MMI_FZD_SERVER_VC_CALL_CANCEL, "VC_OFF"},
                #endif
                #endif
                #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
@@ -338,8 +337,7 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                        break;
 
        #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-       #if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__) \
-               || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__)
+       #if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__)
                case MMI_FZD_WATCH_GET_VC_CONFIG:
                        mmi_protocol_fzd_parse_WATCH_GET_VC_CONFIG(next_buff, next_buff_len);
                        break;
@@ -363,25 +361,21 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                case MMI_FZD_WATCH_VC_CALL_RESPONSE:
                        break;
        #endif
-       #if 0 // def __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
-               case MMI_FZD_ACTION_VC_CALL_DIAL:
-                       mmi_protocol_fzd_parse_VC_CALL_DIAL(next_buff, next_buff_len);
+       #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_HZCH__
+               case MMI_FZD_WATCH_VC_CALL_REQUEST:
+                       mmi_protocol_fzd_parse_WATCH_VC_CALL_REQUEST(next_buff, next_buff_len);
+                       break;
+                       
+               case MMI_FZD_SERVER_VC_CALL_RESPONSE:
+                       mmi_protocol_fzd_parse_SERVER_VC_CALL_RESPONSE(next_buff, next_buff_len);
                        break;
                        
-               case MMI_FZD_ACTION_VC_CALL_CANCEL:
+               case MMI_FZD_WATCH_VC_CALL_RESPONSE:
                        break;
                        
                case MMI_FZD_SERVER_VC_CALL_REFERRAL:
                        mmi_protocol_fzd_parse_SERVER_VC_CALL_REFERRAL(next_buff, next_buff_len);
                        break;
-
-               case MMI_FZD_SERVER_VC_CALL_RECOVER:
-                       mmi_protocol_fzd_parse_SERVER_VC_CALL_RECOVER(next_buff, next_buff_len);
-                       break;
-                       
-               case MMI_FZD_SERVER_VC_CALL_CANCEL:
-                       mmi_protocol_fzd_parse_SERVER_VC_CALL_CANCEL(next_buff, next_buff_len);
-                       break;
        #endif
        #endif