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