2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
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"
25 static int __ciss_get_ussd_string(char *ss_result_string, int length, char *szString)
30 char *temp_ptr = NULL;
33 ptr = strtok_r(szString, "\n", &temp_ptr);
34 snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s", ptr);
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);
42 strncpy(ss_result_string, "", CISS_MMI_MAX_USSD_RESP_STRING - 1);
48 void _ciss_ussd_quit_cb(void *data, Evas_Object *obj, void *event_info)
52 ciss_appdata_t *ad = (ciss_appdata_t *)data;
53 memset(ad->c_item, 0, sizeof(ad->c_item));
55 if (ad->ussd_action_require) {
56 ciss_mmi_context_t mmi_ctx;
57 memset(&mmi_ctx, 0x0, sizeof(ciss_mmi_context_t));
58 mmi_ctx.opcode = processUnstructuredSS_Request;
59 mmi_ctx.ussd_type = TAPI_SS_USSD_TYPE_USER_REL;
61 _ciss_send_tapi_request(&mmi_ctx, ad);
67 static void __ciss_respnd_cb(void *data, Evas_Object *obj, void *event_info)
72 ciss_appdata_t *ad = (ciss_appdata_t *)data;
73 _ciss_create_respond_view(ad);
76 Evas_Object *_ciss_create_ussd_view(Evas_Object *parent, void *tapi_data, void *data)
79 retv_if(parent == NULL, NULL);
80 retv_if(data == NULL, NULL);
82 ciss_appdata_t *ad = (ciss_appdata_t *)data;
83 ciss_ussd_record_t ussd_record;
84 char ussd_string[CISS_MMI_MAX_USSD_RESP_STRING] = { };
86 DBG("[CISS-USSD]ad->tapi_event.event_type = %d", ad->tapi_event.event_type);
87 if (ad->tapi_event.event_type == TAPI_EVENT_SS_USSD_IND) {
88 TelSsUssdNoti_t ussd_noti_info;
89 memset(&ussd_noti_info, 0, sizeof(TelSsUssdNoti_t));
90 memcpy(&ussd_noti_info, tapi_data, sizeof(TelSsUssdNoti_t));
92 ussd_record.ind_type = ussd_noti_info.Status;
93 ussd_record.ussd_string_length = ussd_noti_info.Length;
94 memcpy(&ussd_record.ussd_string, &ussd_noti_info.szString, CISS_USSD_DATA_SIZE_MAX);
96 TelSsUssdResp_t ussd_resp_info;
97 memset(&ussd_resp_info, 0, sizeof(TelSsUssdResp_t));
98 memcpy(&ussd_resp_info, tapi_data, sizeof(TelSsUssdResp_t));
100 ussd_record.ind_type = ussd_resp_info.Status;
101 ussd_record.ussd_string_length = ussd_resp_info.Length;
102 memcpy(&ussd_record.ussd_string, &ussd_resp_info.szString, CISS_USSD_DATA_SIZE_MAX);
105 __ciss_get_ussd_string(ussd_string, ussd_record.ussd_string_length, ussd_record.ussd_string);
106 DBG("[CISS-MMI] ussd_string = %s", ussd_string);
109 Evas_Object *l_button;
110 Evas_Object *cbar = NULL;
111 Elm_Object_Item *navi_it = NULL;
113 nf = elm_naviframe_add(parent);
114 retv_if(nf == NULL, NULL);
116 ad->ussd_action_require = 0;
118 Evas_Object *genlist =
119 _ciss_create_result_genlist(ussd_string, CISS_MMI_MAX_USSD_RESP_STRING, nf, ad);
120 retv_if(NULL == genlist, NULL);
123 l_button = elm_button_add(nf);
124 evas_object_smart_callback_add(l_button, "clicked",
125 _ciss_ussd_quit_cb, ad);
127 navi_it = elm_naviframe_item_push(nf, CISS_STR_INFORMATION,
128 l_button, NULL, genlist, NULL);
129 elm_object_style_set(l_button, "naviframe/back_btn/default");
131 if (ussd_record.ind_type == CISS_USSD_IND_ACTION_REQUIRE) {
132 DBG("require action");
133 cbar = _ciss_create_navi_control_bar(nf,
134 CISS_STR_REPLY, __ciss_respnd_cb,
138 retv_if(cbar == NULL, NULL);
139 ad->ussd_action_require = 1;
142 evas_object_show(nf);