From a9b47cf0cc35db8885cd0f69a7331f14f71db1bf Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 3 May 2016 20:06:07 +0900 Subject: [PATCH] sort out public/internal apis. now it's done on this stage! Change-Id: I90b71cfadddb58897934867a936db6cbf69bf0c8 --- src/examples/efl/main.cpp | 3 +- src/include/efl/mobile/ui_app.h | 16 +- .../efl/mobile/ui_mobile_viewmanager.h | 5 +- src/include/interface/ui_iface_viewmanager.h | 1 - src/lib/efl/mobile/ui_app.cpp | 250 +++++++++++++----- src/lib/interface/ui_iface_viewmgr.cpp | 1 + 6 files changed, 205 insertions(+), 71 deletions(-) diff --git a/src/examples/efl/main.cpp b/src/examples/efl/main.cpp index b54be0c..d4b6d1d 100644 --- a/src/examples/efl/main.cpp +++ b/src/examples/efl/main.cpp @@ -32,7 +32,7 @@ #include "page2.h" #include "page1.h" -class sample_app : public ui_app +class sample_app: public ui_app { public: sample_app(const char*pkg, const char *locale_dir) @@ -43,6 +43,7 @@ public: { } +protected: bool on_create() { if (!ui_app::on_create()) diff --git a/src/include/efl/mobile/ui_app.h b/src/include/efl/mobile/ui_app.h index 78f0361..6898589 100644 --- a/src/include/efl/mobile/ui_app.h +++ b/src/include/efl/mobile/ui_app.h @@ -22,18 +22,18 @@ namespace efl_viewmanager class ui_viewmgr; -class ui_app : public singleton +class ui_app { -private: - ui_viewmgr *viewmgr; - Eina_Stringshare *pkg; - Eina_Stringshare *locale_dir; - public: ui_app(const char *pkg, const char *locale_dir); virtual ~ui_app(); + ui_viewmgr *get_viewmgr(); + static ui_app *get_instance(); + virtual int run(int argc, char **argv); + +protected: virtual bool on_create(); virtual void on_terminate(); virtual void on_pause(); @@ -46,7 +46,9 @@ public: virtual void on_orient_changed(app_event_info_h event_info); virtual void on_lang_changed(app_event_info_h event_info); - ui_viewmgr *get_viewmgr(); +private: + _UI_DECLARE_PRIVATE_IMPL(ui_app); + _UI_DISABLE_COPY_AND_ASSIGN(ui_app); }; } diff --git a/src/include/efl/mobile/ui_mobile_viewmanager.h b/src/include/efl/mobile/ui_mobile_viewmanager.h index 1196a02..3c8da4b 100644 --- a/src/include/efl/mobile/ui_mobile_viewmanager.h +++ b/src/include/efl/mobile/ui_mobile_viewmanager.h @@ -17,8 +17,7 @@ #ifndef _UI_MOBILE_VIEWMANAGER_H_ #define _UI_MOBILE_VIEWMANAGER_H_ -#include - +#include #include "../ui_base_viewmanager.h" #include "ui_view.h" #include "ui_standard_view.h" @@ -28,6 +27,6 @@ #include "ui_popup.h" #include "ui_app.h" -#define UI_VIEWMGR dynamic_cast(ui_iface_viewmgr::get_instance()) +#define UI_VIEWMGR (ui_app::get_instance()->get_viewmgr()) #endif /* UI_MOBILE_VIEWMANAGER_H */ diff --git a/src/include/interface/ui_iface_viewmanager.h b/src/include/interface/ui_iface_viewmanager.h index 592e93e..abb9251 100644 --- a/src/include/interface/ui_iface_viewmanager.h +++ b/src/include/interface/ui_iface_viewmanager.h @@ -17,7 +17,6 @@ #ifndef _UI_IFACE_VIEWMANAGER_H_ #define _UI_IFACE_VIEWMANAGER_H_ -#include #include enum ui_view_indicator diff --git a/src/lib/efl/mobile/ui_app.cpp b/src/lib/efl/mobile/ui_app.cpp index 83343ea..2bf7853 100644 --- a/src/lib/efl/mobile/ui_app.cpp +++ b/src/lib/efl/mobile/ui_app.cpp @@ -14,68 +14,230 @@ * limitations under the License. * */ +#include #include "../../../include/efl/mobile/ui_mobile_viewmanager.h" +/***********************************************************************************************/ +/* Internal class Implementation */ +/***********************************************************************************************/ +namespace efl_viewmanager +{ + +class ui_app_impl +{ + friend class ui_app; + +private: + ui_app *app; + ui_viewmgr *viewmgr; + Eina_Stringshare *pkg; + Eina_Stringshare *locale_dir; + +public: + ui_app_impl(ui_app *ui_app, const char *pkg, const char *locale_dir); + ~ui_app_impl(); + + int run(int argc, char **argv); + ui_viewmgr *get_viewmgr(); + + bool init(); + bool on_create(); + void on_terminate(); + void on_pause(); + void on_resume(); + void on_control(app_control_h app_control); + void on_low_battery(app_event_info_h event_info); + void on_low_memory(app_event_info_h event_info); + void on_region_changed(app_event_info_h event_info); + void on_orient_changed(app_event_info_h event_info); + void on_lang_changed(app_event_info_h event_info); +}; + +} + static bool app_create(void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); return app->on_create(); } static void app_terminate(void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_terminate(); } static void app_pause(void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_pause(); } static void app_resume(void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_resume(); } static void app_control(app_control_s *app_control, void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_control(app_control); } static void ui_app_lang_changed(app_event_info_h event_info, void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_lang_changed(event_info); } static void ui_app_orient_changed(app_event_info_h event_info, void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_orient_changed(event_info); } static void ui_app_region_changed(app_event_info_h event_info, void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_region_changed(event_info); } static void ui_app_low_battery(app_event_info_h event_info, void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_low_battery(event_info); } static void ui_app_low_memory(app_event_info_h event_info, void *data) { - ui_app *app = static_cast(data); + ui_app_impl *app = static_cast(data); app->on_low_memory(event_info); } +bool ui_app_impl::init() +{ + //FIXME: this scale value should be configurable. + elm_app_base_scale_set(2.6); + + /* Bind package locale file */ + bindtextdomain(this->pkg, this->locale_dir); + textdomain(this->pkg); + + /* Default View Manager */ + this->viewmgr = new ui_viewmgr(this->pkg); + if (!this->viewmgr) + { + LOGE("Failed to create a viewmgr(%s)", this->pkg); + return false; + } + return true; +} + +ui_app_impl::ui_app_impl(ui_app *app, const char *pkg, const char *locale_dir) + : app(app), viewmgr(NULL) +{ + this->pkg = eina_stringshare_add(pkg); + this->locale_dir = eina_stringshare_add(locale_dir); +} + +int ui_app_impl::run(int argc, char **argv) +{ + ui_app_lifecycle_callback_s event_callback = + { 0, }; + app_event_handler_h handlers[5] = + { NULL, }; + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.app_control = app_control; + + ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, this); + ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, this); + ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, this); + ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, this); + ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, this); + + int ret = ui_app_main(argc, argv, &event_callback, this); + + if (ret != APP_ERROR_NONE) + { + LOGE("ui_app_main() is failed. err = %d", ret); + } + + return ret; +} + +ui_app_impl::~ui_app_impl() +{ + delete (this->viewmgr); + eina_stringshare_del(this->pkg); + eina_stringshare_del(this->locale_dir); +} + +ui_viewmgr *ui_app_impl::get_viewmgr() +{ + return this->viewmgr; +} + +void ui_app_impl::on_lang_changed(app_event_info_h event_info) +{ + this->app->on_lang_changed(event_info); +} + +void ui_app_impl::on_low_memory(app_event_info_h event_info) +{ + this->app->on_low_memory(event_info); +} + +void ui_app_impl::on_low_battery(app_event_info_h event_info) +{ + this->app->on_low_battery(event_info); +} + +void ui_app_impl::on_region_changed(app_event_info_h event_info) +{ + this->app->on_region_changed(event_info); +} + +void ui_app_impl::on_orient_changed(app_event_info_h event_info) +{ + this->app->on_orient_changed(event_info); +} + +bool ui_app_impl::on_create() +{ + return this->app->on_create(); +} + +void ui_app_impl::on_pause() +{ + this->app->on_pause(); +} + +void ui_app_impl::on_resume() +{ + this->app->on_resume(); +} + +void ui_app_impl::on_control(app_control_h app_control) +{ + this->app->on_control(app_control); +} + +void ui_app_impl::on_terminate() +{ + this->app->on_terminate(); +} + +/***********************************************************************************************/ +/* External class Implementation */ +/***********************************************************************************************/ + +static ui_app *inst = NULL; + void ui_app::on_lang_changed(app_event_info_h event_info) { char *locale = NULL; @@ -106,38 +268,23 @@ void ui_app::on_orient_changed(app_event_info_h event_info) bool ui_app::on_create() { - //FIXME: this scale value should be configurable. - elm_app_base_scale_set(2.6); - - /* Bind package locale file */ - bindtextdomain(this->pkg, this->locale_dir); - textdomain(this->pkg); - - /* Default View Manager */ - this->viewmgr = new ui_viewmgr(this->pkg); - - if (!this->viewmgr) - { - LOGE("Failed to create a viewmgr(%s)", this->pkg); - return false; - } - return true; + return this->impl->init(); } void ui_app::on_pause() { - this->viewmgr->deactivate(); + this->impl->get_viewmgr()->deactivate(); } void ui_app::on_resume() { - this->viewmgr->activate(); + this->impl->get_viewmgr()->activate(); } void ui_app::on_control(app_control_h app_control) { /* Handle the launch request. */ - this->viewmgr->activate(); + this->impl->get_viewmgr()->activate(); } void ui_app::on_terminate() @@ -145,47 +292,32 @@ void ui_app::on_terminate() } ui_app::ui_app(const char *pkg, const char *locale_dir) - : viewmgr(NULL) { - pkg = eina_stringshare_add(pkg); - locale_dir = eina_stringshare_add(locale_dir); + if (inst) + { + LOGE("You created ui_app multiple times!!"); + } + inst = this; + this->impl = new ui_app_impl(this, pkg, locale_dir); } int ui_app::run(int argc, char **argv) { - ui_app_lifecycle_callback_s event_callback = { 0, }; - app_event_handler_h handlers[5] = { NULL, }; - - event_callback.create = app_create; - event_callback.terminate = app_terminate; - event_callback.pause = app_pause; - event_callback.resume = app_resume; - event_callback.app_control = app_control; - - ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, this); - ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, this); - ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, this); - ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, this); - ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, this); - - int ret = ui_app_main(argc, argv, &event_callback, this); - - if (ret != APP_ERROR_NONE) - { - LOGE("ui_app_main() is failed. err = %d", ret); - } - - return ret; + return this->impl->run(argc, argv); } ui_app::~ui_app() { - delete (this->viewmgr); - eina_stringshare_del(this->pkg); - eina_stringshare_del(this->locale_dir); + delete (this->impl); + inst = NULL; } ui_viewmgr *ui_app::get_viewmgr() { - return this->viewmgr; + return this->impl->get_viewmgr(); +} + +ui_app *ui_app::get_instance() +{ + return inst; } diff --git a/src/lib/interface/ui_iface_viewmgr.cpp b/src/lib/interface/ui_iface_viewmgr.cpp index c092e03..36a5964 100644 --- a/src/lib/interface/ui_iface_viewmgr.cpp +++ b/src/lib/interface/ui_iface_viewmgr.cpp @@ -15,6 +15,7 @@ * */ +#include #include #include "../../include/interface/ui_iface_viewmanager.h" -- 2.34.1