4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include <setting-display.h>
28 #include <setting-cfg.h>
30 #define SETTING_BRIGHTNESS_DEFAULT_LEVEL 60
33 #define UG_MODULE_API __attribute__ ((visibility("default")))
37 * view selection by service variable
39 * viewtype == 'brightness' --> setting_view_display_brightness
40 * viewtype != NULL && viewtype --> setting_view_display_main
42 setting_view *__get_display_view_to_load(void *data, app_control_h service)
45 setting_retvm_if((!data), NULL, "!data");
47 SettingDisplayUG *displayUG = (SettingDisplayUG *)data;
48 char *viewtype = NULL;
51 ret = app_control_get_uri(service, &uri);
53 SETTING_TRACE("uri:%s", uri);
54 if (!safeStrCmp(uri, URI_SMART_STAY)) {
55 /*setting_view_node_table_register(&setting_view_display_smart_screen_smart_stay, NULL); */
58 } else if (!safeStrCmp(uri, URI_SMART_ROTATION)) {
59 /*setting_view_node_table_register(&setting_view_display_smart_screen_smart_rotation, NULL); */
64 app_control_get_extra_data(service, "viewtype", &viewtype);
69 SETTING_TRACE_DEBUG("viewtype:%s", viewtype);
71 if (!safeStrCmp(viewtype, "brightness")) {
72 setting_view_node_table_register(&setting_view_display_brightness, NULL);
74 return &setting_view_display_brightness;
75 } else if (!safeStrCmp(viewtype, "backlight")) {
76 setting_view_node_table_register(&setting_view_display_backlight, NULL);
78 return &setting_view_display_backlight;
79 #if SUPPORT_SMARTSCREEN
80 } else if (!safeStrCmp(viewtype, "smartscreen")) {
81 setting_view_node_table_register(&setting_view_display_smart_screen, NULL);
82 setting_view_node_table_register(&setting_view_display_smart_screen_help,
83 &setting_view_display_smart_screen);
85 return &setting_view_display_smart_screen;
86 } else if (!safeStrCmp(viewtype, "screenmode")) {
87 setting_view_node_table_register(&setting_view_display_screen_mode, NULL);
89 return &setting_view_display_screen_mode;
92 if (!safeStrCmp(viewtype, "frontpage_backlight")) {
93 displayUG->display_expand_state = DISPLAY_EXPAND_BACKLIGHT;
94 } else if (!safeStrCmp(viewtype, "frontpage_duration")) {
95 displayUG->display_expand_state = DISPLAY_EXPAND_TOUCH_KEY_LIGHT_DURATION;
97 displayUG->display_expand_state = DISPLAY_EXPAND_NONE;
99 setting_view_node_table_register(&setting_view_display_main, NULL);
100 setting_view_node_table_register(&setting_view_display_brightness,
101 &setting_view_display_main);
102 #if SUPPORT_SMARTSCREEN
103 setting_view_node_table_register(&setting_view_display_screen_mode,
104 &setting_view_display_main);
105 setting_view_node_table_register(&setting_view_display_smart_screen,
106 &setting_view_display_main);
107 setting_view_node_table_register(&setting_view_display_smart_screen_smart_stay,
108 &setting_view_display_smart_screen);
109 setting_view_node_table_register(&setting_view_display_smart_screen_smart_rotation,
110 &setting_view_display_smart_screen);
113 return &setting_view_display_main;
122 * viewtype != 'wallpaper' --> ly_main
124 Evas_Object *__get_display_layout_to_return(app_control_h service, void *priv)
127 SettingDisplayUG *displayUG = priv;
128 char *viewtype = NULL;
131 ret = app_control_get_uri(service, &uri);
133 return displayUG->ly_main;
135 app_control_get_extra_data(service, "viewtype", &viewtype);
140 SETTING_TRACE("viewtype:%s", viewtype);
143 return displayUG->ly_main;
148 static void setting_display_ug_cb_resize(void *data, Evas *e,
149 Evas_Object *obj, void *event_info)
151 SettingDisplayUG *ad = (SettingDisplayUG *) data;
152 setting_view_update(ad->view_to_load, ad);
154 /*help smart scren popup*/
155 Eina_Bool __show_smartstay_guide_popup(void *data)
159 setting_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL,
160 "[Setting > Display] Data parameter is NULL");
162 SettingDisplayUG *ad = (SettingDisplayUG *) data;
163 setting_retvm_if(ad->smart_stay_sublayout == NULL, ECORE_CALLBACK_CANCEL,
164 "[Setting > Display] Dad->smart_stay_sublayout parameter is NULL");
167 elm_object_signal_emit(ad->smart_stay_sublayout, "elm,state,top,hide", "elm");
168 /*show center popup*/
169 elm_object_signal_emit(ad->smart_stay_sublayout, "elm,state,center,show", "elm");
170 return ECORE_CALLBACK_CANCEL;
172 Eina_Bool __show_smartrotation_guide_popup(void *data)
176 setting_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL,
177 "[Setting > Display] Data parameter is NULL");
179 SettingDisplayUG *ad = (SettingDisplayUG *) data;
180 setting_retvm_if(ad->smart_rotation_sublayout == NULL, ECORE_CALLBACK_CANCEL,
181 "[Setting > Display] ad->smart_rotation_sublayout parameter is NULL");
183 elm_object_signal_emit(ad->smart_rotation_sublayout, "elm,state,top,hide", "elm");
184 /*show center popup*/
185 elm_object_signal_emit(ad->smart_rotation_sublayout, "elm,state,center,show", "elm");
186 return ECORE_CALLBACK_CANCEL;
190 __help_popup_on_resp_cb(void *data, Evas_Object *obj, void *event_info)
193 int response_type = btn_type(obj);
194 SettingDisplayUG *ad = (SettingDisplayUG *) data;
196 /* prevent CID35750 (by sunyeop.hwang@20131109) */
197 /*const char *btnstr = elm_entry_markup_to_utf8(elm_object_text_get(obj)); */
199 if (POPUP_RESPONSE_OK == response_type) { /*need set vconf */
200 #if SUPPORT_SMARTSCREEN
201 SETTING_TRACE("need to set vconf");
203 if (!safeStrCmp(ad->uri, URI_SMART_STAY)) {
204 ret += vconf_set_int(VCONFKEY_SETAPPL_SMARTSCREEN_SMARTSTAY_STATUS, 1);
205 SETTING_TRACE("ret:%d", ret);
206 if (ad->smart_stay_sublayout) {
207 elm_object_signal_emit(ad->smart_stay_sublayout, "elm,state,top,show", "elm");
208 ad->timer_show_guide = ecore_timer_add(3, (Ecore_Task_Cb)__show_smartstay_guide_popup, ad);
210 } else if (!safeStrCmp(ad->uri, URI_SMART_ROTATION)) {
211 ret += vconf_set_bool(VCONFKEY_SETAPPL_SMARTSCREEN_SMART_ROTATION, TRUE);
212 if (ad->smart_rotation_sublayout) {
213 elm_object_signal_emit(ad->smart_rotation_sublayout, "elm,state,top,show", "elm");
214 ad->timer_show_guide = ecore_timer_add(3, (Ecore_Task_Cb)__show_smartrotation_guide_popup, ad);
218 if (ad->help_popup) {
219 evas_object_del(ad->help_popup);
220 ad->help_popup = NULL;
222 } else if (POPUP_RESPONSE_CANCEL == response_type) { /*need rollback */
223 evas_object_hide(ad->help_popup);
224 SETTING_TRACE("ad->ug:%p", ad->ug);
225 ug_destroy_me(ad->ug);
229 static Eina_Bool __help_key_press_cb(void *data, int type, void *event)
232 Evas_Event_Key_Down *ev = event;
234 SETTING_TRACE("Invalid event object");
235 return ECORE_CALLBACK_RENEW;
237 SETTING_TRACE("Pressed %s", ev->keyname);
238 SettingDisplayUG *ad = (SettingDisplayUG *) data;
240 if (!strcmp(ev->keyname, KEY_BACK)) {
241 /*evas_object_hide(obj); // you can call evas_object_del(obj); to remove popup if you want */
242 if (ad->help_popup) {
243 popup_handle_hardkey(ad, ad->help_popup);
247 return ECORE_CALLBACK_RENEW;
250 static void *___help_popup_view(ui_gadget_h ug,
251 enum ug_mode mode, app_control_h service,
256 SettingDisplayUG *ad = priv;
259 char buf[MAX_COMMON_BUFFER_LEN] = {0,};
261 int ret = app_control_get_uri(service, &ad->uri);
262 if (!ret && ad->uri) {
263 #if SUPPORT_SMARTSCREEN
264 if (!safeStrCmp(ad->uri, URI_SMART_STAY)) {
265 vconf_get_int(VCONFKEY_SETAPPL_SMARTSCREEN_SMARTSTAY_STATUS, &sub_value);
266 snprintf(buf, sizeof(buf) , "%s", SETTING_DISPLAY_SMART_SCREEN_TURN_ON_SMART_STAY_POPUP);
267 } else if (!safeStrCmp(ad->uri, URI_SMART_ROTATION)) {
268 vconf_get_bool(VCONFKEY_SETAPPL_SMARTSCREEN_SMART_ROTATION, &sub_value);
269 snprintf(buf, sizeof(buf) , "%s", SETTING_DISPLAY_SMART_SCREEN_TURN_ON_SMART_ROATION_POPUP);
273 ad->help_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __help_key_press_cb, ad);
276 SETTING_TRACE("uri:%s", ad->uri);
277 if (ad->help_popup) {
278 evas_object_del(ad->help_popup);
279 ad->help_popup = NULL;
283 setting_create_popup_with_btn(ad, ad->win_main_layout,
285 __help_popup_on_resp_cb, 0,
286 2, POPUP_TURN_ON_STR, "IDS_COM_SK_CANCEL");
287 /*evas_object_data_set(ad->popup, "text0", MOTION_DISABLED_DSC); */
288 /*evas_object_data_set(ad->popup, "text", USE_MOTION_TO_TRY_TUTORIAL); */
290 return ad->help_popup;
299 static void *setting_display_ug_on_create(ui_gadget_h ug,
300 enum ug_mode mode, app_control_h service,
303 setting_retvm_if((!priv), NULL, "!priv");
306 SettingDisplayUG *displayUG = priv;
308 setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
310 displayUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
311 displayUG->win_get = (Evas_Object *) ug_get_window();
313 /*evas_object_show(displayUG->win_main_layout); */
314 displayUG->evas = evas_object_evas_get(displayUG->win_main_layout);
316 setting_retvm_if(displayUG->win_main_layout == NULL, NULL,
317 "cannot get main window ");
319 (void)___help_popup_view(ug, mode, service, priv);
320 /* register view node table */
321 setting_view_node_table_intialize();
323 setting_create_Gendial_itc("2line.top", &(displayUG->itc_2text_2));
324 setting_create_Gendial_itc("1line", &(displayUG->itc_1text_1icon));
326 setting_create_Gendial_itc("1line", &(displayUG->itc_1icon_1text_sub));
328 setting_create_Gendial_itc("1line", &(displayUG->itc_1text));
329 setting_create_Gendial_itc("1line", &(displayUG->itc_2text_3));
330 setting_create_Gendial_itc("1line", &(displayUG->itc_1text_1icon_divider));
332 /* creating a view. */
333 displayUG->view_to_load = __get_display_view_to_load(displayUG, service);
334 setting_retvm_if(NULL == displayUG->view_to_load, NULL,
335 "NULL == displayUG->view_to_load");
336 setting_view_node_set_cur_view(displayUG->view_to_load);
337 setting_view_create(displayUG->view_to_load, (void *)displayUG);
338 evas_object_event_callback_add(displayUG->win_main_layout,
339 EVAS_CALLBACK_RESIZE,
340 setting_display_ug_cb_resize, displayUG);
341 return __get_display_layout_to_return(service, displayUG);
344 static void setting_display_ug_on_start(ui_gadget_h ug, app_control_h service,
349 static void setting_display_ug_on_pause(ui_gadget_h ug, app_control_h service,
353 setting_retm_if((!priv), "!priv");
354 SettingDisplayUG *displayUG = priv;
357 static void setting_display_ug_on_resume(ui_gadget_h ug, app_control_h service,
362 static void setting_display_ug_on_destroy(ui_gadget_h ug, app_control_h service,
366 setting_retm_if((!priv), "!priv");
367 SettingDisplayUG *displayUG = priv;
369 /* fix flash issue for gallery */
370 evas_object_event_callback_del(displayUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_display_ug_cb_resize);
373 FREE(displayUG->uri);
374 if (displayUG->help_popup) {
375 evas_object_del(displayUG->help_popup);
376 displayUG->help_popup = NULL;
379 /* called when this shared gadget is terminated. similar with app_exit */
380 if (&setting_view_display_main == displayUG->view_to_load) {
381 setting_view_destroy(&setting_view_display_brightness, displayUG);
382 #if SUPPORT_SMARTSCREEN
383 setting_view_destroy(&setting_view_display_smart_screen_smart_rotation, displayUG);
384 setting_view_destroy(&setting_view_display_smart_screen_smart_stay, displayUG);
385 setting_view_destroy(&setting_view_display_screen_mode, displayUG);
386 setting_view_destroy(&setting_view_display_smart_screen, displayUG);
388 setting_view_destroy(&setting_view_display_main, displayUG);
389 } else if (&setting_view_display_brightness == displayUG->view_to_load) {
390 setting_view_destroy(&setting_view_display_brightness, displayUG);
391 } else if (&setting_view_display_backlight == displayUG->view_to_load) {
392 setting_view_destroy(&setting_view_display_backlight, displayUG);
393 #if SUPPORT_SMARTSCREEN
394 } else if (&setting_view_display_screen_mode == displayUG->view_to_load) {
395 setting_view_destroy(&setting_view_display_screen_mode, displayUG);
396 } else if (&setting_view_display_smart_screen == displayUG->view_to_load) {
397 setting_view_destroy(&setting_view_display_smart_screen_smart_rotation, displayUG);
398 setting_view_destroy(&setting_view_display_smart_screen_smart_stay, displayUG);
399 setting_view_destroy(&setting_view_display_smart_screen, displayUG);
400 } else if (&setting_view_display_smart_screen_smart_stay == displayUG->view_to_load) {
401 setting_view_destroy(&setting_view_display_smart_screen_smart_stay, displayUG);
402 } else if (&setting_view_display_smart_screen_smart_rotation == displayUG->view_to_load) {
403 setting_view_destroy(&setting_view_display_smart_screen_smart_rotation, displayUG);
407 if (NULL != ug_get_layout(displayUG->ug)) {
408 evas_object_hide((Evas_Object *) ug_get_layout(displayUG->ug));
409 evas_object_del((Evas_Object *) ug_get_layout(displayUG->ug));
415 static void setting_display_ug_on_message(ui_gadget_h ug, app_control_h msg,
416 app_control_h service, void *priv)
421 static void setting_display_ug_on_event(ui_gadget_h ug,
422 enum ug_event event, app_control_h service,
426 SettingDisplayUG *ad = priv;
427 setting_retm_if(NULL == ad, "ad is NULL");
429 case UG_EVENT_LOW_MEMORY:
431 case UG_EVENT_LOW_BATTERY:
433 case UG_EVENT_LANG_CHANGE:
434 setting_navi_items_update(ad->navi_bar);
436 case UG_EVENT_ROTATE_PORTRAIT:
437 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: {
442 app_device_orientation_e m = elm_win_rotation_get(ad->win_get);
444 if (APP_DEVICE_ORIENTATION_90 == m || APP_DEVICE_ORIENTATION_270 == m) {
445 ecore_x_window_size_get(ecore_x_window_root_first_get(), &h, &w);
448 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
451 SETTING_TRACE("m:%d", m);
453 h = SAMRT_SCREEN_TRY_IT_IAMGE_PORTRAIT_H;
454 w = SAMRT_SCREEN_TRY_IT_IAMGE_PORTRAIT_W;
455 if (ad->smart_rotation_image) {
456 elm_win_indicator_opacity_set(ad->win_get, ELM_WIN_INDICATOR_TRANSPARENT);
457 /*elm_win_indicator_mode_set(ad->win_get,ELM_WIN_INDICATOR_HIDE); */
458 SETTING_TRACE("indicator is in TRANSPARENT mode");
459 evas_object_image_file_set(ad->smart_rotation_image, SMART_SCREEN_TRY_IT_IMAGE_P, NULL);
460 evas_object_size_hint_weight_set(ad->smart_rotation_image, 0.0, EVAS_HINT_EXPAND);
461 evas_object_image_fill_set(ad->smart_rotation_image, 0, 0, w, h);
462 evas_object_image_border_set(ad->smart_rotation_image, 16, 16, 16, 16); /*for round corner */
463 evas_object_image_filled_set(ad->smart_rotation_image, 1); /*to full fill */
464 evas_object_size_hint_min_set(ad->smart_rotation_image, ELM_SCALE_SIZE(w), ELM_SCALE_SIZE(h));
465 evas_object_size_hint_max_set(ad->smart_rotation_image, w, h);
467 if (ad->smart_stay_image) {
468 SETTING_TRACE("indicator is in TRANSPARENT mode");
469 elm_win_indicator_opacity_set(ad->win_get, ELM_WIN_INDICATOR_TRANSPARENT);
470 /*elm_win_indicator_mode_set(ad->win_get,ELM_WIN_INDICATOR_HIDE); */
471 evas_object_image_file_set(ad->smart_stay_image, SMART_SCREEN_TRY_IT_IMAGE_P, NULL);
472 evas_object_size_hint_weight_set(ad->smart_stay_image, 0.0, EVAS_HINT_EXPAND);
473 evas_object_image_fill_set(ad->smart_stay_image, 0, 0, w, h);
474 evas_object_image_border_set(ad->smart_stay_image, 16, 16, 16, 16); /*for round corner */
475 evas_object_image_filled_set(ad->smart_stay_image, 1); /*to full fill */
476 evas_object_size_hint_min_set(ad->smart_stay_image, ELM_SCALE_SIZE(w), ELM_SCALE_SIZE(h));
477 evas_object_size_hint_max_set(ad->smart_stay_image, w, h);
481 case UG_EVENT_ROTATE_LANDSCAPE:
482 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: {
486 app_device_orientation_e m = elm_win_rotation_get(ad->win_get);
488 if (APP_DEVICE_ORIENTATION_90 == m || APP_DEVICE_ORIENTATION_270 == m) {
489 ecore_x_window_size_get(ecore_x_window_root_first_get(), &h, &w);
492 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
495 SETTING_TRACE("m:%d", m);
497 h = SAMRT_SCREEN_TRY_IT_IAMGE_LANDSCAPE_H;
498 w = SAMRT_SCREEN_TRY_IT_IAMGE_LANDSCAPE_W;
499 if (ad->smart_rotation_image) {
500 /*elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE) */
501 evas_object_image_file_set(ad->smart_rotation_image, SMART_SCREEN_TRY_IT_IMAGE_L, NULL);
502 evas_object_size_hint_weight_set(ad->smart_rotation_image, 0.0, EVAS_HINT_EXPAND);
503 evas_object_image_fill_set(ad->smart_rotation_image, 0, 0, w, h);
504 evas_object_image_border_set(ad->smart_rotation_image, 16, 16, 16, 16); /*for round corner */
505 evas_object_image_filled_set(ad->smart_rotation_image, 1); /*to full fill */
506 evas_object_size_hint_min_set(ad->smart_rotation_image, ELM_SCALE_SIZE(w), ELM_SCALE_SIZE(h));
507 evas_object_size_hint_max_set(ad->smart_rotation_image, w, h);
509 if (ad->smart_stay_image) {
510 evas_object_image_file_set(ad->smart_stay_image, SMART_SCREEN_TRY_IT_IMAGE_L, NULL);
511 evas_object_size_hint_weight_set(ad->smart_stay_image, 0.0, EVAS_HINT_EXPAND);
512 evas_object_image_fill_set(ad->smart_stay_image, 0, 0, w, h);
513 evas_object_image_border_set(ad->smart_stay_image, 16, 16, 16, 16); /*for round corner */
514 evas_object_image_filled_set(ad->smart_stay_image, 1); /*to full fill */
515 evas_object_size_hint_min_set(ad->smart_stay_image, ELM_SCALE_SIZE(w), ELM_SCALE_SIZE(h));
516 evas_object_size_hint_max_set(ad->smart_stay_image, w, h);
521 case UG_EVENT_REGION_CHANGE:
528 static void setting_display_ug_on_key_event(ui_gadget_h ug,
529 enum ug_key_event event,
530 app_control_h service, void *priv)
533 SettingDisplayUG *ad = (SettingDisplayUG *) priv;
536 case UG_KEY_EVENT_END: {
537 if (elm_naviframe_top_item_get(ad->navi_bar) ==
538 elm_naviframe_bottom_item_get(ad->navi_bar)) {
541 if (&setting_view_display_brightness ==
542 setting_view_node_get_cur_view()) {
544 setting_view_cb_at_endKey(ad);
553 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
556 SettingDisplayUG *displayUG = calloc(1, sizeof(SettingDisplayUG));
557 setting_retvm_if(!displayUG, -1, "Create SettingDisplayUG obj failed");
559 memset(displayUG, 0x00, sizeof(SettingDisplayUG));
561 ops->create = setting_display_ug_on_create;
562 ops->start = setting_display_ug_on_start;
563 ops->pause = setting_display_ug_on_pause;
564 ops->resume = setting_display_ug_on_resume;
565 ops->destroy = setting_display_ug_on_destroy;
566 ops->message = setting_display_ug_on_message;
567 ops->event = setting_display_ug_on_event;
568 ops->key_event = setting_display_ug_on_key_event;
569 ops->priv = displayUG;
570 ops->opt = UG_OPT_INDICATOR_ENABLE;
575 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
578 struct SettingDisplayUG *displayUG;
579 setting_retm_if(!ops, "ops == NULL");
581 displayUG = ops->priv;
587 /* ***************************************************
591 ***************************************************/
593 #define BUS_NAME "org.tizen.system.deviced"
594 #define INTERFACE_NAME BUS_NAME
595 #define OBJECT_PATH "/Org/Tizen/System/DeviceD"
596 #define DEVICED_PATH_DISPLAY OBJECT_PATH"/Display"
597 #define DEVICED_INTERFACE_DISPLAY INTERFACE_NAME".display"
598 #define DBUS_REPLY_TIMEOUT (120 * 1000)
600 static int __append_param(DBusMessage *msg, const char *sig, char *param[])
602 DBusMessageIter iter;
603 /*DBusMessageIter cont_iter; */
608 if (sig == NULL || param == NULL) {
612 dbus_message_iter_init_append(msg, &iter);
613 for (ch = (char *)sig, i = 0; *ch != '\0'; ++i, ++ch) {
614 SETTING_TRACE_DEBUG("sig : %c", *ch);
617 int_type = atoi(param[i]);
618 SETTING_TRACE_DEBUG("param[%2d] : %d", i, int_type);
619 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &int_type);
623 SETTING_TRACE_DEBUG("param[%2d] : %s", i, str_type);
624 dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &str_type);
633 static DBusMessage *__invoke_dbus_method(const char *dest, const char *path,
634 const char *interface, const char *method,
635 const char *sig, char *param[])
638 DBusConnection *conn;
643 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
645 SETTING_TRACE_DEBUG("dbus_bus_get error");
648 msg = dbus_message_new_method_call(dest, path, interface, method);
650 SETTING_TRACE_DEBUG("dbus_message_new_method_call error");
653 r = __append_param(msg, sig, param);
655 SETTING_TRACE_DEBUG("append_param error");
658 dbus_error_init(&err);
659 reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
660 dbus_message_unref(msg);
661 if (dbus_error_is_set(&err)) {
662 SETTING_TRACE_DEBUG("dbus_connection_send_with_reply_and_block error");
663 SETTING_TRACE_DEBUG("error [%s:%s]", err.name, err.message);
664 dbus_error_free(&err);
670 int setting_display_set_auto_adjust_tone(int value)
673 if (value < 0 || value > 1) {
674 SETTING_TRACE_DEBUG("value has invalid range. [0 or 1]");
675 return SETTING_RETURN_FAIL;
686 dbus_error_init(&err);
688 snprintf(temp, 2, "%1d", value);
690 SETTING_TRACE_DEBUG("set as [%s]", temp);
692 msg = __invoke_dbus_method(BUS_NAME, DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY, "setautotone", "i", arr);
694 if (!dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID)) {
695 SETTING_TRACE_DEBUG("no message : [%s:%s]", err.name, err.message);
696 ret = SETTING_RETURN_FAIL;
698 SETTING_TRACE_DEBUG("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, "setautotone", state);
700 dbus_message_unref(msg);
707 void setting_display_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
710 /*SettingDisplayUG *ad = (SettingDisplayUG *) priv; */
718 base = (Evas_Object *) ug_get_layout(ug);
724 case UG_MODE_FULLVIEW:
725 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
727 evas_object_show(base);
737 static int setting_reset_display_brightness(void)
742 ret += vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, SETTING_BRIGHTNESS_AUTOMATIC_OFF);
745 ret += vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, SETTING_BRIGHTNESS_DEFAULT_LEVEL);
746 #if USE_DEVICE_SET_DISPLAY_BRT
747 ret += device_display_set_brightness(0, SETTING_BRIGHTNESS_DEFAULT_LEVEL);
750 ret += vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, SETTING_BRIGHTNESS_DEFAULT_LEVEL);
751 #if USE_DEVICE_SET_DISPLAY_BRT
752 ret += device_display_set_brightness(0, SETTING_BRIGHTNESS_DEFAULT_LEVEL);
755 ret += vconf_set_int(VCONFKEY_SETAPPL_LCD_AUTOMATIC_BRIGHTNESS, SETTING_BRIGHTNESS_DEFAULT_LEVEL);
761 static int setting_reset_display_backlight(void)
765 #if SUPPORT_LCD_TIMEOUT_KEEPING
766 ret += vconf_set_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, 0);
769 ret += vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 0);
771 ret += vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 30);
779 static int setting_reset_display_lc_screen(void)
783 ret += vconf_set_str(VCONFKEY_IDLE_LOCK_BGSET, IMG_DEFAULT_HOME_SCREEN);
784 ret += setting_invoke_reset_function("setting-lock", 0, NULL);
788 static void setting_reset_launch_effect()
791 Evas_Object *win_main = ug_get_window();
792 Ecore_X_Window xwin = elm_win_xwindow_get(win_main);
793 Ecore_X_Window root = 0;
795 root = ecore_x_window_root_get(xwin);
798 Ecore_X_Atom effect_enable_atom = ecore_x_atom_get("_NET_CM_EFFECT_ENABLE");
799 ret_if(!effect_enable_atom);
800 unsigned int is_enable = 0;
801 ecore_x_window_prop_card32_set(root, effect_enable_atom, &is_enable, 1);
807 /** @todo setting_display_main_effect_set_value work? */
808 static int setting_reset_display_main(void)
812 ret += setting_reset_display_backlight();
813 /*ret += setting_reset_display_brightness(); */
814 #if !SUPPOR_SEPARATE_BRIGHTNESS
815 ret += setting_reset_display_brightness();
819 /*ret = setting_invoke_reset_function("setting-font-efl", NULL, NULL); */
820 /*SETTING_TRACE("reset libug-%s.so[ret:%d]", "setting-font-efl", ret); */
822 ret += vconf_set_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, FALSE);/*battery percent */
823 setting_reset_launch_effect();
824 #if SUPPORT_AUTO_ADJUST_SCREEN_TONE
825 ret += vconf_set_bool(VCONFKEY_SETAPPL_BOOL_AUTO_ADJUST_SCREEN_TONE, TRUE);
828 ret += vconf_set_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, TRUE);
829 #if SUPPORT_SMARTSCREEN
831 ret += vconf_set_int(VCONFKEY_SETAPPL_SMARTSCREEN_SMARTSTAY_STATUS, 0);
832 ret += vconf_set_bool(VCONFKEY_SETAPPL_SMARTSCREEN_SMART_ROTATION, FALSE);
835 ret += vconf_set_str(VCONFKEY_SETAPPL_SCREENMODE_SELNAME, "Dynamic");
836 display_set_image_enhance(ENHANCE_MODE, MODE_DYNAMIC); /* 0 => Dynamic */
838 /*touch key light duration */
839 ret += vconf_set_int(VCONFKEY_SETAPPL_TOUCHKEY_LIGHT_DURATION, 90);
843 #define SUBINDEX_NAME "Display"
846 static Setting_Cfg_Node_T s_cfg_node_array[] = {
847 {"IDS_COM_OPT_BRIGHTNESS", IMG_Display, "viewtype:brightness", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node, NULL, SUBINDEX_NAME, NULL, NULL},
848 {"IDS_ST_BODY_BACKLIGHT_TIME", IMG_Display, "viewtype:frontpage_backlight", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node, NULL, SUBINDEX_NAME, NULL, NULL},
849 {"IDS_ST_HEADER_TOUCH_KEY_LIGHT_DURATION", IMG_Display, "viewtype:frontpage_duration", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node, NULL, SUBINDEX_NAME, NULL, NULL},
850 {"IDS_ST_MBODY_AUTO_ADJUST_SCREEN_TONE", IMG_Display, "viewtype:frontpage", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
851 /* TEST HERE --------------*/
852 {"IDS_ST_HEADER_AUTO_ROTATE_SCREEN_ABB", IMG_Display, "viewtype:frontpage", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
853 /* TEST HERE --------------*/
854 {"IDS_ST_BODY_DISPLAY_BATTERY_PERCENTAGE_ABB", IMG_Display, "viewtype:frontpage", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
855 {"IDS_ST_BODY_DYNAMIC_STATUS_BAR", IMG_Display, "viewtype:frontpage", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
856 {"IDS_ST_MBODY_EDIT_AFTER_SCREEN_CAPTURE", IMG_Display, "viewtype:frontpage", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
857 {"IDS_COM_BODY_AUTOMATIC", IMG_Display, "viewtype:brightness", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node, NULL, SUBINDEX_NAME, NULL, NULL},
858 {"IDS_ST_MBODY_SMART_STAY", IMG_SmartScreen, "viewtype:smartscreen", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
859 {"IDS_ST_MBODY_SMART_ROTATION", IMG_SmartScreen, "viewtype:smartscreen", Cfg_Item_Pos_Level0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, SUBINDEX_NAME, NULL, NULL},
863 UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv, char **applocale)
866 SETTING_TRACE(">> setting-display-efl DB search code");
867 setting_retvm_if(!priv || !applocale, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "pplist/applocale is NULL");
869 *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
871 Eina_List **pplist = (Eina_List **)priv;
873 int size = sizeof(s_cfg_node_array) / sizeof(s_cfg_node_array[0]);
874 for (i = 0; i < size; i++) {
875 Setting_Cfg_Node_T *node = setting_plugin_search_item_subindex_add(s_cfg_node_array[i].key_name, s_cfg_node_array[i].ug_args, s_cfg_node_array[i].icon_path, s_cfg_node_array[i].item_type, s_cfg_node_array[i].data, s_cfg_node_array[i].sub_index);
876 *pplist = eina_list_append(*pplist, node);
882 int get_display_ug_state(Cfg_Item_State *stat, void *data)
888 int ret = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &value);
893 *stat = Cfg_Item_Off;
898 /**************************************************************
899 toggle state get/set function for "auto rotate screen"
900 ************************************************************/
902 int set_display_ug_state(Cfg_Item_State stat, void *item, void *data)
907 if (stat == Cfg_Item_On) {
909 } else if (stat == Cfg_Item_Off) {
914 int ret = vconf_set_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, value);
919 int set_display_ug_update_ui(Cfg_Item_State stat, void *data)
926 /**************************************************************
927 toggle state get/set function for "auto adjust screen tone"
928 ************************************************************/
930 int get_display_ug_auto_adjust_state(Cfg_Item_State *stat, void *data)
935 int ret = vconf_get_bool(VCONFKEY_SETAPPL_LCD_AUTO_DISPLAY_ADJUSTMENT, &value);
940 *stat = Cfg_Item_Off;
946 int set_display_ug_auto_adjust_state(Cfg_Item_State stat, void *item, void *data)
951 if (stat == Cfg_Item_On) {
953 } else if (stat == Cfg_Item_Off) {
958 int ret = vconf_set_bool(VCONFKEY_SETAPPL_LCD_AUTO_DISPLAY_ADJUSTMENT, value);
963 int set_display_ug_auto_adjust_update_ui(Cfg_Item_State stat, void *data)
970 /**************************************************************
971 toggle state get/set function for "show battery pecentage"
972 ************************************************************/
974 int get_display_ug_battery_state(Cfg_Item_State *stat, void *data)
979 int ret = vconf_get_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, &value);
984 *stat = Cfg_Item_Off;
990 int set_display_ug_battery_state(Cfg_Item_State stat, void *item, void *data)
995 if (stat == Cfg_Item_On) {
997 } else if (stat == Cfg_Item_Off) {
1002 int ret = vconf_set_bool(VCONFKEY_SETAPPL_BATTERY_PERCENTAGE_BOOL, value);
1007 int set_display_ug_battery_update_ui(Cfg_Item_State stat, void *data)
1009 SETTING_TRACE_BEGIN;
1014 /**************************************************************
1015 toggle state get/set function for "dynamic status bar"
1016 ************************************************************/
1018 int get_display_ug_dynamic_status_state(Cfg_Item_State *stat, void *data)
1020 SETTING_TRACE_BEGIN;
1023 int ret = vconf_get_bool(VCONFKEY_SETAPPL_DYNAMIC_STATUS_BAR, &value);
1026 *stat = Cfg_Item_On;
1028 *stat = Cfg_Item_Off;
1034 int set_display_ug_dynamic_status_state(Cfg_Item_State stat, void *item, void *data)
1036 SETTING_TRACE_BEGIN;
1039 if (stat == Cfg_Item_On) {
1041 } else if (stat == Cfg_Item_Off) {
1046 int ret = vconf_set_bool(VCONFKEY_SETAPPL_DYNAMIC_STATUS_BAR, value);
1051 int set_display_ug_dynamic_status_update_ui(Cfg_Item_State stat, void *data)
1053 SETTING_TRACE_BEGIN;
1058 /**************************************************************
1059 toggle state get/set function for "edit after screen capture"
1060 ************************************************************/
1062 int get_display_ug_edit_screen_state(Cfg_Item_State *stat, void *data)
1064 SETTING_TRACE_BEGIN;
1067 int ret = vconf_get_bool(VCONFKEY_SETAPPL_SCREEN_CAPTURE_EDIT_AFTER_CAPTURE, &value);
1070 *stat = Cfg_Item_On;
1072 *stat = Cfg_Item_Off;
1078 int set_display_ug_edit_screen_state(Cfg_Item_State stat, void *item, void *data)
1080 SETTING_TRACE_BEGIN;
1083 if (stat == Cfg_Item_On) {
1085 } else if (stat == Cfg_Item_Off) {
1090 int ret = vconf_set_bool(VCONFKEY_SETAPPL_SCREEN_CAPTURE_EDIT_AFTER_CAPTURE, value);
1095 int set_display_ug_edit_screen_update_ui(Cfg_Item_State stat, void *data)
1097 SETTING_TRACE_BEGIN;
1103 cfg_func_table opt_tab_rotation = {
1104 .get_item_state = get_display_ug_state,
1105 .set_item_state = set_display_ug_state,
1106 .set_item_update_ui = set_display_ug_update_ui,
1110 cfg_func_table opt_tab_auto_adjust = {
1111 .get_item_state = get_display_ug_auto_adjust_state,
1112 .set_item_state = set_display_ug_auto_adjust_state,
1113 .set_item_update_ui = set_display_ug_auto_adjust_update_ui,
1116 cfg_func_table opt_tab_battery = {
1117 .get_item_state = get_display_ug_battery_state,
1118 .set_item_state = set_display_ug_battery_state,
1119 .set_item_update_ui = set_display_ug_battery_update_ui,
1123 cfg_func_table opt_tab_dynamic_status = {
1124 .get_item_state = get_display_ug_dynamic_status_state,
1125 .set_item_state = set_display_ug_dynamic_status_state,
1126 .set_item_update_ui = set_display_ug_dynamic_status_update_ui,
1129 cfg_func_table opt_tab_edit_screen = {
1130 .get_item_state = get_display_ug_edit_screen_state,
1131 .set_item_state = set_display_ug_edit_screen_state,
1132 .set_item_update_ui = set_display_ug_edit_screen_update_ui,
1135 /* cfg_func_table* tfunc; */
1136 UG_MODULE_API int setting_plugin_search_query_ops(char *str_id, void **tfunc_obj)
1138 SETTING_TRACE_BEGIN;
1139 SETTING_TRACE(">> get tfunc operation via plugin-model 1");
1140 if (str_id && !safeStrCmp(str_id, _("IDS_ST_HEADER_AUTO_ROTATE_SCREEN_ABB"))) {
1141 *tfunc_obj = (void *)&opt_tab_rotation;
1142 } else if (str_id && !safeStrCmp(str_id, _("IDS_ST_MBODY_AUTO_ADJUST_SCREEN_TONE"))) {
1143 *tfunc_obj = (void *)&opt_tab_auto_adjust;
1144 } else if (str_id && !safeStrCmp(str_id, _("IDS_ST_BODY_DISPLAY_BATTERY_PERCENTAGE_ABB"))) {
1145 *tfunc_obj = (void *)&opt_tab_battery;
1146 } else if (str_id && !safeStrCmp(str_id, _("IDS_ST_BODY_DYNAMIC_STATUS_BAR"))) {
1147 *tfunc_obj = (void *)&opt_tab_dynamic_status;
1149 if (str_id && !safeStrCmp(str_id, _("IDS_ST_MBODY_EDIT_AFTER_SCREEN_CAPTURE"))) {
1150 *tfunc_obj = (void *)&opt_tab_edit_screen;
1152 SETTING_TRACE(">> get tfunc operation via plugin-model 2");