2 * Copyright (c) 2012-2013 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://floralicense.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.
20 #include <appcore-efl.h>
22 #include <Elementary.h>
24 #include <Ecore_IMF.h>
25 #include "sat-ui-debug.h"
26 #include "get-inkey-view.h"
28 #include "setup-menu-view.h"
29 #include "sat-ui-icon.h"
30 #include "tel-request.h"
32 #include "common_string.h"
36 static Elm_Entry_Filter_Accept_Set digits_filter_data;
37 static Elm_Entry_Filter_Limit_Size limit_filter_data;
38 static TelSatGetInkeyInd_t get_inkey_info;
40 Evas_Object * _create_conformant( Evas_Object *parent , SatUiAppData_t *ad);
42 /* This callback is for showing(hiding) X marked button. */
43 static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
45 if (elm_object_focus_get(data)) {
46 if (elm_entry_is_empty(obj))
47 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
49 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
53 /* Focused callback will show X marked button and hide guidetext. */
54 static void _focused_cb(void *data, Evas_Object *obj, void *event_info)
56 if (!elm_entry_is_empty(obj))
57 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
58 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
61 /* Unfocused callback will show guidetext and hide X marked button. */
62 static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info)
64 if (elm_entry_is_empty(obj))
65 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
66 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
69 /* When X marked button clicked, make string as empty. */
70 static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
72 elm_entry_entry_set(data, "");
75 static void on_clicked_ok_btn(void *data, Evas_Object *obj, void *event_info)
77 char *entry_string = NULL;
78 SatUiAppData_t *ad = (SatUiAppData_t *)data;
79 Evas_Object *waiting_bar;
82 ecore_timer_del(ad->timer);
85 ret_if(NULL == ad->entry);
87 entry_string = (char *)elm_entry_entry_get(ad->entry);
89 ret_if(NULL == entry_string);
90 ret_if(0 == strlen(entry_string));
92 DBG(" %s", entry_string);
95 elm_object_focus_set(ad->entry, EINA_FALSE);
96 elm_object_focus_allow_set(ad->entry, EINA_FALSE);
99 send_ui_user_confirm(ad->cmd_id, TAPI_SAT_CMD_TYPE_GET_INKEY,TAPI_SAT_USER_CONFIRM_YES, sizeof(unsigned char),(unsigned char*)entry_string, ad);
100 waiting_bar = create_waiting_notify(ad->content);
101 ad->waiting_bar = waiting_bar;
103 ecore_timer_del(ad->timer);
108 static void on_clicked_yes_btn(void *data, Evas_Object *obj, void *event_info)
110 SatUiAppData_t *ad = (SatUiAppData_t *)data;
111 Evas_Object *waiting_bar;
114 ecore_timer_del(ad->timer);
117 send_ui_user_confirm(ad->cmd_id, TAPI_SAT_CMD_TYPE_GET_INKEY, TAPI_SAT_USER_CONFIRM_YES, 0, NULL, ad);
118 waiting_bar = create_waiting_notify(ad->content);
119 ad->waiting_bar = waiting_bar;
121 ecore_timer_del(ad->timer);
126 static void on_clicked_no_btn(void *data, Evas_Object *obj, void *event_info)
128 SatUiAppData_t *ad = (SatUiAppData_t *)data;
129 Evas_Object *waiting_bar;
132 ecore_timer_del(ad->timer);
134 send_ui_user_confirm(ad->cmd_id, TAPI_SAT_CMD_TYPE_GET_INKEY, TAPI_SAT_USER_CONFIRM_NO_OR_CANCEL, 0, NULL, ad);
136 waiting_bar = create_waiting_notify(ad->content);
137 ad->waiting_bar = waiting_bar;
139 ecore_timer_del(ad->timer);
144 static void on_clicked_back_btn( void *data, Evas_Object* obj, void* event_info )
146 SatUiAppData_t *ad = (SatUiAppData_t *)data;
149 ecore_timer_del(ad->timer);
153 elm_object_focus_set(ad->entry, EINA_FALSE);
154 elm_object_focus_allow_set(ad->entry, EINA_FALSE);
156 send_ui_user_confirm(ad->cmd_id, TAPI_SAT_CMD_TYPE_GET_INKEY, TAPI_SAT_USER_CONFIRM_NO_OR_CANCEL, 0, NULL, ad);
159 static Eina_Bool on_timer_expired(void *data)
161 SatUiAppData_t *ad = (SatUiAppData_t *)data;
163 if (NULL == ad->timer) {
164 DBG("Cancel timout w/o user_confirm");
166 send_ui_user_confirm(ad->cmd_id, TAPI_SAT_CMD_TYPE_GET_INKEY, TAPI_SAT_USER_CONFIRM_TIMEOUT, 0, NULL, ad);
169 return ECORE_CALLBACK_CANCEL;
172 static void on_clicked_help_button(void *data, Evas_Object *obj, void *event_info)
174 Evas_Object *waiting_bar;
175 SatUiAppData_t *ad = (SatUiAppData_t *)data;
178 ecore_timer_del(ad->timer);
182 elm_object_focus_set(ad->entry, EINA_FALSE);
183 elm_object_focus_allow_set(ad->entry, EINA_FALSE);
186 send_ui_user_confirm(ad->cmd_id, TAPI_SAT_CMD_TYPE_GET_INKEY, TAPI_SAT_USER_CONFIRM_HELP_INFO, 0, NULL, ad);
188 waiting_bar = create_waiting_notify(ad->content);
189 ad->waiting_bar = waiting_bar;
191 ecore_timer_del(ad->timer);
196 void _inkey_panel_event_callback(void *data, Ecore_IMF_Context *imf_context, int value)
199 if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
200 // ISE state has changed to ISE_STATE_SHOW status
201 // Get ISE position of current active ISE
202 ecore_imf_context_input_panel_geometry_get(imf_context, &x, &y, &w, &h);
203 printf("keypad is shown\n");
204 printf("The coordination of inkey panel. x : %d, y : %d, w : %d, h : %d\n", x, y, w, h);
205 } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
206 // ISE state has changed to ISE_STATE_HIDE status
207 printf("keypad is hided\n");
211 static Evas_Object *_gl_ok_button_content_get(void *data, Evas_Object *obj, const char *part)
213 retv_if(NULL == data, NULL);
215 if (!strcmp(part, "elm.slide.swallow.1")) {
216 SatUiAppData_t *ad = (SatUiAppData_t *)data;
218 ad->r_button = elm_button_add(obj);
219 elm_object_text_set(ad->r_button, SAT_STR_OK);
220 evas_object_show(ad->r_button);
221 evas_object_smart_callback_add(ad->r_button, "clicked", on_clicked_ok_btn, ad);
228 static Evas_Object *_gl_help_button_content_get(void *data, Evas_Object *obj, const char *part)
230 retv_if(NULL == data, NULL);
232 if (!strcmp(part, "elm.slide.swallow.1")) {
233 Evas_Object *help_btn = NULL;
234 Evas_Object *help_icon = NULL;
236 SatUiAppData_t *ad = (SatUiAppData_t *)data;
238 help_btn = elm_button_add(obj);
240 retv_if(NULL == help_btn, NULL);
242 ad->help_btn = help_btn;
244 help_icon = elm_icon_add(help_btn);
245 elm_image_file_set(help_icon, HELP_ICON_FILE, NULL);
246 evas_object_size_hint_weight_set(help_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
247 evas_object_size_hint_align_set(help_icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
248 elm_object_part_content_set(help_btn, "icon", help_icon);
249 evas_object_show(help_btn);
250 evas_object_smart_callback_add(help_btn, "clicked", on_clicked_help_button, ad);
257 static Evas_Object *_gl_yes_no_button_content_get(void *data, Evas_Object *obj, const char *part)
259 Evas_Object *yes_no_btn = NULL;
261 retv_if(NULL == data, NULL);
263 SatUiAppData_t *ad = (SatUiAppData_t *)data;
265 if (!strcmp(part, "elm.slide.swallow.1")) {
266 yes_no_btn = elm_button_add(obj);
267 evas_object_show(yes_no_btn);
268 elm_object_text_set(yes_no_btn, SAT_STR_YES);
269 evas_object_smart_callback_add(yes_no_btn, "clicked", on_clicked_yes_btn, ad);
270 } else if (!strcmp(part, "elm.slide.swallow.2")) {
271 yes_no_btn = elm_button_add(obj);
272 evas_object_show(yes_no_btn);
273 elm_object_text_set(yes_no_btn, SAT_STR_NO);
274 evas_object_smart_callback_add(yes_no_btn, "clicked", on_clicked_no_btn, ad);
280 static Evas_Object *_gl_text_content_get(void *data, Evas_Object *obj, const char *part)
282 retv_if(NULL == data, NULL);
284 if (!strcmp(part, "elm.icon")) {
285 Evas_Object *layout = NULL;
286 Evas_Object *en = NULL;
289 TelSatGetInkeyInd_t *get_inkey_data = (TelSatGetInkeyInd_t *)data;
291 layout = elm_layout_add(obj);
292 elm_layout_theme_set(layout, "layout", "editfield", "default");
293 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
295 en = elm_entry_add(obj);
296 elm_object_part_content_set(layout, "elm.swallow.content", en);
297 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
299 if (get_inkey_data->text.stringLen >0) {
300 DBG("string=%s",(char *)get_inkey_data->text.string);
301 info = elm_entry_utf8_to_markup((char *)get_inkey_data->text.string);
302 elm_entry_entry_set(en, info);
304 elm_entry_single_line_set(en, EINA_FALSE);
305 elm_entry_editable_set(en, EINA_FALSE);
307 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
314 static Evas_Object *_gl_editfield_content_get(void *data, Evas_Object *obj, const char *part)
316 retv_if(NULL == data, NULL);
318 if (!strcmp(part, "elm.icon")) {
319 Evas_Object *layout = NULL;
320 Evas_Object *en = NULL;
321 Ecore_IMF_Input_Panel_Layout imf_layout;
323 TelSatGetInkeyInd_t *get_inkey_data = (TelSatGetInkeyInd_t *)data;
326 ad = (SatUiAppData_t *)evas_object_data_get(obj, "app_data");
329 layout = elm_layout_add(obj);
330 elm_layout_theme_set(layout, "layout", "editfield", "default");
331 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
333 en = elm_entry_add(obj);
334 evas_object_smart_callback_add(en, "changed", _changed_cb, layout);
335 evas_object_smart_callback_add(en, "focused", _focused_cb, layout);
336 evas_object_smart_callback_add(en, "unfocused", _unfocused_cb, layout);
338 elm_object_part_content_set(layout, "elm.swallow.content", en);
339 elm_object_part_text_set(layout, "elm.guidetext", _(SAT_STR_TAP_TO_ENTER));
340 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, en);
342 retv_if(NULL == en, NULL);
344 elm_entry_cursor_end_set(en);
346 Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
347 ad->imf_context = imf_context;
348 ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _inkey_panel_event_callback, NULL);
350 if (get_inkey_data->bIsNumeric == EINA_TRUE) {
351 imf_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_NUMBER;
352 digits_filter_data.accepted = "0123456789*#+";
353 digits_filter_data.rejected = NULL;
354 elm_entry_markup_filter_append(en, elm_entry_filter_accept_set, &digits_filter_data);
356 imf_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_EMAIL;
359 limit_filter_data.max_char_count = 0;
360 limit_filter_data.max_byte_count = 1;
361 elm_entry_markup_filter_append(en, elm_entry_filter_limit_size, &limit_filter_data);
362 elm_entry_input_panel_enabled_set(en, EINA_TRUE);
363 elm_entry_input_panel_layout_set(ad->entry, imf_layout);
365 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
366 elm_object_signal_emit(layout, "clicked", "elm");
374 static void __sat_ui_gl_sel_cb(void *data, Evas_Object *obj, void *event_info)
377 elm_genlist_item_selected_set(event_info, EINA_FALSE);
380 int draw_content_get_inkey(Evas_Object* content, void *tapi_data, void *data)
382 retv_if(NULL == content, -1);
383 retv_if(NULL == tapi_data, -1);
384 retv_if(NULL == data, -1);
386 Evas_Object *genlist = NULL;
387 Evas_Object *image = NULL;
388 Evas_Object *l_button = NULL;
389 Elm_Object_Item *item = NULL;
391 memcpy(&(get_inkey_info), tapi_data, sizeof(TelSatGetInkeyInd_t));
393 SatUiAppData_t *ad = (SatUiAppData_t *)data;
397 l_button = elm_button_add(ad->nf);
398 elm_object_style_set(l_button, "naviframe/end_btn/default");
399 evas_object_smart_callback_add(l_button, "clicked", on_clicked_back_btn, ad);
400 elm_object_item_part_content_set(ad->navi_it, "prev_btn", l_button);
401 ad->back_btn = l_button;
404 if (get_inkey_info.iconId.bIsPresent == EINA_TRUE) {
405 image = convert_iconinfo_to_evas_object((void *)ad, &get_inkey_info.iconId.iconInfo);
407 if (get_inkey_info.iconId.iconQualifier == TAPI_SAT_ICON_QUALI_SELF_EXPLANATORY) {
408 elm_object_item_text_set(ad->navi_it, " ");
410 evas_object_size_hint_align_set(image, 0,0);
411 evas_object_show(image);
414 ad->itc_no_edit_text->item_style = "dialogue/1icon";
415 ad->itc_no_edit_text->func.content_get = _gl_text_content_get;
417 ad->itc_editfield_icon->item_style = "1icon";
418 ad->itc_editfield_icon->func.content_get = _gl_editfield_content_get;
420 ad->itc_ok_icon->item_style = "mode/slide";
421 ad->itc_ok_icon->func.content_get = _gl_ok_button_content_get;
423 ad->itc_help_icon->item_style = "mode/slide";
424 ad->itc_help_icon->func.content_get = _gl_help_button_content_get;
426 ad->itc_2icon->item_style = "mode/slide2";
427 ad->itc_2icon->func.content_get = _gl_yes_no_button_content_get;
429 genlist = elm_genlist_add(content);
430 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
431 evas_object_data_set(genlist, "app_data", (void *)ad);
433 item = elm_genlist_item_append(genlist, ad->itc_no_edit_text, &(get_inkey_info), NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
434 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
436 if (get_inkey_info.keyType == TAPI_SAT_INKEY_TYPE_YES_NO_REQUESTED) {
438 elm_genlist_item_append(genlist, ad->itc_2icon, (void *)ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
440 elm_genlist_item_append(genlist, ad->itc_editfield_icon, &(get_inkey_info), NULL, ELM_GENLIST_ITEM_NONE, __sat_ui_gl_sel_cb, NULL);
442 elm_genlist_item_append(genlist, ad->itc_ok_icon, (void *)ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
445 if (get_inkey_info.bIsHelpInfoAvailable == EINA_TRUE) {
446 elm_genlist_item_append(genlist, ad->itc_help_icon, (void *)ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
449 elm_object_part_content_set(content, "body", genlist);
451 DBG("duration=%d", get_inkey_info.duration);
453 if (get_inkey_info.duration > 0)
454 ad->timer = ecore_timer_add((double)get_inkey_info.duration/1000.0f, on_timer_expired, ad);
456 ad->timer = ecore_timer_add(GET_INKEY_DURATION, on_timer_expired, ad);