738fc4cead3641481ba9abc1e296c45a756d11f7
[apps/native/menu-screen.git] / src / item_badge.c
1 /*
2  * MENU-SCREEN
3  *
4  * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19
20 #include <badge.h>
21 #include <Elementary.h>
22 #include <stdbool.h>
23
24 #include "menu_screen.h"
25 #include "conf.h"
26 #include "item.h"
27 #include "page_scroller.h"
28 #include "util.h"
29
30
31
32 HAPI int item_badge_count(char *package)
33 {
34         unsigned int is_display = 0;
35         unsigned int count = 0;
36         badge_error_e err = BADGE_ERROR_NONE;
37
38         err = badge_get_display(package, &is_display);
39         if (BADGE_ERROR_NONE != err) _D("cannot get badge display");
40
41         if (0 == is_display) return 0;
42
43         err = badge_get_count(package, &count);
44         if (BADGE_ERROR_NONE != err) _D("cannot get badge count");
45
46         _D("Badge for package %s : %u", package, count);
47
48         return (int) count;
49 }
50
51
52
53 static Eina_Bool _idler_cb(void *data)
54 {
55         char *package;
56         int count;
57         Evas_Object *item = data;
58
59         package = item_get_package(item);
60         if (!package) {
61                 _D("Failed to get a package name");
62                 evas_object_data_del(item, "idle_timer");
63                 return ECORE_CALLBACK_CANCEL;
64         }
65
66         count = item_badge_count(package);
67         if (count) item_show_badge(item, count);
68         else item_hide_badge(item);
69
70         evas_object_data_del(item, "idle_timer");
71
72         return ECORE_CALLBACK_CANCEL;
73 }
74
75
76
77 HAPI bool item_badge_is_registered(Evas_Object *item)
78 {
79         const char *pkgname;
80         badge_error_e err;
81         bool existing = false;
82
83         pkgname = item_get_package(item);
84         retv_if(NULL == pkgname, false);
85
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);
88
89         return existing? true : false;
90 }
91
92
93
94 HAPI menu_screen_error_e item_badge_register(Evas_Object *item)
95 {
96         Ecore_Idler *idle_timer;
97         bool is_registered;
98
99         is_registered = item_badge_is_registered(item);
100         if (false == is_registered) return MENU_SCREEN_ERROR_OK;
101
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);
105
106         return MENU_SCREEN_ERROR_OK;
107 }
108
109
110
111 HAPI void item_badge_unregister(Evas_Object *item)
112 {
113         char *package;
114         Ecore_Idler *idle_timer;
115
116         package = item_get_package(item);
117         if (!package) return;
118
119         idle_timer = evas_object_data_get(item, "idle_timer");
120         if (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);
124                 return;
125         }
126
127         item_hide_badge(item);
128 }
129
130
131
132 static void _badge_change_cb(unsigned int action, const char *pkgname, unsigned int count, void *data)
133 {
134         Evas_Object *scroller = data;
135         Evas_Object *item;
136         unsigned int is_display = 0;
137         badge_error_e err;
138
139         _D("Badge changed, action : %u, pkgname : %s, count : %u", action, pkgname, count);
140
141         ret_if(NULL == pkgname);
142
143         if (BADGE_ACTION_REMOVE == action) {
144                 count = 0;
145                 is_display = false;
146         } else {
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;
150         }
151
152         item = page_scroller_find_item_by_package(scroller, pkgname, NULL);
153         if (NULL == item) return;
154
155         if (count) item_show_badge(item, count);
156         else item_hide_badge(item);
157 }
158
159
160
161 HAPI void item_badge_register_changed_cb(Evas_Object *scroller)
162 {
163         badge_error_e err;
164
165         err = badge_register_changed_cb(_badge_change_cb, scroller);
166         ret_if(BADGE_ERROR_NONE != err);
167 }
168
169
170
171 HAPI void item_badge_unregister_changed_cb(void)
172 {
173         badge_error_e err;
174
175         err = badge_unregister_changed_cb(_badge_change_cb);
176         ret_if(BADGE_ERROR_NONE != err);
177 }
178
179
180
181 // End of a file