2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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 <Elementary.h>
20 #include <efl_assist.h>
21 #include <app_common.h>
24 #include <efl_extension.h>
25 //#include <ui_extension.h>
31 #include "w-input-selector.h"
32 #include "w-input-stt-ise.h"
33 #include "w-input-stt-voice.h"
34 #include "w-input-stt-tos.h"
35 #include "w-input-stt-tos-text.h"
39 #define _EDJ(x) elm_layout_edje_get(x)
41 static Evas_Object *g_circle_object_first = NULL;
43 #define ISE_PREFERENCE_AGREEMENT "wearable_input_agreement"
44 #define VCONFKEY_USER_AGREEMENT "db/wms/user_agreement/svoice"
45 #define VCONFKEY_USER_AGREED_TOS "db/private/ise/stt/tos"
47 #define N66_URL "https://account.samsung.com/membership/pp"
49 char *nuance_support_language[12][2] = {
50 {"en_GB", "en"}, // fallback
65 std::string replaceAll(std::string str, const std::string& from, const std::string& to)
68 while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
69 str.replace(start_pos, from.length(), to);
70 start_pos += to.length();
76 static void __bt_connection_result_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
78 App_Data* ad = (App_Data*)user_data;
83 PRINTFUNC(DLOG_ERROR, "service_h is NULL");
87 app_control_get_extra_data(reply, "__BT_CONNECTION__", &val);
89 if (strcmp(val, "Connected") == 0) {
90 PRINTFUNC(DLOG_ERROR, "BT Connected");
92 PRINTFUNC(DLOG_ERROR, "BT Not Connected");
97 if (ad && ad->app_type == APP_TYPE_STT) {
98 PRINTFUNC(DLOG_DEBUG, "APP_TYPE_STT so exit here.");
104 void launch_bt_connection_popup(App_Data* data){
105 App_Data* ad = (App_Data*)data;
107 PRINTFUNC(DLOG_DEBUG, "Need to launch BT connection popup");
108 app_control_h app_control;
109 app_control_create(&app_control);
110 app_control_set_app_id(app_control, "com.samsung.bt-connection-popup");
111 app_control_add_extra_data(app_control, "msg", "user_defined");
112 app_control_add_extra_data(app_control, "text", gettext("WDS_ST_TPOP_CONNECT_VIA_BLUETOOTH_TO_REVIEW_AND_ACCEPT_THE_LEGAL_NOTICE_ABB"));
113 app_control_add_extra_data(app_control, "title", PACKAGE);
114 app_control_send_launch_request(app_control, __bt_connection_result_cb, NULL);
115 app_control_destroy(app_control);
119 Eina_Bool set_tos_N66_agreed(Eina_Bool bSet)
121 int ret = vconf_set_bool(VCONFKEY_USER_AGREEMENT, bSet);
122 if ( ret != VCONF_OK ) {
123 PRINTFUNC(DLOG_ERROR, "vconf_set_bool failed ... [%d]!!!", ret);
130 Eina_Bool is_tos_N66_agreed()
132 if (1) return EINA_TRUE;
137 ret = vconf_get_bool(VCONFKEY_USER_AGREEMENT, &bVal);
138 if (ret != VCONF_OK) {
139 PRINTFUNC(DLOG_ERROR, "VCONFKEY_USER_AGREEMENT vconf_get_bool fail: %d", ret);
142 return bVal? EINA_TRUE : EINA_FALSE;
145 Eina_Bool is_sap_connection()
147 int wms_connected = 0;
148 Eina_Bool ret = false;
150 vconf_get_int(VCONFKEY_WMS_WMANAGER_CONNECTED, &wms_connected);
154 vconf_get_int("memory/private/sap/conn_type", &conn_type);
155 if (conn_type == 0) {
156 char *vendor_type = vconf_get_str("db/wms/host_status/vendor");
157 if (vendor_type && !strcmp("LO", vendor_type)) {
164 } else if (conn_type == 1) {
170 PRINTFUNC(DLOG_DEBUG, "standalone mode");
178 _ise_tos_launch_web_link(std::string url)
181 wnoti_error_e eError = WNOTI_ERROR_NONE;
183 eError = wnoti_service_connect();
184 if( eError != WNOTI_ERROR_NONE )
186 PRINTFUNC(DLOG_ERROR, "wnoti_service_connect failed : [%d]!!!", eError);
190 eError = wnoti_request_to_browse((char*)(char *) "Samsung Keyboard", url.c_str());
191 if( eError != WNOTI_ERROR_NONE )
193 PRINTFUNC(DLOG_ERROR, "wnoti_request_to_browse failed!!!", eError);
196 eError = wnoti_service_disconnect();
197 if( eError != WNOTI_ERROR_NONE )
199 PRINTFUNC(DLOG_ERROR, "wnoti_service_disconnect failed : [%d]!!!", eError);
204 static void show_terms(void *data, Evas_Object *obj, void *event_info)
208 if (!event_info) return;
210 Evas_Object *parent_win = (Evas_Object *)data;
212 int wms_connected = 0;
213 vconf_get_int(VCONFKEY_WMS_WMANAGER_CONNECTED, &wms_connected);
215 if (wms_connected == 1) {
217 Evas_Smart_Cb_Description * desc = (Evas_Smart_Cb_Description*)event_info;
218 std::string tempurl = desc->name;
220 std::string::size_type n = tempurl.find_first_not_of(" \"");
221 if (n != std::string::npos) {
222 tempurl = tempurl.substr(n, tempurl.length());
225 n = tempurl.find_last_not_of(" \"");
226 if (n != std::string::npos) {
227 tempurl = tempurl.substr(0, n + 1);
230 //----------------------url construction-----------------
233 char *locale = vconf_get_str(VCONFKEY_LANGSET);
235 PRINTFUNC(DLOG_DEBUG, "locale = %s", locale);
238 while (nuance_support_language[i][0] != NULL) {
239 if (strstr(locale, nuance_support_language[i][0])) {
248 _ise_tos_launch_web_link(tempurl+ "/" + nuance_support_language[find_it][1]);
250 show_popup_toast(gettext("WDS_MYMAG_TPOP_SHOWING_DETAILS_ON_YOUR_PHONE_ING"), true);
256 static void _response_cb2(void *data, Evas_Object *obj, void *event_info)
258 App_Data* ad = (App_Data*)data;
264 elm_object_disabled_set(obj, EINA_TRUE);
266 elm_naviframe_item_pop(ad->naviframe);
270 _naviframe_pop_cb2(void *data , Elm_Object_Item *it)
272 PRINTFUNC(DLOG_DEBUG, "");
274 if (g_circle_object_first)
275 eext_rotary_object_event_activated_set(g_circle_object_first, EINA_TRUE);
280 static void _response_cb(void *data, Evas_Object *obj, void *event_info)
282 PRINTFUNC(DLOG_DEBUG, "");
284 App_Data* ad = (App_Data*)data;
288 set_tos_N66_agreed(EINA_TRUE);
290 ise_show_stt_popup(ad);
292 set_disclaimer_flag();
296 _naviframe_pop_cb(void *data , Elm_Object_Item *it)
298 PRINTFUNC(DLOG_DEBUG, "");
300 _back_to_genlist_for_selector();
306 std::string getColorStyle(const char *code)
311 // ea_theme_color_get(code, &r, &g, &b, &a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
312 snprintf(strColor, 256, "<color=#%02x%02x%02x%02x>", r, g, b, a);
314 strRet.append(strColor);
318 std::string getFontStyle(const char *code)
326 // ea_theme_color_get(code, &r, &g, &b, &a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
327 snprintf(strColor, 256, "<color=#%02x%02x%02x%02x>", r, g, b, a);
329 // ea_theme_font_get(code,&fontStyle,&fontSize);
332 snprintf(strFont, 256, "<font=Tizen:style=%s><font_size=%d>", fontStyle, fontSize);
334 snprintf(strFont, 256, "<font=Tizen:style=Regular><font_size=%d>", fontSize);
336 strRet.append(strFont);
337 strRet.append(strColor);
338 PRINTFUNC(DLOG_DEBUG, "====strRect==%s", strRet.c_str());
339 //after uifw finish patch, this free must open, otherwise it will have memory leak
347 static std::string tagging(const std::string& str)
349 std::string link_start = "<a href=";
350 std::string link_end = "</a>";
351 std::string label = str;
352 std::string tag_str = "";
353 std::string link_color = "";
355 tag_str.append(getFontStyle("T142"));
356 link_color.append(getColorStyle("T1611"));
358 std::string::size_type found = label.find(link_start);
360 while (found != std::string::npos) {
361 tag_str.append(label, 0, found);
362 tag_str.append(link_color);
364 std::string::size_type end_pos = label.find(link_end);
365 tag_str.append(label, found, end_pos-found);
366 tag_str.append("</a>");
367 tag_str.append("</color>");
368 label = label.substr(end_pos+4);
369 found = label.find(link_start);
372 tag_str.append(label);
373 tag_str.append("</font_size></color></font>");
378 static void _language_changed_cb(void *_data, Evas_Object *_obj, void *_event_info)
383 int index = (int)_data;
384 std::string terms = "";
385 Elm_Object_Item *navi_it = NULL;
387 char body_str[40000];
391 sprintf(body_str, gettext("LDS_IME_BODY_INFORMATION_PROVISION_AGREEMENT_P1_LEGALPHRASE_WC1"), " <a href=\"file://local-nuance-tos\">","</a>","<a href=\"http://www.vlingo.com/wap/samsung-asr-privacy-addendum\">","</a>");
392 terms = tagging(std::string(body_str));
393 terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
394 elm_entry_entry_set(elm_layout_content_get(_obj, "elm.swallow.content"), terms.c_str());
397 terms = tagging(std::string(gettext(TOS_BODY2))+ std::string("<br>") + std::string(gettext(TOS_BODY3)));
398 terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
399 elm_entry_entry_set(elm_layout_content_get(_obj, "elm.swallow.content"), terms.c_str());
406 Evas_Object *create_tos_second_page(void* data){
407 App_Data* ad = (App_Data*)data;
412 PRINTFUNC(DLOG_DEBUG, "");
414 Evas_Object *outer_layout;
415 Evas_Object *inner_layout;
416 Evas_Object *scroller;
417 Evas_Object *circle_scroller;
419 std::string terms = "";
421 string edj_path = get_resource_path();
422 edj_path = edj_path + STT_EDJ_FILE;
424 //------------outer layout----------------------
425 outer_layout = elm_layout_add(ad->naviframe);
426 elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
427 evas_object_show(outer_layout);
429 //------------scroller----------------------
430 scroller = elm_scroller_add(outer_layout);
431 elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
432 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
433 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
434 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
435 elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
436 evas_object_show(scroller);
437 circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
438 eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
439 eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
440 elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
442 //------------inner layout----------------------
443 inner_layout = elm_layout_add(scroller);
444 elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
445 elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, TOS_TITLE);
446 evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
447 evas_object_smart_callback_add(inner_layout, "language,changed", _language_changed_cb, (void *)2);
449 elm_object_content_set(scroller, inner_layout);
451 //------------entry----------------------
452 Evas_Object *entry = elm_entry_add(inner_layout);
453 elm_entry_editable_set(entry, EINA_FALSE);
454 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
455 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
456 evas_object_show(entry);
457 elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
459 terms = tagging(std::string(gettext(TOS_BODY2))+ std::string("<br>")+ std::string(gettext(TOS_BODY3)));
460 terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
462 elm_entry_entry_set(entry, terms.c_str());
464 elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
466 //------------Bottom Button----------------------
467 btn = elm_button_add(outer_layout);
468 elm_object_style_set(btn, "bottom");
469 elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_BTN));
470 //elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_BTN);
471 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
472 elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
474 Evas_Object* ic = elm_image_add(btn);
475 elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
476 string path = get_resource_path();
477 string path_ic = path + "/images/w_sip_number_btn_ic.png";
478 elm_image_file_set(ic, path_ic.c_str(), NULL);
479 elm_object_content_set(btn, ic);
481 evas_object_smart_callback_add(btn, "clicked", _response_cb2, ad);
483 evas_object_show(outer_layout);
485 elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
490 static void _ise_voice_tos_anchor_clicked(void *data, Evas_Object *obj, void *event_info)
492 App_Data* ad = (App_Data*)data;
497 Elm_Entry_Anchor_Info *ainfo = (Elm_Entry_Anchor_Info*)event_info;
499 PRINTFUNC(DLOG_DEBUG, "ainfo->name = %s", ainfo->name);
501 if (!strncmp(ainfo->name, "\"http://", 8)) {
502 show_terms(data, obj, ainfo);
504 } else if (!strncmp(ainfo->name, "\"file://", 8)) {
506 Evas_Object *senconds_layout = create_tos_second_page(ad);
508 Elm_Object_Item *nit = NULL;
509 nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, senconds_layout, "empty");
510 elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb2, NULL);
511 elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
516 Evas_Object *create_tos_popup(void *data)
518 App_Data* ad = (App_Data*)data;
523 PRINTFUNC(DLOG_DEBUG, "");
525 Evas_Object *outer_layout;
526 Evas_Object *inner_layout;
527 Evas_Object *scroller;
528 Evas_Object *circle_scroller;
530 std::string terms = "";
532 string edj_path = get_resource_path();
533 edj_path = edj_path + STT_EDJ_FILE;
535 //------------outer layout----------------------
536 outer_layout = elm_layout_add(ad->naviframe);
537 elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
538 evas_object_show(outer_layout);
540 //------------scroller----------------------
541 scroller = elm_scroller_add(outer_layout);
542 elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
543 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
544 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
545 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
546 elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
547 evas_object_show(scroller);
548 circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
549 eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
550 eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
551 elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
552 g_circle_object_first = circle_scroller;
554 //------------inner layout----------------------
555 inner_layout = elm_layout_add(scroller);
556 elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
557 elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, TOS_TITLE);
558 evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
559 evas_object_smart_callback_add(inner_layout, "language,changed", _language_changed_cb, (void *)1);
561 elm_object_content_set(scroller, inner_layout);
563 //------------entry----------------------
564 Evas_Object *entry = elm_entry_add(inner_layout);
565 elm_entry_editable_set(entry, EINA_FALSE);
566 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
567 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
568 evas_object_show(entry);
569 evas_object_smart_callback_add(entry, "anchor,clicked", _ise_voice_tos_anchor_clicked, ad);
570 elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
572 terms = tagging(std::string(gettext(TOS_NUANCE_BODY)));
573 terms = replaceAll(terms , std::string("%s"), std::string(gettext(SK_GEAR_INPUT)));
574 terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
576 elm_entry_entry_set(entry, terms.c_str());
578 elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
580 //------------Bottom Button----------------------
581 btn = elm_button_add(outer_layout);
582 elm_object_style_set(btn, "bottom");
583 elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_AGREE));
584 elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_AGREE);
585 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
586 elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
588 evas_object_smart_callback_add(btn, "clicked", _response_cb, ad);
590 evas_object_show(outer_layout);
592 elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
598 void ise_show_tos_popup(void *data)
600 App_Data* ad = (App_Data*)data;
605 Evas_Object *main_layout = create_tos_popup(ad);
607 Elm_Object_Item *nit = NULL;
608 nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, main_layout, "empty");
609 elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb, NULL);
610 elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
613 //--------------------------------n66--------------------------------------------------
615 static void _ise_voice_tos_n66_anchor_clicked(void *data, Evas_Object *obj, void *event_info)
617 App_Data* ad = (App_Data*)data;
622 _ise_tos_launch_web_link(N66_URL);
623 show_popup_toast(gettext(SK_SHOWING_DETAIL), true);
626 static void _response_n66_cb(void *data, Evas_Object *obj, void *event_info)
628 App_Data* ad = (App_Data*)data;
633 stt_set_user_agreement(true);
635 set_tos_N66_agreed(EINA_TRUE);
638 ise_show_stt_popup(ad);
640 set_disclaimer_flag();
643 static void _n66_language_changed_cb(void *_data, Evas_Object *_obj, void *_event_info)
645 std::string terms = "";
647 Evas_Object* entry = elm_layout_content_get(_obj, "elm.swallow.content");
649 // 1. Get Country Code
650 char *country_code = NULL;
651 // country_code = vconf_get_str(VCONFKEY_CSC_COUNTRY_ISO);
653 // 2. Set String ID depend on Count Code
654 char* popup_title_id = NULL;
655 char* popup_body_id = NULL;
657 if (!strcmp(country_code, "CN")) {
658 popup_title_id = TOS_TITLE_CHN;
659 popup_body_id = TOS_N66_BODY_CHN;
661 popup_title_id = TOS_TITLE;
662 popup_body_id = TOS_N66_BODY;
665 PRINTFUNC(DLOG_ERROR, "Getting Count Code is Error!!! Set default TOS Text!");
666 popup_title_id = TOS_TITLE;
667 popup_body_id = TOS_N66_BODY;
670 // ea_cutlink_h cutlink;
671 // ea_cutlink_create(&cutlink, entry, EA_CUTLINK_USER);
673 /* add a new scheme */
674 // ea_cutlink_scheme_add(cutlink, "hello:", N66_URL);
676 /* set prefix and postfix for a new scheme */
677 // ea_cutlink_prefix_set(cutlink, "hello:",
678 // "<color=#5BB8FFEF underline=on "
679 // "underline_color=#5BB8FFEF>");
680 // ea_cutlink_postfix_set(cutlink, "hello:", "</color>");
684 /* set text for parsing */
685 markup = elm_entry_utf8_to_markup(gettext(popup_body_id));
686 // ea_cutlink_markup_set(cutlink, markup);
688 // ea_cutlink_markup_apply(cutlink, gettext(popup_body_id), &txt);
689 PRINTFUNC(DLOG_DEBUG, "%s", txt);
691 terms = tagging(std::string(gettext(txt)));
692 elm_entry_entry_set(entry, terms.c_str());
699 /* destroy cutlink object */
700 // ea_cutlink_destroy(cutlink);
703 Evas_Object *create_tos_n66_popup(void *data)
705 App_Data* ad = (App_Data*)data;
710 PRINTFUNC(DLOG_DEBUG, "");
712 Evas_Object *outer_layout;
713 Evas_Object *inner_layout;
714 Evas_Object *scroller;
715 Evas_Object *circle_scroller;
717 std::string terms = "";
719 string edj_path = get_resource_path();
720 edj_path = edj_path + STT_EDJ_FILE;
722 // 1. Get Country Code
723 char *country_code = NULL;
724 // country_code = vconf_get_str(VCONFKEY_CSC_COUNTRY_ISO);
726 // 2. Set String ID depend on Count Code
727 char* popup_title_id = NULL;
728 char* popup_body_id = NULL;
730 if (!strcmp(country_code, "CN")) {
731 popup_title_id = TOS_TITLE_CHN;
732 popup_body_id = TOS_N66_BODY_CHN;
734 popup_title_id = TOS_TITLE;
735 popup_body_id = TOS_N66_BODY;
738 PRINTFUNC(DLOG_ERROR, "Getting Count Code is Error!!! Set default TOS Text!");
739 popup_title_id = TOS_TITLE;
740 popup_body_id = TOS_N66_BODY;
744 //------------outer layout----------------------
745 outer_layout = elm_layout_add(ad->naviframe);
746 elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
747 evas_object_show(outer_layout);
749 //------------scroller----------------------
750 scroller = elm_scroller_add(outer_layout);
751 elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
752 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
753 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
754 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
755 elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
756 evas_object_show(scroller);
757 circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
758 eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
759 eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
760 elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
761 g_circle_object_first = circle_scroller;
763 //------------inner layout----------------------
764 inner_layout = elm_layout_add(scroller);
765 elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
766 elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, popup_title_id);
767 evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
768 evas_object_smart_callback_add(inner_layout, "language,changed", _n66_language_changed_cb, NULL);
770 elm_object_content_set(scroller, inner_layout);
772 //------------Entry----------------------
773 Evas_Object *entry = elm_entry_add(inner_layout);
774 elm_entry_editable_set(entry, EINA_FALSE);
775 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
776 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
777 evas_object_show(entry);
778 evas_object_smart_callback_add(entry, "anchor,clicked", _ise_voice_tos_n66_anchor_clicked, ad);
779 elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
781 // ea_cutlink_h cutlink;
782 // ea_cutlink_create(&cutlink, entry, EA_CUTLINK_USER);
784 /* add a new scheme */
785 // ea_cutlink_scheme_add(cutlink, "hello:", N66_URL);
787 /* set prefix and postfix for a new scheme */
788 // ea_cutlink_prefix_set(cutlink, "hello:",
789 // "<color=#5BB8FFEF underline=on "
790 // "underline_color=#5BB8FFEF>");
791 // ea_cutlink_postfix_set(cutlink, "hello:", "</color>");
795 /* set text for parsing */
796 markup = elm_entry_utf8_to_markup(gettext(popup_body_id));
797 // ea_cutlink_markup_set(cutlink, markup);
799 // ea_cutlink_markup_apply(cutlink, gettext(popup_body_id), &txt);
800 PRINTFUNC(DLOG_DEBUG, "%s", txt);
802 terms = tagging(std::string(gettext(txt)));
803 elm_entry_entry_set(entry, terms.c_str());
810 /* destroy cutlink object */
811 // ea_cutlink_destroy(cutlink);
813 elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
815 //------------Bottom Button----------------------
816 btn = elm_button_add(outer_layout);
817 elm_object_style_set(btn, "bottom");
818 elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_AGREE));
819 elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_AGREE);
820 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
821 elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
823 evas_object_smart_callback_add(btn, "clicked", _response_n66_cb, ad);
825 evas_object_show(outer_layout);
827 elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
832 void ise_show_tos_n66_popup(void *data)
834 App_Data* ad = (App_Data*)data;
839 Evas_Object *main_layout = create_tos_n66_popup(ad);
841 Elm_Object_Item *nit = NULL;
842 nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, main_layout, "empty");
843 elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb, NULL);
844 elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);