remove dependency about efl-assist package
[platform/core/uifw/inputdelegator.git] / src / w-input-stt-tos.cpp
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include <stdio.h>
18 #include <Elementary.h>
19 #include <Ecore.h>
20 #include <app_common.h>
21 #include <app.h>
22 #include <string>
23 #include <efl_extension.h>
24
25
26 #include <stt.h>
27
28 #include "Debug.h"
29 #include "w-input-selector.h"
30 #include "w-input-stt-ise.h"
31 #include "w-input-stt-voice.h"
32 #include "w-input-stt-tos.h"
33 #include "w-input-stt-tos-text.h"
34
35 using namespace std;
36
37 #define _EDJ(x)  elm_layout_edje_get(x)
38
39 static Evas_Object *g_circle_object_first = NULL;
40
41 #define ISE_PREFERENCE_AGREEMENT "wearable_input_agreement"
42 #define VCONFKEY_USER_AGREEMENT "db/wms/user_agreement/svoice"
43 #define VCONFKEY_USER_AGREED_TOS            "db/private/ise/stt/tos"
44
45 #define N66_URL   "https://account.samsung.com/membership/pp"
46
47 const char *nuance_support_language[12][2] = {
48         {"en_GB", "en"}, // fallback
49         {"de_DE", "de"},
50         {"en_US", "en"},
51         {"es_ES", "es"},
52         {"es_US", "es"},
53         {"fr_FR", "fr"},
54         {"it_IT", "it"},
55         {"pt_BR", "pt"},
56         {"ru_RU", "ru"},
57         {"zh_CN", "zh"},
58         {"ja_JP", "ja"},
59         {"ko_KR", "ko"},
60 };
61
62
63 std::string replaceAll(std::string str, const std::string& from, const std::string& to)
64 {
65     size_t start_pos = 0;
66     while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
67         str.replace(start_pos, from.length(), to);
68         start_pos += to.length();
69     }
70
71     return str;
72 }
73
74 static void __bt_connection_result_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
75 {
76     App_Data* ad = (App_Data*)user_data;
77
78     char *val = NULL;
79
80     if (reply == NULL) {
81         PRINTFUNC(DLOG_ERROR, "service_h is NULL");
82         return;
83     }
84
85     app_control_get_extra_data(reply, "__BT_CONNECTION__", &val);
86     if (val) {
87         if (strcmp(val, "Connected") == 0) {
88             PRINTFUNC(DLOG_ERROR, "BT Connected");
89         } else {
90             PRINTFUNC(DLOG_ERROR, "BT Not Connected");
91         }
92         free(val);
93     }
94
95     if (ad && ad->app_type == APP_TYPE_STT) {
96         PRINTFUNC(DLOG_DEBUG, "APP_TYPE_STT so exit here.");
97         powerUnlock();
98         elm_exit();
99     }
100 }
101
102 void launch_bt_connection_popup(App_Data* data)
103 {
104     PRINTFUNC(DLOG_DEBUG, "Need to launch BT connection popup");
105     app_control_h app_control;
106     app_control_create(&app_control);
107     app_control_set_app_id(app_control, "com.samsung.bt-connection-popup");
108     app_control_add_extra_data(app_control, "msg", "user_defined");
109     app_control_add_extra_data(app_control, "text", gettext("WDS_ST_TPOP_CONNECT_VIA_BLUETOOTH_TO_REVIEW_AND_ACCEPT_THE_LEGAL_NOTICE_ABB"));
110     app_control_add_extra_data(app_control, "title", PACKAGE);
111     app_control_send_launch_request(app_control, __bt_connection_result_cb, NULL);
112     app_control_destroy(app_control);
113 }
114
115 Eina_Bool set_tos_N66_agreed(Eina_Bool bSet)
116 {
117     int ret = vconf_set_bool(VCONFKEY_USER_AGREEMENT, bSet);
118     if ( ret != VCONF_OK ) {
119         PRINTFUNC(DLOG_ERROR, "vconf_set_bool failed ... [%d]!!!", ret);
120         return EINA_FALSE;
121     }
122
123     return EINA_TRUE;
124 }
125
126 Eina_Bool is_tos_N66_agreed()
127 {
128     if (1) return EINA_TRUE;
129
130     int bVal = 0;
131     int ret = 0;
132
133     ret = vconf_get_bool(VCONFKEY_USER_AGREEMENT, &bVal);
134     if (ret != VCONF_OK) {
135         PRINTFUNC(DLOG_ERROR, "VCONFKEY_USER_AGREEMENT vconf_get_bool fail: %d", ret);
136     }
137
138     return bVal? EINA_TRUE : EINA_FALSE;
139 }
140
141 Eina_Bool is_sap_connection()
142 {
143     int wms_connected = 0;
144     Eina_Bool ret = false;
145
146     vconf_get_int(VCONFKEY_WMS_WMANAGER_CONNECTED, &wms_connected);
147
148     if (wms_connected) {
149         int conn_type = -1;
150         vconf_get_int("memory/private/sap/conn_type", &conn_type);
151         if (conn_type == 0) {
152             char *vendor_type = vconf_get_str("db/wms/host_status/vendor");
153             if (vendor_type && !strcmp("LO", vendor_type)) {
154                 ret = true;
155             } else {
156                 ret = false;
157             }
158             if (vendor_type)
159                 free(vendor_type);
160         } else if (conn_type == 1) {
161             ret = true;
162         } else {
163             ret = false;
164         }
165     } else {
166         PRINTFUNC(DLOG_DEBUG, "standalone mode");
167         ret = false;
168     }
169     return ret;
170 }
171
172
173 static void
174 _ise_tos_launch_web_link(std::string url)
175 {
176 /*
177     wnoti_error_e    eError    = WNOTI_ERROR_NONE;
178
179     eError    = wnoti_service_connect();
180     if( eError != WNOTI_ERROR_NONE )
181     {
182         PRINTFUNC(DLOG_ERROR, "wnoti_service_connect failed : [%d]!!!", eError);
183         return;
184     }
185
186     eError    = wnoti_request_to_browse((char*)(char *) "Samsung Keyboard", url.c_str());
187     if( eError != WNOTI_ERROR_NONE )
188     {
189         PRINTFUNC(DLOG_ERROR, "wnoti_request_to_browse failed!!!", eError);
190     }
191
192     eError    = wnoti_service_disconnect();
193     if( eError != WNOTI_ERROR_NONE )
194     {
195         PRINTFUNC(DLOG_ERROR, "wnoti_service_disconnect failed : [%d]!!!", eError);
196     }
197 */
198 }
199
200 static void show_terms(void *data, Evas_Object *obj, void *event_info)
201 {
202     if (!obj) return;
203     if (!data) return;
204     if (!event_info) return;
205
206     int wms_connected = 0;
207     vconf_get_int(VCONFKEY_WMS_WMANAGER_CONNECTED, &wms_connected);
208
209     if (wms_connected == 1) {
210          // companion mode
211         Evas_Smart_Cb_Description * desc = (Evas_Smart_Cb_Description*)event_info;
212         std::string tempurl = desc->name;
213
214         std::string::size_type n = tempurl.find_first_not_of(" \"");
215         if (n != std::string::npos) {
216             tempurl = tempurl.substr(n, tempurl.length());
217         }
218
219         n = tempurl.find_last_not_of(" \"");
220         if (n != std::string::npos) {
221             tempurl = tempurl.substr(0, n + 1);
222         }
223
224         //----------------------url construction-----------------
225
226             int find_it = 0;
227             char *locale = vconf_get_str(VCONFKEY_LANGSET);
228             if (locale) {
229                 PRINTFUNC(DLOG_DEBUG, "locale = %s", locale);
230
231                 int i = 0;
232                 while (nuance_support_language[i][0] != NULL) {
233                     if (strstr(locale, nuance_support_language[i][0])) {
234                         find_it = i;
235                         break;
236                     }
237                     i++;
238                 }
239                 free(locale);
240             }
241
242         _ise_tos_launch_web_link(tempurl+ "/" + nuance_support_language[find_it][1]);
243
244         show_popup_toast(gettext("WDS_MYMAG_TPOP_SHOWING_DETAILS_ON_YOUR_PHONE_ING"), true);
245     } else {
246          // stand alone mode
247     }
248 }
249
250 static void _response_cb2(void *data, Evas_Object *obj, void *event_info)
251 {
252     App_Data* ad = (App_Data*)data;
253
254     if (!ad)
255         return;
256
257     if (obj)
258         elm_object_disabled_set(obj, EINA_TRUE);
259
260     elm_naviframe_item_pop(ad->naviframe);
261 }
262
263 static Eina_Bool
264 _naviframe_pop_cb2(void *data , Elm_Object_Item *it)
265 {
266     PRINTFUNC(DLOG_DEBUG, "");
267
268     if (g_circle_object_first)
269         eext_rotary_object_event_activated_set(g_circle_object_first, EINA_TRUE);
270
271     return EINA_TRUE;
272 }
273
274 static void _response_cb(void *data, Evas_Object *obj, void *event_info)
275 {
276     PRINTFUNC(DLOG_DEBUG, "");
277
278     App_Data* ad = (App_Data*)data;
279
280     if (!ad) return;
281
282     set_tos_N66_agreed(EINA_TRUE);
283
284     ise_show_stt_popup(ad);
285
286     set_disclaimer_flag();
287 }
288
289 static Eina_Bool
290 _naviframe_pop_cb(void *data , Elm_Object_Item *it)
291 {
292     PRINTFUNC(DLOG_DEBUG, "");
293
294     _back_to_genlist_for_selector();
295
296     return EINA_TRUE;
297 }
298
299
300 std::string getColorStyle(const char *code)
301 {
302     std::string strRet;
303     int r = 0xFF, g = 0xFF, b = 0xFF, a = 0xFF;
304     char strColor[256];
305 //    ea_theme_color_get(code, &r, &g, &b, &a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
306     snprintf(strColor, 256, "<color=#%02x%02x%02x%02x>", r, g, b, a);
307
308     strRet.append(strColor);
309     return strRet;
310 }
311
312 std::string getFontStyle(const char *code)
313 {
314     std::string strRet;
315 //    int r = 0xFF, g = 0xFF, b = 0xFF, a = 0xFF;
316 //    char *fontStyle;
317 //    int  fontSize;
318 //    char strColor[256];
319 //    char strFont[256];
320 //    ea_theme_color_get(code, &r, &g, &b, &a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
321 //    snprintf(strColor, 256, "<color=#%02x%02x%02x%02x>", r, g, b, a);
322
323 //    ea_theme_font_get(code,&fontStyle,&fontSize);
324 /*
325     if (fontStyle) {
326         snprintf(strFont, 256, "<font=Tizen:style=%s><font_size=%d>", fontStyle, fontSize);
327     } else {
328         snprintf(strFont, 256, "<font=Tizen:style=Regular><font_size=%d>", fontSize);
329     }
330     strRet.append(strFont);
331     strRet.append(strColor);
332     PRINTFUNC(DLOG_DEBUG, "====strRect==%s", strRet.c_str());
333     //after uifw finish patch, this free must open, otherwise it will have memory leak
334     if (fontStyle) {
335         free(fontStyle);
336         fontStyle = NULL;
337     }
338 */
339     return strRet;
340 }
341
342 static std::string tagging(const std::string& str)
343 {
344     std::string link_start = "<a href=";
345     std::string link_end = "</a>";
346     std::string label = str;
347     std::string tag_str = "";
348     std::string link_color = "";
349
350     tag_str.append(getFontStyle("T142"));
351     link_color.append(getColorStyle("T1611"));
352
353     std::string::size_type found = label.find(link_start);
354
355     while (found != std::string::npos) {
356         tag_str.append(label, 0, found);
357         tag_str.append(link_color);
358
359         std::string::size_type end_pos = label.find(link_end);
360         tag_str.append(label, found, end_pos-found);
361         tag_str.append("</a>");
362         tag_str.append("</color>");
363         label = label.substr(end_pos+4);
364         found = label.find(link_start);
365     }
366
367     tag_str.append(label);
368     tag_str.append("</font_size></color></font>");
369
370     return tag_str;
371 }
372
373 static void _language_changed_cb(void *_data, Evas_Object *_obj, void *_event_info)
374 {
375     if (!_obj) return ;
376     if (!_data) return ;
377
378     int index = (int)_data;
379     std::string terms = "";
380
381     char body_str[40000];
382
383     switch (index) {
384         case 1: {
385             const char *format = gettext("LDS_IME_BODY_INFORMATION_PROVISION_AGREEMENT_P1_LEGALPHRASE_WC1");
386             snprintf(body_str, sizeof(body_str), format, " <a href=\"file://local-nuance-tos\">", "</a>", "<a href=\"http://www.vlingo.com/wap/samsung-asr-privacy-addendum\">", "</a>");
387             terms = tagging(std::string(body_str));
388             terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
389             elm_entry_entry_set(elm_layout_content_get(_obj, "elm.swallow.content"), terms.c_str());
390             }
391         break;
392         case 2:
393             terms = tagging(std::string(gettext(TOS_BODY2))+ std::string("<br>") + std::string(gettext(TOS_BODY3)));
394             terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
395             elm_entry_entry_set(elm_layout_content_get(_obj, "elm.swallow.content"), terms.c_str());
396         break;
397         default:
398         break;
399     }
400 }
401
402 Evas_Object *create_tos_second_page(void* data){
403     App_Data* ad = (App_Data*)data;
404
405     if (!ad)
406         return NULL;
407
408     PRINTFUNC(DLOG_DEBUG, "");
409     Evas_Object *btn;
410     Evas_Object *outer_layout;
411     Evas_Object *inner_layout;
412     Evas_Object *scroller;
413     Evas_Object *circle_scroller;
414
415     std::string terms = "";
416
417     string edj_path = get_resource_path();
418     edj_path = edj_path + STT_EDJ_FILE;
419
420 //------------outer layout----------------------
421     outer_layout = elm_layout_add(ad->naviframe);
422     elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
423     evas_object_show(outer_layout);
424
425 //------------scroller----------------------
426     scroller = elm_scroller_add(outer_layout);
427     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
428     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
429     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
430     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
431     elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
432     evas_object_show(scroller);
433     circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
434     eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
435     eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
436     elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
437
438 //------------inner layout----------------------
439     inner_layout = elm_layout_add(scroller);
440     elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
441     elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, TOS_TITLE);
442     evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
443     evas_object_smart_callback_add(inner_layout, "language,changed", _language_changed_cb, (void *)2);
444
445     elm_object_content_set(scroller, inner_layout);
446
447 //------------entry----------------------
448     Evas_Object *entry    = elm_entry_add(inner_layout);
449     elm_entry_editable_set(entry, EINA_FALSE);
450     evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
451     evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
452     evas_object_show(entry);
453     elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
454
455     terms = tagging(std::string(gettext(TOS_BODY2))+ std::string("<br>")+ std::string(gettext(TOS_BODY3)));
456     terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
457
458     elm_entry_entry_set(entry, terms.c_str());
459
460     elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
461
462 //------------Bottom Button----------------------
463     btn = elm_button_add(outer_layout);
464     elm_object_style_set(btn, "bottom");
465     elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_BTN));
466     //elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_BTN);
467     evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
468     elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
469
470     Evas_Object* ic = elm_image_add(btn);
471     elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
472     string path = get_resource_path();
473     string path_ic = path + "/images/w_sip_number_btn_ic.png";
474     elm_image_file_set(ic, path_ic.c_str(), NULL);
475     elm_object_content_set(btn, ic);
476
477     evas_object_smart_callback_add(btn, "clicked", _response_cb2, ad);
478
479     evas_object_show(outer_layout);
480
481     elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
482
483     return outer_layout;
484 }
485
486 static void _ise_voice_tos_anchor_clicked(void *data, Evas_Object *obj, void *event_info)
487 {
488     App_Data* ad = (App_Data*)data;
489
490     if (!ad)
491         return;
492
493     Elm_Entry_Anchor_Info *ainfo = (Elm_Entry_Anchor_Info*)event_info;
494
495     PRINTFUNC(DLOG_DEBUG, "ainfo->name = %s", ainfo->name);
496
497     if (!strncmp(ainfo->name, "\"http://", 8)) {
498         show_terms(data, obj, ainfo);
499     } else if (!strncmp(ainfo->name, "\"file://", 8)) {
500         Evas_Object *senconds_layout = create_tos_second_page(ad);
501         Elm_Object_Item *nit = NULL;
502         nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, senconds_layout, "empty");
503         elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb2, NULL);
504         elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
505     }
506 }
507
508 Evas_Object *create_tos_popup(void *data)
509 {
510     App_Data* ad = (App_Data*)data;
511
512     if (!ad)
513         return NULL;
514
515     PRINTFUNC(DLOG_DEBUG, "");
516     Evas_Object *btn;
517     Evas_Object *outer_layout;
518     Evas_Object *inner_layout;
519     Evas_Object *scroller;
520     Evas_Object *circle_scroller;
521
522     std::string terms = "";
523
524     string edj_path = get_resource_path();
525     edj_path = edj_path + STT_EDJ_FILE;
526
527 //------------outer layout----------------------
528     outer_layout = elm_layout_add(ad->naviframe);
529     elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
530     evas_object_show(outer_layout);
531
532 //------------scroller----------------------
533     scroller = elm_scroller_add(outer_layout);
534     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
535     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
536     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
537     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
538     elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
539     evas_object_show(scroller);
540     circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
541     eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
542     eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
543     elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
544     g_circle_object_first = circle_scroller;
545
546 //------------inner layout----------------------
547     inner_layout = elm_layout_add(scroller);
548     elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
549     elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, TOS_TITLE);
550     evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
551     evas_object_smart_callback_add(inner_layout, "language,changed", _language_changed_cb, (void *)1);
552
553     elm_object_content_set(scroller, inner_layout);
554
555 //------------entry----------------------
556     Evas_Object *entry    = elm_entry_add(inner_layout);
557     elm_entry_editable_set(entry, EINA_FALSE);
558     evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
559     evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
560     evas_object_show(entry);
561     evas_object_smart_callback_add(entry, "anchor,clicked", _ise_voice_tos_anchor_clicked, ad);
562     elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
563
564     terms = tagging(std::string(gettext(TOS_NUANCE_BODY)));
565     terms = replaceAll(terms , std::string("%s"), std::string(gettext(SK_GEAR_INPUT)));
566     terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
567
568     elm_entry_entry_set(entry, terms.c_str());
569
570     elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
571
572 //------------Bottom Button----------------------
573     btn = elm_button_add(outer_layout);
574     elm_object_style_set(btn, "bottom");
575     elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_AGREE));
576     elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_AGREE);
577     evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
578     elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
579
580     evas_object_smart_callback_add(btn, "clicked", _response_cb, ad);
581
582     evas_object_show(outer_layout);
583
584     elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
585
586     return outer_layout;
587 }
588
589
590 void ise_show_tos_popup(void *data)
591 {
592     App_Data* ad = (App_Data*)data;
593
594     if (!ad)
595      return;
596
597     Evas_Object *main_layout = create_tos_popup(ad);
598
599     Elm_Object_Item *nit = NULL;
600     nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, main_layout, "empty");
601     elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb, NULL);
602     elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
603 }
604
605 //--------------------------------n66--------------------------------------------------
606
607 static void _ise_voice_tos_n66_anchor_clicked(void *data, Evas_Object *obj, void *event_info)
608 {
609     App_Data* ad = (App_Data*)data;
610
611     if (!ad)
612         return;
613
614     _ise_tos_launch_web_link(N66_URL);
615     show_popup_toast(gettext(SK_SHOWING_DETAIL), true);
616 }
617
618 static void _response_n66_cb(void *data, Evas_Object *obj, void *event_info)
619 {
620     App_Data* ad = (App_Data*)data;
621
622     if (!ad) return;
623
624 #if 0
625     stt_set_user_agreement(true);
626 #else
627     set_tos_N66_agreed(EINA_TRUE);
628 #endif
629
630     ise_show_stt_popup(ad);
631
632     set_disclaimer_flag();
633 }
634
635 static void _n66_language_changed_cb(void *_data, Evas_Object *_obj, void *_event_info)
636 {
637 }
638
639 Evas_Object *create_tos_n66_popup(void *data)
640 {
641     App_Data* ad = (App_Data*)data;
642
643     if (!ad)
644         return NULL;
645
646     PRINTFUNC(DLOG_DEBUG, "");
647     Evas_Object *btn;
648     Evas_Object *outer_layout;
649     Evas_Object *inner_layout;
650     Evas_Object *scroller;
651     Evas_Object *circle_scroller;
652
653     std::string terms = "";
654
655     string edj_path = get_resource_path();
656     edj_path = edj_path + STT_EDJ_FILE;
657
658     // 1. Get Country Code
659 //    char *country_code = NULL;
660 //    country_code = vconf_get_str(VCONFKEY_CSC_COUNTRY_ISO);
661
662     // 2. Set String ID depend on Count Code
663     char* popup_title_id = NULL;
664     char* popup_body_id = NULL;
665 //    if (country_code) {
666 //        if (!strcmp(country_code, "CN")) {
667 //            popup_title_id = TOS_TITLE_CHN;
668 //            popup_body_id = TOS_N66_BODY_CHN;
669 //        } else {
670 //            popup_title_id = TOS_TITLE;
671 //            popup_body_id = TOS_N66_BODY;
672 //        }
673 //    } else {
674         PRINTFUNC(DLOG_ERROR, "Getting Count Code is Error!!! Set default TOS Text!");
675 //        popup_title_id = TOS_TITLE;
676 //        popup_body_id = TOS_N66_BODY;
677 //    }
678
679
680 //------------outer layout----------------------
681     outer_layout = elm_layout_add(ad->naviframe);
682     elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
683     evas_object_show(outer_layout);
684
685 //------------scroller----------------------
686     scroller = elm_scroller_add(outer_layout);
687     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
688     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
689     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
690     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
691     elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
692     evas_object_show(scroller);
693     circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
694     eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
695     eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
696     elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
697     g_circle_object_first = circle_scroller;
698
699 //------------inner layout----------------------
700     inner_layout = elm_layout_add(scroller);
701     elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
702     elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, popup_title_id);
703     evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
704     evas_object_smart_callback_add(inner_layout, "language,changed", _n66_language_changed_cb, NULL);
705
706     elm_object_content_set(scroller, inner_layout);
707
708 //------------Entry----------------------
709     Evas_Object *entry    = elm_entry_add(inner_layout);
710     elm_entry_editable_set(entry, EINA_FALSE);
711     evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
712     evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
713     evas_object_show(entry);
714     evas_object_smart_callback_add(entry, "anchor,clicked", _ise_voice_tos_n66_anchor_clicked, ad);
715     elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
716
717 //    ea_cutlink_h cutlink;
718 //    ea_cutlink_create(&cutlink, entry, EA_CUTLINK_USER);
719
720     /* add a new scheme */
721 //    ea_cutlink_scheme_add(cutlink, "hello:", N66_URL);
722
723     /* set prefix and postfix for a new scheme */
724 //    ea_cutlink_prefix_set(cutlink, "hello:",
725 //                  "<color=#5BB8FFEF underline=on "
726 //                  "underline_color=#5BB8FFEF>");
727 //    ea_cutlink_postfix_set(cutlink, "hello:", "</color>");
728
729     char *markup = NULL;
730     char *txt = NULL;
731     /* set text for parsing */
732     markup = elm_entry_utf8_to_markup(gettext(popup_body_id));
733 //    ea_cutlink_markup_set(cutlink, markup);
734
735 //    ea_cutlink_markup_apply(cutlink, gettext(popup_body_id), &txt);
736     PRINTFUNC(DLOG_DEBUG, "%s", txt);
737
738     terms = tagging(std::string(gettext(txt)));
739     elm_entry_entry_set(entry, terms.c_str());
740
741 //    if (txt)
742 //        free(txt);
743
744     if (markup)
745         free(markup);
746     /* destroy cutlink object */
747 //    ea_cutlink_destroy(cutlink);
748
749     elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
750
751 //------------Bottom Button----------------------
752     btn = elm_button_add(outer_layout);
753     elm_object_style_set(btn, "bottom");
754     elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_AGREE));
755     elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_AGREE);
756     evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
757     elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
758
759     evas_object_smart_callback_add(btn, "clicked", _response_n66_cb, ad);
760
761     evas_object_show(outer_layout);
762
763     elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
764
765     return outer_layout;
766 }
767
768 void ise_show_tos_n66_popup(void *data)
769 {
770     App_Data* ad = (App_Data*)data;
771
772     if (!ad)
773      return;
774
775     Evas_Object *main_layout = create_tos_n66_popup(ad);
776
777     Elm_Object_Item *nit = NULL;
778     nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, main_layout, "empty");
779     elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb, NULL);
780     elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
781 }
782
783
784
785