From 75a6c3d208410458eec5b0804f85ff8b0a121dfc Mon Sep 17 00:00:00 2001 From: "jaekuk, lee" Date: Tue, 20 Jun 2017 13:58:27 +0900 Subject: [PATCH] Implemented progressbar for web application issue : http://suprem.sec.samsung.net/jira/browse/MPR-1117 Hosted web app such as YouTube displays a white screen until the page finishes loading. Modified WRT to display progressbar until the page finishes loading if progressbar-presence is enabled in config.xml. Change-Id: I877ff1bc6e6c0696512cec10cd8174a27db44af2 Signed-off-by: jaekuk, lee --- runtime/browser/native_window.cc | 29 +++++++++++++++++++++++++++++ runtime/browser/native_window.h | 8 ++++++++ runtime/browser/web_application.cc | 32 ++++++++++++++++++++++++++++++++ runtime/browser/web_application.h | 3 +++ 4 files changed, 72 insertions(+) diff --git a/runtime/browser/native_window.cc b/runtime/browser/native_window.cc index 9350c66..40162be 100755 --- a/runtime/browser/native_window.cc +++ b/runtime/browser/native_window.cc @@ -75,6 +75,10 @@ NativeWindow::NativeWindow() currentViewModeFullScreen_(false), focus_(NULL), content_(NULL), +#ifdef PROFILE_MOBILE + progressbar_(NULL), + top_layout_(NULL), +#endif rotation_(0), handler_id_(0) { } @@ -126,6 +130,9 @@ void NativeWindow::Initialize() { EVAS_SIZE_EXPAND_FILL(top_layout); elm_object_content_set(conformant, top_layout); evas_object_show(top_layout); +#ifdef PROFILE_MOBILE + top_layout_ = top_layout; +#endif // focus Evas_Object* focus = elm_bg_add(top_layout); @@ -139,6 +146,17 @@ void NativeWindow::Initialize() { evas_object_show(focus); focus_ = focus; +#ifdef PROFILE_MOBILE + // progressbar + Evas_Object *progressbar = elm_progressbar_add(top_layout); + EVAS_SIZE_EXPAND_FILL(progressbar); + elm_progressbar_unit_format_set(progressbar, "%1.1f%%"); + elm_progressbar_horizontal_set(progressbar, EINA_TRUE); + elm_object_part_content_set(top_layout, "elm.swallow.progress", progressbar); + evas_object_show(progressbar); + progressbar_ = progressbar; +#endif + // focus callback auto focus_callback = [](void* user_data, Evas_Object*, @@ -306,4 +324,15 @@ void NativeWindow::ManualRotationDone() { } #endif // MANUAL_ROTATE_FEATURE_SUPPORT +#ifdef PROFILE_MOBILE +void NativeWindow::SignalEmit(const char* emission, + const char* source) { + elm_object_signal_emit(top_layout_, emission, source); +} + +void NativeWindow::UpdateProgress(double value) { + elm_progressbar_value_set(progressbar_, ELM_SCALE_SIZE(value)); +} +#endif + } // namespace runtime diff --git a/runtime/browser/native_window.h b/runtime/browser/native_window.h index 7d23aa0..a44acd7 100755 --- a/runtime/browser/native_window.h +++ b/runtime/browser/native_window.h @@ -65,6 +65,10 @@ class NativeWindow { void EnableManualRotation(bool enable); void ManualRotationDone(); #endif // MANUAL_ROTATE_FEATURE_SUPPORT +#ifdef PROFILE_MOBILE + void SignalEmit(const char* emission, const char* source); + void UpdateProgress(double value); +#endif protected: virtual Evas_Object* CreateWindowInternal() = 0; @@ -82,6 +86,10 @@ class NativeWindow { bool currentViewModeFullScreen_; Evas_Object* focus_; Evas_Object* content_; +#ifdef PROFILE_MOBILE + Evas_Object* progressbar_; + Evas_Object* top_layout_; +#endif int rotation_; int handler_id_; ScreenOrientation natural_orientation_; diff --git a/runtime/browser/web_application.cc b/runtime/browser/web_application.cc index 191023c..09b6ad1 100755 --- a/runtime/browser/web_application.cc +++ b/runtime/browser/web_application.cc @@ -143,6 +143,12 @@ const char* kDefaultCSPRule = const char* kResWgtPath = "res/wgt/"; const char* kAppControlMain = "http://tizen.org/appcontrol/operation/main"; +#ifdef PROFILE_MOBILE +// window signal callback +const char *kEdjeShowProgressSignal = "show,progress,signal"; +const char *kEdjeHideProgressSignal = "hide,progress,signal"; +#endif + const std::string kViewmodeTypeFullscreen = "fullscreen"; const std::string kViewmodeTypeWindowed = "windowed"; @@ -1125,8 +1131,34 @@ void WebApplication::OnLoadStart(WebView* /*view*/) { LOGGER(DEBUG) << "LoadStart"; } +#ifdef PROFILE_MOBILE +void WebApplication::OnLoadProgress(WebView* view, double persent) { + LOGGER(DEBUG) << "LoadProgress, progress ;"<setting_info() != NULL && + app_data_->setting_info()->progressbar_presence()) || + (app_data_->widget_info() != NULL && + app_data_->widget_info()->view_modes() == kViewmodeTypeWindowed)) { + if (persent == 1.0) { + window_->SignalEmit(kEdjeHideProgressSignal, ""); + } else { + window_->SignalEmit(kEdjeShowProgressSignal, ""); + window_->UpdateProgress(persent); + } + } +} +#endif + void WebApplication::OnLoadFinished(WebView* /*view*/) { LOGGER(DEBUG) << "LoadFinished"; +#ifdef PROFILE_MOBILE + if ((app_data_->setting_info() != NULL && + app_data_->setting_info()->progressbar_presence()) || + (app_data_->widget_info() != NULL && + app_data_->widget_info()->view_modes() == kViewmodeTypeWindowed)) { + window_->SignalEmit(kEdjeHideProgressSignal, ""); + } +#endif splash_screen_->HideSplashScreen(SplashScreen::HideReason::LOADFINISHED); } diff --git a/runtime/browser/web_application.h b/runtime/browser/web_application.h index 20d9082..f088e43 100755 --- a/runtime/browser/web_application.h +++ b/runtime/browser/web_application.h @@ -70,6 +70,9 @@ class WebApplication : public WebView::EventListener { virtual void OnHardwareKey(WebView* view, const std::string& keyname); virtual void OnConsoleMessage(const std::string& msg, int level); virtual void OnLoadStart(WebView* view); +#ifdef PROFILE_MOBILE + virtual void OnLoadProgress(WebView* view, double persent); +#endif virtual void OnLoadFinished(WebView* view); virtual void OnRendered(WebView* view); virtual void OnLanguageChanged(); -- 2.7.4