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