add new files to open just into INTEL.
[apps/core/preloaded/ciss.git] / src / ciss-ussd.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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 "ciss-common.h"
18 #include "ciss-ussd.h"
19 #include "ciss-debug.h"
20 #include "ciss-string.h"
21 #include "ciss-respnd.h"
22 #include "ciss-widget.h"
23 #include "ciss-tapi-request.h"
24
25 static int __ciss_get_ussd_string(char *ss_result_string, int length, char *szString)
26 {
27         DBG("Enter");
28
29         char *ptr;
30         char *temp_ptr;
31
32         if (length > 0) {
33                 ptr = strtok_r(szString, "\n", &temp_ptr);
34                 snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s", ptr);
35
36                 while ((ptr = strtok_r(NULL, "\n", &temp_ptr))) {
37                         char temp_str[CISS_MMI_MAX_USSD_RESP_STRING];
38                         strncpy(temp_str, ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING - 1);
39                         snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s<br>%s", temp_str, ptr);
40                 }
41         } else
42                 strncpy(ss_result_string, "", CISS_MMI_MAX_USSD_RESP_STRING - 1);
43
44         return 0;
45 }
46
47 void _ciss_ussd_quit_cb(void *data, Evas_Object *obj, void *event_info)
48 {
49         DBG("Enter");
50
51         ciss_appdata_t *ad = (ciss_appdata_t *)data;
52         memset(ad->c_item, 0, sizeof(ad->c_item));
53
54         if (ad->ussd_action_require) {
55                 ciss_mmi_context_t mmi_ctx;
56                 memset(&mmi_ctx, 0x0, sizeof(ciss_mmi_context_t));
57                 mmi_ctx.opcode = processUnstructuredSS_Request;
58                 mmi_ctx.ussd_type = TAPI_SS_USSD_TYPE_USER_REL;
59
60                 _ciss_send_tapi_request(&mmi_ctx, ad);
61         }
62
63         elm_exit();
64 }
65
66 static void __ciss_respnd_cb(void *data, Evas_Object *obj, void *event_info)
67 {
68
69         DBG("Enter");
70
71         ciss_appdata_t *ad = (ciss_appdata_t *)data;
72         _ciss_create_respond_view(ad);
73 }
74
75 Evas_Object *_ciss_create_ussd_view(Evas_Object *parent, void *tapi_data, void *data)
76 {
77         DBG("Enter");
78         retv_if(parent == NULL, NULL);
79         retv_if(data == NULL, NULL);
80
81         ciss_appdata_t *ad = (ciss_appdata_t *)data;
82         ciss_ussd_record_t ussd_record;
83         char ussd_string[CISS_MMI_MAX_USSD_RESP_STRING] = { };
84
85         DBG("[CISS-USSD]ad->tapi_event.event_type = %d", ad->tapi_event.event_type);
86         if(ad->tapi_event.event_type == TAPI_EVENT_SS_USSD_IND) {
87                 TelSsUssdNoti_t ussd_noti_info;
88                 memset(&ussd_noti_info, 0, sizeof(TelSsUssdNoti_t));
89                 memcpy(&ussd_noti_info, tapi_data, sizeof(TelSsUssdNoti_t));
90
91                 ussd_record.ind_type = ussd_noti_info.Status;
92                 ussd_record.ussd_string_length = ussd_noti_info.Length;
93                 memcpy(&ussd_record.ussd_string, &ussd_noti_info.szString, CISS_USSD_DATA_SIZE_MAX);
94         } else {
95                 TelSsUssdResp_t ussd_resp_info;
96                 memset(&ussd_resp_info, 0, sizeof(TelSsUssdResp_t));
97                 memcpy(&ussd_resp_info, tapi_data, sizeof(TelSsUssdResp_t));
98
99                 ussd_record.ind_type = ussd_resp_info.Status;
100                 ussd_record.ussd_string_length = ussd_resp_info.Length;
101                 memcpy(&ussd_record.ussd_string, &ussd_resp_info.szString, CISS_USSD_DATA_SIZE_MAX);
102         }
103
104         __ciss_get_ussd_string(ussd_string, ussd_record.ussd_string_length, ussd_record.ussd_string);
105         DBG("[CISS-MMI] ussd_string = %s", ussd_string);
106
107         Evas_Object *nf;
108         Evas_Object *l_button;
109         Evas_Object *cbar = NULL;
110         Elm_Object_Item *navi_it = NULL;
111
112         nf = elm_naviframe_add(parent);
113         retv_if(nf == NULL, NULL);
114         ad->nf = nf;
115         ad->ussd_action_require = 0;
116
117         Evas_Object *genlist =
118                 _ciss_create_result_genlist(ussd_string, CISS_MMI_MAX_USSD_RESP_STRING, nf, ad);
119         retv_if(NULL == genlist, NULL);
120
121
122         l_button = elm_button_add(nf);
123         evas_object_smart_callback_add(l_button, "clicked",
124                 _ciss_ussd_quit_cb, ad);
125
126         navi_it = elm_naviframe_item_push(nf, CISS_STR_INFORMATION,
127                 l_button, NULL, genlist, "1line");
128         elm_object_style_set(l_button, "naviframe/back_btn/default");
129
130         if (ussd_record.ind_type == CISS_USSD_IND_ACTION_REQUIRE) {
131                 DBG("require action");
132                 cbar = _ciss_create_navi_control_bar(nf,
133                         CISS_STR_REPLY, __ciss_respnd_cb,
134                         NULL, NULL,
135                         ad, navi_it,
136                         ad->c_item);
137                 retv_if(cbar == NULL, NULL);
138                 ad->ussd_action_require = 1;
139         }
140
141         evas_object_show(nf);
142         DBG("Leave");
143
144         return nf;
145 }
146