Implement app signal related with app splash screen display 62/65962/7 accepted/tizen/common/20160426.143114 accepted/tizen/ivi/20160425.231856 accepted/tizen/mobile/20160425.231844 accepted/tizen/tv/20160425.231816 accepted/tizen/wearable/20160425.231835 submit/tizen/20160425.083419
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 6 Apr 2016 06:08:21 +0000 (15:08 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 25 Apr 2016 00:43:46 +0000 (09:43 +0900)
Change-Id: Ib5923f6dfbd91488b7710b37bc47c00f423ee6ac
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
client/include/comm_config.h
client/include/package-manager.h
client/src/comm_client_gdbus.c
client/src/pkgmgr.c
installer/pkgmgr_installer.c
installer/pkgmgr_installer.h

index 3cc607e..3e1802f 100644 (file)
@@ -45,6 +45,8 @@
 #define COMM_STATUS_BROADCAST_EVENT_GET_SIZE "get_size"
 #define COMM_STATUS_BROADCAST_EVENT_ENABLE_APP "enable_app"
 #define COMM_STATUS_BROADCAST_EVENT_DISABLE_APP "disable_app"
+#define COMM_STATUS_BROADCAST_EVENT_ENABLE_APP_SPLASH_SCREEN "enable_app_splash_screen"
+#define COMM_STATUS_BROADCAST_EVENT_DISABLE_APP_SPLASH_SCREEN "disable_app_splash_screen"
 
 
 /********
@@ -95,7 +97,7 @@ enum {
 
 /* broadcast type */
 enum {
-       COMM_STATUS_BROADCAST_ALL = 0xFF,
+       COMM_STATUS_BROADCAST_ALL = 0x3FF,
        COMM_STATUS_BROADCAST_INSTALL = 0x01,
        COMM_STATUS_BROADCAST_UNINSTALL = 0x02,
        COMM_STATUS_BROADCAST_MOVE = 0x04,
@@ -104,6 +106,8 @@ enum {
        COMM_STATUS_BROADCAST_GET_SIZE = 0x20,
        COMM_STATUS_BROADCAST_ENABLE_APP = 0x40,
        COMM_STATUS_BROADCAST_DISABLE_APP = 0x80,
+       COMM_STATUS_BROADCAST_ENABLE_APP_SPLASH_SCREEN = 0x100,
+       COMM_STATUS_BROADCAST_DISABLE_APP_SPLASH_SCREEN = 0x200,
 };
 
 #endif                         /* __COMM_CONFIG_H__ */
index 77fcc27..9b10f89 100644 (file)
@@ -102,16 +102,18 @@ extern "C" {
 /**
  * @brief listening status type in pkgmgr.
  */
-#define PKGMGR_CLIENT_STATUS_ALL                                               0x00
-#define PKGMGR_CLIENT_STATUS_INSTALL                                   0x01
-#define PKGMGR_CLIENT_STATUS_UNINSTALL                                 0x02
-#define PKGMGR_CLIENT_STATUS_UPGRADE                                   0x04
-#define PKGMGR_CLIENT_STATUS_MOVE                                              0x08
-#define PKGMGR_CLIENT_STATUS_CLEAR_DATA                                        0x10
+#define PKGMGR_CLIENT_STATUS_ALL                               0x00
+#define PKGMGR_CLIENT_STATUS_INSTALL                           0x01
+#define PKGMGR_CLIENT_STATUS_UNINSTALL                         0x02
+#define PKGMGR_CLIENT_STATUS_UPGRADE                           0x04
+#define PKGMGR_CLIENT_STATUS_MOVE                              0x08
+#define PKGMGR_CLIENT_STATUS_CLEAR_DATA                                0x10
 #define PKGMGR_CLIENT_STATUS_INSTALL_PROGRESS                  0x20
 #define PKGMGR_CLIENT_STATUS_GET_SIZE                          0x40
 #define PKGMGR_CLIENT_STATUS_ENABLE_APP                                0x80
-#define PKGMGR_CLIENT_STATUS_DISABLE_APP                               0x100
+#define PKGMGR_CLIENT_STATUS_DISABLE_APP                       0x100
+#define PKGMGR_CLIENT_STATUS_ENABLE_APP_SPLASH_SCREEN          0x200
+#define PKGMGR_CLIENT_STATUS_DISABLE_APP_SPLASH_SCREEN         0x400
 
 /** @} */
 
@@ -915,6 +917,38 @@ int pkgmgr_client_usr_remove_blacklist(pkgmgr_client *pc, const char *pkgid, uid
 int pkgmgr_client_check_blacklist(pkgmgr_client *pc, const char *pkgid, bool *blacklist);
 int pkgmgr_client_usr_check_blacklist(pkgmgr_client *pc, const char *pkgid, bool *blacklist, uid_t uid);
 
+/**
+ * @brief      This API is enabled the splash screen
+ *
+ * This API is for package-manager client application.\n
+ *
+ * @param[in]  pc      pkgmgr_client
+ * @param[in]  appid   applicaiton id
+ * @return     request_id (>0) if success, error code(<0) if fail\n
+ * @retval     PKGMGR_R_OK             success
+ * @retval     PKGMGR_R_EINVAL         invalid argument
+ * @retval     PKGMGR_R_ECOMM          communication error
+ * @retval     PKGMGR_R_ENOMEM         out of memory
+ */
+int pkgmgr_client_enable_splash_screen(pkgmgr_client *pc, const char *appid);
+int pkgmgr_client_usr_enable_splash_screen(pkgmgr_client *pc, const char *appid, uid_t uid);
+
+/**
+ * @brief      This API is disabled the splash screen
+ *
+ * This API is for package-manager client application.\n
+ *
+ * @param[in]  pc      pkgmgr_client
+ * @param[in]  appid   applicaiton id
+ * @return     request_id (>0) if success, error code(<0) if fail\n
+ * @retval     PKGMGR_R_OK             success
+ * @retval     PKGMGR_R_EINVAL         invalid argument
+ * @retval     PKGMGR_R_ECOMM          communication error
+ * @retval     PKGMGR_R_ENOMEM         out of memory
+ */
+int pkgmgr_client_disable_splash_screen(pkgmgr_client *pc, const char *appid);
+int pkgmgr_client_usr_disable_splash_screen(pkgmgr_client *pc, const char *appid, uid_t uid);
+
 /** @} */
 
 
index 2c3445f..0c85b21 100644 (file)
@@ -79,6 +79,10 @@ static int __get_signal_type(const char *name)
                return COMM_STATUS_BROADCAST_ENABLE_APP;
        else if (strcmp(name, COMM_STATUS_BROADCAST_EVENT_DISABLE_APP) == 0)
                return COMM_STATUS_BROADCAST_DISABLE_APP;
+       else if (strcmp(name, COMM_STATUS_BROADCAST_EVENT_ENABLE_APP_SPLASH_SCREEN) == 0)
+               return COMM_STATUS_BROADCAST_ENABLE_APP_SPLASH_SCREEN;
+       else if (strcmp(name, COMM_STATUS_BROADCAST_EVENT_DISABLE_APP_SPLASH_SCREEN) == 0)
+               return COMM_STATUS_BROADCAST_DISABLE_APP_SPLASH_SCREEN;
        else
                return -1;
 }
@@ -284,12 +288,12 @@ comm_client_set_status_callback(int comm_status_type, comm_client *cc, status_cb
 {
        int r = COMM_RET_ERROR;
 
-       if (NULL == cc)
+       if (cc == NULL)
                return COMM_RET_ERROR;
 
        /* Create new sig_cb_data */
        cc->sig_cb_data = calloc(1, sizeof(struct signal_callback_data));
-       if ( cc->sig_cb_data ) {
+       if (cc->sig_cb_data) {
                (cc->sig_cb_data)->type = comm_status_type;
                (cc->sig_cb_data)->cb = cb;
                (cc->sig_cb_data)->cb_data = cb_data;
@@ -309,7 +313,7 @@ comm_client_set_status_callback(int comm_status_type, comm_client *cc, status_cb
 
        return COMM_RET_OK;
 
- ERROR_CLEANUP:
+ERROR_CLEANUP:
        ERR("General error");
        return r;
 }
index 7a227d0..32b8a78 100644 (file)
@@ -1071,6 +1071,60 @@ static char *__get_type_from_path(const char *pkg_path)
        return strdup(pkg_type);
 }
 
+static int __change_op_cb_for_enable_disable_splash_screen(pkgmgr_client *pc,
+               bool is_enable)
+{
+       int ret;
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc;
+       req_cb_info *tmp;
+       req_cb_info *prev;
+
+       if (mpc == NULL) {
+               ERR("package mananger client pc is NULL");
+               return PKGMGR_R_EINVAL;
+       }
+
+       for (tmp = mpc->info.request.rhead; tmp;) {
+               prev = tmp;
+               tmp = tmp->next;
+               free(prev);
+       }
+
+       ret = comm_client_free(mpc->info.request.cc);
+       if (ret < 0) {
+               ERR("comm_client_free() failed - %d", ret);
+               return PKGMGR_R_ERROR;
+       }
+
+       mpc->ctype = PC_REQUEST;
+       if (is_enable)
+               mpc->status_type = PKGMGR_CLIENT_STATUS_ENABLE_APP_SPLASH_SCREEN;
+       else
+               mpc->status_type = PKGMGR_CLIENT_STATUS_DISABLE_APP_SPLASH_SCREEN;
+
+       mpc->info.request.cc = comm_client_new();
+       if (mpc->info.request.cc == NULL) {
+               ERR("client creation failed");
+               return PKGMGR_R_ENOMEM;
+       }
+
+       if (is_enable)
+               ret = comm_client_set_status_callback(
+                               COMM_STATUS_BROADCAST_ENABLE_APP_SPLASH_SCREEN,
+                               mpc->info.request.cc, __operation_callback, pc);
+       else
+               ret = comm_client_set_status_callback(
+                               COMM_STATUS_BROADCAST_DISABLE_APP_SPLASH_SCREEN,
+                               mpc->info.request.cc, __operation_callback, pc);
+
+       if (ret < 0) {
+               ERR("set_status_callback() failed - %d", ret);
+               return PKGMGR_R_ERROR;
+       }
+
+       return PKGMGR_R_OK;
+}
+
 API int pkgmgr_client_set_tep_path(pkgmgr_client *pc, char *tep_path, char *tep_move)
 {
        retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client pc is NULL");
@@ -1644,7 +1698,7 @@ API int pkgmgr_client_set_status_type(pkgmgr_client *pc, int status_type)
 
        retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client pc is NULL");
        retvm_if(status_type == PKGMGR_CLIENT_STATUS_ALL, PKGMGR_R_OK, "status_type is PKGMGR_CLIENT_STATUS_ALL");
-       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc;
 
        /*  free listening head */
        listen_cb_info *tmp = NULL;
@@ -1686,22 +1740,32 @@ API int pkgmgr_client_set_status_type(pkgmgr_client *pc, int status_type)
                retvm_if(ret < 0, PKGMGR_R_ECOMM, "COMM_STATUS_BROADCAST_INSTALL_PROGRESS failed - %d", ret);
        }
 
-   if ((mpc->status_type & PKGMGR_CLIENT_STATUS_UPGRADE) == PKGMGR_CLIENT_STATUS_UPGRADE) {
+       if ((mpc->status_type & PKGMGR_CLIENT_STATUS_UPGRADE) == PKGMGR_CLIENT_STATUS_UPGRADE) {
                ret = comm_client_set_status_callback(COMM_STATUS_BROADCAST_UPGRADE, mpc->info.listening.cc, __status_callback, pc);
                retvm_if(ret < 0, PKGMGR_R_ECOMM, "COMM_STATUS_BROADCAST_UPGRADE failed - %d", ret);
        }
 
-   if ((mpc->status_type & PKGMGR_CLIENT_STATUS_ENABLE_APP) == PKGMGR_CLIENT_STATUS_ENABLE_APP) {
+       if ((mpc->status_type & PKGMGR_CLIENT_STATUS_ENABLE_APP) == PKGMGR_CLIENT_STATUS_ENABLE_APP) {
                ret = comm_client_set_status_callback(COMM_STATUS_BROADCAST_ENABLE_APP, mpc->info.listening.cc, __status_callback, pc);
                retvm_if(ret < 0, PKGMGR_R_ECOMM, "COMM_STATUS_BROADCAST_ENABLE_APP failed - %d", ret);
        }
 
-   if ((mpc->status_type & PKGMGR_CLIENT_STATUS_DISABLE_APP) == PKGMGR_CLIENT_STATUS_DISABLE_APP) {
+       if ((mpc->status_type & PKGMGR_CLIENT_STATUS_DISABLE_APP) == PKGMGR_CLIENT_STATUS_DISABLE_APP) {
                ret = comm_client_set_status_callback(COMM_STATUS_BROADCAST_DISABLE_APP, mpc->info.listening.cc, __status_callback, pc);
                retvm_if(ret < 0, PKGMGR_R_ECOMM, "COMM_STATUS_BROADCAST_DISABLE_APP failed - %d", ret);
        }
 
-   return PKGMGR_R_OK;
+       if ((mpc->status_type & PKGMGR_CLIENT_STATUS_ENABLE_APP_SPLASH_SCREEN) == PKGMGR_CLIENT_STATUS_ENABLE_APP_SPLASH_SCREEN) {
+               ret = comm_client_set_status_callback(COMM_STATUS_BROADCAST_ENABLE_APP_SPLASH_SCREEN, mpc->info.listening.cc, __status_callback, pc);
+               retvm_if(ret < 0, PKGMGR_R_ECOMM, "COMM_STATUS_BROADCAST_ENABLE_APP_SPLASH_SCREEN failed - %d", ret);
+       }
+
+       if ((mpc->status_type & PKGMGR_CLIENT_STATUS_DISABLE_APP_SPLASH_SCREEN) == PKGMGR_CLIENT_STATUS_DISABLE_APP_SPLASH_SCREEN) {
+               ret = comm_client_set_status_callback(COMM_STATUS_BROADCAST_DISABLE_APP_SPLASH_SCREEN, mpc->info.listening.cc, __status_callback, pc);
+               retvm_if(ret < 0, PKGMGR_R_ECOMM, "COMM_STATUS_BROADCAST_DISABLE_APP_SPLASH_SCREEN failed - %d", ret);
+       }
+
+       return PKGMGR_R_OK;
 }
 
 API int pkgmgr_client_listen_status(pkgmgr_client *pc, pkgmgr_handler event_cb,
@@ -2254,3 +2318,90 @@ API int pkgmgr_client_check_blacklist(pkgmgr_client *pc, const char *pkgid,
        return pkgmgr_client_usr_check_blacklist(pc, pkgid, blacklist,
                        _getuid());
 }
+
+API int pkgmgr_client_enable_splash_screen(pkgmgr_client *pc, const char *appid)
+{
+       return pkgmgr_client_usr_enable_splash_screen(pc, appid, _getuid());
+}
+
+API int pkgmgr_client_usr_enable_splash_screen(pkgmgr_client *pc,
+               const char *appid, uid_t uid)
+{
+       int ret;
+       GVariant *result;
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc;
+
+       if (pc == NULL || appid == NULL) {
+               ERR("Invalid parameter");
+               return PKGMGR_R_EINVAL;
+       }
+
+       ret = __change_op_cb_for_enable_disable_splash_screen(mpc, true);
+       if (ret < 0) {
+               ERR("__change_op_cb_for_enable_disable_splash_screen failed");
+               return PKGMGR_R_ESYSTEM;
+       }
+
+       ret = comm_client_request(mpc->info.request.cc,
+                       "enable_app_splash_screen",
+                       g_variant_new("(us)", uid, appid), &result);
+       if (ret != PKGMGR_R_OK) {
+               ERR("request failed: %d", ret);
+               return ret;
+       }
+
+       g_variant_get(result, "(i)", &ret);
+       if (ret != PKGMGR_R_OK) {
+               g_variant_unref(result);
+               return ret;
+       }
+
+       g_variant_unref(result);
+
+       return ret;
+}
+
+API int pkgmgr_client_disable_splash_screen(pkgmgr_client *pc,
+               const char *appid)
+{
+       return pkgmgr_client_usr_disable_splash_screen(pc, appid,
+                       _getuid());
+}
+
+API int pkgmgr_client_usr_disable_splash_screen(pkgmgr_client *pc,
+               const char *appid, uid_t uid)
+{
+       int ret;
+       GVariant *result;
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc;
+
+       if (pc == NULL || appid == NULL) {
+               ERR("Invalid parameter");
+               return PKGMGR_R_EINVAL;
+       }
+
+       ret = __change_op_cb_for_enable_disable_splash_screen(mpc, false);
+       if (ret < 0) {
+               ERR("__change_op_cb_for_enable_disable_splash_screen failed");
+               return ret;
+       }
+
+       ret = comm_client_request(mpc->info.request.cc,
+                       "disable_app_splash_screen",
+                       g_variant_new("(us)", uid, appid), &result);
+       if (ret != PKGMGR_R_OK) {
+               ERR("request failed: %d", ret);
+               return ret;
+       }
+
+       g_variant_get(result, "(i)", &ret);
+       if (ret != PKGMGR_R_OK) {
+               g_variant_unref(result);
+               return ret;
+       }
+
+       g_variant_unref(result);
+
+       return ret;
+}
+
index b22d46b..c076713 100644 (file)
@@ -87,6 +87,10 @@ static const char *__get_signal_name(pkgmgr_installer *pi, const char *key)
                return COMM_STATUS_BROADCAST_EVENT_ENABLE_APP;
        case PKGMGR_REQ_DISABLE_APP:
                return COMM_STATUS_BROADCAST_EVENT_DISABLE_APP;
+       case PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN:
+               return COMM_STATUS_BROADCAST_EVENT_ENABLE_APP_SPLASH_SCREEN;
+       case PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN:
+               return COMM_STATUS_BROADCAST_EVENT_DISABLE_APP_SPLASH_SCREEN;
        }
 
        ERR("cannot find type, send signal with type SIGNAL_STATUS");
index fa323f1..f747cd6 100644 (file)
@@ -67,6 +67,8 @@ typedef void* pkgmgr_instcertinfo_h;
 #define PKGMGR_INSTALLER_GLOBAL_APP_DISABLE_FOR_UID    "disable_global_app_for_uid"
 #define PKGMGR_INSTALLER_GLOBAL_APP_ENABLE_FOR_UID     "enable_global_app_for_uid"
 
+#define PKGMGR_INSTALLER_APP_DISABLE_SPLASH_SCREEN_EVENT_STR         "disable_app_splash_screen"
+#define PKGMGR_INSTALLER_APP_ENABLE_SPLASH_SCREEN_EVENT_STR          "enable_app_splash_screen"
 
 /**
  * Request type.
@@ -85,7 +87,9 @@ enum {
        PKGMGR_REQ_SMACK = 9,
        PKGMGR_REQ_MANIFEST_DIRECT_INSTALL = 10,
        PKGMGR_REQ_ENABLE_APP = 11,
-       PKGMGR_REQ_DISABLE_APP = 12
+       PKGMGR_REQ_DISABLE_APP = 12,
+       PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN = 13,
+       PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN = 14
 };
 
 enum {