From 89c398c6684fd88df0a693f7bfd6fc8488713a7f Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Mon, 25 Jan 2016 15:14:04 +0900 Subject: [PATCH] Implement app signal related with app disable/enable Changes applied at [pkgmgr-tool][pkgmgr-info][slp-pkgmgr][pkgmgr-server] Change-Id: I6b667eb5bbbd6394a8fde648670dd22f32279809 Signed-off-by: Junghyun Yeon --- parser/pkgmgr_parser_db.c | 83 ++++++++++++++++++++++++++++++++++++++++++++--- parser/pkgmgr_parser_db.h | 53 +++++++++++++++++++++++++++++- src/pkgmgrinfo_appinfo.c | 2 +- 3 files changed, 132 insertions(+), 6 deletions(-) diff --git a/parser/pkgmgr_parser_db.c b/parser/pkgmgr_parser_db.c index 685fdee..f369f46 100644 --- a/parser/pkgmgr_parser_db.c +++ b/parser/pkgmgr_parser_db.c @@ -1571,13 +1571,41 @@ static int __delete_manifest_info_from_db(manifest_x *mfx, uid_t uid) return 0; } +static int __disable_app(const char *appid) +{ + int ret = -1; + char query[MAX_QUERY_LEN] = {'\0'}; + sqlite3_snprintf(MAX_QUERY_LEN, query, + "UPDATE package_app_info set app_disable='true' where app_id=%Q", + appid); + ret = __exec_query(query); + if (ret == -1) + _LOGD("Insert global app disable failed\n"); + + return ret; +} + +static int __enable_app(const char *appid) +{ + int ret = -1; + char query[MAX_QUERY_LEN] = {'\0'}; + sqlite3_snprintf(MAX_QUERY_LEN, query, + "UPDATE package_app_info set app_disable='false' where app_id=%Q", + appid); + ret = __exec_query(query); + if (ret == -1) + _LOGD("Insert global app disable failed\n"); + + return ret; +} + static int __disable_global_app_for_user(const char *appid, uid_t uid) { int ret = -1; char query[MAX_QUERY_LEN] = {'\0'}; sqlite3_snprintf(MAX_QUERY_LEN, query, "INSERT INTO " \ - "package_app_disable_for_user(app_id, uid) VALUES(%Q, %Q)", + "package_app_disable_for_user(app_id, uid) VALUES(%Q, '%d')", appid, (int)uid); ret = __exec_query(query); if (ret == -1) @@ -1592,7 +1620,7 @@ static int __enable_global_app_for_user(const char *appid, uid_t uid) char query[MAX_QUERY_LEN] = {'\0'}; sqlite3_snprintf(MAX_QUERY_LEN, query, "DELETE FROM " \ - "package_app_disable_for_user WHERE app_id=%Q AND uid=%Q", + "package_app_disable_for_user WHERE app_id=%Q AND uid='%d'", appid, (int)uid); ret = __exec_query(query); if (ret == -1) @@ -2199,7 +2227,7 @@ err: return ret; } -API int pkgmgr_parser_update_global_app_disable_info_in_db(const char *appid, uid_t uid, int is_disable) +API int pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(const char *appid, uid_t uid, int is_disable) { int ret = -1; @@ -2222,7 +2250,54 @@ API int pkgmgr_parser_update_global_app_disable_info_in_db(const char *appid, ui else ret = __enable_global_app_for_user(appid, uid); if (ret == -1) { - _LOGD("__update_preload_condition_in_db failed. Rollback now\n"); + _LOGD("__update_global_app_disable_condition_in_db failed. Rollback now\n"); + sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL); + goto err; + } + /*Commit transaction*/ + ret = sqlite3_exec(pkgmgr_parser_db, "COMMIT", NULL, NULL, NULL); + if (ret != SQLITE_OK) { + _LOGD("Failed to commit transaction, Rollback now\n"); + sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL); + ret = -1; + goto err; + } + _LOGD("Transaction Commit and End\n"); +err: + pkgmgr_parser_close_db(); + return ret; + +} + +API int pkgmgr_parser_update_app_disable_info_in_db(const char *appid, int is_disable) +{ + return pkgmgr_parser_update_app_disable_info_in_usr_db(appid, GLOBAL_USER, is_disable); +} + +API int pkgmgr_parser_update_app_disable_info_in_usr_db(const char *appid, uid_t uid, int is_disable) +{ + int ret = -1; + + ret = pkgmgr_parser_check_and_create_db(uid); + if (ret == -1) { + _LOGD("Failed to open DB\n"); + return ret; + } + + /*Begin transaction*/ + ret = sqlite3_exec(pkgmgr_parser_db, "BEGIN EXCLUSIVE", NULL, NULL, NULL); + if (ret != SQLITE_OK) { + _LOGD("Failed to begin transaction\n"); + ret = -1; + goto err; + } + _LOGD("Transaction Begin\n"); + if (is_disable) + ret = __disable_app(appid); + else + ret = __enable_app(appid); + if (ret == -1) { + _LOGD("__update_app_disable_condition_in_db failed. Rollback now\n"); sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL); goto err; } diff --git a/parser/pkgmgr_parser_db.h b/parser/pkgmgr_parser_db.h index 9cbe871..33918e4 100644 --- a/parser/pkgmgr_parser_db.h +++ b/parser/pkgmgr_parser_db.h @@ -162,7 +162,58 @@ int pkgmgr_parser_delete_manifest_info_from_usr_db(manifest_x *mfx, uid_t uid); int pkgmgr_parser_update_preload_info_in_db(); int pkgmgr_parser_update_preload_info_in_usr_db(uid_t uid); -int pkgmgr_parser_update_global_app_disable_info_in_db(const char *appid, uid_t uid, int is_disable); + +/** + * @fn int pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(const char *appid, uid_t uid, int is_disable) + * @brief This API updates disable info about global app for user specified by uid + * + * @par This API is for package-manager installer backends + * @par Sync (or) Async : Synchronous API + * + * @param[in] appid global application ID to be enabled or disabled + * @param[in] uid the addressee user id of the instruction + * @param[in]is_disable determine enable or disable of app + * @return 0 if success, error code(<0) if fail + * @pre None + * @post None + * @code +static int disable_global_app_for_uid(const char *appid, uid_t uid) +{ + int ret = 0; + ret = pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(appid, uid, 1); + if (ret < 0) + return -1; + return 0; +} + * @endcode + */ +int pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(const char *appid, uid_t uid, int is_disable); + +/** + * @fn int pkgmgr_parser_update_app_disable_info_in_db(const char *appid, int is_disable); + * @brief This API updates disable info about app + * + * @par This API is for package-manager installer backends + * @par Sync (or) Async : Synchronous API + * + * @param[in] appid application ID to be enabled or disabled + * @param[in]is_disable determine enable or disable of app + * @return 0 if success, error code(<0) if fail + * @pre None + * @post None + * @code +static int disable_app(const char *appid) +{ + int ret = 0; + ret = pkgmgr_parser_update_app_disable_info_in_db(appid, 1); + if (ret < 0) + return -1; + return 0; +} + * @endcode + */ +int pkgmgr_parser_update_app_disable_info_in_db(const char *appid, int is_disable); +int pkgmgr_parser_update_app_disable_info_in_usr_db(const char *appid, uid_t uid, int is_disable); int pkgmgr_parser_create_and_initialize_db(uid_t uid); diff --git a/src/pkgmgrinfo_appinfo.c b/src/pkgmgrinfo_appinfo.c index d83e9d6..399b954 100644 --- a/src/pkgmgrinfo_appinfo.c +++ b/src/pkgmgrinfo_appinfo.c @@ -559,7 +559,7 @@ static int _appinfo_get_application(sqlite3 *db, const char *appid, "app_support_disable, " "component_type, package, app_process_pool, app_installed_storage, " "app_background_category, app_package_type " - "FROM package_app_info WHERE app_id='%s' AND app_disable='false' " + "FROM package_app_info WHERE app_id='%s' " "AND app_id NOT IN " "(SELECT app_id from package_app_disable_for_user WHERE uid='%d')"; int ret; -- 2.7.4