Add lightuser feature
[platform/core/appfw/pkgmgr-info.git] / src / common / parcel / pkginfo_parcelable.cc
index 656995b..5cbc049 100644 (file)
@@ -121,11 +121,11 @@ void PkgInfoParcelable::WriteProvidesAppdefinedPrivileges(
 
 void PkgInfoParcelable::WriteApplication(tizen_base::Parcel* parcel,
     GList* application) const {
-  std::vector<application_x*> app_vt;
+  std::vector<std::shared_ptr<application_x>> app_vt;
 
   for (GList* tmp = application; tmp; tmp = tmp->next) {
     application_x* ptr = reinterpret_cast<application_x*>(tmp->data);
-    app_vt.push_back(ptr);
+    app_vt.emplace_back(ptr, [] (application_x*) -> void {});
   }
 
   AppInfoParcelable apps(0, std::move(app_vt), false);
@@ -220,6 +220,8 @@ void PkgInfoParcelable::WritePackage(tizen_base::Parcel* parcel,
   WriteString(parcel, package->locale);
   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);
@@ -356,10 +358,10 @@ void PkgInfoParcelable::ReadApplication(
   AppInfoParcelable apps;
   parcel->ReadParcelable(&apps);
 
-  std::vector<application_x*> vt = apps.ExtractAppInfo();
+  std::vector<std::shared_ptr<application_x>> vt = apps.ExtractAppInfo();
 
-  for (application_x* application : vt)
-    *list = g_list_append(*list, application);
+  for (auto& application : vt)
+    *list = g_list_append(*list, application.get());
 }
 
 void PkgInfoParcelable::ReadCompatibility(
@@ -472,6 +474,8 @@ package_x* PkgInfoParcelable::ReadPackage(tizen_base::Parcel* parcel) {
   ReadString(parcel, &package->locale);
   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);
@@ -494,31 +498,27 @@ PkgInfoParcelable::PkgInfoParcelable()
     write_type_(PkgWriteType::None), auto_release_(true) {}
 
 PkgInfoParcelable::PkgInfoParcelable(
-    uid_t uid, std::vector<package_x*>&& pkg_list,
+    uid_t uid, std::vector<std::shared_ptr<package_x>>&& pkg_list,
     PkgWriteType write_type, bool auto_release)
     : AbstractParcelable(uid, ParcelableType::PkgInfo),
     pkg_list_(std::move(pkg_list)), write_type_(write_type),
     auto_release_(auto_release) {}
 
 PkgInfoParcelable::PkgInfoParcelable(
-    int ret, std::vector<package_x*>&& pkg_list, bool auto_release)
+    int ret, std::vector<std::shared_ptr<package_x>>&& pkg_list,
+    bool auto_release)
     : AbstractParcelable(0, ParcelableType::PkgInfo, ret),
     pkg_list_(std::move(pkg_list)), write_type_(PkgWriteType::None),
     auto_release_(auto_release) {}
 
 PkgInfoParcelable::~PkgInfoParcelable() {
-  if (!auto_release_)
-    return;
-
-  for (auto pkg : pkg_list_)
-    pkgmgrinfo_basic_free_package(pkg);
 }
 
-const std::vector<package_x*>& PkgInfoParcelable::GetPkgInfo() {
+const std::vector<std::shared_ptr<package_x>>& PkgInfoParcelable::GetPkgInfo() {
   return pkg_list_;
 }
 
-std::vector<package_x*> PkgInfoParcelable::ExtractPkgInfo() {
+std::vector<std::shared_ptr<package_x>> PkgInfoParcelable::ExtractPkgInfo() {
   return std::move(pkg_list_);
 }
 
@@ -532,8 +532,8 @@ void PkgInfoParcelable::WriteToParcel(tizen_base::Parcel* parcel) const {
 
   WriteInt(parcel, pkg_list_.size());
 
-  for (auto pkg : pkg_list_)
-    WritePackage(parcel, pkg);
+  for (auto& pkg : pkg_list_)
+    WritePackage(parcel, pkg.get());
 }
 
 void PkgInfoParcelable::ReadFromParcel(tizen_base::Parcel* parcel) {
@@ -548,7 +548,7 @@ void PkgInfoParcelable::ReadFromParcel(tizen_base::Parcel* parcel) {
   ReadInt(parcel, &len);
 
   for (int i = 0; i < len ; ++i)
-    pkg_list_.emplace_back(ReadPackage(parcel));
+    pkg_list_.emplace_back(ReadPackage(parcel), [] (package_x*) -> void {});
 }
 
 }  // namespace parcel