Kaskit: Add functions to show the badge on the app icon 90/77090/2
authorSungbae Yoo <sungbae.yoo@samsung.com>
Tue, 28 Jun 2016 12:31:55 +0000 (21:31 +0900)
committerSungbae Yoo <sungbae.yoo@samsung.com>
Wed, 29 Jun 2016 06:11:05 +0000 (15:11 +0900)
Signed-off-by: Sungbae Yoo <sungbae.yoo@samsung.com>
Change-Id: I45b3fbd179374054af381664701f1ca4ff51a021

packaging/device-policy-manager.spec
zone/kaskit/CMakeLists.txt
zone/kaskit/include/conf.h
zone/kaskit/include/kaskit.h
zone/kaskit/org.tizen.kaskit.xml
zone/kaskit/res/edje/app_icon.edc
zone/kaskit/src/main.c
zone/kaskit/src/ui.c

index 57a8c5e..8477619 100755 (executable)
@@ -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
index 1759316..a272076 100644 (file)
@@ -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})
index 4783f48..661f243 100644 (file)
@@ -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
 
index e6e4fb9..da05681 100644 (file)
@@ -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);
index 846be83..e51ac98 100644 (file)
@@ -5,6 +5,7 @@
         <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>
index 21565ed..9189df4 100755 (executable)
@@ -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;
index da4a169..4312f3f 100644 (file)
@@ -16,6 +16,7 @@
  * limitations under the License.
  *
  */
+#include <badge.h>
 #include <app_control.h>
 #include <app_manager.h>
 #include <package_manager.h>
@@ -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);
index 5560361..d78d61e 100644 (file)
@@ -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;
+               }
+       }
+}