4 #include <syspopup_caller.h>
6 #include <bundle_internal.h>
7 #include <app_control_internal.h>
9 #include "stc-popup-ui.h"
10 #include "stc-popup-util.h"
12 static void win_delete_request_cb(void *data, Evas_Object *obj,
18 static void win_back_cb(void *data, Evas_Object *obj, void *event_info)
21 /* Let window go to hide state. */
22 elm_win_lower(ad->win);
25 static void _response_button1_cb(void *data, Evas_Object *obj, void *event_info)
27 Evas_Object *popup = (Evas_Object *)data;
30 evas_object_del(popup);
37 static void _response_button2_cb(void *data, Evas_Object *obj, void *event_info)
39 Evas_Object *popup = (Evas_Object *)data;
42 evas_object_del(popup);
49 static void _popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
53 elm_popup_dismiss(obj);
54 win_back_cb(data, obj, event_info);
57 static void _popup_hide_finished_cb(void *data, Evas_Object *obj,
63 win_back_cb(data, obj, event_info);
66 static void _popup_title_text_2button(appdata_s *ad, const char *title,
74 popup = elm_popup_add(ad->win);
75 elm_object_style_set(popup, "circle");
76 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
77 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _popup_hide_cb, ad);
78 evas_object_smart_callback_add(popup, "dismissed", _popup_hide_finished_cb, ad);
80 layout = elm_layout_add(popup);
81 elm_layout_theme_set(layout, "layout", "popup", "content/circle/buttons2");
82 elm_object_part_text_set(layout, "elm.text.title", title);
84 elm_object_part_text_set(layout, "elm.text", body);
85 elm_object_content_set(popup, layout);
87 btn = elm_button_add(popup);
88 elm_object_style_set(btn, "popup/circle/left");
89 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
90 elm_object_part_content_set(popup, "button1", btn);
91 evas_object_smart_callback_add(btn, "clicked", _response_button1_cb, popup);
93 icon = elm_image_add(btn);
94 elm_image_file_set(icon, IMAGEDIR"/popup_btn_delete.png", NULL);
95 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
96 elm_object_part_content_set(btn, "elm.swallow.content", icon);
97 evas_object_show(icon);
99 btn = elm_button_add(popup);
100 elm_object_style_set(btn, "popup/circle/right");
101 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
102 elm_object_part_content_set(popup, "button2", btn);
103 evas_object_smart_callback_add(btn, "clicked", _response_button2_cb, popup);
105 icon = elm_image_add(btn);
106 elm_image_file_set(icon, IMAGEDIR"/popup_btn_check.png", NULL);
107 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
108 elm_object_part_content_set(btn, "elm.swallow.content", icon);
109 evas_object_show(icon);
111 evas_object_show(popup);
114 static void create_window(appdata_s *ad)
123 ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
124 elm_win_conformant_set(ad->win, EINA_TRUE);
125 elm_win_autodel_set(ad->win, EINA_TRUE);
127 if (elm_win_wm_rotation_supported_get(ad->win)) {
128 int rots[4] = { 0, 90, 180, 270 };
129 elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
132 evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
133 eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
136 ad->conform = elm_conformant_add(ad->win);
137 evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
138 elm_win_resize_object_add(ad->win, ad->conform);
139 evas_object_show(ad->conform);
142 ad->layout = elm_layout_add(ad->conform);
143 evas_object_size_hint_weight_set(ad->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
144 elm_layout_theme_set(ad->layout, "layout", "application", "default");
145 evas_object_show(ad->layout);
147 elm_object_content_set(ad->conform, ad->layout);
149 /* Show window after base gui is set up */
150 evas_object_show(ad->win);
153 static void remove_window(appdata_s *ad)
156 evas_object_del(ad->layout);
161 evas_object_del(ad->conform);
166 evas_object_del(ad->win);
171 void create_popup(appdata_s *ad, popup_type_e type, const char *app_id)
174 elm_win_raise(ad->win);
179 case POPUP_TYPE_RSTN:
180 _popup_title_text_2button(ad, DATA_USAGE_RSTN_TITLE,
181 DATA_USAGE_RSTN_BODY);
183 case POPUP_TYPE_WARN:
184 _popup_title_text_2button(ad, DATA_USAGE_WARN_TITLE,
185 DATA_USAGE_WARN_BODY);
188 STC_LOGE("Unhandled popup type");
192 static bool app_create(void *data)
194 /* Handle the app create request. */
198 static void app_control(app_control_h app_control, void *data)
200 __STC_LOG_FUNC_ENTER__;
201 /* Handle the launch request. */
202 const char *syspopup_content = NULL;
203 const char *syspopup_type = NULL;
204 const char *app_id = NULL;
205 const char *if_type = NULL;
206 const char *limit = NULL;
208 appdata_s *ad = data;
212 app_control_to_bundle(app_control, &b);
214 if (syspopup_has_popup(b)) {
215 /* Destroy the existing popup*/
216 STC_LOGE("A popup is already present!");
220 syspopup_content = bundle_get_val(b, "_SYSPOPUP_CONTENT_");
221 if (syspopup_content == NULL) {
222 STC_LOGE("syspopup_content is NULL!");
226 syspopup_type = bundle_get_val(b, "_SYSPOPUP_TYPE_");
227 if (syspopup_type == NULL) {
228 STC_LOGE("syspopup_type is NULL!");
232 app_id = bundle_get_val(b, "_APP_ID_");
233 if (app_id == NULL) {
234 STC_LOGE("app_id is NULL!");
238 if_type = bundle_get_val(b, "_IF_TYPE_");
239 if (if_type == NULL) {
240 STC_LOGE("if_type is NULL!");
244 if (g_strcmp0(syspopup_type, "restriction_noti") == 0) {
246 limit = bundle_get_val(b, "_RESTRICTION_LIMIT_");
248 STC_LOGE("limit is NULL!");
252 create_popup(ad, POPUP_TYPE_RSTN, app_id); //, limit);
254 } else if (g_strcmp0(syspopup_type, "warning_noti") == 0) {
256 limit = bundle_get_val(b, "_WARN_LIMIT_");
258 STC_LOGE("limit is NULL!");
262 create_popup(ad, POPUP_TYPE_WARN, app_id); //, limit);
265 STC_LOGE("Unknown event");
267 __STC_LOG_FUNC_EXIT__;
270 static void app_pause(void *data)
272 /* Take necessary actions when application becomes invisible. */
275 static void app_resume(void *data)
277 /* Take necessary actions when application becomes visible. */
280 static void app_terminate(void *data)
282 /* Release all resources. */
285 static void ui_app_lang_changed(app_event_info_h event_info, void *user_data)
287 /*APP_EVENT_LANGUAGE_CHANGED*/
289 system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
290 elm_language_set(locale);
295 static void ui_app_orient_changed(app_event_info_h event_info, void *user_data)
297 /*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/
301 static void ui_app_region_changed(app_event_info_h event_info, void *user_data)
303 /*APP_EVENT_REGION_FORMAT_CHANGED*/
306 static void ui_app_low_battery(app_event_info_h event_info, void *user_data)
308 /*APP_EVENT_LOW_BATTERY*/
311 static void ui_app_low_memory(app_event_info_h event_info, void *user_data)
313 /*APP_EVENT_LOW_MEMORY*/
316 int stc_popup_app_init(int argc, char *argv[], appdata_s *ad)
320 ui_app_lifecycle_callback_s event_callback = {0,};
321 app_event_handler_h handlers[5] = {NULL, };
323 event_callback.create = app_create;
324 event_callback.terminate = app_terminate;
325 event_callback.pause = app_pause;
326 event_callback.resume = app_resume;
327 event_callback.app_control = app_control;
329 ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, ad);
330 ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, ad);
331 ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, ad);
332 ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, ad);
333 ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, ad);
335 ret = ui_app_main(argc, argv, &event_callback, ad);
336 if (ret != APP_ERROR_NONE) {
337 STC_LOGE("app_main() is failed. err = %d", ret);
343 int main(int argc, char *argv[])
347 STC_LOGI("Smart Traffic Control Popup");
349 return stc_popup_app_init(argc, argv, &ad);