From 40dab426ff2db0e6ae94dc3d5495580015e8f2df Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Wed, 20 Apr 2022 13:52:34 +0900 Subject: [PATCH] Add lightuser feature Add columns, getter, setter for lightuser feature Change-Id: I7d0e84c9a425f886373e125be3a86d578dda5942 Signed-off-by: Junghyun Yeon --- include/pkgmgr-info.h | 52 +++++++++++++++++++++++++++++++ include/pkgmgrinfo_basic.h | 2 ++ parser/include/pkgmgr_parser_db_queries.h | 4 ++- parser/manifest.xsd.in | 7 +++++ parser/manifest.xsd.ref | 7 +++++ pkg_db_version.txt.in | 2 +- src/common/parcel/appinfo_parcelable.cc | 2 ++ src/common/parcel/pkginfo_parcelable.cc | 2 ++ src/pkgmgrinfo_appinfo.c | 18 +++++++++++ src/pkgmgrinfo_basic.c | 4 +++ src/pkgmgrinfo_pkginfo.c | 19 +++++++++++ src/server/appinfo_internal.cc | 3 +- src/server/pkginfo_internal.c | 15 ++++++--- test/unit_tests/parcel_utils.cc | 2 ++ 14 files changed, 131 insertions(+), 8 deletions(-) diff --git a/include/pkgmgr-info.h b/include/pkgmgr-info.h index 8f16df4..134af64 100644 --- a/include/pkgmgr-info.h +++ b/include/pkgmgr-info.h @@ -1722,6 +1722,42 @@ static int get_res_version(const char *pkgid) int pkgmgrinfo_pkginfo_get_res_version(pkgmgrinfo_pkginfo_h handle, char **res_version); /** + * @fn int pkgmgrinfo_pkginfo_get_light_user_switch_mode(pkgmgrinfo_pkginfo_h handle, char **mode) + * @brief This API gets the light_user_switch_mode of package + * + * @par Sync (or) Async : Synchronous API + * + * @param[in] handle pointer to package info handle + * @param[out] mode pointer to hold resource version of package + * @return 0 if success, error code(<0) if fail + * @retval PMINFO_R_OK success + * @retval PMINFO_R_EINVAL invalid argument + * @retval PMINFO_R_ERROR internal error + * @code +static int get_light_user_switch_mode(const char *pkgid) +{ + int ret = 0; + char *mode = 0; + pkgmgrinfo_pkginfo_h handle; + ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle); + if (ret != PMINFO_R_OK) + return -1; + + ret = pkgmgrinfo_pkginfo_get_light_user_switch_mode(handle, &mode); + if (ret != PMINFO_R_OK) { + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + return -1; + } + printf("light_user_switch_mode : %s\n", mode); + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + + return 0; +} + * @endcode + */ +int pkgmgrinfo_pkginfo_get_light_user_switch_mode(pkgmgrinfo_pkginfo_h handle, char **mode); + +/** * @fn int pkgmgrinfo_pkginfo_get_support_mode(pkgmgrinfo_pkginfo_h handle, int *support_mode) * @brief This API gets the support_mode of package * @@ -5148,6 +5184,22 @@ int pkgmgrinfo_appinfo_get_setup_appid(pkgmgrinfo_appinfo_h handle, char **setup int pkgmgrinfo_appinfo_is_support_ambient(pkgmgrinfo_appinfo_h handle, bool *support_ambient); /** + * @fn int pkgmgrinfo_appinfo_get_light_user_switch_mode(pkgmgrinfo_appinfo_h handle, char *mode) + * @brief This API gets the application 'light_user_switch_mode' value from the app ID + * + * @par This API is for package-manager client application + * @par Sync (or) Async : Synchronous API + * + * @param[in] handle pointer to application info handle + * @param[out] mode pointer to hold package light_user_switch_mode value + * @return 0 if success, error code(<0) if fail + * @retval PMINFO_R_OK success + * @retval PMINFO_R_EINVAL invalid argument + * @retval PMINFO_R_ERROR internal error + */ +int pkgmgrinfo_appinfo_get_light_user_switch_mode(pkgmgrinfo_appinfo_h handle, char **mode); + +/** * @fn int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h handle) * @brief This API destroys the application information handle freeing up all the resources * diff --git a/include/pkgmgrinfo_basic.h b/include/pkgmgrinfo_basic.h index de9c71b..c89f31a 100644 --- a/include/pkgmgrinfo_basic.h +++ b/include/pkgmgrinfo_basic.h @@ -192,6 +192,7 @@ typedef struct application_x { char *package_installed_time; /*installed time after finishing of installation*/ char *support_mode; /*attr*/ char *locale; /*no xml part*/ + char *light_user_switch_mode; /**< light_user_switch_mode flag, attr, default: "dafault"*/ GList *label; /*element*/ GList *icon; /*element*/ GList *image; /*element*/ @@ -243,6 +244,7 @@ typedef struct package_x { char *res_type; /**< res type, attr*/ char *res_version; /**< res version, attr*/ char *is_disabled; /**< Flag that indicates if the package is disabled or not, no xml part*/ + char *light_user_switch_mode; /**< light_user_switch_mode flag, attr, default: "dafault"*/ GList *icon; /**< package icon, element*/ GList *label; /**< package label, element*/ GList *author; /**< package author, element*/ diff --git a/parser/include/pkgmgr_parser_db_queries.h b/parser/include/pkgmgr_parser_db_queries.h index c89c8b9..6e9e738 100644 --- a/parser/include/pkgmgr_parser_db_queries.h +++ b/parser/include/pkgmgr_parser_db_queries.h @@ -48,7 +48,8 @@ " csc_path TEXT,\n" \ " package_support_mode TEXT,\n" \ " package_support_disable TEXT NOT NULL DEFAULT 'false',\n" \ - " package_disable TEXT NOT NULL DEFAULT 'false')" + " package_disable TEXT NOT NULL DEFAULT 'false',\n" \ + " light_user_switch_mode TEXT NOT NULL DEFAULT 'default')" #define QUERY_CREATE_TABLE_PACKAGE_LOCALIZED_INFO \ "CREATE TABLE IF NOT EXISTS package_localized_info (\n" \ @@ -138,6 +139,7 @@ " app_splash_screen_display TEXT NOT NULL DEFAULT 'true',\n" \ " app_external_path TEXT,\n" \ " app_setup_appid TEXT,\n" \ + " light_user_switch_mode TEXT NOT NULL DEFAULT 'default',\n" \ " FOREIGN KEY(package)\n" \ " REFERENCES package_info(package) ON DELETE CASCADE)" diff --git a/parser/manifest.xsd.in b/parser/manifest.xsd.in index 37ca529..2d474eb 100644 --- a/parser/manifest.xsd.in +++ b/parser/manifest.xsd.in @@ -28,6 +28,7 @@ + @@ -459,4 +460,10 @@ + + + + + + diff --git a/parser/manifest.xsd.ref b/parser/manifest.xsd.ref index 6a86272..885131c 100644 --- a/parser/manifest.xsd.ref +++ b/parser/manifest.xsd.ref @@ -28,6 +28,7 @@ + @@ -524,4 +525,10 @@ + + + + + + diff --git a/pkg_db_version.txt.in b/pkg_db_version.txt.in index da5ccf2..32fdb1e 100644 --- a/pkg_db_version.txt.in +++ b/pkg_db_version.txt.in @@ -1 +1 @@ -30007 +30008 diff --git a/src/common/parcel/appinfo_parcelable.cc b/src/common/parcel/appinfo_parcelable.cc index 65cbf81..37c0225 100644 --- a/src/common/parcel/appinfo_parcelable.cc +++ b/src/common/parcel/appinfo_parcelable.cc @@ -417,6 +417,7 @@ application_x* AppInfoParcelable::ReadApplication(tizen_base::Parcel* parcel) { ReadString(parcel, &application->package_installed_time); ReadString(parcel, &application->support_mode); ReadString(parcel, &application->locale); + ReadString(parcel, &application->light_user_switch_mode); ReadLabel(parcel, &application->label); ReadIcon(parcel, &application->icon); ReadImage(parcel, &application->image); @@ -483,6 +484,7 @@ bool AppInfoParcelable::WriteApplication(tizen_base::Parcel* parcel, WriteString(parcel, application->package_installed_time); WriteString(parcel, application->support_mode); WriteString(parcel, application->locale); + WriteString(parcel, application->light_user_switch_mode); WriteLabel(parcel, application->label); WriteIcon(parcel, application->icon); diff --git a/src/common/parcel/pkginfo_parcelable.cc b/src/common/parcel/pkginfo_parcelable.cc index 032d275..5cbc049 100644 --- a/src/common/parcel/pkginfo_parcelable.cc +++ b/src/common/parcel/pkginfo_parcelable.cc @@ -221,6 +221,7 @@ void PkgInfoParcelable::WritePackage(tizen_base::Parcel* parcel, WriteString(parcel, package->res_type); WriteString(parcel, package->res_version); WriteString(parcel, package->is_disabled); + WriteString(parcel, package->light_user_switch_mode); WriteIcon(parcel, package->icon); WriteLabel(parcel, package->label); WriteAuthor(parcel, package->author); @@ -474,6 +475,7 @@ package_x* PkgInfoParcelable::ReadPackage(tizen_base::Parcel* parcel) { ReadString(parcel, &package->res_type); ReadString(parcel, &package->res_version); ReadString(parcel, &package->is_disabled); + ReadString(parcel, &package->light_user_switch_mode); ReadIcon(parcel, &package->icon); ReadLabel(parcel, &package->label); ReadAuthor(parcel, &package->author); diff --git a/src/pkgmgrinfo_appinfo.c b/src/pkgmgrinfo_appinfo.c index ac6d7b6..ad481a3 100644 --- a/src/pkgmgrinfo_appinfo.c +++ b/src/pkgmgrinfo_appinfo.c @@ -2292,6 +2292,24 @@ API int pkgmgrinfo_appinfo_is_support_ambient(pkgmgrinfo_appinfo_h handle, return PMINFO_R_OK; } +API int pkgmgrinfo_appinfo_get_light_user_switch_mode( + pkgmgrinfo_appinfo_h handle, char **mode) +{ + pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle; + + if (info == NULL || mode == NULL) { + _LOGE("Invalid parameter"); + return PMINFO_R_EINVAL; + } + + if (info->app_info == NULL || info->app_info->light_user_switch_mode == NULL) + return PMINFO_R_ERROR; + + *mode = info->app_info->light_user_switch_mode; + + return PMINFO_R_OK; +} + API int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h handle) { retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL"); diff --git a/src/pkgmgrinfo_basic.c b/src/pkgmgrinfo_basic.c index 6825959..c153ffa 100644 --- a/src/pkgmgrinfo_basic.c +++ b/src/pkgmgrinfo_basic.c @@ -444,6 +444,8 @@ static void __ps_free_application(gpointer data) free((void *)application->setup_appid); if (application->locale) free((void *)application->locale); + if (application->light_user_switch_mode) + free((void *)application->light_user_switch_mode); /*Free Label*/ g_list_free_full(application->label, __ps_free_label); @@ -555,6 +557,8 @@ API void pkgmgrinfo_basic_free_package(package_x *package) free((void *)package->res_version); if (package->is_disabled) free((void *)package->is_disabled); + if (package->light_user_switch_mode) + free((void *)package->light_user_switch_mode); /*Free Icon*/ g_list_free_full(package->icon, __ps_free_icon); diff --git a/src/pkgmgrinfo_pkginfo.c b/src/pkgmgrinfo_pkginfo.c index f5fc426..247ee17 100644 --- a/src/pkgmgrinfo_pkginfo.c +++ b/src/pkgmgrinfo_pkginfo.c @@ -925,6 +925,25 @@ API int pkgmgrinfo_pkginfo_get_res_version(pkgmgrinfo_pkginfo_h handle, return PMINFO_R_OK; } +API int pkgmgrinfo_pkginfo_get_light_user_switch_mode(pkgmgrinfo_pkginfo_h handle, char **mode) +{ + pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; + + retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n"); + retvm_if(mode == NULL, PMINFO_R_EINVAL, + "Argument supplied to hold return value is NULL\n"); + + if (info->pkg_info == NULL) + return PMINFO_R_ERROR; + + if (info->pkg_info->light_user_switch_mode == NULL) + return PMINFO_R_ERROR; + + *mode = (char *)info->pkg_info->light_user_switch_mode; + + return PMINFO_R_OK; +} + API int pkgmgrinfo_pkginfo_get_support_mode(pkgmgrinfo_pkginfo_h handle, int *support_mode) { retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n"); diff --git a/src/server/appinfo_internal.cc b/src/server/appinfo_internal.cc index 44559ee..ad790a4 100644 --- a/src/server/appinfo_internal.cc +++ b/src/server/appinfo_internal.cc @@ -500,7 +500,7 @@ int _appinfo_get_applications(sqlite3* db, uid_t db_uid, uid_t uid, "ai.app_zip_mount_file, ai.component_type, ai.package, " "ai.app_package_system, ai.app_removable, " "ai.app_package_installed_time, ai.app_support_mode, " - "ai.app_support_ambient, ai.app_setup_appid"; + "ai.app_support_ambient, ai.app_setup_appid, ai.light_user_switch_mode"; static const char query_uid_info[] = ", ui.is_disabled, ui.is_splash_screen_enabled"; static const char query_label[] = @@ -647,6 +647,7 @@ int _appinfo_get_applications(sqlite3* db, uid_t db_uid, uid_t uid, _save_column_str(stmt, idx++, &info->support_mode); _save_column_str(stmt, idx++, &info->support_ambient); _save_column_str(stmt, idx++, &info->setup_appid); + _save_column_str(stmt, idx++, &info->light_user_switch_mode); info->background_category = __get_background_category( bg_category_str); free(bg_category_str); diff --git a/src/server/pkginfo_internal.c b/src/server/pkginfo_internal.c index 01d0550..41d3bda 100644 --- a/src/server/pkginfo_internal.c +++ b/src/server/pkginfo_internal.c @@ -484,7 +484,8 @@ static int _pkginfo_get_packages(sqlite3 *db, uid_t uid, const char *locale, "pi.storeclient_id, pi.mainapp_id, pi.package_url, pi.root_path, " "pi.csc_path, pi.package_nodisplay, pi.package_api_version, " "pi.package_support_disable, pi.package_tep_name, " - "pi.package_zip_mount_file, pi.package_support_mode, pi.package_disable"; + "pi.package_zip_mount_file, pi.package_support_mode, pi.package_disable, " + "pi.light_user_switch_mode"; static const char query_author[] = ", pi.author_name, pi.author_email, pi.author_href"; static const char query_label[] = @@ -616,6 +617,7 @@ static int _pkginfo_get_packages(sqlite3 *db, uid_t uid, const char *locale, _save_column_str(stmt, idx++, &info->zip_mount_file); _save_column_str(stmt, idx++, &info->support_mode); _save_column_str(stmt, idx++, &info->is_disabled); + _save_column_str(stmt, idx++, &info->light_user_switch_mode); } info->for_all_users = @@ -2299,7 +2301,7 @@ static int __insert_application_info(sqlite3 *db, manifest_x *mfx) " app_effective_appid, app_splash_screen_display," " app_package_system, app_removable," " app_package_installed_time, app_support_ambient," - " app_external_path, app_setup_appid) " + " app_external_path, app_setup_appid, light_user_switch_mode) " "VALUES (?, ?, " " ?, LOWER(?), ?, LOWER(?), LOWER(?)," " LOWER(?), LOWER(?), ?," @@ -2315,7 +2317,7 @@ static int __insert_application_info(sqlite3 *db, manifest_x *mfx) " ?, LOWER(?)," " LOWER(?), LOWER(?)," " ?, LOWER(?)," - " ?, ?)"; + " ?, ?, ?)"; int ret; sqlite3_stmt *stmt; int idx; @@ -2394,6 +2396,7 @@ static int __insert_application_info(sqlite3 *db, manifest_x *mfx) __get_bool(app->support_ambient, false)); __BIND_TEXT(db, stmt, idx++, mfx->external_path); __BIND_TEXT(db, stmt, idx++, app->setup_appid); + __BIND_TEXT(db, stmt, idx++, mfx->light_user_switch_mode); ret = sqlite3_step(stmt); if (ret != SQLITE_DONE) { @@ -2548,7 +2551,8 @@ static int __insert_package_info(sqlite3 *db, manifest_x *mfx) " package_system, author_name, author_email, author_href," " installed_time, installed_storage, storeclient_id," " mainapp_id, package_url, root_path, external_path," - " csc_path, package_support_mode, package_support_disable) " + " csc_path, package_support_mode, package_support_disable," + " light_user_switch_mode)" "VALUES (?, ?," " ?, ?, ?," " ?, ?, ?," @@ -2557,7 +2561,7 @@ static int __insert_package_info(sqlite3 *db, manifest_x *mfx) " LOWER(?), ?, ?, ?," " ?, ?, ?," " ?, ?, ?, ?," - " ?, ?, LOWER(?))"; + " ?, ?, LOWER(?), ?)"; int ret; sqlite3_stmt *stmt; int idx = 1; @@ -2606,6 +2610,7 @@ static int __insert_package_info(sqlite3 *db, manifest_x *mfx) __BIND_TEXT(db, stmt, idx++, mfx->support_mode ? mfx->support_mode : "0"); __BIND_TEXT(db, stmt, idx++, __get_bool(mfx->support_disable, false)); + __BIND_TEXT(db, stmt, idx++, mfx->light_user_switch_mode); ret = sqlite3_step(stmt); if (ret != SQLITE_DONE) { diff --git a/test/unit_tests/parcel_utils.cc b/test/unit_tests/parcel_utils.cc index b90d336..984f226 100644 --- a/test/unit_tests/parcel_utils.cc +++ b/test/unit_tests/parcel_utils.cc @@ -448,6 +448,7 @@ package_x* GetTestPackage(std::string pkgid) { package->use_system_certs = strdup("test_use_system_certs"); package->res_type = strdup("test_res_type"); package->res_version = strdup("test_res_version"); + package->light_user_switch_mode = strdup("default"); icon_x* icon = reinterpret_cast(calloc(1, sizeof(icon_x))); icon->text = strdup("test_text"); @@ -660,6 +661,7 @@ bool IsEqualPackage(package_x* packageA, package_x* packageB) { STR_EQ(packageA->tep_name, packageB->tep_name); STR_EQ(packageA->zip_mount_file, packageB->zip_mount_file); STR_EQ(packageA->external_path, packageB->external_path); + STR_EQ(packageA->light_user_switch_mode, packageB->light_user_switch_mode); INT_EQ(g_list_length(packageA->icon), g_list_length(packageB->icon)); for (GList* a = packageA->icon, *b = packageB->icon; -- 2.7.4