2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include "quickpanel-ui.h"
23 #include "list_util.h"
24 #include "quickpanel_def.h"
26 #define BRIGHTNESS_MIN 1
27 #define BRIGHTNESS_MAX 100
29 #define QP_BRIGHTNESS_CONTROL_ICON_IMG ICONDIR"/Q02_Notification_brightness.png"
31 typedef struct _brightness_ctrl_obj {
36 } brightness_ctrl_obj;
38 static int quickpanel_brightness_init(void *data);
39 static int quickpanel_brightness_fini(void *data);
40 static void quickpanel_brightness_lang_changed(void *data);
41 static void quickpanel_brightness_qp_opened(void *data);
42 static void quickpanel_brightness_qp_closed(void *data);
43 static void _brightness_view_update(void);
44 static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj);
45 static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj);
47 QP_Module brightness_ctrl = {
48 .name = "brightness_ctrl",
49 .init = quickpanel_brightness_init,
50 .fini = quickpanel_brightness_fini,
55 .lang_changed = quickpanel_brightness_lang_changed,
58 .qp_opened = quickpanel_brightness_qp_opened,
59 .qp_closed = quickpanel_brightness_qp_closed,
62 static brightness_ctrl_obj *g_ctrl_obj;
64 static void _set_text_to_part(Evas_Object *obj, const char *part, const char *text) {
65 const char *old_text = NULL;
67 retif(obj == NULL, , "Invalid parameter!");
68 retif(part == NULL, , "Invalid parameter!");
69 retif(text == NULL, , "Invalid parameter!");
71 old_text = elm_object_part_text_get(obj, part);
72 if (old_text != NULL) {
73 if (strcmp(old_text, text) == 0) {
78 elm_object_part_text_set(obj, part, text);
81 static Evas_Object *_check_duplicated_image_loading(Evas_Object *obj, const char *part, const char *file_path) {
82 Evas_Object *old_ic = NULL;
83 const char *old_ic_path = NULL;
85 retif(obj == NULL, NULL, "Invalid parameter!");
86 retif(part == NULL, NULL, "Invalid parameter!");
87 retif(file_path == NULL, NULL, "Invalid parameter!");
89 old_ic = elm_object_part_content_get(obj, part);
91 elm_image_file_get(old_ic, &old_ic_path, NULL);
92 if (old_ic_path != NULL) {
93 if (strcmp(old_ic_path, file_path) == 0)
97 elm_object_part_content_unset(obj, part);
98 evas_object_del(old_ic);
104 static Evas_Object *_check_duplicated_loading(Evas_Object *obj, const char *part) {
105 Evas_Object *old_content = NULL;
107 retif(obj == NULL, NULL, "Invalid parameter!");
108 retif(part == NULL, NULL, "Invalid parameter!");
110 old_content = elm_object_part_content_get(obj, part);
111 if (old_content != NULL) {
118 static int _brightness_get_automate_level(void) {
121 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &is_on) == 0)
124 return SETTING_BRIGHTNESS_AUTOMATIC_OFF;
127 static void _brightness_vconf_cb(keynode_t *key, void* data) {
128 brightness_ctrl_obj *ctrl_obj = NULL;
130 retif(data == NULL, , "Data parameter is NULL");
133 if (ctrl_obj->viewer != NULL) {
134 _brightness_view_update();
138 static void quickpanel_brightness_qp_opened(void *data)
140 struct appdata *ad = NULL;
142 retif(data == NULL, , "Invalid parameter!");
145 retif(g_ctrl_obj == NULL, , "Invalid parameter!");
147 if (g_ctrl_obj->viewer != NULL) {
148 _brightness_view_update();
152 static void quickpanel_brightness_qp_closed(void *data)
154 struct appdata *ad = NULL;
156 retif(data == NULL, , "Invalid parameter!");
159 retif(g_ctrl_obj == NULL, , "Invalid parameter!");
161 if (g_ctrl_obj->viewer != NULL) {
162 _brightness_view_update();
166 static int _brightness_set_level(int level) {
167 int ret = DEVICE_ERROR_NONE;
169 ret = device_set_brightness_to_settings(0, level);
170 if (ret != DEVICE_ERROR_NONE) {
171 ERR("failed to set brightness");
177 static int _brightness_get_level(void) {
180 if (vconf_get_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, &level) == 0)
183 return SETTING_BRIGHTNESS_LEVEL5;
186 static int _brightness_set_automate_level(int is_on) {
187 return vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, is_on);
191 _brightness_ctrl_slider_changed_cb(void *data,
196 static int old_val = -1;
197 brightness_ctrl_obj *ctrl_obj = NULL;
199 retif(data == NULL, , "Data parameter is NULL");
202 double val = elm_slider_value_get(obj);
203 value = (int)(val + 0.5);
205 if (value != old_val)
207 if (value >= ctrl_obj->min_level && value <= ctrl_obj->max_level) {
208 DBG("brightness is changed to %d", value);
209 _brightness_set_level(value);
215 _brightness_ctrl_slider_delayed_changed_cb(void *data,
221 value = _brightness_get_level();
222 DBG("brightness is changed to %d", value);
223 _brightness_set_level(value);
227 _brightness_ctrl_slider_drag_start_cb(void *data,
231 _brightness_deregister_event_cb(data);
235 _brightness_ctrl_slider_drag_stop_cb(void *data,
239 _brightness_register_event_cb(data);
242 static void _brightness_ctrl_checker_toggle_cb(void *data,
246 quickpanel_play_feedback();
248 retif(obj == NULL, , "obj parameter is NULL");
250 int status = elm_check_state_get(obj);
251 brightness_ctrl_obj *ctrl_obj = NULL;
253 retif(data == NULL, , "Data parameter is NULL");
256 _brightness_set_automate_level(status);
258 if (ctrl_obj->viewer != NULL) {
259 _brightness_view_update();
263 static Evas_Object *_brightness_view_create(Evas_Object *list)
265 Eina_Bool ret = EINA_TRUE;
266 Evas_Object *view = NULL;
268 retif(list == NULL, NULL, "list parameter is NULL");
270 view = elm_layout_add(list);
273 ret = elm_layout_file_set(view, DEFAULT_EDJ,
274 "quickpanel/brightness_controller/default");
276 if (ret == EINA_FALSE) {
277 ERR("failed to load brightness layout");
279 evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
280 evas_object_size_hint_align_set(view, EVAS_HINT_FILL, EVAS_HINT_FILL);
281 evas_object_show(view);
287 static void _brightness_set_text(void)
289 brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
290 retif(ctrl_obj == NULL, , "Invalid parameter!");
291 retif(ctrl_obj->viewer == NULL, , "Invalid parameter!");
293 _set_text_to_part(ctrl_obj->viewer, "elm.check.text", _("IDS_QP_BODY_AUTO"));
294 _set_text_to_part(ctrl_obj->viewer, "elm.text.label", _S("IDS_COM_OPT_BRIGHTNESS"));
297 static void _brightness_set_image(void)
299 Evas_Object *ic = NULL;
300 Evas_Object *old_ic = NULL;
301 brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
302 retif(ctrl_obj == NULL, , "Invalid parameter!");
303 retif(ctrl_obj->viewer == NULL, , "Invalid parameter!");
305 old_ic = _check_duplicated_image_loading(ctrl_obj->viewer,
306 "elm.swallow.thumbnail", QP_BRIGHTNESS_CONTROL_ICON_IMG);
308 if (old_ic == NULL) {
309 ic = elm_image_add(ctrl_obj->viewer);
312 elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
313 elm_image_file_set(ic, QP_BRIGHTNESS_CONTROL_ICON_IMG, "elm.swallow.thumbnail");
314 elm_object_part_content_set(ctrl_obj->viewer, "elm.swallow.thumbnail", ic);
319 static void _brightness_set_checker(void)
321 Evas_Object *checker = NULL;
322 Evas_Object *old_obj = NULL;
323 brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
324 retif(ctrl_obj == NULL, , "Invalid parameter!");
325 retif(ctrl_obj->viewer == NULL, , "Invalid parameter!");
327 old_obj = _check_duplicated_loading(ctrl_obj->viewer,
328 "elm.check.swallow");
330 if (old_obj == NULL) {
331 checker = elm_check_add(ctrl_obj->viewer);
333 if (checker != NULL) {
334 elm_object_style_set(checker, "quickpanel");
335 evas_object_smart_callback_add(checker,"changed",_brightness_ctrl_checker_toggle_cb , ctrl_obj);
336 elm_object_part_content_set(ctrl_obj->viewer, "elm.check.swallow", checker);
338 ERR("failed to create checker");
345 elm_check_state_set(checker, _brightness_get_automate_level());
348 static void _brightness_set_slider(void)
351 Evas_Object *slider = NULL;
352 Evas_Object *old_obj = NULL;
353 brightness_ctrl_obj *ctrl_obj = g_ctrl_obj;
354 retif(ctrl_obj == NULL, , "Invalid parameter!");
355 retif(ctrl_obj->viewer == NULL, , "Invalid parameter!");
357 old_obj = _check_duplicated_loading(ctrl_obj->viewer,
358 "elm.swallow.slider");
360 if (old_obj == NULL) {
361 slider = elm_slider_add(ctrl_obj->viewer);
363 if (slider != NULL) {
364 elm_object_style_set(slider, "quickpanel");
366 evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
367 evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
368 elm_slider_min_max_set(slider, ctrl_obj->min_level, ctrl_obj->max_level);
369 evas_object_smart_callback_add(slider, "changed",
370 _brightness_ctrl_slider_changed_cb, ctrl_obj);
371 evas_object_smart_callback_add(slider, "delay,changed",
372 _brightness_ctrl_slider_delayed_changed_cb, ctrl_obj);
373 evas_object_smart_callback_add(slider, "slider,drag,start",
374 _brightness_ctrl_slider_drag_start_cb, ctrl_obj);
375 evas_object_smart_callback_add(slider, "slider,drag,stop",
376 _brightness_ctrl_slider_drag_stop_cb, ctrl_obj);
377 elm_object_part_content_set(ctrl_obj->viewer, "elm.swallow.slider", slider);
379 ERR("failed to create slider");
386 value = _brightness_get_level();
388 elm_slider_value_set(slider, value);
390 if (_brightness_get_automate_level()) {
391 elm_object_disabled_set(slider, EINA_TRUE);
393 elm_object_disabled_set(slider, EINA_FALSE);
397 static void _brightness_view_update(void)
399 _brightness_set_text();
400 _brightness_set_image();
401 _brightness_set_checker();
402 _brightness_set_slider();
405 static void _brightness_add(brightness_ctrl_obj *ctrl_obj, void *data)
407 qp_item_data *qid = NULL;
411 retif(!ad->list, , "list is NULL");
413 ctrl_obj->viewer = _brightness_view_create(ad->list);
414 ctrl_obj->data = data;
416 if (ctrl_obj->viewer != NULL) {
417 qid = quickpanel_list_util_item_new(QP_ITEM_TYPE_BRIGHTNESS, ctrl_obj);
419 quickpanel_list_util_item_set_tag(ctrl_obj->viewer, qid);
420 quickpanel_list_util_sort_insert(ad->list, ctrl_obj->viewer);
422 ERR("fail to alloc vit");
425 ERR("failed to create brightness view");
429 static void _brightness_remove(brightness_ctrl_obj *ctrl_obj, void *data)
431 struct appdata *ad = data;
432 retif(ad == NULL, , "list is NULL");
433 retif(ad->list == NULL, , "list is NULL");
435 if (g_ctrl_obj != NULL) {
436 if (g_ctrl_obj->viewer != NULL) {
437 quickpanel_list_util_item_unpack_by_object(ad->list
438 , g_ctrl_obj->viewer);
439 quickpanel_list_util_item_del_tag(g_ctrl_obj->viewer);
440 evas_object_del(g_ctrl_obj->viewer);
442 INFO("success to remove brightness controller");
448 static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj)
451 retif(ctrl_obj == NULL, , "Data parameter is NULL");
453 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS,
454 _brightness_vconf_cb, ctrl_obj);
456 ERR("failed to register a cb key:%s err:%d",
457 "VCONFKEY_SETAPPL_LCD_BRIGHTNESS", ret);
461 static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj)
465 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, _brightness_vconf_cb);
467 ERR("failed to register a cb key:%s err:%d", "VCONFKEY_SETAPPL_LCD_BRIGHTNESS", ret);
471 static int quickpanel_brightness_init(void *data)
473 retif(data == NULL, QP_FAIL, "Invalid parameter!");
475 if (g_ctrl_obj == NULL) {
476 g_ctrl_obj = (brightness_ctrl_obj *)malloc(sizeof(brightness_ctrl_obj));
479 if (g_ctrl_obj != NULL) {
480 g_ctrl_obj->min_level = BRIGHTNESS_MIN;
481 g_ctrl_obj->max_level = BRIGHTNESS_MAX;
483 DBG("brightness range %d~%d\n", g_ctrl_obj->min_level, g_ctrl_obj->max_level);
485 _brightness_add(g_ctrl_obj, data);
486 _brightness_view_update();
487 _brightness_register_event_cb(g_ctrl_obj);
493 static int quickpanel_brightness_fini(void *data)
495 retif(data == NULL, QP_FAIL, "Invalid parameter!");
497 if (g_ctrl_obj != NULL) {
498 _brightness_deregister_event_cb(g_ctrl_obj);
499 _brightness_remove(g_ctrl_obj, data);
506 static void quickpanel_brightness_lang_changed(void *data)
508 retif(data == NULL, , "Invalid parameter!");
510 if (g_ctrl_obj != NULL && g_ctrl_obj->viewer != NULL) {
511 _brightness_view_update();