Exclude aarch64 in build option
[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     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     App_Data* ad = (App_Data*)data;
106
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);
116 }
117
118
119 Eina_Bool set_tos_N66_agreed(Eina_Bool bSet)
120 {
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);
124         return EINA_FALSE;
125     }
126
127     return EINA_TRUE;
128 }
129
130 Eina_Bool is_tos_N66_agreed()
131 {
132     if (1) return EINA_TRUE;
133
134     int bVal = 0;
135     int ret = 0;
136
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);
140     }
141
142     return bVal? EINA_TRUE : EINA_FALSE;
143 }
144
145 Eina_Bool is_sap_connection()
146 {
147     int wms_connected = 0;
148     Eina_Bool ret = false;
149
150     vconf_get_int(VCONFKEY_WMS_WMANAGER_CONNECTED, &wms_connected);
151
152     if (wms_connected) {
153         int conn_type = -1;
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)) {
158                 ret = true;
159             } else {
160                 ret = false;
161             }
162             if (vendor_type)
163                 free(vendor_type);
164         } else if (conn_type == 1) {
165             ret = true;
166         } else {
167             ret = false;
168         }
169     } else {
170         PRINTFUNC(DLOG_DEBUG, "standalone mode");
171         ret = false;
172     }
173     return ret;
174 }
175
176
177 static void
178 _ise_tos_launch_web_link(std::string url)
179 {
180 /*
181     wnoti_error_e    eError    = WNOTI_ERROR_NONE;
182
183     eError    = wnoti_service_connect();
184     if( eError != WNOTI_ERROR_NONE )
185     {
186         PRINTFUNC(DLOG_ERROR, "wnoti_service_connect failed : [%d]!!!", eError);
187         return;
188     }
189
190     eError    = wnoti_request_to_browse((char*)(char *) "Samsung Keyboard", url.c_str());
191     if( eError != WNOTI_ERROR_NONE )
192     {
193         PRINTFUNC(DLOG_ERROR, "wnoti_request_to_browse failed!!!", eError);
194     }
195
196     eError    = wnoti_service_disconnect();
197     if( eError != WNOTI_ERROR_NONE )
198     {
199         PRINTFUNC(DLOG_ERROR, "wnoti_service_disconnect failed : [%d]!!!", eError);
200     }
201 */
202 }
203
204 static void show_terms(void *data, Evas_Object *obj, void *event_info)
205 {
206     if (!obj) return;
207     if (!data) return;
208     if (!event_info) return;
209
210     Evas_Object *parent_win = (Evas_Object *)data;
211
212     int wms_connected = 0;
213     vconf_get_int(VCONFKEY_WMS_WMANAGER_CONNECTED, &wms_connected);
214
215     if (wms_connected == 1) {
216          // companion mode
217         Evas_Smart_Cb_Description * desc = (Evas_Smart_Cb_Description*)event_info;
218         std::string tempurl = desc->name;
219
220         std::string::size_type n = tempurl.find_first_not_of(" \"");
221         if (n != std::string::npos) {
222             tempurl = tempurl.substr(n, tempurl.length());
223         }
224
225         n = tempurl.find_last_not_of(" \"");
226         if (n != std::string::npos) {
227             tempurl = tempurl.substr(0, n + 1);
228         }
229
230         //----------------------url construction-----------------
231
232             int find_it = 0;
233             char *locale = vconf_get_str(VCONFKEY_LANGSET);
234             if (locale) {
235                 PRINTFUNC(DLOG_DEBUG, "locale = %s", locale);
236
237                 int i = 0;
238                 while (nuance_support_language[i][0] != NULL) {
239                     if (strstr(locale, nuance_support_language[i][0])) {
240                         find_it = i;
241                         break;
242                     }
243                     i++;
244                 }
245                 free(locale);
246             }
247
248         _ise_tos_launch_web_link(tempurl+ "/" + nuance_support_language[find_it][1]);
249
250         show_popup_toast(gettext("WDS_MYMAG_TPOP_SHOWING_DETAILS_ON_YOUR_PHONE_ING"), true);
251     } else {
252          // stand alone mode
253     }
254 }
255
256 static void _response_cb2(void *data, Evas_Object *obj, void *event_info)
257 {
258     App_Data* ad = (App_Data*)data;
259
260     if (!ad)
261         return;
262
263     if (obj)
264         elm_object_disabled_set(obj, EINA_TRUE);
265
266     elm_naviframe_item_pop(ad->naviframe);
267 }
268
269 static Eina_Bool
270 _naviframe_pop_cb2(void *data , Elm_Object_Item *it)
271 {
272     PRINTFUNC(DLOG_DEBUG, "");
273
274     if (g_circle_object_first)
275         eext_rotary_object_event_activated_set(g_circle_object_first, EINA_TRUE);
276
277     return EINA_TRUE;
278 }
279
280 static void _response_cb(void *data, Evas_Object *obj, void *event_info)
281 {
282     PRINTFUNC(DLOG_DEBUG, "");
283
284     App_Data* ad = (App_Data*)data;
285
286     if (!ad) return;
287
288     set_tos_N66_agreed(EINA_TRUE);
289
290     ise_show_stt_popup(ad);
291
292     set_disclaimer_flag();
293 }
294
295 static Eina_Bool
296 _naviframe_pop_cb(void *data , Elm_Object_Item *it)
297 {
298     PRINTFUNC(DLOG_DEBUG, "");
299
300     _back_to_genlist_for_selector();
301
302     return EINA_TRUE;
303 }
304
305
306 std::string getColorStyle(const char *code)
307 {
308     std::string strRet;
309     int r, g, b, a;
310     char strColor[256];
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);
313
314     strRet.append(strColor);
315     return strRet;
316 }
317
318 std::string getFontStyle(const char *code)
319 {
320     std::string strRet;
321     int r, g, b, a;
322     char *fontStyle;
323     int  fontSize;
324     char strColor[256];
325     char strFont[256];
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);
328
329 //    ea_theme_font_get(code,&fontStyle,&fontSize);
330 /*
331     if (fontStyle) {
332         snprintf(strFont, 256, "<font=Tizen:style=%s><font_size=%d>", fontStyle, fontSize);
333     } else {
334         snprintf(strFont, 256, "<font=Tizen:style=Regular><font_size=%d>", fontSize);
335     }
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
340     if (fontStyle) {
341         free(fontStyle);
342         fontStyle = NULL;
343     }
344 */
345     return strRet;
346 }
347
348 static std::string tagging(const std::string& str)
349 {
350     std::string link_start = "<a href=";
351     std::string link_end = "</a>";
352     std::string label = str;
353     std::string tag_str = "";
354     std::string link_color = "";
355
356     tag_str.append(getFontStyle("T142"));
357     link_color.append(getColorStyle("T1611"));
358
359     std::string::size_type found = label.find(link_start);
360
361     while (found != std::string::npos) {
362         tag_str.append(label, 0, found);
363         tag_str.append(link_color);
364
365         std::string::size_type end_pos = label.find(link_end);
366         tag_str.append(label, found, end_pos-found);
367         tag_str.append("</a>");
368         tag_str.append("</color>");
369         label = label.substr(end_pos+4);
370         found = label.find(link_start);
371     }
372
373     tag_str.append(label);
374     tag_str.append("</font_size></color></font>");
375
376     return tag_str;
377 }
378
379 static void _language_changed_cb(void *_data, Evas_Object *_obj, void *_event_info)
380 {
381     if (!_obj) return ;
382     if (!_data) return ;
383
384     int index = (int)_data;
385     std::string terms = "";
386     Elm_Object_Item *navi_it = NULL;
387
388     char body_str[40000];
389
390     switch (index) {
391         case 1:
392             snprintf(body_str, sizeof(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>");
393             terms = tagging(std::string(body_str));
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         case 2:
398             terms = tagging(std::string(gettext(TOS_BODY2))+ std::string("<br>") + std::string(gettext(TOS_BODY3)));
399             terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
400             elm_entry_entry_set(elm_layout_content_get(_obj, "elm.swallow.content"), terms.c_str());
401         break;
402         default:
403         break;
404     }
405 }
406
407 Evas_Object *create_tos_second_page(void* data){
408     App_Data* ad = (App_Data*)data;
409
410     if (!ad)
411         return NULL;
412
413     PRINTFUNC(DLOG_DEBUG, "");
414     Evas_Object *btn;
415     Evas_Object *outer_layout;
416     Evas_Object *inner_layout;
417     Evas_Object *scroller;
418     Evas_Object *circle_scroller;
419
420     std::string terms = "";
421
422     string edj_path = get_resource_path();
423     edj_path = edj_path + STT_EDJ_FILE;
424
425 //------------outer layout----------------------
426     outer_layout = elm_layout_add(ad->naviframe);
427     elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
428     evas_object_show(outer_layout);
429
430 //------------scroller----------------------
431     scroller = elm_scroller_add(outer_layout);
432     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
433     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
434     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
435     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
436     elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
437     evas_object_show(scroller);
438     circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
439     eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
440     eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
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
505     } else if (!strncmp(ainfo->name, "\"file://", 8)) {
506 /*
507         Evas_Object *senconds_layout = create_tos_second_page(ad);
508
509         Elm_Object_Item *nit = NULL;
510         nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, senconds_layout, "empty");
511         elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb2, NULL);
512         elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
513 */
514     }
515 }
516
517 Evas_Object *create_tos_popup(void *data)
518 {
519     App_Data* ad = (App_Data*)data;
520
521     if (!ad)
522         return NULL;
523
524     PRINTFUNC(DLOG_DEBUG, "");
525     Evas_Object *btn;
526     Evas_Object *outer_layout;
527     Evas_Object *inner_layout;
528     Evas_Object *scroller;
529     Evas_Object *circle_scroller;
530
531     std::string terms = "";
532
533     string edj_path = get_resource_path();
534     edj_path = edj_path + STT_EDJ_FILE;
535
536 //------------outer layout----------------------
537     outer_layout = elm_layout_add(ad->naviframe);
538     elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
539     evas_object_show(outer_layout);
540
541 //------------scroller----------------------
542     scroller = elm_scroller_add(outer_layout);
543     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
544     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
545     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
546     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
547     elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
548     evas_object_show(scroller);
549     circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
550     eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
551     eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
552     elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
553     g_circle_object_first = circle_scroller;
554
555 //------------inner layout----------------------
556     inner_layout = elm_layout_add(scroller);
557     elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
558     elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, TOS_TITLE);
559     evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
560     evas_object_smart_callback_add(inner_layout, "language,changed", _language_changed_cb, (void *)1);
561
562     elm_object_content_set(scroller, inner_layout);
563
564 //------------entry----------------------
565     Evas_Object *entry    = elm_entry_add(inner_layout);
566     elm_entry_editable_set(entry, EINA_FALSE);
567     evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
568     evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
569     evas_object_show(entry);
570     evas_object_smart_callback_add(entry, "anchor,clicked", _ise_voice_tos_anchor_clicked, ad);
571     elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
572
573     terms = tagging(std::string(gettext(TOS_NUANCE_BODY)));
574     terms = replaceAll(terms , std::string("%s"), std::string(gettext(SK_GEAR_INPUT)));
575     terms = replaceAll(terms , std::string("\n"), std::string("<br>"));
576
577     elm_entry_entry_set(entry, terms.c_str());
578
579     elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
580
581 //------------Bottom Button----------------------
582     btn = elm_button_add(outer_layout);
583     elm_object_style_set(btn, "bottom");
584     elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_AGREE));
585     elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_AGREE);
586     evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
587     elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
588
589     evas_object_smart_callback_add(btn, "clicked", _response_cb, ad);
590
591     evas_object_show(outer_layout);
592
593     elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
594
595     return outer_layout;
596 }
597
598
599 void ise_show_tos_popup(void *data)
600 {
601     App_Data* ad = (App_Data*)data;
602
603     if (!ad)
604      return;
605
606     Evas_Object *main_layout = create_tos_popup(ad);
607
608     Elm_Object_Item *nit = NULL;
609     nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, main_layout, "empty");
610     elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb, NULL);
611     elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
612 }
613
614 //--------------------------------n66--------------------------------------------------
615
616 static void _ise_voice_tos_n66_anchor_clicked(void *data, Evas_Object *obj, void *event_info)
617 {
618     App_Data* ad = (App_Data*)data;
619
620     if (!ad)
621         return;
622
623     _ise_tos_launch_web_link(N66_URL);
624     show_popup_toast(gettext(SK_SHOWING_DETAIL), true);
625 }
626
627 static void _response_n66_cb(void *data, Evas_Object *obj, void *event_info)
628 {
629     App_Data* ad = (App_Data*)data;
630
631     if (!ad) return;
632
633 #if 0
634     stt_set_user_agreement(true);
635 #else
636     set_tos_N66_agreed(EINA_TRUE);
637 #endif
638
639     ise_show_stt_popup(ad);
640
641     set_disclaimer_flag();
642 }
643
644 static void _n66_language_changed_cb(void *_data, Evas_Object *_obj, void *_event_info)
645 {
646     std::string terms = "";
647
648     Evas_Object* entry = elm_layout_content_get(_obj, "elm.swallow.content");
649
650     // 1. Get Country Code
651     char *country_code = NULL;
652 //    country_code = vconf_get_str(VCONFKEY_CSC_COUNTRY_ISO);
653
654     // 2. Set String ID depend on Count Code
655     char* popup_title_id = NULL;
656     char* popup_body_id = NULL;
657 //    if (country_code) {
658 //        if (!strcmp(country_code, "CN")) {
659 //            popup_title_id = TOS_TITLE_CHN;
660 //            popup_body_id = TOS_N66_BODY_CHN;
661 //        } else {
662 //            popup_title_id = TOS_TITLE;
663 //            popup_body_id = TOS_N66_BODY;
664 //        }
665 //    } else {
666         PRINTFUNC(DLOG_ERROR, "Getting Count Code is Error!!! Set default TOS Text!");
667         popup_title_id = TOS_TITLE;
668         popup_body_id = TOS_N66_BODY;
669 //    }
670
671 //    ea_cutlink_h cutlink;
672 //    ea_cutlink_create(&cutlink, entry, EA_CUTLINK_USER);
673
674     /* add a new scheme */
675 //    ea_cutlink_scheme_add(cutlink, "hello:", N66_URL);
676
677     /* set prefix and postfix for a new scheme */
678 //    ea_cutlink_prefix_set(cutlink, "hello:",
679 //                  "<color=#5BB8FFEF underline=on "
680 //                  "underline_color=#5BB8FFEF>");
681 //    ea_cutlink_postfix_set(cutlink, "hello:", "</color>");
682
683     char *markup = NULL;
684     char *txt = NULL;
685     /* set text for parsing */
686     markup = elm_entry_utf8_to_markup(gettext(popup_body_id));
687 //    ea_cutlink_markup_set(cutlink, markup);
688
689 //    ea_cutlink_markup_apply(cutlink, gettext(popup_body_id), &txt);
690     PRINTFUNC(DLOG_DEBUG, "%s", txt);
691
692     terms = tagging(std::string(gettext(txt)));
693     elm_entry_entry_set(entry, terms.c_str());
694
695 //    if (txt)
696 //        free(txt);
697
698     if (markup)
699         free(markup);
700     /* destroy cutlink object */
701 //    ea_cutlink_destroy(cutlink);
702 }
703
704 Evas_Object *create_tos_n66_popup(void *data)
705 {
706     App_Data* ad = (App_Data*)data;
707
708     if (!ad)
709         return NULL;
710
711     PRINTFUNC(DLOG_DEBUG, "");
712     Evas_Object *btn;
713     Evas_Object *outer_layout;
714     Evas_Object *inner_layout;
715     Evas_Object *scroller;
716     Evas_Object *circle_scroller;
717
718     std::string terms = "";
719
720     string edj_path = get_resource_path();
721     edj_path = edj_path + STT_EDJ_FILE;
722
723     // 1. Get Country Code
724     char *country_code = NULL;
725 //    country_code = vconf_get_str(VCONFKEY_CSC_COUNTRY_ISO);
726
727     // 2. Set String ID depend on Count Code
728     char* popup_title_id = NULL;
729     char* popup_body_id = NULL;
730 //    if (country_code) {
731 //        if (!strcmp(country_code, "CN")) {
732 //            popup_title_id = TOS_TITLE_CHN;
733 //            popup_body_id = TOS_N66_BODY_CHN;
734 //        } else {
735 //            popup_title_id = TOS_TITLE;
736 //            popup_body_id = TOS_N66_BODY;
737 //        }
738 //    } else {
739         PRINTFUNC(DLOG_ERROR, "Getting Count Code is Error!!! Set default TOS Text!");
740         popup_title_id = TOS_TITLE;
741         popup_body_id = TOS_N66_BODY;
742 //    }
743
744
745 //------------outer layout----------------------
746     outer_layout = elm_layout_add(ad->naviframe);
747     elm_layout_theme_set(outer_layout, "layout", "bottom_button", "default");
748     evas_object_show(outer_layout);
749
750 //------------scroller----------------------
751     scroller = elm_scroller_add(outer_layout);
752     elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
753     evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
754     evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
755     elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
756     elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
757     evas_object_show(scroller);
758     circle_scroller = eext_circle_object_scroller_add(scroller, ad->circle_surface);
759     eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
760     eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
761     elm_object_part_content_set(outer_layout, "elm.swallow.content", scroller);
762     g_circle_object_first = circle_scroller;
763
764 //------------inner layout----------------------
765     inner_layout = elm_layout_add(scroller);
766     elm_layout_file_set(inner_layout, edj_path.c_str(), "elm_naviframe_item_basic_customized");
767     elm_object_domain_translatable_part_text_set(inner_layout, "elm.text.title", PACKAGE, popup_title_id);
768     evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
769     evas_object_smart_callback_add(inner_layout, "language,changed", _n66_language_changed_cb, NULL);
770
771     elm_object_content_set(scroller, inner_layout);
772
773 //------------Entry----------------------
774     Evas_Object *entry    = elm_entry_add(inner_layout);
775     elm_entry_editable_set(entry, EINA_FALSE);
776     evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
777     evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
778     evas_object_show(entry);
779     evas_object_smart_callback_add(entry, "anchor,clicked", _ise_voice_tos_n66_anchor_clicked, ad);
780     elm_entry_text_style_user_push(entry, "DEFAULT='align=center'");
781
782 //    ea_cutlink_h cutlink;
783 //    ea_cutlink_create(&cutlink, entry, EA_CUTLINK_USER);
784
785     /* add a new scheme */
786 //    ea_cutlink_scheme_add(cutlink, "hello:", N66_URL);
787
788     /* set prefix and postfix for a new scheme */
789 //    ea_cutlink_prefix_set(cutlink, "hello:",
790 //                  "<color=#5BB8FFEF underline=on "
791 //                  "underline_color=#5BB8FFEF>");
792 //    ea_cutlink_postfix_set(cutlink, "hello:", "</color>");
793
794     char *markup = NULL;
795     char *txt = NULL;
796     /* set text for parsing */
797     markup = elm_entry_utf8_to_markup(gettext(popup_body_id));
798 //    ea_cutlink_markup_set(cutlink, markup);
799
800 //    ea_cutlink_markup_apply(cutlink, gettext(popup_body_id), &txt);
801     PRINTFUNC(DLOG_DEBUG, "%s", txt);
802
803     terms = tagging(std::string(gettext(txt)));
804     elm_entry_entry_set(entry, terms.c_str());
805
806 //    if (txt)
807 //        free(txt);
808
809     if (markup)
810         free(markup);
811     /* destroy cutlink object */
812 //    ea_cutlink_destroy(cutlink);
813
814     elm_object_part_content_set(inner_layout, "elm.swallow.content", entry);
815
816 //------------Bottom Button----------------------
817     btn = elm_button_add(outer_layout);
818     elm_object_style_set(btn, "bottom");
819     elm_access_info_set(btn, ELM_ACCESS_INFO, gettext(POPUP_OK_AGREE));
820     elm_object_domain_translatable_text_set(btn, PACKAGE, POPUP_OK_AGREE);
821     evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
822     elm_object_part_content_set(outer_layout, "elm.swallow.button", btn);
823
824     evas_object_smart_callback_add(btn, "clicked", _response_n66_cb, ad);
825
826     evas_object_show(outer_layout);
827
828     elm_object_signal_emit(inner_layout, "elm,state,visible", "elm");
829
830     return outer_layout;
831 }
832
833 void ise_show_tos_n66_popup(void *data)
834 {
835     App_Data* ad = (App_Data*)data;
836
837     if (!ad)
838      return;
839
840     Evas_Object *main_layout = create_tos_n66_popup(ad);
841
842     Elm_Object_Item *nit = NULL;
843     nit = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, main_layout, "empty");
844     elm_naviframe_item_pop_cb_set(nit, _naviframe_pop_cb, NULL);
845     elm_naviframe_item_title_enabled_set(nit, EINA_FALSE, EINA_FALSE);
846 }
847
848
849
850