From: Sungbae Yoo Date: Tue, 28 Jun 2016 12:31:55 +0000 (+0900) Subject: Kaskit: Add functions to show the badge on the app icon X-Git-Tag: accepted/tizen/common/20160629.223402~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a9428c371edce22f8e7e4e3190e40cb4f9a0a5f5;p=platform%2Fcore%2Fsecurity%2Fdevice-policy-manager.git Kaskit: Add functions to show the badge on the app icon Signed-off-by: Sungbae Yoo Change-Id: I45b3fbd179374054af381664701f1ca4ff51a021 --- diff --git a/packaging/device-policy-manager.spec b/packaging/device-policy-manager.spec index 57a8c5e..8477619 100755 --- a/packaging/device-policy-manager.spec +++ b/packaging/device-policy-manager.spec @@ -235,10 +235,11 @@ Summary: Tizen Krate launcher Interface 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 diff --git a/zone/kaskit/CMakeLists.txt b/zone/kaskit/CMakeLists.txt index 1759316..a272076 100644 --- a/zone/kaskit/CMakeLists.txt +++ b/zone/kaskit/CMakeLists.txt @@ -14,6 +14,7 @@ PKG_CHECK_MODULES(launcher_pkgs REQUIRED capi-appfw-application capi-appfw-package-manager capi-appfw-app-manager + badge ) INCLUDE_DIRECTORIES(${launcher_pkgs_INCLUDE_DIRS} ${ZONE_LIBS}) diff --git a/zone/kaskit/include/conf.h b/zone/kaskit/include/conf.h index 4783f48..661f243 100644 --- a/zone/kaskit/include/conf.h +++ b/zone/kaskit/include/conf.h @@ -31,6 +31,8 @@ #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 diff --git a/zone/kaskit/include/kaskit.h b/zone/kaskit/include/kaskit.h index e6e4fb9..da05681 100644 --- a/zone/kaskit/include/kaskit.h +++ b/zone/kaskit/include/kaskit.h @@ -52,8 +52,10 @@ typedef struct { 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); diff --git a/zone/kaskit/org.tizen.kaskit.xml b/zone/kaskit/org.tizen.kaskit.xml index 846be83..e51ac98 100644 --- a/zone/kaskit/org.tizen.kaskit.xml +++ b/zone/kaskit/org.tizen.kaskit.xml @@ -5,6 +5,7 @@ http://tizen.org/privilege/appmanager.launch http://tizen.org/privilege/packagemanager.info http://tizen.org/privilege/packagemanager.admin + http://tizen.org/privilege/notification diff --git a/zone/kaskit/res/edje/app_icon.edc b/zone/kaskit/res/edje/app_icon.edc index 21565ed..9189df4 100755 --- a/zone/kaskit/res/edje/app_icon.edc +++ b/zone/kaskit/res/edje/app_icon.edc @@ -152,7 +152,7 @@ group { name: "icon"; align: 1.0 0.0; text { font: "arial"; - size: 12; + size: 20; text_class: "ATO002"; min: 1 1; max: 1 1; diff --git a/zone/kaskit/src/main.c b/zone/kaskit/src/main.c index da4a169..4312f3f 100644 --- a/zone/kaskit/src/main.c +++ b/zone/kaskit/src/main.c @@ -16,6 +16,7 @@ * limitations under the License. * */ +#include #include #include #include @@ -42,9 +43,20 @@ struct app_icon_s{ 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; } @@ -117,7 +129,7 @@ static void __create_icon_thread(void* data, Ecore_Thread* thread) { } } -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, @@ -132,7 +144,12 @@ void __pkg_event_cb(const char* type, } } -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; @@ -183,6 +200,8 @@ static void __show_launcher() 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); diff --git a/zone/kaskit/src/ui.c b/zone/kaskit/src/ui.c index 5560361..d78d61e 100644 --- a/zone/kaskit/src/ui.c +++ b/zone/kaskit/src/ui.c @@ -262,3 +262,29 @@ void _destroy_app_icon(const char* pkg_id) __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; + } + } +}