From: Hwankyu Jhun Date: Fri, 2 Aug 2019 00:12:21 +0000 (+0900) Subject: Fix saving content info X-Git-Tag: submit/tizen/20190806.083651~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2424239d0c5333775414243e80f32aeec41afb17;p=platform%2Fcore%2Fappfw%2Fcomponent-based-application.git Fix saving content info If a component is a single instance, the name of the content info is using the component name. Even if a component is started by a new instance, the component should use the previous content info. Change-Id: I7226764e3f757c294a506ca07c0afdf4a2fab329 Signed-off-by: Hwankyu Jhun --- diff --git a/component_based/base/component.cc b/component_based/base/component.cc index 52b2117..93c1e0e 100644 --- a/component_based/base/component.cc +++ b/component_based/base/component.cc @@ -32,9 +32,13 @@ Component::Impl::Impl(Component* parent, Component::Type type, std::string comp_id, std::string inst_id) : parent_(parent), type_(std::move(type)), comp_id_(std::move(comp_id)), inst_id_(std::move(inst_id)), - sys_ev_(new internal::SystemEvent(this)), - content_mgr_(new internal::ContentManager(inst_id_)) { + sys_ev_(new internal::SystemEvent(this)) { auto& mgr = internal::ComponentManager::GetInst(); + if (mgr.IsSingleInstance(inst_id_)) + content_mgr_.reset(new (std::nothrow) internal::ContentManager(comp_id_)); + else + content_mgr_.reset(new (std::nothrow) internal::ContentManager(inst_id_)); + mgr.AddEventListener(inst_id_, this); } diff --git a/component_based/base/component_manager_internal.cc b/component_based/base/component_manager_internal.cc index fef7b58..99fb6cf 100644 --- a/component_based/base/component_manager_internal.cc +++ b/component_based/base/component_manager_internal.cc @@ -14,9 +14,12 @@ * limitations under the License. */ +#include #include #include +#include +#include #include #include @@ -63,6 +66,12 @@ void ComponentManager::Start(const std::string& comp_id, LOGE("Failed to find factory map. %s", comp_id.c_str()); return; } + + const char *val = bundle_get_val(b, AUL_K_NEW_INSTANCE); + std::string new_inst(val ? val : ""); + if (new_inst == "true") + multi_inst_list_.push_back(inst_id); + std::unique_ptr component = fac_map_[comp_id]->Create(comp_id, inst_id); if (component == nullptr || component.get() == nullptr) { @@ -248,6 +257,15 @@ void ComponentManager::PauseAll() { } } +bool ComponentManager::IsSingleInstance(const std::string& inst_id) { + auto it = std::find(multi_inst_list_.begin(), multi_inst_list_.end(), + inst_id); + if (it == multi_inst_list_.end()) + return true; + + return false; +} + Ecore_Wl2_Window* ComponentManager::GetWl2Window(const std::string& inst_id) { auto win_iter = win_map_.find(inst_id); if (win_iter == win_map_.end()) @@ -260,6 +278,7 @@ Ecore_Wl2_Window* ComponentManager::GetWl2Window(const std::string& inst_id) { } void ComponentManager::Remove(const std::string& inst_id) { + multi_inst_list_.remove(inst_id); RemoveGroup(inst_id); ev_map_.erase(inst_id); inst_map_.erase(inst_id); diff --git a/component_based/base/component_manager_internal.h b/component_based/base/component_manager_internal.h index 34c424e..3fec0a0 100644 --- a/component_based/base/component_manager_internal.h +++ b/component_based/base/component_manager_internal.h @@ -73,6 +73,7 @@ class ComponentManager { bool IsEmpty(); void ResumeAll(); void PauseAll(); + bool IsSingleInstance(const std::string& inst_id); private: IEventListener* GetEventListener(const std::string& inst_id); @@ -95,6 +96,7 @@ class ComponentManager { std::map> inst_map_; std::map> win_map_; std::map group_map_; + std::list multi_inst_list_; }; } // namespace internal diff --git a/component_based/base/content_manager_internal.cc b/component_based/base/content_manager_internal.cc index bfa4b90..66c6618 100644 --- a/component_based/base/content_manager_internal.cc +++ b/component_based/base/content_manager_internal.cc @@ -30,9 +30,9 @@ namespace component_based { namespace internal { -ContentManager::ContentManager(std::string inst_id) { +ContentManager::ContentManager(std::string name) { auto& path = ContentManager::Path::GetInst(); - file_ = std::unique_ptr(new File(path.GetPath(inst_id))); + file_ = std::unique_ptr(new File(path.GetPath(name))); } ContentManager::~ContentManager() = default; diff --git a/component_based/base/content_manager_internal.h b/component_based/base/content_manager_internal.h index bc16ec5..9eabb24 100644 --- a/component_based/base/content_manager_internal.h +++ b/component_based/base/content_manager_internal.h @@ -32,7 +32,7 @@ namespace internal { class ContentManager { public: - explicit ContentManager(std::string inst_id); + explicit ContentManager(std::string name); virtual ~ContentManager(); void SetContent(tizen_base::Bundle content);