2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "vcui-application.h"
19 #include "vcui-view-keypad.h"
20 #include "vcui-view-common.h"
22 static int _vcui_view_keypad_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
23 static int _vcui_view_keypad_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
24 static int _vcui_view_keypad_onhide(voice_call_view_data_t *view_data);
25 static int _vcui_view_keypad_onshow(voice_call_view_data_t *view_data);
26 static int _vcui_view_keypad_ondestroy(voice_call_view_data_t *view_data);
27 static Evas_Object *__vcui_view_keypad_create_single_line_scrolled_entry(void *content);
29 static voice_call_view_data_t s_view = {
30 .type = VIEW_INCALL_KEYPAD_VIEW,
33 .onCreate = _vcui_view_keypad_oncreate,
34 .onUpdate = _vcui_view_keypad_onupdate,
35 .onHide = _vcui_view_keypad_onhide,
36 .onShow = _vcui_view_keypad_onshow,
37 .onDestroy = _vcui_view_keypad_ondestroy,
41 static void __vcui_view_keypad_on_keypad_down(void *data, Evas_Object *obj, const char *emission, const char *source)
43 CALL_UI_DEBUG("source(%s)",source);
45 char before_dest[KEYPAD_STR_DEFINE_OPEN_SIZE+KEYPAD_ENTRY_DISP_DATA_SIZE+1] = { 0, };
46 char *sub_buffer_pointer = NULL;
47 char entry_dest[KEYPAD_ENTRY_SET_DATA_SIZE+1] = { 0, };
49 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
50 vcui_view_keypad_priv_t *priv = NULL;
53 CALL_UI_DEBUG("\n data is null \n");
56 priv = (vcui_view_keypad_priv_t *)vd->priv;
58 if (strlen(source) >= KEYPAD_ENTRY_DISP_DATA_SIZE) {
59 CALL_UI_DEBUG("strlen(source) >= DATA_BUF_SIZE(%d)",KEYPAD_ENTRY_DISP_DATA_SIZE);
63 if (strcmp(source, "star") == 0) {
65 } else if (strcmp(source, "sharp") == 0) {
68 keypad_source = (char *)source;
71 _vcui_engine_interface_send_dtmf_number(keypad_source[0]);
73 if (strlen(priv->entry_disp_data) == KEYPAD_ENTRY_DISP_DATA_SIZE) {
74 sub_buffer_pointer = &priv->entry_disp_data[1];
76 snprintf(priv->entry_disp_data, sizeof(priv->entry_disp_data),
77 "%s", sub_buffer_pointer);
78 CALL_UI_DEBUG("priv->entry_disp_data after change [%s]", priv->entry_disp_data);
81 priv->entry_disp_data[priv->data_len] = keypad_source[0];
82 if(priv->data_len < (KEYPAD_ENTRY_DISP_DATA_SIZE-1)) {
86 snprintf(before_dest, sizeof(before_dest),
87 "<font_size=%d><color=#FFFFFF><shadow_color=#000000><style=outline_shadow>%s",
88 MAX_DIAL_NUMBER_FONT_SIZE, priv->entry_disp_data);
90 snprintf(entry_dest, sizeof(entry_dest),
91 "%s</style></shadow_color></color></font_size>",
94 CALL_UI_DEBUG("entry_dest [%s]", priv->entry_disp_data);
95 elm_entry_entry_set(priv->entry, entry_dest);
96 elm_entry_cursor_end_set(priv->entry);
99 static void __vcui_view_keypad_hide_btn_effect_done(void *data, Evas_Object *obj, const char *emission, const char *source)
103 _vcui_view_auto_change();
106 static void __vcui_view_keypad_hide_btn_cb(void *data, Evas_Object *obj, void *event_info)
110 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
111 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv;
113 edje_object_signal_emit(_EDJ(priv->contents), "HIDE", "KEYPADBTN");
114 edje_object_signal_callback_add(_EDJ(priv->contents), "DONE", "HIDEKEYPAD", __vcui_view_keypad_hide_btn_effect_done, data);
117 static void __vcui_view_keypad_end_btn_cb(void *data, Evas_Object *obj, void *event_info)
121 if (_vcui_doc_get_count_unhold() == 1) {
122 _vcui_engine_end_call();
123 } else if (_vcui_doc_get_count_unhold() > 1) {
124 _vcui_engine_end_active_calls();
125 } else if (_vcui_doc_get_count_hold() == 1) {
126 _vcui_engine_end_call();
127 } else if (_vcui_doc_get_count_hold() > 1) {
128 _vcui_engine_end_held_calls();
130 CALL_UI_DEBUG("call data is null");
136 voice_call_view_data_t *_vcui_view_keypad_new(vcui_app_call_data_t *ad)
139 s_view.app_data = ad;
140 s_view.priv = calloc(1, sizeof(vcui_view_keypad_priv_t));
143 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
149 static Evas_Object *__vcui_view_keypad_create_hide_button(void *data)
155 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
156 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv;
157 layout = priv->contents;
159 sw = edje_object_part_swallow_get(_EDJ(layout), "btn_hide");
161 edje_object_part_unswallow(_EDJ(layout), sw);
165 btn = elm_button_add(layout);
166 elm_object_part_content_set(layout, "btn_hide", btn);
167 elm_object_style_set(btn, "text_only/style_keypad_hide_button");
168 elm_object_text_set(btn, _("IDS_CALL_BUTTON2_HIDE_KEYPAD"));
169 evas_object_smart_callback_add(btn, "clicked", __vcui_view_keypad_hide_btn_cb, vd);
174 static Evas_Object *__vcui_view_keypad_create_end_call(void *data)
180 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
181 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv;
182 layout = priv->contents;
184 sw = edje_object_part_swallow_get(_EDJ(layout), "btn_end");
186 edje_object_part_unswallow(_EDJ(layout), sw);
190 btn = elm_button_add(layout);
191 elm_object_part_content_set(layout, "btn_end", btn);
192 elm_object_style_set(btn, "text_only/style_keypad_end_button");
193 elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL"));
194 evas_object_smart_callback_add(btn, "clicked", __vcui_view_keypad_end_btn_cb, vd);
199 static Evas_Object *__vcui_view_keypad_create_contents(void *data)
202 CALL_UI_DEBUG("ERROR");
205 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
210 eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_KEYPAD);
217 static Evas_Object *__vcui_view_keypad_create_layout_main(Evas_Object *parent)
219 if (parent == NULL) {
220 CALL_UI_DEBUG("ERROR");
225 ly = elm_layout_add(parent);
226 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
228 elm_layout_theme_set(ly, "standard", "window", "integration");
229 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
230 elm_win_resize_object_add(parent, ly);
232 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
233 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
234 evas_object_show(ly);
239 static void __vcui_view_keypad_draw_keypad_screen(Evas_Object *eo, void *data)
244 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
245 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv;
247 _vcui_show_wallpaper_image(priv->contents);
249 if (_vcui_doc_get_count_unhold() == 1) {
250 priv->now_data = _vcui_doc_get_last_status(CALL_UNHOLD);
251 if (NULL == priv->now_data) {
252 CALL_UI_DEBUG("priv->now_data is NULL \n");
255 if (strlen((char *)priv->now_data->call_display) == 0) {
256 edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_num);
258 edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_display);
260 } else if (_vcui_doc_get_count_unhold() > 1) {
261 priv->now_data = _vcui_doc_get_last_status(CALL_UNHOLD);
262 edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL"));
263 } else if (_vcui_doc_get_count_hold() == 1) {
264 priv->now_data = _vcui_doc_get_last_status(CALL_HOLD);
265 if (NULL == priv->now_data) {
266 CALL_UI_DEBUG("priv->now_data is NULL \n");
270 if (strlen((char *)priv->now_data->call_display) == 0) {
271 edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_num);
273 edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_display);
275 } else if (_vcui_doc_get_count_hold() > 1) {
276 priv->now_data = _vcui_doc_get_last_status(CALL_HOLD);
277 edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL"));
279 CALL_UI_DEBUG("call data is null");
283 valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW");
285 CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
289 if (NULL == priv->now_data) {
290 CALL_UI_DEBUG("\n priv->now_data is NULL \n");
293 _vcui_view_common_set_each_time(priv->now_data->start_time);
295 __vcui_view_keypad_create_hide_button(vd);
296 __vcui_view_keypad_create_end_call(vd);
298 edje_object_signal_emit(_EDJ(priv->contents), "SHOW", "KEYPADBTN");
300 evas_object_show(priv->contents);
304 static int _vcui_view_keypad_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
306 CALL_UI_DEBUG("keypad view create!!");
308 vcui_app_call_data_t *ad = view_data->app_data;
309 vcui_view_keypad_priv_t *priv = view_data->priv;
311 if (!view_data->layout) {
312 /* Create Main Layout */
313 view_data->layout = __vcui_view_keypad_create_layout_main(ad->win_main);
314 if (view_data->layout == NULL) {
315 CALL_UI_DEBUG("ERROR");
319 /* Create Contents */
320 priv->contents = __vcui_view_keypad_create_contents(view_data);
321 elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
323 priv->entry = __vcui_view_keypad_create_single_line_scrolled_entry(priv->contents);
324 memset(priv->entry_disp_data, 0x0, sizeof(priv->entry_disp_data));
327 edje_object_signal_callback_add(_EDJ(priv->contents),
329 __vcui_view_keypad_on_keypad_down,
332 edje_object_part_swallow(_EDJ(priv->contents), "textblock/textarea", priv->entry);
333 evas_object_name_set(priv->contents, "KEYPADVIEW");
334 CALL_UI_DEBUG("[========== KEYPADVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
337 _vcui_view_keypad_onshow(view_data);
341 static int _vcui_view_keypad_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
343 CALL_UI_DEBUG("keypad view update!!");
345 _vcui_view_keypad_onshow(view_data);
349 static int _vcui_view_keypad_onhide(voice_call_view_data_t *view_data)
351 CALL_UI_DEBUG("keypad view hide!!");
353 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)view_data->priv;
355 valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW");
357 CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
360 evas_object_hide(view_data->layout);
364 static int _vcui_view_keypad_onshow(voice_call_view_data_t *view_data)
366 CALL_UI_DEBUG("keypad view show!!");
368 vcui_view_keypad_priv_t *priv = view_data->priv;
370 __vcui_view_keypad_draw_keypad_screen(priv->contents, view_data);
372 evas_object_hide(view_data->layout);
373 evas_object_show(view_data->layout);
374 elm_object_focus_set(priv->entry, EINA_TRUE);
378 static int _vcui_view_keypad_ondestroy(voice_call_view_data_t *view_data)
380 CALL_UI_DEBUG("keypad view destroy!!");
382 vcui_app_call_data_t *ad = _vcui_get_app_data();
384 voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_KEYPAD_VIEW];
385 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv;
388 if (priv->contents) {
389 evas_object_del(priv->contents);
390 priv->contents = NULL;
397 if (vd->layout != NULL) {
398 evas_object_hide(vd->layout);
399 evas_object_del(vd->layout);
403 ad->view_st[VIEW_INCALL_KEYPAD_VIEW] = NULL;
410 static Evas_Object *__vcui_view_keypad_create_single_line_scrolled_entry(void *content)
414 if (content == NULL) {
415 CALL_UI_DEBUG("content is NULL!");
419 en = elm_entry_add(content);
420 elm_entry_scrollable_set(en, EINA_TRUE);
422 elm_entry_select_all(en);
423 elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF,
424 ELM_SCROLLER_POLICY_AUTO);
426 elm_entry_bounce_set(en, EINA_FALSE, EINA_FALSE);
427 elm_entry_line_wrap_set(en, ELM_WRAP_WORD);
428 elm_entry_input_panel_enabled_set(en, EINA_FALSE);
429 elm_entry_single_line_set(en, EINA_TRUE);
430 elm_entry_cursor_end_set(en);
431 evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND,
433 evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
435 evas_object_show(en);