diff options
Diffstat (limited to 'lib/dialer/ph-dialer-utils.c')
-rwxr-xr-x | lib/dialer/ph-dialer-utils.c | 305 |
1 files changed, 271 insertions, 34 deletions
diff --git a/lib/dialer/ph-dialer-utils.c b/lib/dialer/ph-dialer-utils.c index 133d51e..9450234 100755 --- a/lib/dialer/ph-dialer-utils.c +++ b/lib/dialer/ph-dialer-utils.c @@ -20,59 +20,74 @@ #include <vconf-keys.h> #include <bundle.h> #include <aul.h> -#include <TapiCommon.h> +#include <tapi_common.h> #include <ITapiSim.h> -#include <appsvc.h> +#include <TapiUtility.h> +#include <feedback.h> #include "phone.h" #include "phone-dialer.h" +#include "phone-speed.h" #include "ph-dialer-utils.h" #include "ph-dialer-view.h" +#include "ph-dialer-search.h" #define PH_DIALER_KEY_MAX_LEN 256 +ph_speeddial_info* ph_dialer_util_get_speeddial_by_number(void *data, int number) +{ + ph_speeddial_info * find_sd = NULL; + ph_dialer_data *dial_d = data; + Eina_List *l; + + p_retvm_if(NULL == dial_d->speeddial_list, NULL, "There is no speeddial list"); + + EINA_LIST_FOREACH(dial_d->speeddial_list, l, find_sd) { + if (!find_sd) continue; + if (number == find_sd->dial_number && find_sd->ph_number) + break; + } + return find_sd; +} + void ph_dialer_util_entry_clear(ph_dialer_data *dial_d) { ph_dialer_util_del_all_number(dial_d); - ph_dialer_entry_set_number(dial_d, "", 0, TRUE); + ph_dialer_entry_set_number(dial_d, "", 0); if (dial_d->has_focus) { elm_object_focus_set(dial_d->entry, EINA_FALSE); dial_d->has_focus = false; } + ph_dialer_search_request(dial_d, FALSE); } void ph_dialer_util_launch_call(ph_dialer_data *dial_d) { char num[PH_TEXT_MAX_LEN] = {0}; - char buf[PH_TEXT_MAX_LEN] = {0}; int text_len; - bundle* b; + bundle* kb; p_retm_if(dial_d == NULL, "Invalid argument: ph_dialer_data *is NULL"); text_len = ph_dialer_util_get_pure_numstr_with_plus(dial_d, num); if (0 < text_len) { - b = bundle_create(); - p_retm_if(NULL == b, "bundle_create() Failed"); - if (PH_DAILER_EMERGENCY == dial_d->run_mode) { - bundle_add(b, "launch-type", "EMERGENCY"); - bundle_add(b, "number", num); - aul_launch_app(VOICECALL_PKG, b); + kb = bundle_create(); + p_retm_if(NULL == kb, "bundle_create() Failed"); + bundle_add(kb, "launch-type", "EMERGENCY"); + bundle_add(kb, "number", num); + aul_launch_app(VOICECALL_PKG, kb); + bundle_free(kb); } - else { - appsvc_set_operation(b, APPSVC_OPERATION_CALL); - snprintf(buf, sizeof(buf), "tel:%s", (char*)num); - appsvc_set_uri(b, buf); - appsvc_run_service(b, 0, NULL, NULL); - } - bundle_free(b); + else + phone_launch_voice_call(-1, num); } ph_dialer_util_entry_clear(dial_d); } + int ph_dialer_util_get_cursor_pos(ph_dialer_data *dial_d) { InputNumber *node; @@ -200,33 +215,45 @@ static int dialer_util_is_num_length_over(int len) int ph_dialer_util_append_node_from_numstr(ph_dialer_data *dial_d, char *string) { int i = 0; + int j = 0; int len = 0; InputNumber *node; InputNumber *tmp_node = NULL; + char* tmp_string = NULL; ph_dialer_util_del_all_number(dial_d); + p_retvm_if(NULL == string, 0, "string data is null"); + node = &dial_d->number_head; + len = strlen(string); if (dialer_util_is_num_length_over(len-1) == TRUE) { - if (dial_d->popup) - evas_object_del(dial_d->popup); - dial_d->popup = phone_create_popup(dial_d->win, T_(PH_GET_TEXT_BASIC, PHTEXT_EXCEED_NUM_MAX_LENGTH), 2.0); - evas_object_smart_callback_add(dial_d->popup, "timeout", ph_dialer_util_popup_response_cb, dial_d); + phone_show_popup(dial_d->navi, T_(PH_GET_TEXT_BASIC, PHTEXT_EXCEED_NUM_MAX_LENGTH), 2.0); len = PH_DIALER_KEY_MAX_LEN; string[len] = '\0'; } - for (; i<len; i++) { + tmp_string = calloc(1, len); + for(i = 0; i<len; i++) { + if(string[i] >= '0' && string[i] <= '9') { + tmp_string[j++] = string[i]; + } + } + len = strlen(tmp_string); + tmp_string[len] = '\0'; + + for (i = 0; i<len; i++) { tmp_node = calloc(1, sizeof(InputNumber)); tmp_node->next = NULL; tmp_node->prev = node; - tmp_node->num = string[i]; + tmp_node->num = tmp_string[i]; node->next = tmp_node; node = node->next; } dial_d->number_cursor = tmp_node; + free(tmp_string); return len; } @@ -241,10 +268,7 @@ int ph_dialer_util_append_node_from_numstr_with_strip(ph_dialer_data *dial_d, ch node = &dial_d->number_head; len = strlen(string); if (dialer_util_is_num_length_over(len-1) == TRUE) { - if (dial_d->popup) - evas_object_del(dial_d->popup); - dial_d->popup = phone_create_popup(dial_d->win, T_(PH_GET_TEXT_BASIC, PHTEXT_EXCEED_NUM_MAX_LENGTH), 2.0); - evas_object_smart_callback_add(dial_d->popup, "timeout", ph_dialer_util_popup_response_cb, dial_d); + phone_show_popup(dial_d->navi, T_(PH_GET_TEXT_BASIC, PHTEXT_EXCEED_NUM_MAX_LENGTH), 2.0); len = PH_DIALER_KEY_MAX_LEN; string[len] = '\0'; } @@ -266,6 +290,90 @@ int ph_dialer_util_append_node_from_numstr_with_strip(ph_dialer_data *dial_d, ch return cnt; } +char ph_dialer_util_get_value_word(char in) +{ + switch (in) { + case '2': + return 'a'; + case '3': + return 'd'; + case '4': + return 'g'; + case '5': + return 'j'; + case '6': + return 'm'; + case '7': + return 'p'; + case '8': + return 't'; + case '9': + return 'w'; + default: + return ' '; + } +} + +char ph_dialer_util_get_next_value_abcmode(char in) +{ + switch (in) { + case 'a': + return 'b'; + case 'b': + return 'c'; + case 'c': + return 'a'; + case 'd': + return 'e'; + case 'e': + return 'f'; + case 'f': + return 'd'; + case 'g': + return 'h'; + case 'h': + return 'i'; + case 'i': + return 'g'; + case 'j': + return 'k'; + case 'k': + return 'l'; + case 'l': + return 'j'; + case 'm': + return 'n'; + case 'n': + return 'o'; + case 'o': + return 'm'; + case 'p': + return 'q'; + case 'q': + return 'r'; + case 'r': + return 's'; + case 's': + return 'p'; + case 't': + return 'u'; + case 'u': + return 'v'; + case 'v': + return 't'; + case 'w': + return 'x'; + case 'x': + return 'y'; + case 'y': + return 'z'; + case 'z': + return 'w'; + default: + return ' '; + } +} + static InputNumber* dialer_util_insert_number_after(InputNumber *node, char num) { InputNumber *tmp; @@ -298,10 +406,7 @@ void ph_dialer_util_insert_number_at_cursor(ph_dialer_data *dial_d, char num) /* check length */ len = ph_dialer_util_get_numstr_from_node(dial_d, buf); if (dialer_util_is_num_length_over(len) == TRUE) { - if (dial_d->popup) - evas_object_del(dial_d->popup); - dial_d->popup = phone_create_popup(dial_d->win, T_(PH_GET_TEXT_BASIC, PHTEXT_EXCEED_NUM_MAX_LENGTH), 2.0); - evas_object_smart_callback_add(dial_d->popup, "timeout", ph_dialer_util_popup_response_cb, dial_d); + phone_show_popup(dial_d->navi, T_(PH_GET_TEXT_BASIC, PHTEXT_EXCEED_NUM_MAX_LENGTH), 2.0); return; } @@ -460,13 +565,98 @@ void ph_dialer_util_add_dashes(ph_dialer_data *dial_d, DashMode kMode) } } -void ph_dialer_util_popup_response_cb(void *data, Evas_Object *obj, void *event_info) +void ph_dialer_util_highlight_substring(char *dest, int dest_len, char *string, + char *substr) +{ + char middle[PH_TEXT_MAX_LEN] = {0}; + char first[PH_TEXT_MAX_LEN] = {0}; + const char *highlight_color = "#00ffff"; + const char *default_color = "#737373"; + + p_retm_if(NULL == string, "string is null"); + + if (substr && *substr) { + int len = strlen(substr); + snprintf(first, sizeof(first), "%s", string); + char *last = strcasestr(first, substr); + if (last) { + int ret; + snprintf(middle, strlen(substr)+1, "%s", last); + *(last) = '\0'; + ret = snprintf(dest, dest_len-7, "<left><color=%s>%s</><color=%s>%s</><color=%s>%s</></>", + default_color, first, highlight_color, middle, default_color, last+len); + snprintf(dest+ret, 7, "</></>"); + } + else + snprintf(dest, dest_len, "<left><color=%s>%s</></>", default_color, string); + } + else + snprintf(dest, dest_len, "<left><color=%s>%s</></>", default_color, string); +} + +void ph_dialer_util_highlight_substring_with_pos(char *dest, int dest_len, char *string, + int position, int length) +{ + char middle[PH_TEXT_MAX_LEN] = {0}; + char first[PH_TEXT_MAX_LEN] = {0}; + const char *highlight_color = "#00ffff"; + const char *default_color = "#737373"; + + p_retm_if(NULL == string, "string is null"); + + if (0 < length) { + int ret; + snprintf(first, sizeof(first), "%s", string); + snprintf(middle, length+1, "%s", string + position); + first[position] = '\0'; + ret = snprintf(dest, dest_len-7, "<left><color=%s>%s</><color=%s>%s</><color=%s>%s</></>", + default_color, first, highlight_color, middle, default_color, string + position + length); + snprintf(dest+ret, 7, "</></>"); + } + else + snprintf(dest, dest_len, "<left>%s</>", string); +} + +int ph_dialer_util_show_matched_one_number(ph_dialer_data *dial_d, char *name, char *number) +{ + PH_FN_CALL; + p_retvm_if(dial_d==NULL, 0, "dialer data is null"); + + if (dial_d->slide) { + edje_object_signal_emit(_EDJ(dial_d->layout), "elm,state,slide,stop", "elm"); + dial_d->slide = false; + } + + edje_object_signal_emit(_EDJ(dial_d->layout), "viewcontrol/search_result", "viewcontrol"); + edje_object_part_text_set(_EDJ(dial_d->layout), "search_result/item/number/textblock", number); + + if (name && *name) { + edje_object_part_text_set(_EDJ(dial_d->layout), "search_result/item/name/text", name); + edje_object_signal_emit(_EDJ(dial_d->layout), "viewobject/search_result/search_number", "viewobject/search_result"); + } + else + edje_object_signal_emit(_EDJ(dial_d->layout), "viewcontrol/noname", "viewcontrol"); + + ph_dialer_update_cnt_btn(dial_d, 1); + dial_d->is_show_items = true; + return 0; +} + +void ph_dialer_util_speeddial_show_cb(void *data, Evas_Object *obj, void *event_info) { ph_dialer_data *dial_d = data; - evas_object_del(obj); + phone_create_speeddial_view(dial_d->ug, dial_d->win, dial_d->navi); + evas_object_del(dial_d->popup); dial_d->popup = NULL; } +void ph_dialer_util_show_speeddial_msg(ph_dialer_data *dial_d, const char *msg) +{ + char dest[PH_TEXT_MAX_LEN] = {0}; + snprintf(dest, sizeof(dest), "%s", msg); + phone_create_confirm_popup(&dial_d->popup, dial_d->win, msg, ph_dialer_util_speeddial_show_cb, dial_d); +} + void ph_dialer_util_setup_run_mode(ph_dialer_data *dial_d) { int ret = 0; @@ -499,3 +689,50 @@ void ph_dialer_util_setup_run_mode(ph_dialer_data *dial_d) } } +void ph_dialer_util_init_sim_value(ph_dialer_data *dial_d) +{ + /* Network MCC */ + int value = 0; + int ret; + TelSimImsiInfo_t sim_imsi_info; + TapiHandle *handle; + ret = vconf_get_int(VCONFKEY_TELEPHONY_PLMN, &value); + if (ret < 0) + dial_d->cur_mcc = -1; + else + dial_d->cur_mcc = value / 1000; + + /* SIM MCC/MNC */ + dial_d->cur_sim_mcc = -1; + handle = tel_init(NULL); + if (NULL == handle) { + ERR("tel_init() Failed"); + } + else { + ret = tel_get_sim_imsi(handle, &sim_imsi_info); + if (0 == ret) + dial_d->cur_sim_mcc = atoi(sim_imsi_info.szMcc); + else + ERR("tel_get_sim_imsi() Failed(%d)", ret); + tel_deinit(handle); + } + dial_d->cur_cc_index = -1; + + ret = vconf_get_int(VCONFKEY_TELEPHONY_SVC_ROAM, &value); + if (ret < 0) + dial_d->roaming = 0; + else + dial_d->roaming = value; +} + +void ph_dialer_util_svi_play(int vibration_key, int sound_key) +{ + int effect_status = FALSE; + vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &effect_status); + if (effect_status) + feedback_play_type(FEEDBACK_TYPE_SOUND, sound_key); + + vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &effect_status); + if (effect_status) + feedback_play_type(FEEDBACK_TYPE_VIBRATION, vibration_key); +} |