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)
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);
47 void _ciss_ussd_quit_cb(void *data, Evas_Object *obj, void *event_info)
51 ciss_appdata_t *ad = (ciss_appdata_t *)data;
52 memset(ad->c_item, 0, sizeof(ad->c_item));
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;
60 _ciss_send_tapi_request(&mmi_ctx, ad);
66 static void __ciss_respnd_cb(void *data, Evas_Object *obj, void *event_info)
71 ciss_appdata_t *ad = (ciss_appdata_t *)data;
72 _ciss_create_respond_view(ad);
75 Evas_Object *_ciss_create_ussd_view(Evas_Object *parent, void *tapi_data, void *data)
78 retv_if(parent == NULL, NULL);
79 retv_if(data == NULL, NULL);
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] = { };
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));
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);
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));
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);
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);
108 Evas_Object *l_button;
109 Evas_Object *cbar = NULL;
110 Elm_Object_Item *navi_it = NULL;
112 nf = elm_naviframe_add(parent);
113 retv_if(nf == NULL, NULL);
115 ad->ussd_action_require = 0;
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);
122 l_button = elm_button_add(nf);
123 evas_object_smart_callback_add(l_button, "clicked",
124 _ciss_ussd_quit_cb, ad);
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");
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,
137 retv_if(cbar == NULL, NULL);
138 ad->ussd_action_require = 1;
141 evas_object_show(nf);