4 * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 #include <Elementary.h>
24 #include "menu_screen.h"
27 #include "page_scroller.h"
32 HAPI int item_badge_count(char *package)
34 unsigned int is_display = 0;
35 unsigned int count = 0;
36 badge_error_e err = BADGE_ERROR_NONE;
38 err = badge_get_display(package, &is_display);
39 if (BADGE_ERROR_NONE != err) _D("cannot get badge display");
41 if (0 == is_display) return 0;
43 err = badge_get_count(package, &count);
44 if (BADGE_ERROR_NONE != err) _D("cannot get badge count");
46 _D("Badge for package %s : %u", package, count);
53 static Eina_Bool _idler_cb(void *data)
57 Evas_Object *item = data;
59 package = item_get_package(item);
61 _D("Failed to get a package name");
62 evas_object_data_del(item, "idle_timer");
63 return ECORE_CALLBACK_CANCEL;
66 count = item_badge_count(package);
67 if (count) item_show_badge(item, count);
68 else item_hide_badge(item);
70 evas_object_data_del(item, "idle_timer");
72 return ECORE_CALLBACK_CANCEL;
77 HAPI bool item_badge_is_registered(Evas_Object *item)
81 bool existing = false;
83 pkgname = item_get_package(item);
84 retv_if(NULL == pkgname, false);
86 err = badge_is_existing(pkgname, &existing);
87 if (BADGE_ERROR_NONE != err) _E("cannot know whether the badge for %s is or not.", pkgname);
89 return existing? true : false;
94 HAPI menu_screen_error_e item_badge_register(Evas_Object *item)
96 Ecore_Idler *idle_timer;
99 is_registered = item_badge_is_registered(item);
100 if (false == is_registered) return MENU_SCREEN_ERROR_OK;
102 idle_timer = ecore_idler_add(_idler_cb, item);
103 retv_if(NULL == idle_timer, MENU_SCREEN_ERROR_FAIL);
104 evas_object_data_set(item, "idle_timer", idle_timer);
106 return MENU_SCREEN_ERROR_OK;
111 HAPI void item_badge_unregister(Evas_Object *item)
114 Ecore_Idler *idle_timer;
116 package = item_get_package(item);
117 if (!package) return;
119 idle_timer = evas_object_data_get(item, "idle_timer");
121 _D("Badge handler for package %s is not yet ready", package);
122 evas_object_data_del(item, "idle_timer");
123 ecore_idler_del(idle_timer);
127 item_hide_badge(item);
132 static void _badge_change_cb(unsigned int action, const char *pkgname, unsigned int count, void *data)
134 Evas_Object *scroller = data;
136 unsigned int is_display = 0;
139 _D("Badge changed, action : %u, pkgname : %s, count : %u", action, pkgname, count);
141 ret_if(NULL == pkgname);
143 if (BADGE_ACTION_REMOVE == action) {
147 err = badge_get_display(pkgname, &is_display);
148 if (BADGE_ERROR_NONE != err) _D("cannot get badge display");
149 if (0 == is_display) count = 0;
152 item = page_scroller_find_item_by_package(scroller, pkgname, NULL);
153 if (NULL == item) return;
155 if (count) item_show_badge(item, count);
156 else item_hide_badge(item);
161 HAPI void item_badge_register_changed_cb(Evas_Object *scroller)
165 err = badge_register_changed_cb(_badge_change_cb, scroller);
166 ret_if(BADGE_ERROR_NONE != err);
171 HAPI void item_badge_unregister_changed_cb(void)
175 err = badge_unregister_changed_cb(_badge_change_cb);
176 ret_if(BADGE_ERROR_NONE != err);