From 56fc863f575ab27cef5d6cea71c7f82e5aa43fbe Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Wed, 20 Jul 2022 15:12:35 +0900 Subject: [PATCH] Add sharing AppCoreBase context Some app is using different levels of appcore api together. This patch is for sharing AppCoreBase context with upper level appcore api. Change-Id: I9614d6fa1f9ca1f69c3fa1e805c2213e67f7bdbd Signed-off-by: Changgyu Choi --- legacy/src/legacy/appcore_base.cc | 130 ++++++++++++++++---------- tizen-cpp/app-core-cpp/app_core_base.cc | 25 ++++- tizen-cpp/app-core-cpp/app_core_base.hh | 2 + tizen-cpp/app-core-ui-cpp/app_core_ui_base.hh | 2 +- unittests/mock/app_core_base_mock.h | 1 - 5 files changed, 107 insertions(+), 53 deletions(-) diff --git a/legacy/src/legacy/appcore_base.cc b/legacy/src/legacy/appcore_base.cc index a516bdf..edaa91e 100644 --- a/legacy/src/legacy/appcore_base.cc +++ b/legacy/src/legacy/appcore_base.cc @@ -141,7 +141,6 @@ class AppCore : public AppCoreBase { void* data_; }; -std::unique_ptr __context; std::list> __event_list; int __on_control(bundle* b, void* data) { @@ -182,67 +181,85 @@ int __on_terminate(void* data) { using namespace tizen_cpp; extern "C" EXPORT_API int appcore_base_on_receive(aul_type type, bundle* b) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->AppCoreBase::OnReceive(type, tizen_base::Bundle(b)); + + return context->AppCoreBase::OnReceive(type, tizen_base::Bundle(b)); } extern "C" EXPORT_API int appcore_base_on_create(void) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->AppCoreBase::OnCreate(); + + return context->AppCoreBase::OnCreate(); } extern "C" EXPORT_API int appcore_base_on_control(bundle* b) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->AppCoreBase::OnControl( + + return context->AppCoreBase::OnControl( b ? tizen_base::Bundle(b) : tizen_base::Bundle()); } extern "C" EXPORT_API int appcore_base_on_terminate(void) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->AppCoreBase::OnTerminate(); + + return context->AppCoreBase::OnTerminate(); } extern "C" EXPORT_API int appcore_base_on_set_i18n(void) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->AppCoreBase::OnSetI18n(); + + return context->AppCoreBase::OnSetI18n(); } extern "C" EXPORT_API void appcore_base_on_set_event( enum appcore_base_event event) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->AppCoreBase::OnSetEvent( + + context->AppCoreBase::OnSetEvent( static_cast(event)); } extern "C" EXPORT_API void appcore_base_on_unset_event( enum appcore_base_event event) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->AppCoreBase::OnUnsetEvent( + + context->AppCoreBase::OnUnsetEvent( static_cast(event)); } extern "C" EXPORT_API int appcore_base_on_trim_memory(void) { - if (__context.get() == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->AppCoreBase::OnTrimMemory(); + + return context->AppCoreBase::OnTrimMemory(); } +static std::unique_ptr context; + extern "C" EXPORT_API int appcore_base_init(appcore_base_ops ops, int argc, char** argv, void* data) { - __context.reset(new AppCore(ops, data)); + context.reset(new AppCore(ops, data)); try { for (auto& event : __event_list) - __context->AddEvent(std::move(event)); + context->AddEvent(std::move(event)); __event_list.clear(); - __context->Init(argc, argv); + context->Init(argc, argv); } catch (const std::runtime_error&) { return -1; } @@ -251,10 +268,10 @@ extern "C" EXPORT_API int appcore_base_init(appcore_base_ops ops, } extern "C" EXPORT_API void appcore_base_fini(void) { - if (__context.get() == nullptr) + if (!context) return; - __context->Fini(); - __context.reset(); + context->Fini(); + context.reset(); } extern "C" EXPORT_API appcore_base_ops appcore_base_get_default_ops(void) { @@ -285,10 +302,11 @@ extern "C" EXPORT_API appcore_base_event_h appcore_base_add_event( if (ev == nullptr) return nullptr; - if (__context == nullptr) { + auto* context = AppCoreBase::GetContext(); + if (!context) { __event_list.push_back(*ev); } else { - __context->AddEvent(*ev); + context->AddEvent(*ev); } return static_cast(ev); @@ -301,8 +319,10 @@ extern "C" EXPORT_API int appcore_base_remove_event( return -1; int ret; - if (__context == nullptr) { + auto* context = AppCoreBase::GetContext(); + if (!context) { ret = -1; + for (auto it = __event_list.begin(); it != __event_list.end(); ++it) { if (*it == *ev) { it = __event_list.erase(it); @@ -311,7 +331,7 @@ extern "C" EXPORT_API int appcore_base_remove_event( } } } else { - ret = (__context->RemoveEvent(*ev) ? 0 : -1); + ret = (context->RemoveEvent(*ev) ? 0 : -1); } delete ev; @@ -322,91 +342,103 @@ extern "C" DEPRECATED EXPORT_API int appcore_base_raise_event( void* event, enum appcore_base_event type) { LOGE("This api was deprecated since 7.0"); - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; return 0; } extern "C" EXPORT_API int appcore_base_flush_memory(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - __context->FlushMemory(); + context->FlushMemory(); return 0; } extern "C" DEPRECATED EXPORT_API int appcore_base_get_rotation_state( enum appcore_base_rm* curr) { LOGE("This api was deprecated since 7.0"); - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; return 0; } extern "C" EXPORT_API bool appcore_base_is_bg_allowed(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return false; - return __context->IsBgAllowed(); + return context->IsBgAllowed(); } extern "C" EXPORT_API bool appcore_base_is_suspended(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return false; - return __context->IsSuspended(); + return context->IsSuspended(); } extern "C" EXPORT_API void appcore_base_toggle_suspended_state(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->ToggleSuspendedState(); + context->ToggleSuspendedState(); } extern "C" EXPORT_API int appcore_base_set_i18n(const char* domain_name, const char* dir_name) { - if (__context == nullptr || domain_name == nullptr || dir_name == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context || domain_name == nullptr || dir_name == nullptr) return -1; - return __context->SetI18n(domain_name, dir_name); + return context->SetI18n(domain_name, dir_name); } extern "C" EXPORT_API void appcore_base_exit(void) { aul_status_update(STATUS_DYING); - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->Exit(); + context->Exit(); } extern "C" EXPORT_API void appcore_base_add_suspend_timer(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->AddSuspendTimer(); + context->AddSuspendTimer(); } extern "C" EXPORT_API void appcore_base_remove_suspend_timer(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->RemoveSuspendTimer(); + context->RemoveSuspendTimer(); } extern "C" EXPORT_API void appcore_base_set_display_state(int display_state) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return; - __context->SetDisplayState( + context->SetDisplayState( static_cast(display_state)); } extern "C" EXPORT_API int appcore_base_get_display_state(void) { - if (__context == nullptr) + auto* context = AppCoreBase::GetContext(); + if (!context) return -1; - return __context->GetDisplayState(); + return context->GetDisplayState(); } diff --git a/tizen-cpp/app-core-cpp/app_core_base.cc b/tizen-cpp/app-core-cpp/app_core_base.cc index 5bceb80..466c22d 100644 --- a/tizen-cpp/app-core-cpp/app_core_base.cc +++ b/tizen-cpp/app-core-cpp/app_core_base.cc @@ -39,16 +39,20 @@ #include #include #include +#include #include #include +#include #include "app-core-cpp/app_core_base.hh" #include "common/glib_private.hh" #include "common/log_private.hh" extern "C" void aul_finalize(); - namespace tizen_cpp { + +AppCoreBase* AppCoreBase::context_ = nullptr; + namespace { enum TizenProfile { @@ -236,9 +240,26 @@ void AppCoreBase::EventBase::SetVal(int val) { impl_->val_ = std::move(val); } -AppCoreBase::AppCoreBase() : impl_(std::make_unique(this)) {} +AppCoreBase::AppCoreBase() + : impl_(std::make_unique(this)) { + if (context_ != nullptr) { + _E("Context is already initialized"); + } + + context_ = this; +} + AppCoreBase::~AppCoreBase() = default; +AppCoreBase* AppCoreBase::GetContext() { + if (context_ == nullptr) { + _E("Context is not initialized."); + return nullptr; + } + + return context_; +} + void AppCoreBase::Impl::ChangeLang() { const char* lang = getenv("LANG"); if (lang == nullptr) diff --git a/tizen-cpp/app-core-cpp/app_core_base.hh b/tizen-cpp/app-core-cpp/app_core_base.hh index ebe1d97..815c6ff 100644 --- a/tizen-cpp/app-core-cpp/app_core_base.hh +++ b/tizen-cpp/app-core-cpp/app_core_base.hh @@ -71,6 +71,7 @@ class EXPORT_API AppCoreBase : public IAppCore, public IMainLoop { AppCoreBase(); virtual ~AppCoreBase(); + static AppCoreBase* GetContext(); virtual void Run(int argc, char** argv); virtual void Exit(); @@ -108,6 +109,7 @@ class EXPORT_API AppCoreBase : public IAppCore, public IMainLoop { protected: void SetCoreDelegator(IAppCore* delegator); void SetLoopDelegator(IMainLoop* delegator); + static AppCoreBase* context_; private: class Impl; diff --git a/tizen-cpp/app-core-ui-cpp/app_core_ui_base.hh b/tizen-cpp/app-core-ui-cpp/app_core_ui_base.hh index 310665b..7ccb6b4 100644 --- a/tizen-cpp/app-core-ui-cpp/app_core_ui_base.hh +++ b/tizen-cpp/app-core-ui-cpp/app_core_ui_base.hh @@ -42,7 +42,7 @@ class EXPORT_API AppCoreUiBase : public AppCoreBase, constexpr static int HINT_WINDOW_ID_CONTROL = 0x40; constexpr static int HINT_DUAL_THREAD = 0x80; - AppCoreUiBase(unsigned int hint); + explicit AppCoreUiBase(unsigned int hint); virtual ~AppCoreUiBase(); int OnPause() override; diff --git a/unittests/mock/app_core_base_mock.h b/unittests/mock/app_core_base_mock.h index a80515a..941616d 100644 --- a/unittests/mock/app_core_base_mock.h +++ b/unittests/mock/app_core_base_mock.h @@ -84,4 +84,3 @@ class AppCoreBaseMock : public tizen_cpp::AppCoreBase { }; #endif // UNIT_TESTS_MOCK_APP_CORE_BASE_MOCK_H_ - -- 2.7.4