Implement app signal related with app splash screen display 59/65959/10 accepted/tizen/common/20160426.143118 accepted/tizen/ivi/20160425.231858 accepted/tizen/mobile/20160425.231846 accepted/tizen/tv/20160425.231818 accepted/tizen/wearable/20160425.231836 submit/tizen/20160425.083419
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 19 Apr 2016 08:32:19 +0000 (17:32 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 25 Apr 2016 03:17:51 +0000 (12:17 +0900)
- Requires:
[pkgmgr-info] https://review.tizen.org/gerrit/#/c/65897/
[slp-pkgmgr] https://review.tizen.org/gerrit/#/c/64902/

Change-Id: I1a32909ffda34ce0f50228188826a860dd2cb2c6
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
include/pkgmgr-server.h
org.tizen.pkgmgr.conf.in
src/pkgmgr-server.c
src/request.c

index 6bb8f08..ea02b8f 100644 (file)
@@ -78,6 +78,8 @@ enum request_type {
        PKGMGR_REQUEST_TYPE_ADD_BLACKLIST,
        PKGMGR_REQUEST_TYPE_REMOVE_BLACKLIST,
        PKGMGR_REQUEST_TYPE_CHECK_BLACKLIST,
+       PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN,
+       PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN,
 };
 
 typedef struct {
index c237b44..f3c5caf 100644 (file)
@@ -24,5 +24,7 @@
                <check send_destination="org.tizen.pkgmgr" send_interface="org.tizen.pkgmgr" send_member="add_blacklist" privilege="http://tizen.org/privilege/packagemanager.admin"/>
                <check send_destination="org.tizen.pkgmgr" send_interface="org.tizen.pkgmgr" send_member="remove_blacklist" privilege="http://tizen.org/privilege/packagemanager.admin"/>
                <check send_destination="org.tizen.pkgmgr" send_interface="org.tizen.pkgmgr" send_member="check_blacklist" privilege="http://tizen.org/privilege/packagemanager.admin"/>
+               <check send_destination="org.tizen.pkgmgr" send_interface="org.tizen.pkgmgr" send_member="enable_app_splash_screen" privilege="http://tizen.org/privilege/packagemanager.admin"/>
+               <check send_destination="org.tizen.pkgmgr" send_interface="org.tizen.pkgmgr" send_member="disable_app_splash_screen" privilege="http://tizen.org/privilege/packagemanager.admin"/>
         </policy>
 </busconfig>
index 05f3460..6414b57 100644 (file)
@@ -216,15 +216,27 @@ static void __send_app_signal(uid_t uid, const char *req_id,
 
        if (pkgmgr_installer_set_uid(pi, uid))
                goto catch;
-       if (req_type == PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID
-                       || req_type == PKGMGR_REQUEST_TYPE_ENABLE_APP) {
+
+       switch (req_type) {
+       case PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID:
+       case PKGMGR_REQUEST_TYPE_ENABLE_APP:
                if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_ENABLE_APP))
                        goto catch;
-       } else if (req_type == PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID
-                       || req_type == PKGMGR_REQUEST_TYPE_DISABLE_APP) {
+               break;
+       case PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID:
+       case PKGMGR_REQUEST_TYPE_DISABLE_APP:
                if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_DISABLE_APP))
                        goto catch;
-       } else {
+               break;
+       case PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN:
+               if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN))
+                       goto catch;
+               break;
+       case PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN:
+               if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN))
+                       goto catch;
+               break;
+       default:
                DBG("Unsupported req_type[%d]", req_type);
                goto catch;
        }
@@ -769,24 +781,23 @@ static int __fork_and_exec_with_args(char **argv, uid_t uid)
        return pid;
 }
 
-static int __change_item_info(pm_dbus_msg *item, uid_t uid)
+static int __change_item_info(pm_dbus_msg *item, uid_t uid, bool *is_global)
 {
        int ret = 0;
        char *pkgid = NULL;
-       bool is_global = false;
        pkgmgrinfo_appinfo_h handle = NULL;
 
        switch (item->req_type) {
        case PKGMGR_REQUEST_TYPE_DISABLE_APP:
        case PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID:
+       case PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN:
+       case PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN:
                ret = pkgmgrinfo_appinfo_get_usr_appinfo(item->pkgid, uid, &handle);
-               break;
-
+               break;
        case PKGMGR_REQUEST_TYPE_ENABLE_APP:
        case PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID:
                ret = pkgmgrinfo_appinfo_get_usr_disabled_appinfo(item->pkgid, uid, &handle);
-               break;
-
+               break;
        default:
                return PMINFO_R_ERROR;
        }
@@ -794,18 +805,18 @@ static int __change_item_info(pm_dbus_msg *item, uid_t uid)
        if (ret != PMINFO_R_OK)
                return PMINFO_R_ERROR;
 
-       ret = pkgmgrinfo_appinfo_is_global(handle, &is_global);
+       ret = pkgmgrinfo_appinfo_is_global(handle, is_global);
        if (ret != PMINFO_R_OK)
                goto catch;
 
        if ((item->req_type == PKGMGR_REQUEST_TYPE_DISABLE_APP
                        || item->req_type == PKGMGR_REQUEST_TYPE_ENABLE_APP)
-                       && is_global) {
+                       && *is_global) {
                        ret = PMINFO_R_ERROR;
                        goto catch;
        } else if ((item->req_type == PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID
                        || item->req_type == PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID)
-                       && !is_global) {
+                       && !*is_global) {
                        ret = PMINFO_R_ERROR;
                        goto catch;
        }
@@ -815,7 +826,7 @@ static int __change_item_info(pm_dbus_msg *item, uid_t uid)
                goto catch;
 
        strncpy(item->appid, item->pkgid, sizeof(item->pkgid) - 1);
-       memset((item->pkgid),0,MAX_PKG_NAME_LEN);
+       memset((item->pkgid), 0, MAX_PKG_NAME_LEN);
        strncpy(item->pkgid, pkgid, sizeof(item->pkgid) - 1);
 
 catch:
@@ -931,13 +942,14 @@ static int __process_disable_pkg(pm_dbus_msg *item)
 static int __process_enable_app(pm_dbus_msg *item)
 {
        int ret = -1;
+       bool is_global = false;
 
        __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR, item->req_type);
 
        /* get actual pkgid and replace it to appid which is currently stored at pkgid variable */
-       ret = __change_item_info(item, item->uid);
+       ret = __change_item_info(item, item->uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(item->appid) == 0) {
                __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR, PKGMGR_INSTALLER_FAIL_EVENT_STR,
@@ -962,13 +974,14 @@ static int __process_enable_app(pm_dbus_msg *item)
 static int __process_disable_app(pm_dbus_msg *item)
 {
        int ret = -1;
+       bool is_global = false;
 
        __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR, item->req_type);
 
        /* get actual pkgid and replace it to appid which is currently stored at pkgid variable */
-       ret = __change_item_info(item, item->uid);
+       ret = __change_item_info(item, item->uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(item->appid) == 0) {
                __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR, PKGMGR_INSTALLER_FAIL_EVENT_STR,
@@ -999,13 +1012,14 @@ static int __process_disable_app(pm_dbus_msg *item)
 static int __process_enable_global_app_for_uid(pm_dbus_msg *item)
 {
        int ret = -1;
+       bool is_global = true;
 
        __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_GLOBAL_APP_ENABLE_FOR_UID, item->req_type);
 
        /* get actual pkgid and replace it to appid which is currently stored at pkgid variable */
-       ret = __change_item_info(item, item->uid);
+       ret = __change_item_info(item, item->uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(item->appid) == 0) {
                __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR, PKGMGR_INSTALLER_FAIL_EVENT_STR,
@@ -1029,6 +1043,7 @@ static int __process_enable_global_app_for_uid(pm_dbus_msg *item)
 static int __process_disable_global_app_for_uid(pm_dbus_msg *item)
 {
        int ret = -1;
+       bool is_global = true;
 
        __send_app_signal(item->uid, item->req_id,
                        item->pkgid, item->pkgid,
@@ -1036,7 +1051,7 @@ static int __process_disable_global_app_for_uid(pm_dbus_msg *item)
                        PKGMGR_INSTALLER_GLOBAL_APP_DISABLE_FOR_UID, item->req_type);
 
        /* get actual pkgid and replace it to appid which is currently stored at pkgid variable */
-       ret = __change_item_info(item, GLOBAL_USER);
+       ret = __change_item_info(item, GLOBAL_USER, &is_global);
        if (ret != PMINFO_R_OK || strlen(item->appid) == 0) {
                __send_app_signal(item->uid, item->req_id, item->pkgid, item->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR, PKGMGR_INSTALLER_FAIL_EVENT_STR,
@@ -1275,6 +1290,41 @@ static int __process_check_blacklist(pm_dbus_msg *item)
        return ret;
 }
 
+static int __process_update_app_splash_screen(pm_dbus_msg *item, int flag)
+{
+       int ret;
+       bool is_global = false;
+       const char *val;
+
+       ret = __change_item_info(item, item->uid, &is_global);
+       if (ret != PMINFO_R_OK || strlen(item->appid) == 0)
+               return -1;
+
+       val = flag ? PKGMGR_INSTALLER_APP_ENABLE_SPLASH_SCREEN_EVENT_STR :
+               PKGMGR_INSTALLER_APP_DISABLE_SPLASH_SCREEN_EVENT_STR;
+       __send_app_signal(item->uid, item->req_id, item->pkgid, item->appid,
+                       PKGMGR_INSTALLER_START_KEY_STR, val, item->req_type);
+
+       if (is_global)
+               ret = pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db(
+                               item->appid, item->uid, flag);
+       else
+               ret = pkgmgr_parser_update_app_splash_screen_display_info_in_usr_db(
+                       item->appid, item->uid, flag);
+       if (ret != PMINFO_R_OK)
+               __send_app_signal(item->uid, item->req_id, item->pkgid,
+                               item->appid, PKGMGR_INSTALLER_END_KEY_STR,
+                               PKGMGR_INSTALLER_FAIL_EVENT_STR,
+                               item->req_type);
+       else
+               __send_app_signal(item->uid, item->req_id, item->pkgid,
+                               item->appid, PKGMGR_INSTALLER_END_KEY_STR,
+                               PKGMGR_INSTALLER_OK_EVENT_STR,
+                               item->req_type);
+
+       return ret;
+}
+
 gboolean queue_job(void *data)
 {
        pm_dbus_msg *item = NULL;
@@ -1380,6 +1430,12 @@ gboolean queue_job(void *data)
        case PKGMGR_REQUEST_TYPE_CHECK_BLACKLIST:
                ret = __process_check_blacklist(item);
                break;
+       case PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN:
+               ret = __process_update_app_splash_screen(item, 1);
+               break;
+       case PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN:
+               ret = __process_update_app_splash_screen(item, 0);
+               break;
        default:
                ret = -1;
                break;
index bd7e3f5..9acbed0 100644 (file)
@@ -139,6 +139,16 @@ static const char instropection_xml[] =
        "      <arg type='i' name='result' direction='out'/>"
        "      <arg type='i' name='ret' direction='out'/>"
        "    </method>"
+       "    <method name='enable_app_splash_screen'>"
+       "      <arg type='u' name='uid' direction='in'/>"
+       "      <arg type='s' name='appid' direction='in'/>"
+       "      <arg type='i' name='ret' direction='out'/>"
+       "    </method>"
+       "    <method name='disable_app_splash_screen'>"
+       "      <arg type='u' name='uid' direction='in'/>"
+       "      <arg type='s' name='appid' direction='in'/>"
+       "      <arg type='i' name='ret' direction='out'/>"
+       "    </method>"
        "  </interface>"
        "</node>";
 static GDBusNodeInfo *instropection_data;
@@ -929,6 +939,61 @@ static int __handle_request_check_blacklist(uid_t uid,
        return 0;
 }
 
+
+static int __update_app_splash_screen(uid_t uid,
+               GDBusMethodInvocation *invocation, GVariant *parameters,
+               int req_type)
+{
+       uid_t target_uid = (uid_t)-1;
+       char *appid = NULL;
+       char *reqkey;
+
+       g_variant_get(parameters, "(u&s)", &target_uid, &appid);
+       if (target_uid == (uid_t)-1 || appid == NULL) {
+               ERR("target_uid: %d, appid: %s", target_uid, appid);
+               g_dbus_method_invocation_return_value(invocation,
+                               g_variant_new("(i)", PKGMGR_R_ECOMM));
+               return -1;
+       }
+
+       reqkey = __generate_reqkey(appid);
+       if (reqkey == NULL) {
+               ERR("Failed to generate request key");
+               return -1;
+       }
+
+       if (_pm_queue_push(target_uid, reqkey, req_type, "default",
+                               appid, "")) {
+               ERR("Failed to push request");
+               g_dbus_method_invocation_return_value(invocation,
+                               g_variant_new("(i)", PKGMGR_R_ESYSTEM));
+               free(reqkey);
+               return -1;
+       }
+
+       g_dbus_method_invocation_return_value(invocation,
+                       g_variant_new("(i)", PKGMGR_R_OK));
+
+       if (reqkey)
+               free(reqkey);
+
+       return 0;
+}
+
+static int __handle_request_enable_app_splash_screen(uid_t uid,
+               GDBusMethodInvocation *invocation, GVariant *parameters)
+{
+       return __update_app_splash_screen(uid, invocation, parameters,
+                       PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN);
+}
+
+static int __handle_request_disable_app_splash_screen(uid_t uid,
+               GDBusMethodInvocation *invocation, GVariant *parameters)
+{
+       return __update_app_splash_screen(uid, invocation, parameters,
+                       PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN);
+}
+
 static uid_t __get_caller_uid(GDBusConnection *connection, const char *name)
 {
        GError *err = NULL;
@@ -1013,6 +1078,12 @@ static void __handle_method_call(GDBusConnection *connection,
        else if (g_strcmp0(method_name, "check_blacklist") == 0)
                ret = __handle_request_check_blacklist(uid, invocation,
                                parameters);
+       else if (g_strcmp0(method_name, "disable_app_splash_screen") == 0)
+               ret = __handle_request_disable_app_splash_screen(uid,
+                               invocation, parameters);
+       else if (g_strcmp0(method_name, "enable_app_splash_screen") == 0)
+               ret = __handle_request_enable_app_splash_screen(uid,
+                               invocation, parameters);
        else
                ret = -1;