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