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