cf14a5585e0eec4ae2b390d923347a946add7475
[apps/core/preloaded/quickpanel.git] / daemon / device / brightness.c
1 /*
2  * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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
18
19 #include <glib.h>
20 #include <string.h>
21 #include <vconf.h>
22 #include <device/display.h>
23 #include <app_control.h>
24
25 #include "common.h"
26 #include "quickpanel-ui.h"
27 #include "list_util.h"
28 #include "quickpanel_def.h"
29 #ifdef QP_SCREENREADER_ENABLE
30 #include "accessibility.h"
31 #endif
32 #include "preference.h"
33 #include "setting_utils.h"
34 #ifdef QP_EMERGENCY_MODE_ENABLE
35 #include "emergency_mode.h"
36 #endif
37 #include "page_setting_all.h"
38 #include "settings_view_featured.h"
39
40 #define BRIGHTNESS_MIN 1
41 #define BRIGHTNESS_MAX 100
42 #define BRIGHTNESS_SIG_ACTIVITY "BRIGHTNESS"
43 #define PREF_BRIGHTNESS_ON "ON"
44 #define PREF_BRIGHTNESS_OFF "OFF"
45
46 typedef struct _brightness_ctrl_obj {
47         int min_level;
48         int max_level;
49         int is_event_registered;
50         int last_requested_level;
51         Evas_Object *viewer;
52         void *data;
53         int level_before;
54         int pos_x;
55
56         Evas_Object *brighntess_slider;
57 } brightness_ctrl_obj;
58
59
60 int slider_drag_start = -1;
61 Eina_Bool is_sliding = EINA_FALSE;
62
63
64 static int _init(void *data);
65 static int _fini(void *data);
66 static void _lang_changed(void *data);
67 static void _qp_opened(void *data);
68 static void _qp_closed(void *data);
69 static void _brightness_view_update(void);
70 static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj);
71 static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj);
72
73 static void _brightness_set_image(int level);
74 static void _refresh(void *data);
75
76 QP_Module brightness_ctrl = {
77         .name = "brightness_ctrl",
78         .init = _init,
79         .fini = _fini,
80         .suspend = NULL,
81         .resume = NULL,
82         .hib_enter = NULL,
83         .hib_leave = NULL,
84         .lang_changed = _lang_changed,
85         .refresh = _refresh,
86         .get_height = NULL,
87         .qp_opened = _qp_opened,
88         .qp_closed = _qp_closed,
89 };
90
91 static brightness_ctrl_obj *g_ctrl_obj;
92 E_DBus_Signal_Handler *g_hdl_brightness;
93
94 static Evas_Object *_controller_view_get(void)
95 {
96         Evas_Object *view = NULL;
97
98         if (g_ctrl_obj != NULL) {
99                 if (g_ctrl_obj->viewer != NULL) {
100                         view = elm_object_part_content_get(g_ctrl_obj->viewer, "elm.swallow.controller");
101                         if (view == NULL) {
102                                 view = evas_object_data_get(g_ctrl_obj->viewer, "view.controller");
103                         }
104                 }
105         }
106
107         return view;
108 }
109
110 static void _controller_view_set(Evas_Object *wrapper, Evas_Object *view)
111 {
112         retif(wrapper == NULL, , "invalid data");
113         retif(view == NULL, , "invalid data");
114
115         elm_object_part_content_set(wrapper, "elm.swallow.controller", view);
116         evas_object_data_set(wrapper, "view.controller", view);
117 }
118
119 static char *_brightness_access_state_cb(void *data, Evas_Object *obj)
120 {
121         char buf[512] = {0,};
122         brightness_ctrl_obj *ctrl_obj = data;
123         retif(NULL == ctrl_obj, NULL, "invalid data");
124
125         snprintf(buf, sizeof(buf) - 1, _NOT_LOCALIZED("Position %1$d of %2$d"),
126                         ctrl_obj->last_requested_level, ctrl_obj->max_level);
127
128         return strdup(buf);
129 }
130
131 #ifdef QP_SCREENREADER_ENABLE
132 static void _set_slider_accessiblity_state(Evas_Object *obj)
133 {
134         Evas_Object *ao = NULL;
135         brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
136         retif(ctrl_obj == NULL, , "Invalid parameter!");
137         retif(ctrl_obj->viewer == NULL, , "Invalid parameter!");
138
139         ao = quickpanel_accessibility_screen_reader_object_get(obj,
140                         SCREEN_READER_OBJ_TYPE_ELM_OBJECT, NULL, NULL);
141         if (ao != NULL) {
142                 elm_access_info_set(ao, ELM_ACCESS_INFO, _NOT_LOCALIZED("Brightness"));
143                 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Slider"));
144                 elm_access_info_cb_set(ao, ELM_ACCESS_STATE, _brightness_access_state_cb, ctrl_obj);
145         }
146 }
147 #endif
148
149 static void _set_text_to_part(Evas_Object *obj, const char *part, const char *text)
150 {
151         const char *old_text = NULL;
152         retif(obj == NULL, , "Invalid parameter!");
153         retif(part == NULL, , "Invalid parameter!");
154         retif(text == NULL, , "Invalid parameter!");
155
156         old_text = elm_object_part_text_get(obj, part);
157         if (old_text != NULL) {
158                 if (strcmp(old_text, text) == 0) {
159                         return;
160                 }
161         }
162
163         elm_object_part_text_set(obj, part, text);
164 }
165
166 static Evas_Object *_check_duplicated_loading(Evas_Object *obj, const char *part)
167 {
168         Evas_Object *old_content = NULL;
169         retif(obj == NULL, NULL, "Invalid parameter!");
170         retif(part == NULL, NULL, "Invalid parameter!");
171
172         old_content = elm_object_part_content_get(obj, part);
173         if (old_content != NULL) {
174                 return old_content;
175         }
176
177         return NULL;
178 }
179
180 static void _brightness_vconf_cb(keynode_t *key, void* data)
181 {
182         brightness_ctrl_obj *ctrl_obj = NULL;
183
184         retif(data == NULL, , "Data parameter is NULL");
185         ctrl_obj = data;
186
187         if (ctrl_obj->viewer != NULL) {
188                 _brightness_view_update();
189         }
190 }
191
192 static int _brightness_set_level(int level)
193 {
194         int ret = DEVICE_ERROR_NONE;
195
196         ret = device_display_set_brightness(0, level);
197         if (ret != DEVICE_ERROR_NONE) {
198                 ERR("failed to set brightness");
199         }
200
201         return level;
202 }
203
204 static int _brightness_get_level(void) {
205
206         int level = 0;
207
208         if (vconf_get_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, &level) == 0) {
209                 return level;
210         } else {
211                 return SETTING_BRIGHTNESS_LEVEL5;
212         }
213 }
214
215 Evas_Object *_slider_get(Evas_Object *view, brightness_ctrl_obj *ctrl_obj) {
216
217         retif(view == NULL, NULL, "Data parameter is NULL");
218
219         Evas_Object *obj = elm_object_part_content_get(view, "elm.swallow.slider");
220
221         if (obj) {
222                 return obj;
223         } else {
224                 return ctrl_obj->brighntess_slider;
225         }
226 }
227
228
229 static void _slider_changed_job_cb(void *data)
230 {
231         int value = 0;
232         double val = 0.0;
233         Evas_Object *obj = NULL;
234         brightness_ctrl_obj *ctrl_obj = data;
235         double time_current = 0.0;
236         static double time_before = 0.0;
237
238         retif(ctrl_obj == NULL, , "Data parameter is NULL");
239         obj = _slider_get(_controller_view_get(), ctrl_obj);
240         retif(obj == NULL, , "obj is NULL");
241
242         val = elm_slider_value_get(obj);
243         value = (int)(val + 0.5);
244
245         time_current = ecore_loop_time_get();
246
247         if (value != ctrl_obj->last_requested_level) {
248                 if (value >= ctrl_obj->min_level && value <= ctrl_obj->max_level) {
249                         ctrl_obj->last_requested_level = value;
250                         if (time_current - time_before >= 0.045) {
251                                 _brightness_set_level(value);
252                                 time_before = time_current;
253                         }
254                         _brightness_set_image(value);
255                 }
256         }
257
258
259 }
260
261 static void
262 _brightness_ctrl_slider_changed_cb(void *data,
263                                                          Evas_Object *obj,
264                                                          void *event_info)
265 {
266         int pos_new = (int)event_info;
267         LOGI("SLIDER_NEW_POS: %d", pos_new);
268
269         _slider_changed_job_cb(data);
270 }
271
272
273 static void _brightness_ctrl_overheat_check(Evas_Object *slider, void *data, int is_display_popup)
274 {
275         int value = 0;
276         int max_brightness = BRIGHTNESS_MAX;
277         brightness_ctrl_obj *ctrl_obj = data;
278         retif(slider == NULL, , "slider is NULL");
279         retif(ctrl_obj == NULL, , "Data parameter is NULL");
280
281         struct appdata *ad = quickpanel_get_app_data();
282         retif(ad == NULL, , "invalid data.");
283
284         value = ctrl_obj->last_requested_level;
285
286         device_display_get_max_brightness(0, &max_brightness);
287         if (value > max_brightness && max_brightness != BRIGHTNESS_MAX) {
288                 DBG("max brightness is limited");
289                 if (is_display_popup == 1) {
290                         if (ad->popup == NULL) {
291                                 quickpanel_setting_create_timeout_popup(ad->win,
292                                         _("IDS_ST_POP_UNABLE_TO_INCREASE_BRIGHTNESS_FURTHER_BECAUSE_OF_PHONE_OVERHEATING"));
293                         }
294                 }
295                 elm_slider_value_set(slider, (double)max_brightness);
296                 ctrl_obj->last_requested_level = max_brightness;
297                 _brightness_set_level(max_brightness);
298                 _brightness_set_image(max_brightness);
299                 return;
300         }
301 }
302
303 static void _slider_delayed_changed_job_cb(void *data)
304 {
305         int value = 0;
306         brightness_ctrl_obj *ctrl_obj = data;
307         Evas_Object *obj = NULL;
308         retif(ctrl_obj == NULL, , "Data parameter is NULL");
309         obj = _slider_get(_controller_view_get(), ctrl_obj);
310         retif(obj == NULL, , "obj is NULL");
311
312         value = ctrl_obj->last_requested_level;
313
314         if (value >= ctrl_obj->min_level && value <= ctrl_obj->max_level) {
315                 _brightness_set_level(value);
316                 _brightness_set_image(value);
317         }
318 }
319
320 static void
321 _brightness_ctrl_slider_delayed_changed_cb(void *data,
322                                                          Evas_Object *obj,
323                                                          void *event_info)
324 {
325         LOGI("");
326         ecore_job_add(_slider_delayed_changed_job_cb, data);
327 }
328
329 static void
330 _brightness_slider_drag_start_cb(void *data,
331                                                          Evas_Object *obj,
332                                                          void *event_info)
333 {
334         is_sliding = EINA_TRUE;
335         slider_drag_start = _brightness_get_level();
336 }
337
338 static void
339 _brightness_slider_drag_stop_cb(void *data,
340                                                          Evas_Object *obj,
341                                                          void *event_info)
342 {
343         brightness_ctrl_obj *ctrl_obj = data;
344         is_sliding = EINA_FALSE;
345 }
346
347
348 /*!
349  * workaround to avoid focus jump to other pages
350  */
351 static void _frame_focused(void *data, Evas_Object * obj, void *event_info)
352 {
353         quickpanel_page_setting_all_focus_allow_set(EINA_FALSE);
354 }
355
356 static void _frame_unfocused(void *data, Evas_Object * obj, void *event_info)
357 {
358         quickpanel_page_setting_all_focus_allow_set(EINA_TRUE);
359 }
360
361
362 static void _brightness_view_pos_set()
363 {
364         struct appdata *ad = quickpanel_get_app_data();
365
366         Evas_Coord base_y;
367 //      Evas_Coord settings_y;
368         Evas_Coord brightness_y;
369
370         Eina_Bool ret = EINA_FALSE;
371
372         edje_object_part_geometry_get(_EDJ(ad->view_root), "qp.root.swallow", NULL, &base_y, NULL, NULL);
373 //      edje_object_part_geometry_get(ad->ly, QP_SETTING_BASE_PART, NULL, &settings_y, NULL, NULL);
374
375         Evas_Object *settings_swallow = quickpanel_setting_layout_get(ad->ly, QP_SETTING_BASE_PART);
376         ret = edje_object_part_geometry_get(_EDJ(settings_swallow), QP_SETTING_BRIGHTNESS_PART_WVGA, NULL, &brightness_y, NULL, NULL);
377         msgif(!ret, "ret is EINA_FALSE");
378
379         evas_object_move(g_ctrl_obj->viewer, 0, base_y + /*settings_y */+ brightness_y);
380 }
381
382 static Evas_Object *_brightness_view_create(Evas_Object *list)
383 {
384         Eina_Bool ret = EINA_TRUE;
385         Evas_Object *view_wrapper = NULL;
386         Evas_Object *view = NULL;
387
388         retif(list == NULL, NULL, "list parameter is NULL");
389
390         view_wrapper = elm_layout_add(list);
391         if (view_wrapper != NULL) {
392                 ret = elm_layout_file_set(view_wrapper, DEFAULT_EDJ,
393                                 "quickpanel/brightness_controller/wrapper");
394                 if (ret == EINA_FALSE) {
395                         ERR("failed to load brightness wapper layout");
396                 }
397                 evas_object_size_hint_weight_set(view_wrapper, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
398                 evas_object_size_hint_align_set(view_wrapper, EVAS_HINT_FILL, EVAS_HINT_FILL);
399
400                 view = elm_layout_add(view_wrapper);
401                 if (view != NULL) {
402                         ret = elm_layout_file_set(view, DEFAULT_EDJ,
403                                         "quickpanel/brightness_controller/default");
404
405                         if (ret == EINA_FALSE) {
406                                 ERR("failed to load brightness layout");
407                         }
408                         evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
409                         evas_object_size_hint_align_set(view, EVAS_HINT_FILL, EVAS_HINT_FILL);
410
411                         Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(view);
412                         elm_access_info_cb_set(focus, ELM_ACCESS_TYPE, quickpanel_accessibility_info_cb_s, _NOT_LOCALIZED("Brightness"));
413                         elm_object_part_content_set(view, "focus", focus);
414
415                         evas_object_smart_callback_add(focus, "focused", _frame_focused, NULL);
416                         evas_object_smart_callback_add(focus, "unfocused", _frame_unfocused, NULL);
417                         evas_object_show(view);
418                         _brightness_view_pos_set();
419
420                         g_ctrl_obj->brighntess_slider = view;
421                         _controller_view_set(view_wrapper, view);
422                         evas_object_show(view_wrapper);
423                 }
424         }
425
426         return view_wrapper;
427 }
428
429
430 static void _brightness_set_image(int level)
431 {
432         int old_brightness_type = -1;
433         int mapped_level = 0;
434         char buf[128] = {0,};
435         Evas_Object *view = _controller_view_get();
436         brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
437         retif(ctrl_obj == NULL, , "Invalid parameter!");
438         retif(view == NULL, , "Invalid parameter!");
439
440         if (level <= 1) {
441                 mapped_level = 0;
442         } else if (level >= 100) {
443                 mapped_level = 11;
444         } else if (level > 1 && level <= 9){
445                 mapped_level = 1;
446         } else {
447                 mapped_level = (level / 10);
448         }
449
450         if (ctrl_obj->level_before != mapped_level ) {
451                 snprintf(buf, sizeof(buf) - 1, "icon.state.%d", mapped_level);
452                 elm_object_signal_emit(view, buf, "prog");
453                 ctrl_obj->level_before = mapped_level;
454         }
455 }
456
457 static void _brightness_set_slider(void)
458 {
459         int value = 0;
460         Evas_Object *slider = NULL;
461         Evas_Object *old_obj = NULL;
462         brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
463         Evas_Object *view = _controller_view_get();
464         retif(ctrl_obj == NULL, , "Invalid parameter!");
465         retif(view == NULL, , "Invalid parameter!");
466
467         old_obj = _check_duplicated_loading(view, "elm.swallow.slider");
468
469         if (old_obj == NULL) {
470                 slider = elm_slider_add(view);
471
472                 if (slider != NULL) {
473                         evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
474                         evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
475                         elm_slider_min_max_set(slider, ctrl_obj->min_level, ctrl_obj->max_level);
476                         evas_object_smart_callback_add(slider, "changed",
477                                         _brightness_ctrl_slider_changed_cb, ctrl_obj);
478                         evas_object_smart_callback_add(slider, "delay,changed",
479                                         _brightness_ctrl_slider_delayed_changed_cb, ctrl_obj);
480
481                         evas_object_smart_callback_add(slider, "slider,drag,start",
482                                         _brightness_slider_drag_start_cb, ctrl_obj);
483
484
485                         evas_object_smart_callback_add(slider, "slider,drag,stop",
486                                         _brightness_slider_drag_stop_cb, ctrl_obj);
487
488                         elm_object_part_content_set(view, "elm.swallow.slider", slider);
489                 } else {
490                         ERR("failed to create slider");
491                         return;
492                 }
493         } else {
494                 slider = old_obj;
495         }
496
497         elm_object_style_set(slider, "quickpanel_style");
498
499         elm_slider_indicator_format_set(slider, NULL);
500         elm_slider_indicator_format_function_set(slider, NULL, NULL);
501         elm_slider_indicator_show_set(slider, EINA_FALSE);
502
503 #ifdef QP_SCREENREADER_ENABLE
504         _set_slider_accessiblity_state(slider);
505 #endif
506
507         value = _brightness_get_level();
508         elm_slider_value_set(slider, value);
509         _brightness_set_image(value);
510 }
511
512 static void _focus_pair_set()
513 {
514         brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
515         Evas_Object *focus = NULL;
516         Evas_Object *slider = NULL;
517         Evas_Object *view = _controller_view_get();
518         retif(ctrl_obj == NULL, , "Invalid parameter!");
519         retif(view == NULL, , "Invalid parameter!");
520
521         focus = elm_object_part_content_get(view, "focus");
522         slider = elm_object_part_content_get(view, "elm.swallow.slider");
523
524         if (focus != NULL && slider != NULL) {
525                 /* focus */
526                 elm_object_focus_next_object_set(focus, slider, ELM_FOCUS_RIGHT);
527                 elm_object_focus_next_object_set(focus, slider, ELM_FOCUS_DOWN);
528
529                 /* slider */
530                 elm_object_focus_next_object_set(slider, focus, ELM_FOCUS_LEFT);
531                 elm_object_focus_next_object_set(slider, focus, ELM_FOCUS_UP);
532         }
533 }
534
535 static void _brightness_view_update(void)
536 {
537         _brightness_set_slider();
538         _focus_pair_set();
539 }
540
541 static void _brightness_add(brightness_ctrl_obj *ctrl_obj, void *data)
542 {
543         struct appdata *ad = data;
544         retif(!ad, , "list is NULL");
545         retif(!ad->list, , "list is NULL");
546         retif(ctrl_obj == NULL, , "ctrl_obj is null");
547         retif(ctrl_obj->viewer != NULL, , "viewer is already created");
548
549         ctrl_obj->viewer = _brightness_view_create(ad->list);
550         ctrl_obj->data = data;
551
552         _brightness_set_image(BRIGHTNESS_MIN);
553         _refresh(ad);
554 }
555
556 static void _brightness_remove(brightness_ctrl_obj *ctrl_obj, void *data)
557 {
558         struct appdata *ad = data;
559         retif(ad == NULL, , "list is NULL");
560         retif(ad->list == NULL, , "list is NULL");
561
562         if (g_ctrl_obj != NULL) {
563                 if (g_ctrl_obj->viewer != NULL) {
564                         quickpanel_list_util_item_unpack_by_object(ad->list
565                                         , g_ctrl_obj->viewer, 0, 0);
566                         quickpanel_list_util_item_del_tag(g_ctrl_obj->viewer);
567                         evas_object_del(g_ctrl_obj->viewer);
568                         g_ctrl_obj->viewer = NULL;
569                 }
570                 DBG("brightness controller is removed");
571                 free(g_ctrl_obj);
572                 g_ctrl_obj = NULL;
573         }
574 }
575
576 static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj)
577 {
578         int ret = 0;
579         retif(ctrl_obj == NULL, , "Data parameter is NULL");
580
581         if (ctrl_obj->is_event_registered == 0) {
582                 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS,
583                                 _brightness_vconf_cb, ctrl_obj);
584                 if (ret != 0) {
585                         ERR("failed to register a cb key:%s err:%d",
586                                         "VCONFKEY_SETAPPL_LCD_BRIGHTNESS", ret);
587                 }
588                 ctrl_obj->is_event_registered = 1;
589         }
590 }
591
592 static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj)
593 {
594         int ret = 0;
595         retif(ctrl_obj == NULL, , "Data parameter is NULL");
596
597         if (ctrl_obj->is_event_registered == 1) {
598                 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, _brightness_vconf_cb);
599                 if (ret != 0) {
600                         ERR("failed to register a cb key:%s err:%d", "VCONFKEY_SETAPPL_LCD_BRIGHTNESS", ret);
601                 }
602                 ctrl_obj->is_event_registered = 0;
603         }
604 }
605
606 static void _brightness_create(void *data)
607 {
608         if (g_ctrl_obj == NULL) {
609                 g_ctrl_obj = (brightness_ctrl_obj *)calloc(1, sizeof(brightness_ctrl_obj));
610                 if (g_ctrl_obj != NULL) {
611                         g_ctrl_obj->min_level = BRIGHTNESS_MIN;
612                         g_ctrl_obj->max_level = BRIGHTNESS_MAX;
613                         g_ctrl_obj->last_requested_level = _brightness_get_level();
614
615                         _brightness_add(g_ctrl_obj, data);
616                         _brightness_view_update();
617                         _brightness_register_event_cb(g_ctrl_obj);
618
619                         g_ctrl_obj->brighntess_slider = NULL;
620
621                         DBG("brightness controller is created");
622                 }
623         }
624 }
625
626 static void _brightness_destroy(void *data)
627 {
628         if (g_ctrl_obj != NULL) {
629                 _brightness_deregister_event_cb(g_ctrl_obj);
630                 _brightness_remove(g_ctrl_obj, data);
631
632                 DBG("brightness controller is removed");
633         }
634
635         g_ctrl_obj = NULL;
636 }
637
638 static void _handler_brightness(void *data, DBusMessage *msg)
639 {
640         int ret = 0;
641         DBusError err;
642         char *key = NULL;
643         char *value = NULL;
644         retif(data == NULL || msg == NULL, , "Invalid parameter!");
645
646         dbus_error_init(&err);
647         ret = dbus_message_get_args(msg, &err,
648                         DBUS_TYPE_STRING, &key,
649                         DBUS_TYPE_STRING, &value,
650                         DBUS_TYPE_INVALID);
651         retif(ret == 0, , "dbus_message_get_args error");
652         retif(key == NULL, , "Failed to get key");
653         retif(value == NULL, , "Failed to get value");
654
655         if (dbus_error_is_set(&err)) {
656                 ERR("dbus err: %s", err.message);
657                 dbus_error_free(&err);
658                 return;
659         }
660
661         if (strcmp(key, "visibility") == 0) {
662                 if (strcmp(value, PREF_BRIGHTNESS_ON) == 0) {
663                         _brightness_create(data);
664                         quickpanel_preference_set(PREF_BRIGHTNESS, PREF_BRIGHTNESS_ON);
665                 } else if (strcmp(value, PREF_BRIGHTNESS_OFF) == 0) {
666                         _brightness_destroy(data);
667                         quickpanel_preference_set(PREF_BRIGHTNESS, PREF_BRIGHTNESS_OFF);
668                 }
669         }
670 }
671
672 static void _ipc_init(void *data)
673 {
674         struct appdata *ad = data;
675         retif(ad == NULL, , "Invalid parameter!");
676         retif(ad->dbus_connection == NULL, , "Invalid parameter!");
677
678         g_hdl_brightness =
679                 e_dbus_signal_handler_add(ad->dbus_connection, NULL,
680                                 QP_DBUS_PATH,
681                                 QP_DBUS_NAME,
682                                 BRIGHTNESS_SIG_ACTIVITY,
683                                 _handler_brightness, data);
684         msgif(g_hdl_brightness == NULL, "fail to add size signal");
685 }
686
687 static void _ipc_fini(void *data)
688 {
689         struct appdata *ad = data;
690         retif(ad == NULL, , "Invalid parameter!");
691         retif(ad->dbus_connection == NULL, , "Invalid parameter!");
692
693         if (g_hdl_brightness != NULL) {
694                 e_dbus_signal_handler_del(ad->dbus_connection, g_hdl_brightness);
695                 g_hdl_brightness = NULL;
696         }
697 }
698
699 static int _init(void *data)
700 {
701         char buf[PREF_LEN_VALUE_MAX] = {0,};
702         retif(data == NULL, QP_FAIL, "Invalid parameter!");
703
704 #ifdef QP_EMERGENCY_MODE_ENABLE
705         if (quickpanel_emergency_mode_is_on()) {
706                 return QP_OK;
707         }
708 #endif
709
710         quickpanel_preference_get(PREF_BRIGHTNESS, buf);
711         _brightness_create(data);
712
713         _ipc_init(data);
714
715         return QP_OK;
716 }
717
718 static int _fini(void *data)
719 {
720         retif(data == NULL, QP_FAIL, "Invalid parameter!");
721
722         _ipc_fini(data);
723         _brightness_destroy(data);
724
725         return QP_OK;
726 }
727
728 static void _lang_changed(void *data)
729 {
730         retif(data == NULL, , "Invalid parameter!");
731
732         if (g_ctrl_obj != NULL && g_ctrl_obj->viewer != NULL) {
733                 _brightness_view_update();
734         }
735 }
736
737 static void _qp_opened(void *data)
738 {
739         Evas_Object *slider = NULL;
740         Evas_Object *view = _controller_view_get();
741         retif(g_ctrl_obj == NULL, , "Invalid parameter!");
742         retif(view == NULL, , "Invalid parameter!");
743
744         if (view != NULL) {
745                 _brightness_view_update();
746                 slider = elm_object_part_content_get(view, "elm.swallow.slider");
747                 if (slider != NULL) {
748                         DBG("quickpanel opened");
749                         _brightness_ctrl_overheat_check(slider, g_ctrl_obj, 0);
750                 }
751         }
752 }
753
754 static void _qp_closed(void *data)
755 {
756         retif(g_ctrl_obj == NULL, , "Invalid parameter!");
757
758         if (g_ctrl_obj->viewer != NULL) {
759                 _brightness_view_update();
760         }
761 }
762
763 static void _refresh(void *data)
764 {
765         int h = 0;
766         struct appdata *ad = data;
767         Evas_Object *view = _controller_view_get();
768         retif(ad == NULL, , "Invalid parameter!");
769         retif(g_ctrl_obj == NULL, , "Invalid parameter!");
770         retif(g_ctrl_obj->viewer == NULL, , "Invalid parameter!");
771         retif(view == NULL, , "Invalid parameter!");
772
773         evas_object_geometry_get(g_ctrl_obj->viewer, NULL, NULL, NULL, &h);
774
775         if (ad->angle == 90 || ad->angle == 270) {
776                 evas_object_resize(g_ctrl_obj->viewer, ad->win_height, h);
777                 evas_object_resize(view, ad->win_height, h);
778                 _brightness_view_pos_set();
779
780         } else {
781                 evas_object_resize(g_ctrl_obj->viewer, ad->win_width, h);
782                 evas_object_resize(view, ad->win_width, h);
783                 _brightness_view_pos_set();
784         }
785 }