From: Hwankyu Jhun Date: Wed, 6 Apr 2016 06:08:21 +0000 (+0900) Subject: Implement app signal related with app splash screen display X-Git-Tag: submit/tizen/20160425.083419^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cc861dcc33118a82a35b6670a3652d69885a556d;p=platform%2Fcore%2Fappfw%2Fslp-pkgmgr.git Implement app signal related with app splash screen display Change-Id: Ib5923f6dfbd91488b7710b37bc47c00f423ee6ac Signed-off-by: Hwankyu Jhun --- diff --git a/client/include/comm_config.h b/client/include/comm_config.h index 3cc607e..3e1802f 100644 --- a/client/include/comm_config.h +++ b/client/include/comm_config.h @@ -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__ */ diff --git a/client/include/package-manager.h b/client/include/package-manager.h index 77fcc27..9b10f89 100644 --- a/client/include/package-manager.h +++ b/client/include/package-manager.h @@ -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); + /** @} */ diff --git a/client/src/comm_client_gdbus.c b/client/src/comm_client_gdbus.c index 2c3445f..0c85b21 100644 --- a/client/src/comm_client_gdbus.c +++ b/client/src/comm_client_gdbus.c @@ -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; } diff --git a/client/src/pkgmgr.c b/client/src/pkgmgr.c index 7a227d0..32b8a78 100644 --- a/client/src/pkgmgr.c +++ b/client/src/pkgmgr.c @@ -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; +} + diff --git a/installer/pkgmgr_installer.c b/installer/pkgmgr_installer.c index b22d46b..c076713 100644 --- a/installer/pkgmgr_installer.c +++ b/installer/pkgmgr_installer.c @@ -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"); diff --git a/installer/pkgmgr_installer.h b/installer/pkgmgr_installer.h index fa323f1..f747cd6 100644 --- a/installer/pkgmgr_installer.h +++ b/installer/pkgmgr_installer.h @@ -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 {