Group: Security/Other
BuildRequires: pkgconfig(efl-extension)
BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(evas)
BuildRequires: pkgconfig(capi-appfw-application)
BuildRequires: pkgconfig(capi-appfw-package-manager)
BuildRequires: pkgconfig(capi-appfw-app-manager)
-BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(badge)
%description -n org.tizen.kaskit
Tizen Krate launcher interface for zone
capi-appfw-application
capi-appfw-package-manager
capi-appfw-app-manager
+ badge
)
INCLUDE_DIRECTORIES(${launcher_pkgs_INCLUDE_DIRS} ${ZONE_LIBS})
#define ICON_SIZE_W ((720) * (RESOLUTION_SCALE_W) / 4)
#define ICON_SIZE_H ((1060) * (RESOLUTION_SCALE_H) / 5)
+#define MAX_BADGE_DISPLAY_COUNT 999
+
#define ALLOWED_ICON_DRAG_DISTANCE 100
#define LONG_PRESS_TIME 0.75
void _create_kaskit_window();
void _set_kaskit_window_title(const char *title);
+
void _create_app_icon(const char* pkg_id, const char* app_id, const char* label, const char* icon, bool removable);
void _destroy_app_icon(const char* pkg_id);
+void _update_app_icon_badge(const char* app_id, unsigned int count);
void _icon_clicked_cb(const char *app_id);
void _icon_uninstalled_cb(const char *app_id);
<privilege>http://tizen.org/privilege/appmanager.launch</privilege>
<privilege>http://tizen.org/privilege/packagemanager.info</privilege>
<privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
+ <privilege>http://tizen.org/privilege/notification</privilege>
</privileges>
<ui-application appid="org.tizen.kaskit" exec="/usr/apps/org.tizen.kaskit/bin/org.tizen.kaskit" multiple="false" nodisplay="true" taskmanage="true" type="capp">
<label>Kaskit</label>
align: 1.0 0.0;
text {
font: "arial";
- size: 12;
+ size: 20;
text_class: "ATO002";
min: 1 1;
max: 1 1;
* limitations under the License.
*
*/
+#include <badge.h>
#include <app_control.h>
#include <app_manager.h>
#include <package_manager.h>
static void* __create_app_icon(void* data)
{
struct app_icon_s* app = (struct app_icon_s*)data;
+ unsigned int badge_show = 0, badge_count = 0;
_create_app_icon(app->package, app->id, app->label, app->icon, app->removable);
+ int ret = badge_get_display(app->id, &badge_show);
+ dlog_print(DLOG_ERROR, LOG_TAG, "badge_get_display err = %d", ret);
+ if (badge_show) {
+ ret =badge_get_count(app->id, &badge_count);
+ dlog_print(DLOG_ERROR, LOG_TAG, "badge_get_count err = %d", ret);
+ if (badge_count > 0) {
+ _update_app_icon_badge(app->id, badge_count);
+ }
+ }
+
return NULL;
}
}
}
-void __pkg_event_cb(const char* type,
+static void __pkg_event_cb(const char* type,
const char* pkg_id,
package_manager_event_type_e event_type,
package_manager_event_state_e event_state, int progress,
}
}
-char* __get_current_zone_name() {
+static void __badge_changed_cb(unsigned int action, const char *app_id, unsigned int count, void *user_data) {
+ _update_app_icon_badge(app_id, count);
+}
+
+
+static char* __get_current_zone_name() {
struct passwd pwd, *result;
int bufsize;
PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL);
package_manager_set_event_cb(__pkg_mgr, __pkg_event_cb, NULL);
+ badge_register_changed_cb(__badge_changed_cb, NULL);
+
ecore_thread_run(__create_icon_thread, NULL, NULL, NULL);
free(zone_name);
__num_of_apps--;
evas_object_size_hint_min_set(ud.app_view, 0, (__num_of_apps / 3 + 1) * ICON_SIZE_H);
}
+
+void _update_app_icon_badge(const char* app_id, unsigned int count)
+{
+ Eina_List* i, *i_next;
+ Evas_Object* app_icon;
+ char str[8], *icon_app_id;
+
+ EINA_LIST_FOREACH_SAFE(ud.app_icon_list, i, i_next, app_icon) {
+ icon_app_id = evas_object_data_get(app_icon, "id");
+ if (strncmp(icon_app_id, app_id, PATH_MAX) == 0) {
+ if (count == 0) {
+ elm_object_signal_emit(app_icon, "icon_badge_hide", "source");
+ break;
+ }
+
+ if (count > MAX_BADGE_DISPLAY_COUNT) {
+ snprintf(str, 8, "%d+", MAX_BADGE_DISPLAY_COUNT);
+ } else {
+ snprintf(str, 8, "%d", count);
+ }
+ elm_layout_text_set(app_icon, "badge_text", str);
+ elm_object_signal_emit(app_icon, "icon_badge_show", "source");
+ break;
+ }
+ }
+}