gengxin
authorCCC <2393524978@qq.com>
Tue, 18 Jul 2023 01:45:04 +0000 (09:45 +0800)
committerCCC <2393524978@qq.com>
Tue, 18 Jul 2023 01:45:04 +0000 (09:45 +0800)
2.sdk/project/Z5_K7/gui/lv_watch/mmi_default_CUSTOM.h
2.sdk/project/Z5_K7/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h
2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_jrtc_client.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c
2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_sundry.c
2.sdk/sdk/gui/lv_watch/modem/modem_adp.c

index b7fe778..5fc7d27 100644 (file)
@@ -6,12 +6,12 @@
 
 
 //server ip
-#define MMI_CUSTOMER_IP_ADDRESS                "8.134.110.49" // "api.xcloudtech.com"
+#define MMI_CUSTOMER_IP_ADDRESS                "api.xcloudtech.com" // "8.134.110.49" // "api.xcloudtech.com"
 
-#define MMI_CUSTOMER_IP_PORT           (30346) // (9000)
+#define MMI_CUSTOMER_IP_PORT           (9000) // (30346) // (9000)
 
 
-#define MMI_CUSTOMER_HEARTBEAT_ACTION_INTERVAL         (60 * 5) // unit:s
+#define MMI_CUSTOMER_HEARTBEAT_ACTION_INTERVAL         (60 * 5) // (60 * 5) // unit:s
 
 #define MMI_CUSTOMER_LOCATION_UPLOAD_INTERVAL          (60 * 20) // unit:s
 
index 61c8439..4837a82 100644 (file)
 
 #define __MMI_ZHSX_SUPPORT_FZD__
 
-#define __MMI_ZHSX_SUPPORT_FZD_SERVER_WULIAN__ // dachui
+//#define __MMI_ZHSX_SUPPORT_FZD_SERVER_WULIAN__ // dachui
 
 #define __MMI_ZHSX_SUPPORT_SMS__
 
index f497e30..a8a4e8f 100644 (file)
@@ -213,8 +213,8 @@ typedef struct
        char number[NV_WATCH_SOS_NUMBER_MAX][NV_CONTACTS_MAX_NUMBER_LEN];
 } __packed nv_watch_sos_number_t;
 
-#define NV_WATCH_VC_CONTACT_TOTAL              (10)
-#define NV_WATCH_VC_CONTACT_NAME_LEN      (10+1)
+#define NV_WATCH_VC_CONTACT_TOTAL              (50)
+#define NV_WATCH_VC_CONTACT_NAME_LEN      (16+1)
 #define NV_WATCH_VC_CONTACT_NUMBER_LEN    (20+1)
 
 typedef struct
index aeecf8e..972574c 100644 (file)
@@ -44,7 +44,7 @@ void mmi_video_call_jrtc_config_init_00(void)
        app_adp_get_imei_req(imei);
        strncpy(uid, imei, 16);
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       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));
@@ -53,6 +53,7 @@ void mmi_video_call_jrtc_config_init_00(void)
 
 void mmi_video_call_jrtc_config_init_01(char * t_appkey, char * t_key, char * t_tokens)
 {
+#ifndef __VIDEO_CALL_TEST__
        char appkey[24+1] = {0};
        char key[16+1] = {0};
        char uid[64+1] = {0};
@@ -62,26 +63,32 @@ void mmi_video_call_jrtc_config_init_01(char * t_appkey, char * t_key, char * t_
        app_adp_get_imei_req(imei);
        strncpy(uid, imei, 16);
 
+       //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens);
+       //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens+32);
+       //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens+64); 
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, strlen(t_appkey),  strlen(t_key), strlen(t_tokens));
+
        memcpy(appkey, t_appkey, 24);
        memcpy(key, t_key, 16);
        memcpy(tokens, t_tokens, 128);
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, appkey);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, uid);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, key);
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, tokens);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(appkey), appkey);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(uid), uid);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(key), key);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(tokens), tokens);
        
        jrtc_config(appkey, uid, key, 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][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
     if(NULL != s_video_call_jrtc.state_task) 
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
         lv_task_del(s_video_call_jrtc.state_task);
     }
@@ -91,7 +98,7 @@ static void mmi_video_call_jrtc_clean_up(void)
 
 static void mmi_video_call_jrtc_timeout_cb(void * para)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
     mmi_video_call_jrtc_clean_up();
 }
@@ -103,7 +110,7 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
 
     if(state != oldstate) 
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: oldstate=%d,state=%d\n", __FUNCTION__, __LINE__, oldstate, state);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: oldstate=%d,state=%d\n", __FUNCTION__, __LINE__, oldstate, state);
     }
 
     switch(state) 
@@ -113,7 +120,7 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
                        {
                        video_call_jrtc_error_e err = jrtc_error(s_video_call_jrtc.jrtc_ptr);
                                
-                               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err);
+                               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err);
 
                    if(!s_video_call_jrtc.closing) 
                                {
@@ -143,10 +150,7 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
                break;
 
            case JRTC_TALKING:
-               if(MMI_VIDEO_CALL_STATE_CALLING != mmi_video_call_params_state_get()) 
-                       {
-                   mmi_vc_call_action_connect();
-               }
+                       mmi_vc_call_action_connected();
 
                /* Get image */
                if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get()) 
@@ -154,7 +158,7 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
                    void *buf = mmi_video_call_phone_get_video_buffer();
                    if(voip_jrtc_get_image(buf)) 
                                {
-                       lv_canvas_set_buffer(voip_phone_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
+                       lv_canvas_set_buffer(mmi_vc_call_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
                    }
                }
                break;
@@ -169,8 +173,14 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
 
 static int8_t mmi_video_call_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE calltype)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, roomid, calltype);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, roomid, calltype);
 
+#ifdef __VIDEO_CALL_TEST__
+       char * ticket = NULL;
+#else
+       char ticket[64+8] = "ab2671af32b7278ca5e7ad9e26b488aff6640569eaa5b8e1f690d8ac298f6e61";
+#endif
+       
     Hal_Mem_Set(&s_video_call_jrtc, 0, sizeof(MMI_VIDEO_CALL_JRTC_T));
        
     if (MODEM_VIDEO_CALL_TYPE_VIDEO == calltype) 
@@ -182,16 +192,16 @@ static int8_t mmi_video_call_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE
 
                mci_videocall_camera_set_sensor(1); // 0:rear camera; 1:front camera
                
-        s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, 0, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe);
+        s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, ticket, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe);
     } 
        else 
        {
-        s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, 0, NULL, NULL);
+        s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, ticket, NULL, NULL);
     }
 
     if (!s_video_call_jrtc.jrtc_ptr) 
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
         mmi_video_call_jrtc_clean_up();
         return -1;
     }
@@ -205,19 +215,22 @@ int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUr
 {
     int8_t ret = -1;
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, pContactUri, calltype);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, pContactUri, calltype);
 
        mmi_vc_call_operate_send_to_server(2);
        
     if (NULL == s_video_call_jrtc.jrtc_ptr)
+       {
         ret = mmi_video_call_jrtc_open(pContactUri, calltype);
+       }
+       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][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, bye);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
 
        mmi_vc_call_operate_send_to_server(0);
        
@@ -225,6 +238,8 @@ void mmi_video_call_hangup_req(BOOL bye)
        {
         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);
+               
         jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
         s_video_call_jrtc.closing = 1;
     } 
@@ -238,19 +253,20 @@ int8_t mmi_video_call_answer_req(void)
 {
     int8_t ret = -1;
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr);
-
        mmi_vc_call_operate_send_to_server(1);
        
     if (NULL == s_video_call_jrtc.jrtc_ptr)
+       {
         ret = mmi_video_call_jrtc_open(mmi_video_call_params_number_get(), mmi_video_call_params_type_get());
-
+       }
+       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_reject_req(BOOL bye)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, bye);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
 
        mmi_vc_call_operate_send_to_server(0);
 
@@ -258,6 +274,8 @@ void mmi_video_call_reject_req(BOOL bye)
        {
         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);
+               
         jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
         s_video_call_jrtc.closing = 1;
     } 
@@ -275,7 +293,7 @@ void mmi_video_call_reject_req(BOOL bye)
 static uint8_t voip_jrtc_get_image(void * preview_buf)
 {
     uint8_t ret = 0;
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
     LV_ASSERT_MEM(ext);
 
     video_call_jrtc_image_t * frame = NULL;
index 9b48c69..985489b 100644 (file)
@@ -11,7 +11,7 @@
 #include <stdlib.h>
 
 
-static lv_signal_cb_t ancestor_signal;
+//static lv_signal_cb_t ancestor_signal;
 #if VIDEO_SIGNAL_CHECK
 static lv_task_t * signal_check_task = NULL;
 #endif
@@ -36,9 +36,6 @@ static void voip_phone_cleanup(void);
 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_anim_fp_connected(lv_anim_t * anim);
-static void voip_phone_prepare_destory(lv_obj_t * activity_obj);
-static lv_obj_t * voip_phone_get_activity_obj(void);
-static lv_obj_t * voip_phone_get_obj(void);
 static void voip_get_time_elaps(uint32_t last_time, char * str, int8_t size);
 static void voip_set_volume_when_slider_act(void);
 static void voip_local_remote_switch_action(lv_obj_t * btn, lv_event_t e);
@@ -62,243 +59,6 @@ void voip_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
     }
 }
 
-static lv_voip_phonebook_obj_ext_t * voip_phonebook_get_ext(void)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
-
-    if(activity_obj == NULL) {
-        return(NULL);
-    }
-
-    lv_obj_t * watch_obj;
-    lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
-    if(watch_obj == NULL) {
-        return(NULL);
-    }
-
-    if(watch_obj) {
-        lv_voip_phonebook_obj_ext_t * ext = lv_obj_get_ext_attr(watch_obj);
-        return(ext);
-    }
-    return(NULL);
-}
-
-static int voip_aligned_width(int val, lv_coord_t move_width)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    bool negative = (val < 0) ? true : false;
-    if(val < 0) {
-        val = -val;
-    }
-    int i       = (val + move_width - 1) / move_width - 1;
-    int new_val = i * move_width;
-
-    new_val = (val - new_val > move_width / 2) ? (new_val + move_width) : new_val;
-    new_val = negative ? -new_val : new_val;
-    return(new_val);
-}
-
-static lv_res_t voip_page_scrl_signal_handler(lv_obj_t * page_scrl, lv_signal_t sign, void * param)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return(LV_RES_INV);
-    }
-
-    if((sign == LV_SIGNAL_DRAG_END) || (sign == LV_SIGNAL_RELEASED)) {
-        lv_coord_t new_x         = lv_obj_get_x(page_scrl);
-        lv_coord_t aligned_new_x = voip_aligned_width(new_x, ext->move_width);
-        lv_obj_set_x(page_scrl, aligned_new_x);
-
-        lv_bidi_dir_t dir = lv_obj_get_base_dir(page_scrl);
-
-        /* update image id */
-        ext->cur_img_id = (aligned_new_x < 0) ? -aligned_new_x / ext->move_width : aligned_new_x / ext->move_width;
-        voip_phonebook_t * contact;
-        if(LV_BIDI_DIR_RTL == dir) {
-            contact = _lv_ll_get_tail(&ext->contact_list);
-        } else {
-            contact = _lv_ll_get_head(&ext->contact_list);
-        }
-        uint8_t i = 0;
-        while(NULL != contact) {
-            if(ext->cur_img_id == i) {
-                ext->cur_contact = contact;
-                break;
-            }
-            i++;
-            if(LV_BIDI_DIR_RTL == dir) {
-                contact = _lv_ll_get_prev(&ext->contact_list, contact);
-            } else {
-                contact = _lv_ll_get_next(&ext->contact_list, contact);
-            }
-        }
-        if(NULL == contact) {
-            printf("error, contact not found in voip_page_scrl_signal_handler\n");
-            return(LV_RES_INV);
-        }
-        lv_label_set_text(ext->label_phone_contact, contact->name);
-        if(0 < strlen(contact->number)) {
-            uint32_t pos = LV_LABEL_POS_LAST;
-            if(LV_BIDI_DIR_RTL == dir) {
-                pos = 0;
-            }
-            if(0 < strlen(contact->name)) {
-                lv_label_ins_text(ext->label_phone_contact, pos, "  ");
-            }
-            lv_label_ins_text(ext->label_phone_contact, pos, contact->number);
-        }
-    }
-
-    return(LV_RES_OK);
-} /* voip_page_scrl_signal_handler */
-
-static lv_res_t voip_phonebook_page_scrl_signal(lv_obj_t * page_scrl, lv_signal_t sign, void * param)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_res_t res;
-
-    /* Include the ancient signal function */
-    res = ancestor_signal(page_scrl, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    if(sign == LV_SIGNAL_CLEANUP) {
-        /*when cleanup, can not invoke lv_indev_get_act */
-        return(LV_RES_OK);
-    }
-
-    res = voip_page_scrl_signal_handler(page_scrl, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    return(LV_RES_OK);
-}
-
-static lv_res_t voip_phonebook_element_signal_func(lv_obj_t * element, lv_signal_t sign, void * param)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_res_t res;
-
-    /* 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);
-    }
-
-    lv_voip_phonebook_obj_ext_t * ext = lv_obj_get_ext_attr(obj);
-    if(ext == NULL) {
-        return(LV_RES_INV);
-    }
-    if(ext->page_scrl == NULL) {
-        return(LV_RES_INV);
-    }
-    res = voip_page_scrl_signal_handler(ext->page_scrl, 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);
-} /* voip_phonebook_element_signal_func */
-
-static void voip_phonebook_add_element(lv_obj_t * element)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_watch_set_free_ptr(element, lv_obj_get_signal_cb(element));
-    lv_obj_set_signal_cb(element, voip_phonebook_element_signal_func);
-    lv_obj_add_protect(element, LV_PROTECT_PRESS_LOST | LV_PROTECT_CLICK_FOCUS);
-}
-
-static lv_obj_t * voipcall_number_add(lv_obj_t * page, const void * img_src)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * img = NULL;
-
-    lv_obj_t * content = lv_cont_create(page, NULL);
-
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-    lv_obj_set_size(content,  120, lv_obj_get_height(page));
-    lv_cont_set_layout(content, LV_LAYOUT_OFF);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return(NULL);
-    }
-    /*must set click enable for these content, If not, no pressed/pressing signals out*/
-    lv_obj_set_click(content, true);
-    voip_phonebook_add_element(content);
-    /*hor drag in page, must set glue*/
-    lv_page_glue_obj(content, true);
-
-    img = lv_img_create(content, NULL);
-    lv_img_set_src(img, img_src);
-    lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 20);
-
-    return(content);
-}
-
-static lv_obj_t * voip_append_obj(lv_obj_t * page)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-    lv_obj_t * voip_append_obj = lv_obj_create(page, NULL);
-
-    lv_obj_set_size(voip_append_obj, ext->append_width, lv_obj_get_height(page));
-    lv_obj_add_style(voip_append_obj, LV_OBJ_PART_MAIN, &lv_style_transp_tight);
-    voip_phonebook_add_element(voip_append_obj);
-    return(voip_append_obj);
-}
-
-lv_voip_phone_obj_ext_t * voip_phone_get_ext(void)
-{
-    lv_voip_phone_obj_ext_t * ext = NULL;
-    lv_obj_t * watch_obj = voip_phone_get_obj();
-
-    if(watch_obj) {
-        ext = lv_obj_get_ext_attr(watch_obj);
-    }
-
-    return(ext);
-}
-
 void * mmi_video_call_phone_get_video_buffer()
 {
     return g_cbuf;
@@ -307,26 +67,40 @@ void * mmi_video_call_phone_get_video_buffer()
 /**********************
 *   STATIC FUNCTIONS
 **********************/
-static lv_obj_t * voip_phone_get_activity_obj(void)
+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 * voip_phone_get_obj(void)
+static lv_obj_t * mmi_vc_call_get_obj(void)
 {
     lv_obj_t * watch_obj = NULL;
 
-    lv_obj_t * activity_obj = voip_phone_get_activity_obj();
+    lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
 
-    if(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 voip_phone_left_slide_callback(lv_obj_t * obj)
 {
     printf("%s %d\n", __FUNCTION__, __LINE__);
@@ -388,7 +162,7 @@ static lv_obj_t * voip_ring_off_content_create(lv_obj_t * par)
         par = lv_scr_act();
     }
 
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
     LV_ASSERT_MEM(ext);
     if(ext == NULL) {
         return(NULL);
@@ -422,16 +196,22 @@ static lv_obj_t * voip_ring_off_content_create(lv_obj_t * par)
     lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
     lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
 
-    if(is_rat_gsm()) {
+    if(is_rat_gsm()) 
+       {
         lv_label_set_text_id(label, WATCH_TEXT_ID_NETWORK_WRONG);
-    } else {
-        if(ext->phone_ui_t == PHONE_UI_CONNECTED) {
+    } 
+       else 
+       {
+        if(ext->phone_ui_t == MMI_VC_UI_CONNECTED) 
+               {
             char tmp[20] = "";
             char str[30] = "";
             voip_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 {
+        } 
+               else 
+               {
             lv_label_set_text_id(label, WATCH_TEXT_ID_RING_OFF);
         }
     }
@@ -454,12 +234,58 @@ static void voip_phone_cleanup(void)
         lv_obj_del(slider_activit_obj);
     }
 
-    lv_obj_t * activity_obj = voip_phone_get_activity_obj();
+    lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
     if(activity_obj) {
         lv_obj_del(activity_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 voip_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) {
@@ -469,14 +295,14 @@ static void voip_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x)
 
 static void voip_dialing_animation(lv_obj_t * par)
 {
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    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(voip_phone_get_obj(), NULL);
+    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);
@@ -508,14 +334,14 @@ static void voip_dialing_animation(lv_obj_t * par)
 
 static void voip_ring_animation(lv_obj_t * par)
 {
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    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(voip_phone_get_obj(), NULL);
+    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);
@@ -569,7 +395,7 @@ static void voip_connected_animation(lv_obj_t * obj)
 static void voip_anim_fp_connected(lv_anim_t * anim)
 {
     lv_obj_t        *        obj = (lv_obj_t *)anim->var;
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
 
     LV_ASSERT_MEM(ext);
     if(ext == NULL) {
@@ -583,35 +409,6 @@ static void voip_anim_fp_connected(lv_anim_t * anim)
     }
 }
 
-
-static void voip_phone_prepare_destory(lv_obj_t * activity_obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_watch_png_cache_all_free();
-
-    // stop playing tone
-    Hal_Tone_Play_End();
-
-    // ring off
-    mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-
-    // stop ring off timer
-    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;
-    }
-
-    // stop callreq timer
-    if(NULL != s_video_call_params.callreq_timer_id) {
-        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-        s_video_call_params.callreq_timer_id = NULL;
-    }
-
-    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    s_video_call_params.state = MMI_VIDEO_CALL_STATE_NONE;
-}
-
 static void voip_get_time_elaps(uint32_t last_time, char * str, int8_t size)
 {
     hal_rtc_t rtc_curr;            // current rtc time
@@ -647,28 +444,19 @@ void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier)
             && (1 == isNoCarrier)
             && (MMI_VIDEO_CALL_STATE_NONE == s_video_call_params.state)) 
     {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
         return;
     }
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
     // stop playing tone
     Hal_Tone_Play_End();
 
-    // stop ring off timer
-    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;
-    }
-
-    // stop callreq timer
-    if(NULL != s_video_call_params.callreq_timer_id) 
-       {
-        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-        s_video_call_params.callreq_timer_id = NULL;
-    }
+    // stop timer
+    mmi_vc_ring_off_timer_stop();
+       mmi_vc_dialing_timer_stop();
+       mmi_vc_connecting_timer_stop();
 
     // create ring off UI
     lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
@@ -686,11 +474,10 @@ void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier)
     Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
     watch_wakeup_time_reset();
 
-    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    s_video_call_params.state = MMI_VIDEO_CALL_STATE_NONE;
+    Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
 }
 
-static bool mmi_video_call_check_mo_permission(void)
+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())
@@ -715,7 +502,7 @@ static void voip_local_remote_switch_action(lv_obj_t * btn, lv_event_t e)
     if(!activity_obj) {
         return;
     }
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
     if(!ext) {
         return;
     }
@@ -785,7 +572,7 @@ 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_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+        lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
         if(!ext) {
             return;
         }
@@ -797,7 +584,7 @@ static void canvas_button_hidden_event_cb(lv_obj_t * obj, lv_event_t e)
 
         lv_obj_set_hidden(ext->connect_time, ext->canvas_button_hidden_flag);
         lv_obj_set_hidden(ext->ring_value_button, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->view_switch_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);
     }
 }
@@ -817,7 +604,7 @@ static void voip_set_volume_when_slider_act(void)
 #if VIDEO_SIGNAL_CHECK
 static void signal_check(lv_task_t *task)
 {
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
     if(!ext) return;
 
     if((false == is_rat_gsm()) &&
@@ -881,7 +668,7 @@ static void voip_rat_check_stop(void)
 
 void voip_fps_check(int8_t fps)
 {
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    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);
@@ -896,12 +683,10 @@ void voip_fps_check(int8_t fps)
 
 
 
-#ifdef __VIDEO_CALL_TEST__
-#define MMI_VC_ROOM_ID "jrtc001" // "104799"
-#endif
 
 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)
 {
@@ -944,7 +729,7 @@ void mmi_vc_contact_set(nv_watch_vc_contact_t * contact_list)
 {
     if(NULL == contact_list) 
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
         return;
     }
 
@@ -967,23 +752,78 @@ void mmi_vc_call_operate_send_to_server(uint_8 flag)
                mmi_protocol_fzd_action_VC_CALL_REQUEST(s_video_call_params.number, s_video_call_params.call_type);
 }
 
-static void mmi_vc_incoming_hook_action(lv_obj_t * btn, lv_event_t e)
+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;
+       }
+}
+
+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();
+
+    // stop playing tone
+    Hal_Tone_Play_End();
+
+    // ring off
+    mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
+
+    // stop ring off timer
+    mmi_vc_ring_off_timer_stop();
+
+    // stop callreq timer
+    mmi_vc_dialing_timer_stop();
+
+       //stop
+       mmi_vc_connecting_timer_stop();
+
+    Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_params.state = MMI_VIDEO_CALL_STATE_NONE;
+}
+
+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][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    if(btn) {
-        lv_obj_set_click(btn, false);
-    }
+    //if(btn) {
+    //    lv_obj_set_click(btn, false);
+    //}
 
     Hal_Tone_Play_End();
+
+       mmi_vc_call_action_connecting();
        
     int8_t ret = mmi_video_call_answer_req();
-    if(ret < 0) {
+    if(ret < 0) 
+       {
         mmi_vc_ring_off_no_carrier(0);
     }
 }
@@ -991,28 +831,28 @@ static void mmi_vc_incoming_hook_action(lv_obj_t * btn, lv_event_t e)
 
 lv_res_t mmi_video_call_phone_ring_off_create()
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+    if(ext == NULL) 
+       {
         return(LV_RES_INV);
     }
 
     // stop callreq timer
-    if(NULL != s_video_call_params.callreq_timer_id) {
-        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-        s_video_call_params.callreq_timer_id = NULL;
-    }
+    mmi_vc_dialing_timer_stop();
 
-    if(ext->phone_ui_t == MMI_VC_UI_INCOMING || ext->phone_ui_t == MMI_VC_UI_DIALING) {
+    if(ext->phone_ui_t == MMI_VC_UI_INCOMING || ext->phone_ui_t == MMI_VC_UI_DIALING) 
+       {
         if(ext->phone_status_label) {
             lv_label_set_text(ext->phone_status_label, "");
         }
 
-        voip_ring_off_content_create(voip_phone_get_obj());
-    } else if(ext->phone_ui_t == PHONE_UI_CONNECTED) {
-        voip_ring_off_content_create(voip_phone_get_obj());
+        voip_ring_off_content_create(mmi_vc_call_get_obj());
+    } 
+       else if(ext->phone_ui_t == MMI_VC_UI_CONNECTED) 
+       {
+        voip_ring_off_content_create(mmi_vc_call_get_obj());
     }
 
     if(ext->phone_animation_obj) {
@@ -1026,7 +866,7 @@ lv_res_t mmi_video_call_phone_ring_off_create()
     /* phone cleanup when anim end*/
     lv_anim_t a;
     lv_anim_init(&a);
-    lv_anim_set_var(&a, voip_phone_get_obj());
+    lv_anim_set_var(&a, mmi_vc_call_get_obj());
     lv_anim_set_ready_cb(&a, (lv_anim_ready_cb_t)voip_phone_obj_hide_anim_end);
     lv_anim_set_time(&a, VOIP_PHONE_RING_OFF_CONTINUE_TIME);
     lv_anim_start(&a);
@@ -1039,7 +879,7 @@ lv_res_t mmi_video_call_phone_ring_off_create()
 
 static void mmi_vc_ring_off_timeout_cb(void * para)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
     s_video_call_params.ring_off_timer_id = NULL;
     s_video_call_params.ring_off_timeout  = true;
@@ -1053,20 +893,19 @@ void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
         return;
     }
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
 
+       mmi_vc_dialing_timer_stop();
+    mmi_vc_connecting_timer_stop();
+       
     if(false == s_video_call_params.ring_off) 
        {
         s_video_call_params.ring_off = true;
 
-        if(NULL == s_video_call_params.ring_off_timer_id) {
+        if(NULL == s_video_call_params.ring_off_timer_id) 
+               {
             s_video_call_params.ring_off_timer_id = Hal_Timer_Start(VOIP_RING_OFF_TIMER_LEN, mmi_vc_ring_off_timeout_cb, NULL, 0);
         }
-        // stop callreq timer
-        if(NULL != s_video_call_params.callreq_timer_id) {
-            Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-            s_video_call_params.callreq_timer_id = NULL;
-        }
     }
 
     switch(s_video_call_params.state) 
@@ -1096,9 +935,9 @@ void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
 
 static void mmi_vc_ui_dialing(lv_obj_t * content)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
     if(ext == NULL) {
         return;
     }
@@ -1155,9 +994,9 @@ static void mmi_vc_ui_dialing(lv_obj_t * content)
 
 static void mmi_vc_ui_incoming(lv_obj_t * content)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
 
     LV_ASSERT_MEM(ext);
     if(ext == NULL) {
@@ -1171,12 +1010,13 @@ static void mmi_vc_ui_incoming(lv_obj_t * content)
     lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
     lv_label_set_text_id(label, WATCH_TEXT_ID_RINGING);
     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, 10);
+       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
     lv_obj_set_click(img, false);
 
     // name
@@ -1208,15 +1048,67 @@ static void mmi_vc_ui_incoming(lv_obj_t * content)
     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_incoming_hook_action);
+    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);
+       }
+       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       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][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
+    lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
     if(ext == NULL) 
        {
         return;
@@ -1229,7 +1121,7 @@ static void mmi_vc_ui_connected(lv_obj_t * content)
        
     if(s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VOICE) 
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
         ext->connect_start_time = time_to_seconds(&rtc_curr);
 
@@ -1286,7 +1178,7 @@ static void mmi_vc_ui_connected(lv_obj_t * content)
        {
         lv_obj_t * canvas;
 
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: format=%d\n", __FUNCTION__, __LINE__, ext->voiph263fmt);
+               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)) 
@@ -1393,13 +1285,13 @@ static void mmi_vc_ui_connected(lv_obj_t * content)
             ext->ring_value_button = btn;
 
             // btn switch video
-            //btn = lv_imgbtn_create(canvas, NULL);
+            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;   
+            ext->view_switch_button = btn;     
 
             // btn ring off
             btn = lv_imgbtn_create(canvas, NULL);
@@ -1412,21 +1304,21 @@ static void mmi_vc_ui_connected(lv_obj_t * content)
 
             lv_obj_set_hidden(ext->connect_time, ext->canvas_button_hidden_flag);
             lv_obj_set_hidden(ext->ring_value_button, ext->canvas_button_hidden_flag);
-            lv_obj_set_hidden(ext->view_switch_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(voip_phone_get_obj()) {
-            lv_watch_obj_set_down_slide_cb(voip_phone_get_obj(), voip_phone_down_slide_callback);
+        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, MMI_VIDEO_CALL_UI_E video_call_ui)
+static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj)
 {
     printf("%s %d\n", __FUNCTION__, __LINE__);
 
-    if(MMI_VC_UI_CONNECTED == video_call_ui) 
+    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();
@@ -1435,38 +1327,40 @@ static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj, MMI_VIDEO_CALL_UI_E
     /* cleanup phone first */
     voip_phone_cleanup();
 
+    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;
-        activity_ext.prepare_destory = voip_phone_prepare_destory;
-        activity_obj                 = lv_watch_creat_activity_obj(&activity_ext);
-        LV_ASSERT_MEM(activity_obj);
-        if(activity_obj == NULL) {
-            return(NULL);
+        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);
-    LV_ASSERT_MEM(obj);
-    if(obj == NULL) {
+    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_voip_phone_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_voip_phone_obj_ext_t));
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
+    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);
     }
 
     ext->phone_status_label       = NULL;
     ext->phone_animation_obj      = NULL;
-    ext->phone_ui_t               = video_call_ui;
+    ext->phone_ui_t               = s_vc_call_ui;
     ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
 #if ENABLE_VIDEO_SCALE == 0
     ext->voiph263fmt = VOIP_H263_FMT_QCIF;
@@ -1487,41 +1381,46 @@ static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj, MMI_VIDEO_CALL_UI_E
     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_obj_get_height(obj) - 20);
     //lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return(NULL);
-    }
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-    /* must click false */
+    //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(cont);
     lv_obj_set_click(content, false);
     lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
 
-    if(ext->phone_ui_t == MMI_VC_UI_DIALING)
-       {
-        mmi_vc_ui_dialing(content);
-        voip_dialing_animation(ext->phone_status_label);
-    } 
-       else if(ext->phone_ui_t == MMI_VC_UI_INCOMING) 
+       switch(ext->phone_ui_t)
        {
-        mmi_vc_ui_incoming(content);
-        voip_ring_animation(ext->phone_status_label);
-    } 
-       else if(ext->phone_ui_t == PHONE_UI_CONNECTED) 
-       {
-        mmi_vc_ui_connected(content);
-        voip_connected_animation(ext->phone_status_label);
-    }
+               case MMI_VC_UI_INCOMING:
+                       mmi_vc_ui_incoming(content);
+                       voip_ring_animation(ext->phone_status_label);
+                       break;
+                       
+               case MMI_VC_UI_DIALING:
+                       mmi_vc_ui_dialing(content);
+                       voip_dialing_animation(ext->phone_status_label);
+                       break;
+                       
+               case MMI_VC_UI_CONNECTING:
+                       mmi_vc_ui_connecting(content);
+                       voip_connecting_animation(ext->phone_status_label);
+                       break;
+                       
+               case MMI_VC_UI_CONNECTED:
+               mmi_vc_ui_connected(content);
+               voip_connected_animation(ext->phone_status_label);
+                       break;
+
+               default:
+                       break;
+       }
 
     return obj;
 }
 
 void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, type);
-
        if(true == mmi_active_screen_is_prohibit_interrupted() || true == is_rat_gsm())
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
                
         mmi_video_call_reject_req(TRUE);
         return;
@@ -1529,13 +1428,15 @@ void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
 
     if(AUDIO_CTRL_PRIORITY_2 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, voip_audio_ctrl_callback))
     {
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
+               
                Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
                s_video_call_params.call_type = type;
                s_video_call_params.is_mt = true;
                s_video_call_params.state = MMI_VIDEO_CALL_STATE_INCOMING;
                strncpy(s_video_call_params.number, number, NV_WATCH_VC_CONTACT_NUMBER_LEN - 1);
                
-        watch_set_lcd_status(true);
+        //watch_set_lcd_status(true);
 
                HAL_SPEAKER_GAIN volume = query_current_volume();
                
@@ -1546,12 +1447,16 @@ void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
         Hal_NFFS_File_Play_Repeat(AUDIO_INCOMING_CALL, volume);
 
         voip_rat_check_start();
-        mmi_vc_ui_create(NULL, MMI_VC_UI_INCOMING);
+
+               s_vc_call_ui = MMI_VC_UI_INCOMING;
+               mmi_vc_ui_create(NULL);
+
+        watch_set_lcd_status(true);
     }
     else
     { 
                // AUDIO_CTRL_PRIORITY_1
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
                
         // auto reject
         mmi_video_call_reject_req(FALSE);
@@ -1559,20 +1464,12 @@ void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
         voip_rat_check_stop();
 
         // stop ring off timer
-        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;
-        }
+        mmi_vc_ring_off_timer_stop();
 
         // stop callreq timer
-        if(NULL != s_video_call_params.callreq_timer_id) 
-               {
-            Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-            s_video_call_params.callreq_timer_id = NULL;
-        }
+        mmi_vc_dialing_timer_stop();
 
-        Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+        Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
         voip_set_volume_when_slider_act();
         voip_phone_cleanup();
         lv_watch_png_cache_all_free();
@@ -1580,65 +1477,92 @@ void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
     }
 }
 
+static void mmi_vc_call_connecting_timeout_cb(void * para)
+{
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    mmi_vc_connecting_timer_stop();
+    mmi_video_call_hangup_req(TRUE);
+       //mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
+}
 
-void mmi_vc_call_action_connect(void)
+void mmi_vc_call_action_connecting(void)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       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_dialing_timer_stop();
+    mmi_vc_connecting_timer_stop();
+
+       // stop playing tone
+       Hal_Tone_Play_End();
+
+       //Hal_Set_Voice_Call_Status(VOICE_CALL_START);
+
+       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 callreq timer
-    if(NULL != s_video_call_params.callreq_timer_id) 
-       {
-        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-        s_video_call_params.callreq_timer_id = NULL;
-    }
+    // stop timer
+    mmi_vc_dialing_timer_stop();
+       mmi_vc_connecting_timer_stop();
 
     // stop playing tone
     Hal_Tone_Play_End();
 
     Hal_Set_Voice_Call_Status(VOICE_CALL_START);
 
-    // create connected UI
-    mmi_vc_ui_create(NULL, MMI_VC_UI_CONNECTED);
+       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][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    s_video_call_params.callreq_timer_id = NULL;
+    mmi_vc_dialing_timer_stop();
     mmi_video_call_hangup_req(TRUE);
 }
 
 void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, type);
-
     // check call state
     if(MMI_VIDEO_CALL_STATE_NONE != s_video_call_params.state)
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
         return;
     }
 
-    // stop ring off timer
-    if(NULL != call_params.ring_off_timer_id) 
-       {
-        Hal_Timer_Stop(call_params.ring_off_timer_id);
-        call_params.ring_off_timer_id = NULL;
-    }
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, type);
 
-    // stop callreq timer
-    if(NULL != s_video_call_params.callreq_timer_id) 
-       {
-        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-        s_video_call_params.callreq_timer_id = NULL;
-    }
+    // stop timer
+    mmi_vc_ring_off_timer_stop();
+    mmi_vc_dialing_timer_stop();
 
     // set call parameters
     Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
@@ -1648,22 +1572,25 @@ void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type)
     strcpy(s_video_call_params.number, number);
        
     int8_t ret = mmi_video_call_dial_req(type, s_video_call_params.number);
-    if(NULL == s_video_call_params.callreq_timer_id) 
+    if(NULL == s_video_call_params.dialing_timer_id) 
        {
-               UINT32 timeout = (ret >= 0) ? VOIP_CALLREQ_TIME_OUT : 1*1000;
+               UINT32 timeout = (ret >= 0) ? MMI_VC_DIALING_TIMEOUT : 1*1000;
                
-        s_video_call_params.callreq_timer_id = Hal_Timer_Start(timeout, mmi_vc_call_dialing_timeout_cb, NULL, 0);
+        s_video_call_params.dialing_timer_id = Hal_Timer_Start(timeout, mmi_vc_call_dialing_timeout_cb, NULL, 0);
     }
-    // create dialing UI
+
     voip_rat_check_start();
-    mmi_vc_ui_create(NULL, MMI_VC_UI_DIALING);
+
+       s_vc_call_ui = MMI_VC_UI_DIALING;
+       mmi_vc_ui_create(NULL);
+
     Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, voip_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][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
     lv_watch_png_cache_all_free();
 
@@ -1674,15 +1601,17 @@ static void mmi_vc_main_prepare_destory(lv_obj_t * activity_obj)
        }
 }
 
-void mmi_video_call_fail_timeout_cb(void *para)
+void mmi_vc_call_fail_timeout_cb(void *para)
 {
        mmi_vc_main_prepare_destory(NULL);
 }
 
-static void mmi_video_call_fail(lv_obj_t * obj)
+static void mmi_vc_call_action_no_permission(void)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       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));
@@ -1691,13 +1620,13 @@ static void mmi_video_call_fail(lv_obj_t * obj)
        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_watch_font20);
+       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_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
        lv_obj_align(label, cont, LV_ALIGN_CENTER, 0, 0);
 
-       TIMER_ID timer_id = Hal_Timer_Start(2*1000, mmi_video_call_fail_timeout_cb, NULL, FALSE);
+       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)
@@ -1707,17 +1636,15 @@ static void mmi_vc_voice_btn_action(lv_obj_t * btn, lv_event_t e)
         return;
     }
 
-    if(true == mmi_video_call_check_mo_permission())
+    if(true == mmi_vc_check_mo_permission())
        {
-       #ifdef __VIDEO_CALL_TEST__
-        mmi_vc_call_action_dialing(MMI_VC_ROOM_ID, MODEM_VIDEO_CALL_TYPE_VOICE);
-       #else
-               mmi_vc_call_action_dialing(s_vc_contact.number[0], MODEM_VIDEO_CALL_TYPE_VOICE);
-       #endif
+               uint8_t index = lv_watch_get_free_num(btn);
+
+               mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VOICE);
     } 
        else 
        {
-        mmi_video_call_fail(lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK));
+        mmi_vc_call_action_no_permission();
     }
 }
 
@@ -1728,20 +1655,171 @@ static void mmi_vc_video_btn_action(lv_obj_t * btn, lv_event_t e)
         return;
     }
 
-    if(true == mmi_video_call_check_mo_permission()) 
+    if(true == mmi_vc_check_mo_permission()) 
        {
-       #ifdef __VIDEO_CALL_TEST__
-        mmi_vc_call_action_dialing(MMI_VC_ROOM_ID, MODEM_VIDEO_CALL_TYPE_VIDEO);
-       #else
-               mmi_vc_call_action_dialing(s_vc_contact.number[0], MODEM_VIDEO_CALL_TYPE_VIDEO);
-       #endif
+               uint8_t index = lv_watch_get_free_num(btn);
+
+               mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VIDEO);
     } 
        else 
        {
-        mmi_video_call_fail(lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK));
+        mmi_vc_call_action_no_permission();
     }
 }
 
+static void mmi_vc_dial_btn_screen(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__);
+
+    lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
+       uint8_t index = lv_watch_get_free_num(btn);
+       
+       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);
+       lv_obj_align(voicebtn, cont, LV_ALIGN_IN_TOP_MID, 0, 10);
+       lv_obj_set_event_cb(voicebtn, mmi_vc_voice_btn_action);
+       lv_watch_set_free_num(voicebtn, index);
+       
+       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);
+       lv_obj_align(videobtn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
+       lv_obj_set_event_cb(videobtn, mmi_vc_video_btn_action);
+       lv_watch_set_free_num(videobtn, index);
+}
+
+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, 5);
+       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) - 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, t_str);
+               lv_page_glue_obj(btn, true);
+               //lv_obj_add_protect(btn, LV_PROTECT_PRESS_LOST);
+               lv_obj_set_event_cb(btn, mmi_vc_dial_btn_screen);
+               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, 6);
+               lv_obj_set_style_local_pad_bottom(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 6);
+               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);
+
+               //lv_obj_set_size(btn, lv_obj_get_width(list), 80); //56);
+
+               //label = lv_obj_get_child(btn, NULL);
+               //label = lv_list_get_btn_label(btn);
+               //lv_label_set_long_mode(label, LV_LABEL_LONG_EXPAND);
+               //lv_label_set_text(label, t_str);
+               //lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+               //lv_obj_align(label, btn, LV_ALIGN_IN_LEFT_MID, 0, 0);
+       #else
+       
+               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_dial_btn_screen);
+               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);
+       #endif
+               
+               lv_watch_set_free_num(btn, i);
+       }
+
+       return obj;
+}
+
 static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
 {
     if(activity_obj == NULL) 
@@ -1760,59 +1838,33 @@ static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
     if(NULL == obj)
         return NULL;
 
-    if(false == mmi_video_call_check_mo_permission()) 
+    if(false == mmi_vc_check_mo_permission()) 
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               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_watch_font20);
+               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_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
                lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, 0);
-               
-        //lv_watch_set_free_num(activity_obj, 0);
     } 
-       else
+       else if(0 == s_vc_contact.total)
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
-
-       #if 0
-               lv_obj_t * obj = lv_watch_list_create(NULL);
-               if(obj == NULL) 
-                       return NULL;
-       
-               lv_watch_list_set_name_txt(obj, WATCH_TEXT_ID_SETTINGS);
-       
-               for(int8_t i = 0; i < (sizeof(settingList) / sizeof(settingList[0])); i++) 
-               {
-                       lv_watch_list_add(obj, (void *)settingList[i].img_src, settingList[i].txtId, settingList[i].event_cb);
-               }
-
-       #else
-               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 * 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);
-               lv_obj_align(voicebtn, cont, LV_ALIGN_IN_TOP_MID, 0, 10);
-               lv_obj_set_event_cb(voicebtn, mmi_vc_voice_btn_action);
+               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, 0);
+       }
+       else
+       {
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
-               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);
-               lv_obj_align(videobtn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
-               lv_obj_set_event_cb(videobtn, mmi_vc_video_btn_action);
-
-               //lv_watch_set_free_num(activity_obj, 1);
-       #endif
+               mmi_vc_contact_list_create(obj);
     }
 
     return(obj);
@@ -1820,6 +1872,17 @@ static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
 
 void 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();
@@ -1849,6 +1912,7 @@ bool watch_voip_suspend_check(void)
     if((s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VIDEO)
                || (MMI_VIDEO_CALL_STATE_INCOMING == s_video_call_params.state)
                || (MMI_VIDEO_CALL_STATE_DIALING == s_video_call_params.state)
+               || (MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state)
                ) 
     {
         return false;
@@ -1861,7 +1925,7 @@ bool watch_voip_suspend_check(void)
 bool voip_connect_check_req(void)
 {
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-    if(voip_phone_get_activity_obj()) 
+    if(mmi_vc_call_get_activity_obj()) 
        {
         return true;
     }
@@ -1873,9 +1937,9 @@ bool voip_connect_check_req(void)
 void voip_activity_destroy_req(void)
 {
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    lv_obj_t * activity_obj = voip_phone_get_activity_obj();
+    lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
     if(NULL == activity_obj) 
        {
         return;
@@ -1905,20 +1969,12 @@ void voip_activity_destroy_req(void)
     voip_signal_check_stop();
     voip_rat_check_stop();
 
-    // stop ring off timer
-    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;
-    }
+    // stop timer
+    mmi_vc_ring_off_timer_stop();
+    mmi_vc_dialing_timer_stop();
+    mmi_vc_connecting_timer_stop();
 
-    // stop callreq timer
-    if(NULL != s_video_call_params.callreq_timer_id) {
-        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
-        s_video_call_params.callreq_timer_id = NULL;
-    }
-
-    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    s_video_call_params.state = MMI_VIDEO_CALL_STATE_NONE;
+    Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
     voip_set_volume_when_slider_act();
     voip_phone_cleanup();
     lv_watch_png_cache_all_free();
index cf5c423..18f4be2 100644 (file)
@@ -71,7 +71,8 @@ uint8_t voip_get_call_volume(void);
 #define VIDEO_RAT_CHECK_PERIOD  200
 #define VIDEO_CALL_FPS_CHECK_LIMIT 5
 
-#define VOIP_CALLREQ_TIME_OUT    60*1000
+#define MMI_VC_DIALING_TIMEOUT    (60*1000)
+#define MMI_VC_CONNECTING_TIMEOUT    (30*1000)
 
 #if USE_LV_WATCH_UI_240_320
 #define MMI_VC_RING_OFF_BTN_Y_OFFSET (-30)
@@ -98,13 +99,6 @@ uint8_t voip_get_call_volume(void);
  *      TYPEDEFS
  **********************/
 
-enum voipregisterstate
-{
-    VOIP_REGISTER_OK = 0,
-    VOIP_UNREGISTERING,
-    VOIP_REGISTER_FAIL
-};
-
 /** H.263 picture size format */
 enum voip_h263_fmt {
     VOIP_H263_FMT_SQCIF = 1, /**<  128 x 96  */
@@ -127,37 +121,21 @@ enum enum_canvas_button_hidden_flag
     HIDDEN
 };
 
-#define VOIP_PHONEBOOK_CONTACTS_MAX_NAME_LEN    NV_CONTACTS_MAX_NAME_LEN
-#define VOIP_PHONEBOOK_CONTACTS_MAX_NUMBER_LEN  NV_CONTACTS_MAX_NUMBER_LEN
-
-typedef struct {
-    char contact_name[VOIP_PHONEBOOK_CONTACTS_MAX_NAME_LEN];
-    char contact_number[VOIP_PHONEBOOK_CONTACTS_MAX_NUMBER_LEN];
-    const void * img_src;
-    const void * img_src_small;
-    uint8_t contact_type; /*0:administrator, 1:standby administrator, 2: others*/
-} voip_phonebook_contact_t;
-
-typedef nv_watch_phonebook_info_t voip_phonebook_t;
 
 typedef struct {
     lv_watch_obj_ext_t lv_watch_obj;
     /*New data for this type */
-    uint8_t body_padding_inner;
-    uint8_t append_width;
-    uint8_t cur_img_id;
-    voip_phonebook_t * cur_contact;
-    lv_ll_t contact_list;
-    lv_obj_t * label_phone_contact;
-    lv_obj_t * page_scrl;
-    lv_coord_t move_width;
-} lv_voip_phonebook_obj_ext_t;
+    lv_obj_t * title;
+    lv_obj_t * list;
+} lv_vc_contact_list_obj_ext_t;
 
 typedef enum 
 {
     MMI_VC_UI_INCOMING = 0,
     MMI_VC_UI_DIALING,
+       MMI_VC_UI_CONNECTING,
     MMI_VC_UI_CONNECTED,
+       MMI_VC_UI_INVALID,
 } MMI_VIDEO_CALL_UI_E;
 
 typedef enum
@@ -166,6 +144,7 @@ typedef enum
        MMI_VIDEO_CALL_STATE_CALLING,
        MMI_VIDEO_CALL_STATE_INCOMING,
        MMI_VIDEO_CALL_STATE_DIALING,
+       MMI_VIDEO_CALL_STATE_CONNECTING,
        MMI_VIDEO_CALL_STATE_INVALID,
 }MMI_VIDEO_CALL_STATE_E;
 
@@ -184,8 +163,9 @@ typedef struct {
     //const void * img_src;
     //const void * img_src_small;
     MODEM_VIDEO_CALL_TYPE call_type;
-    TIMER_ID             callreq_timer_id;         /* callreq timer */
-    uint8_t              speaker_volume;           /* speaker volume during call procedure */
+    TIMER_ID dialing_timer_id;
+       TIMER_ID connecting_timer_id;
+    uint8_t speaker_volume;           /* speaker volume during call procedure */
 } MMI_VIDEO_CALL_PARAMS_T;
 
 typedef struct {
@@ -204,12 +184,13 @@ typedef struct {
     enum enum_canvas_button_hidden_flag canvas_button_hidden_flag;
     lv_obj_t * signal_weak_label;
     lv_obj_t * canvas;
-} lv_voip_phone_obj_ext_t;
+}lv_vc_call_obj_ext_t;
+
 
 /**********************
  * GLOBAL PROTOTYPES
  **********************/
-lv_voip_phone_obj_ext_t * voip_phone_get_ext(void);
+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);
@@ -222,10 +203,10 @@ void mmi_vc_contact_set(nv_watch_vc_contact_t * contact_list);
 
 void * mmi_video_call_phone_get_video_buffer(void);
 void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier);
-
-void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type);
-void mmi_vc_call_action_connect(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);
+void mmi_vc_call_action_connecting(void);
+void mmi_vc_call_action_connected(void);
 
 
 int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri);
index 81364b0..4ac615a 100644 (file)
@@ -932,8 +932,15 @@ bool mmi_protocol_fzd_parse_SERVER_SET_POWEROFF(unsigned char * next_buff, unsig
        
        result = true;
        mmi_protocol_fzd_send_without_data(action);
+#if 1
        uos_sleep(10);
        mmi_watch_power_off();
+#else // debug vc
+       char t_number[NV_WATCH_VC_CONTACT_NUMBER_LEN] = "1234567890";
+       uint8_t t_calltype = 0;
+
+       mmi_vc_call_action_incoming(t_number, t_calltype);
+#endif
 
        return result;
 }
@@ -2013,7 +2020,7 @@ bool mmi_protocol_fzd_parse_WATCH_GET_VC_CONFIG(unsigned char * next_buff, unsig
 
        t_tokens = km_strtok_r(NULL, ",", &next_buff);
        t_appkey = km_strtok_r(NULL, ",", &next_buff);
-       t_key = km_strtok_r(NULL, ",", &next_buff);
+       t_key = next_buff;
        
        mmi_video_call_jrtc_config_init_01(t_appkey, t_key, t_tokens);
 
@@ -2060,9 +2067,13 @@ bool mmi_protocol_fzd_parse_WATCH_GET_VC_CONTACT(unsigned char * next_buff, unsi
                {
                        t_len_1 = FZD_MIN(strlen(temp_ptr), (NV_WATCH_VC_CONTACT_NAME_LEN - 1) * 4);
                        mmi_unicode_hex_str_to_utf8_str(temp_ptr, t_len_1, t_vc_contact.name[i], &t_len_2);
+
+                       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d\n", __FUNCTION__, __LINE__, t_len_1, t_len_2);
+                       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, temp_ptr);
                }
                else
                {
+                       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                        break;
                }
 
@@ -2113,8 +2124,7 @@ bool mmi_protocol_fzd_parse_WATCH_VC_CALL_REQUEST(unsigned char * next_buff, uns
        if(0 == t_value)
        {
                // the other party is not online
-
-               
+               mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);         
        }
        else
        {
@@ -2124,7 +2134,7 @@ bool mmi_protocol_fzd_parse_WATCH_VC_CALL_REQUEST(unsigned char * next_buff, uns
        return result;
 }
 
-// 1£º¶Ô·½½ÓÊÜ£»0£º¶Ô·½¾Ü¾ø
+// state: 1-other accept; 0-other reject
 bool mmi_protocol_fzd_parse_SERVER_VC_CALL_RESPONSE(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
@@ -2145,13 +2155,11 @@ bool mmi_protocol_fzd_parse_SERVER_VC_CALL_RESPONSE(unsigned char * next_buff, u
        if(0 == t_value)
        {
                // the other party is reject
-
-               
+               mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
        }
        else
        {
-               // connect
-               mmi_vc_call_action_connect();
+               // wait, do nothing
        }
        
        return result;
@@ -2184,7 +2192,7 @@ bool mmi_protocol_fzd_parse_SERVER_VC_CALL_REQUEST(unsigned char * next_buff, un
        return result;
 }
 
-// state: 1£ºaccept; 0£ºreject
+// state: 1-watch accept; 0-watch reject
 bool mmi_protocol_fzd_action_VC_CALL_RESPONSE(char * number, uint8_t state)
 {
        bool result = false;
index 751708b..a7ce365 100644 (file)
@@ -111,8 +111,14 @@ void mmi_watch_search_screen_destroy(void)
        
        lv_watch_png_cache_all_free();
        //lv_obj_del_async(lv_watch_get_activity_obj(ACT_ID_WATCH_SEARCHING));
+    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_WATCH_SEARCHING);
+    if(activity_obj)
+       {
+        lv_obj_del(activity_obj);
+    }
 
        watch_set_suspend_enable(true, ACT_ID_WATCH_SEARCHING, 0);
+    //watch_wakeup_time_reset();
 }
 
 void mmi_watch_search_screen_event_cb(lv_obj_t * obj, lv_event_t e)
index d7ecc80..ca18491 100644 (file)
@@ -135,7 +135,8 @@ void watch_modem_power_off_req(void)
 void watch_modem_get_imei_req(char * imei)
 {
     //static char tmp_imei[16] = "867387060319199";
-    //memcpy(imei, tmp_imei, 16);
+       //static char tmp_imei[16] = "860132060004801"; // juphoon video call
+       //memcpy(imei, tmp_imei, 16);
     MMI_Modem_Query_Imei_Req(modem_sim_id, imei);
 }