Add lightuser feature 13/274013/1
authorJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 20 Apr 2022 04:52:34 +0000 (13:52 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 20 Apr 2022 04:52:34 +0000 (13:52 +0900)
Add columns, getter, setter for lightuser feature

Change-Id: I7d0e84c9a425f886373e125be3a86d578dda5942
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
14 files changed:
include/pkgmgr-info.h
include/pkgmgrinfo_basic.h
parser/include/pkgmgr_parser_db_queries.h
parser/manifest.xsd.in
parser/manifest.xsd.ref
pkg_db_version.txt.in
src/common/parcel/appinfo_parcelable.cc
src/common/parcel/pkginfo_parcelable.cc
src/pkgmgrinfo_appinfo.c
src/pkgmgrinfo_basic.c
src/pkgmgrinfo_pkginfo.c
src/server/appinfo_internal.cc
src/server/pkginfo_internal.c
test/unit_tests/parcel_utils.cc

index 8f16df4..134af64 100644 (file)
@@ -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
  *
index de9c71b..c89f31a 100644 (file)
@@ -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*/
index c89c8b9..6e9e738 100644 (file)
@@ -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" \
        "  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)"
 
index 37ca529..2d474eb 100644 (file)
@@ -28,6 +28,7 @@
         <xs:element ref="packages:trust-anchor"/>
         <xs:element ref="packages:component-based-application"/>
         <xs:element ref="packages:dependencies"/>
+        <xs:element ref="packages:light-user"/>
         <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="lax"/>
       </xs:choice>
       <xs:attribute name="storeclient-id" type="xs:string"/>
       </xs:choice>
     </xs:complexType>
   </xs:element>
+  <xs:element name="light-user">
+    <xs:complexType>
+      <xs:attribute name="switch-mode" use="required" type="xs:string"/>
+      <xs:anyAttribute namespace="##any" processContents="lax"/>
+    </xs:complexType>
+  </xs:element>
 </xs:schema>
index 6a86272..885131c 100644 (file)
@@ -28,6 +28,7 @@
         <xs:element ref="packages:trust-anchor"/>
         <xs:element ref="packages:component-based-application"/>
         <xs:element ref="packages:dependencies"/>
+        <xs:element ref="packages:light-user"/>
       </xs:choice>
       <xs:attribute name="storeclient-id" type="xs:string"/>
       <xs:attribute name="install-location" type="packages:InstallLocationType"/>
       </xs:choice>
     </xs:complexType>
   </xs:element>
+  <xs:element name="light-user">
+    <xs:complexType>
+      <xs:attribute name="switch-mode" use="required" type="xs:string"/>
+      <xs:anyAttribute namespace="##any" processContents="lax"/>
+    </xs:complexType>
+  </xs:element>
 </xs:schema>
index da5ccf2..32fdb1e 100644 (file)
@@ -1 +1 @@
-30007
+30008
index 65cbf81..37c0225 100644 (file)
@@ -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);
index 032d275..5cbc049 100644 (file)
@@ -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);
index ac6d7b6..ad481a3 100644 (file)
@@ -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");
index 6825959..c153ffa 100644 (file)
@@ -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);
index f5fc426..247ee17 100644 (file)
@@ -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");
index 44559ee..ad790a4 100644 (file)
@@ -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);
index 01d0550..41d3bda 100644 (file)
@@ -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) {
index b90d336..984f226 100644 (file)
@@ -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<icon_x*>(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;