4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-phone-language-region.h>
22 #include <setting-common-draw-widget.h>
23 #include <app_manager.h>
26 static int setting_phone_language_region_create(void *cb);
27 static int setting_phone_language_region_destroy(void *cb);
28 static int setting_phone_language_region_update(void *cb);
29 static int setting_phone_language_region_cleanup(void *cb);
31 setting_view setting_view_phone_language_region = {
32 .create = setting_phone_language_region_create,
33 .destroy = setting_phone_language_region_destroy,
34 .update = setting_phone_language_region_update,
35 .cleanup = setting_phone_language_region_cleanup,
42 * @brief Callback of language change flush timer
44 * @param cb The view data passed between all callbacks
45 * @return #1 means call it again, else means call it only once
47 static Eina_Bool setting_phone_language_region_flush_timer_cb(void * cb)
50 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
51 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
53 elm_config_all_flush();
54 ad->lang_flush_timer = NULL;
61 static Eina_Bool setting_phone_language_region_freeze_event_timer_cb(void * cb)
64 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
65 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
67 evas_object_freeze_events_set(ad->navi_bar, EINA_FALSE);
69 ad->event_freeze_timer = NULL;
74 * @brief create keyboard ug by app control
76 * @param ad The view data passed
78 static void setting_phone_lang_create_keyboard_ug(SettingPhoneUG *ad)
83 if(app_launcher("isfsetting-efl") == 0)
85 ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
86 evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
91 * @brief create voice recognition ug by app control
94 static void setting_phone_lang_create_voice_recognition_ug(SettingPhoneUG *ad)
97 if(app_launcher("setting-voice-efl|show_what:stt") == 0)
99 ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
100 evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
105 * @brief create text-to-speech ug by app control
108 static void setting_phone_lang_create_text_speech_ug(SettingPhoneUG *ad)
111 if(app_launcher("setting-voice-efl|show_what:tts") == 0)
113 ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
114 evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
119 * @brief create readout(old name : drivingmode) ug by app control
121 * @param ad The view data passed
123 static void setting_phone_lang_create_readout_ug(SettingPhoneUG *ad)
128 if(app_launcher("setting-drivingmode-efl") == 0)
130 ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
131 evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
136 * @brief Callback of cancel button
138 * @param cb The view data passed between all callbacks
140 static Eina_Bool setting_phone_lang_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
143 retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
144 SettingPhoneUG *ad = (SettingPhoneUG *) data;
146 Eina_Bool is_freezed = evas_object_freeze_events_get(ad->navi_bar);
147 SETTING_TRACE_DEBUG("is_freezed : %d", is_freezed);
151 ug_destroy_me(ad->ug);
156 * @brief Callback of view cleanup
158 * @param cb The view data passed between all callbacks
159 * @return #1 on success, else on failed
161 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
166 setting_retm_if(!data || !event_info, "data||event_info is NULL");
167 SettingPhoneUG *ad = (SettingPhoneUG *) data;
168 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
170 elm_genlist_item_selected_set(item, 0);
171 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
172 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
174 if(!safeStrCmp("IDS_ST_HEADER_DISPLAY_LANGUAGE", list_item->keyStr))
176 setting_view_change(&setting_view_phone_language_region,
177 &setting_view_phone_display_language, ad);
179 else if(!safeStrCmp(_(REGION_FORMAT_LOWER), list_item->keyStr))
181 setting_view_change(&setting_view_phone_language_region,
182 &setting_view_phone_region_format, ad);
184 else if(!safeStrCmp("IDS_ST_BODY_KEYBOARD", list_item->keyStr))
186 setting_phone_lang_create_keyboard_ug(ad);
188 else if(!safeStrCmp("IDS_VC_HEADER_VOICE_RECOGNITION", list_item->keyStr))
190 setting_phone_lang_create_voice_recognition_ug(ad);
192 else if(!safeStrCmp("IDS_ST_HEADER_TEXT_TO_SPEECH", list_item->keyStr))
194 setting_phone_lang_create_text_speech_ug(ad);
196 else if(!safeStrCmp("IDS_VC_MBODY_NOTIFICATION_READ_OUT", list_item->keyStr))
198 setting_phone_lang_create_readout_ug(ad);
203 * @brief Callback of readout vconf key
206 #if SUPPORT_DRIVINGMODE
207 static void setting_phone_lang_vconf_change_cb(keynode_t *key, void *data)
210 setting_retm_if(NULL == key, "key is NULL");
211 setting_retm_if(NULL == data, "data is NULL");
212 SettingPhoneUG *ad = (SettingPhoneUG *)data;
213 char *vconf_name = vconf_keynode_get_name(key);
214 if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_DRIVINGMODE)
215 || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_INCOMINGCALL)
216 || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_MESSAGE)
217 || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_NEWEMAILS)
218 || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_SCHEDULE)
219 || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_ALARM)) {
222 if (ad->data_readout) {
223 G_FREE(ad->data_readout->sub_desc);
224 ad->data_readout->sub_desc = get_pa_noti_readout_str();
225 elm_object_item_data_set(ad->data_readout->item, ad->data_readout);
226 elm_genlist_item_update(ad->data_readout->item);
229 SETTING_TRACE_ERROR("vconf_name is error");
234 static void setting_phone_lang_regist_readout_key(void *data)
236 setting_retm_if(NULL == data, "data is NULL");
237 #if SUPPORT_DRIVINGMODE
238 SettingPhoneUG *ad = (SettingPhoneUG *)data;
240 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_DRIVINGMODE,setting_phone_lang_vconf_change_cb, ad);
242 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
244 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_INCOMINGCALL,setting_phone_lang_vconf_change_cb, ad);
246 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
248 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_MESSAGE,setting_phone_lang_vconf_change_cb, ad);
250 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
252 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_NEWEMAILS,setting_phone_lang_vconf_change_cb, ad);
254 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
256 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_SCHEDULE,setting_phone_lang_vconf_change_cb, ad);
258 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
260 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_ALARM,setting_phone_lang_vconf_change_cb, ad);
262 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
267 static void setting_phone_lang_unregist_readout_key()
269 #if SUPPORT_DRIVINGMODE
271 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_DRIVINGMODE,
272 setting_phone_lang_vconf_change_cb);
274 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
276 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_INCOMINGCALL,
277 setting_phone_lang_vconf_change_cb);
279 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
281 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_MESSAGE,
282 setting_phone_lang_vconf_change_cb);
284 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
286 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_NEWEMAILS,
287 setting_phone_lang_vconf_change_cb);
289 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
291 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_SCHEDULE,
292 setting_phone_lang_vconf_change_cb);
294 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
296 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_ALARM,
297 setting_phone_lang_vconf_change_cb);
299 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
305 /* ***************************************************
309 ***************************************************/
311 * @brief Callback of view creating
313 * @param cb The view data passed between all callbacks
314 * @return #1 on success, else on failed
316 static int setting_phone_language_region_create(void *cb)
320 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
322 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
323 Evas_Object *scroller = NULL;
325 int region_automatic;
327 ad->lang_change = EINA_FALSE;
329 char *title = "IDS_ST_HEADER_LANGUAGE_AND_INPUT";
331 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
333 _("IDS_COM_BODY_BACK"),
338 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
339 elm_naviframe_item_pop_cb_set(navi_it, setting_phone_lang_click_softkey_cancel_cb, ad);
340 retv_if(ad->ly_language == NULL, SETTING_RETURN_FAIL);
341 ad->gl_lang_region = scroller;
342 ad->lang_region_navi_it = navi_it;
343 SETTING_TRACE("navi_it:%p", navi_it);
344 evas_object_smart_callback_add(ad->gl_lang_region, "realized", __gl_realized_cb, NULL);
345 Elm_Object_Item *item = NULL;
347 elm_genlist_item_append(scroller, &itc_seperator,
348 NULL, NULL, ELM_GENLIST_ITEM_NONE,
350 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
352 char* pa_display_lang = get_pa_display_language_str();
353 ad->data_display_language =
354 setting_create_Gendial_field_def(scroller,
356 setting_phone_lang_item_Gendial_mouse_up_cb,
357 ad, SWALLOW_Type_INVALID,
359 "IDS_ST_HEADER_DISPLAY_LANGUAGE",
362 if (ad->data_display_language) {
363 ad->data_display_language->userdata = ad;
364 ad->data_display_language->group_style = SETTING_GROUP_STYLE_TOP;
366 SETTING_TRACE_ERROR("ad->data_display_language is NULL");
368 G_FREE(pa_display_lang);
370 char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
371 if (pa_region == NULL) {
373 ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
375 ad->prev_locale = (char *)g_strdup(pa_region);
376 //check if the region is set to auto
377 char *region_format_str = NULL;
378 vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, ®ion_automatic);
379 if(region_automatic == 1)
381 region_format_str = (char*)g_strdup(_("IDS_COM_BODY_AUTOMATIC"));
383 region_format_str = setting_phone_lang_get_region_str(pa_region);
385 ad->data_region_fmt =
386 setting_create_Gendial_field_def(scroller,
388 setting_phone_lang_item_Gendial_mouse_up_cb,
389 ad, SWALLOW_Type_INVALID,
391 _(REGION_FORMAT_LOWER),
392 region_format_str, NULL);
393 if (ad->data_region_fmt) {
394 ad->data_region_fmt->userdata = ad;
395 ad->data_region_fmt->group_style = SETTING_GROUP_STYLE_BOTTOM;
397 SETTING_TRACE_ERROR("ad->data_region_fmt is NULL");
400 char *example_desc = setting_phone_lang_get_example_desc(pa_region, ad);
401 item = elm_genlist_item_append(scroller, &(itc_sep_line), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL);
402 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
403 ad->data_region_fmt_example = setting_create_Gendial_field_def(scroller, &itc_multiline_text,
406 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
407 NULL, NULL, 0, example_desc, NULL, NULL);
408 elm_genlist_item_select_mode_set(ad->data_region_fmt_example->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
411 ad->data_title_keyboard = setting_create_Gendial_field_titleItem(scroller, &itc_group_item, _("IDS_ST_BODY_KEYBOARD"), NULL);
413 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
414 setting_phone_lang_item_Gendial_mouse_up_cb,
415 ad, SWALLOW_Type_INVALID, NULL,
416 NULL, 0, "IDS_ST_BODY_KEYBOARD",
420 ADD_GL_SEPARATOR(scroller);
421 ad->data_title_speech = setting_create_Gendial_field_titleItem(scroller, &itc_group_item, _("IDS_ST_BODY_SPEECH"), NULL);
424 ad->data_voice_recog =
425 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
426 setting_phone_lang_item_Gendial_mouse_up_cb,
427 ad, SWALLOW_Type_INVALID, NULL,
428 NULL, 0, "IDS_VC_HEADER_VOICE_RECOGNITION",
430 if (ad->data_voice_recog) {
431 ad->data_voice_recog->userdata = ad;
432 ad->data_voice_recog->group_style = SETTING_GROUP_STYLE_TOP;
434 SETTING_TRACE_ERROR("ad->data_voice_recog is NULL");
438 ad->data_text_speech =
439 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
440 setting_phone_lang_item_Gendial_mouse_up_cb,
441 ad, SWALLOW_Type_INVALID, NULL,
442 NULL, 0, "IDS_ST_HEADER_TEXT_TO_SPEECH",
444 if (ad->data_text_speech) {
445 ad->data_text_speech->userdata = ad;
446 ad->data_text_speech->group_style = SETTING_GROUP_STYLE_CENTER;
448 SETTING_TRACE_ERROR("ad->data_text_speech is NULL");
451 //notification readout
452 char* pa_noti_readout = get_pa_noti_readout_str();
454 setting_create_Gendial_field_def(scroller,
456 setting_phone_lang_item_Gendial_mouse_up_cb,
457 ad, SWALLOW_Type_INVALID,
459 "IDS_VC_MBODY_NOTIFICATION_READ_OUT",
462 if (ad->data_readout) {
463 ad->data_readout->userdata = ad;
464 ad->data_readout->group_style = SETTING_GROUP_STYLE_BOTTOM;
466 SETTING_TRACE_ERROR("ad->data_readout is NULL");
468 G_FREE(pa_noti_readout);
469 setting_phone_lang_regist_readout_key(ad);
479 setting_view_phone_language_region.is_create = 1;
480 return SETTING_RETURN_SUCCESS;
486 * @brief Callback of view destroy
488 * @param cb The view data passed between all callbacks
489 * @return #1 on success, else on failed
491 static int setting_phone_language_region_destroy(void *cb)
495 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
497 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
499 evas_object_smart_callback_del(ad->gl_lang_region, "realized", __gl_realized_cb);
501 //setting_phone_lang_unregist_readout_key();
503 if (ad->ly_language != NULL) {
504 evas_object_del(ad->ly_language);
505 ad->ly_language = NULL;
507 if (ad->lang_flush_timer) {
508 ecore_timer_del(ad->lang_flush_timer);
509 ad->lang_flush_timer = NULL;
512 if (ad->event_freeze_timer) {
513 ecore_timer_del(ad->event_freeze_timer);
514 ad->event_freeze_timer = NULL;
517 if (ad->pattern_generator) {
518 udatpg_close(ad->pattern_generator);
519 ad->pattern_generator = NULL;
521 setting_view_phone_language_region.is_create = 0;
524 return SETTING_RETURN_SUCCESS;
530 * @brief Callback of view update
532 * @param cb The view data passed between all callbacks
533 * @return #1 on success, else on failed
535 static int setting_phone_language_region_update(void *cb)
539 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
541 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
543 if (ad->ly_language != NULL) {
544 evas_object_show(ad->ly_language);
546 elm_object_item_text_set(ad->lang_region_navi_it, _("IDS_ST_HEADER_LANGUAGE_AND_INPUT")); //"IDS_ST_BODY_LANGUAGE_AND_KEYBOARD"));
548 if (ad->data_display_language) {
549 G_FREE(ad->data_display_language->sub_desc);
550 ad->data_display_language->sub_desc = get_pa_display_language_str();
551 elm_object_item_data_set(ad->data_display_language->item, ad->data_display_language);
552 elm_genlist_item_update(ad->data_display_language->item);
555 char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
556 if (pa_region == NULL) {
558 ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
559 return SETTING_RETURN_FAIL;
562 if (ad->data_region_fmt) {
563 int region_automatic = 1;
564 int ret = vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, ®ion_automatic);
565 if (ret == VCONF_ERROR) {
566 SETTING_TRACE_ERROR("get vconf region automatic err.");
569 if(region_automatic == 1)
571 ad->data_region_fmt->sub_desc = (char*)g_strdup(_("IDS_COM_BODY_AUTOMATIC"));
573 ad->data_region_fmt->sub_desc = setting_phone_lang_get_region_str(pa_region);
575 G_FREE(ad->data_region_fmt->keyStr);
576 ad->data_region_fmt->keyStr = (char *)g_strdup(_(REGION_FORMAT_LOWER));
577 elm_object_item_data_set(ad->data_region_fmt->item, ad->data_region_fmt);
578 elm_genlist_item_update(ad->data_region_fmt->item);
580 if (ad->data_region_fmt_example) {
581 char *example_desc = setting_phone_lang_get_example_desc(pa_region, ad);
582 G_FREE(ad->data_region_fmt_example->keyStr);
583 ad->data_region_fmt_example->keyStr = (char *)g_strdup(example_desc);
585 elm_object_item_data_set(ad->data_region_fmt_example->item, ad->data_region_fmt_example);
586 elm_genlist_item_update(ad->data_region_fmt_example->item);
588 if (ad->data_title_keyboard) {
589 G_FREE(ad->data_title_keyboard->keyStr);
590 ad->data_title_keyboard->keyStr = (char *)g_strdup(_("IDS_ST_BODY_KEYBOARD"));
591 elm_object_item_data_set(ad->data_title_keyboard->item, ad->data_title_keyboard);
592 elm_genlist_item_update(ad->data_title_keyboard->item);
594 if (ad->data_title_speech) {
595 G_FREE(ad->data_title_speech->keyStr);
596 ad->data_title_speech->keyStr = (char *)g_strdup(_("IDS_ST_BODY_SPEECH"));
597 elm_object_item_data_set(ad->data_title_speech->item, ad->data_title_speech);
598 elm_genlist_item_update(ad->data_title_speech->item);
600 if (ad->data_readout) {
601 G_FREE(ad->data_readout->sub_desc);
602 ad->data_readout->sub_desc = get_pa_noti_readout_str();
603 elm_object_item_data_set(ad->data_readout->item, ad->data_readout);
604 elm_genlist_item_update(ad->data_readout->item);
610 if (ad->lang_change) {
611 ad->lang_flush_timer = ecore_timer_add(0.3, setting_phone_language_region_flush_timer_cb, ad);
612 ad->lang_change = EINA_FALSE;
614 return SETTING_RETURN_SUCCESS;
620 * @brief Callback of view cleanup
622 * @param cb The view data passed between all callbacks
623 * @return #1 on success, else on failed
625 static int setting_phone_language_region_cleanup(void *cb)
628 return SETTING_RETURN_SUCCESS;