#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;
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};
/**********************
-
-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);
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__);
}
//
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)
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)
break;
case MMI_VIDEO_CALL_STATE_INCOMING:
+ mmi_video_call_reject_req(TRUE);
break;
default:
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__);
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)
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
{
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
{
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;
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)
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)
{
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);
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
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();
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);
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
{
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);
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();
}
}
-#endif
+
//interface