Support the orientation lock for Tizen 2.4 compatibility. 23/106523/10
authorYoungmin Yoo <youngmin.yoo@samsung.com>
Thu, 22 Dec 2016 04:29:37 +0000 (13:29 +0900)
committerSungsik Han <ss440.han@samsung.com>
Mon, 26 Dec 2016 07:23:41 +0000 (23:23 -0800)
In Tizen 2.4 WebKit locking screen orientation was possible with WebAPI
screen.lockOrientation(). This WebAPI was deprecated and replaced with
screen.orientation.lock(). But for compatibility case Web Engine needs to support
old API.
So WRT also need to support the orientation lock for backward compatibility.

Releted web engine patch:
https://review.tizen.org/gerrit/#/c/106159/
https://review.tizen.org/gerrit/#/c/105156/

Bug : http://suprem.sec.samsung.net/jira/browse/TWF-2640
Bug : http://suprem.sec.samsung.net/jira/browse/TWF-2698

Change-Id: I4542929c731a4c5218cfccba3592562720d21e89
Signed-off-by: Youngmin Yoo <youngmin.yoo@samsung.com>
runtime/browser/web_application.cc
runtime/browser/web_application.h

index fabbd02f328a3f3c6330b5fc92249abefec65cc9..17f08aa79176146cd2c06e8c00523fdb0f9b348a 100755 (executable)
@@ -410,10 +410,27 @@ bool WebApplication::Initialize() {
   return true;
 }
 
+void WebApplication::SetupTizenVersion() {
+    if (app_data_->tizen_application_info() != NULL &&
+            !app_data_->tizen_application_info()->required_version().empty()) {
+        std::string tizen_version = app_data_->tizen_application_info()->required_version();
+        std::vector<unsigned> parsed_tizen_version = ParseTizenVersion(tizen_version);
+        m_tizenCompatibilitySettings.m_major = parsed_tizen_version[0];
+        m_tizenCompatibilitySettings.m_minor = parsed_tizen_version[1];
+        m_tizenCompatibilitySettings.m_release = parsed_tizen_version[0];
+    }
+}
+
+bool WebApplication::tizenWebKitCompatibilityEnabled() const {
+  return m_tizenCompatibilitySettings.tizenWebKitCompatibilityEnabled();
+}
+
 void WebApplication::Launch(std::unique_ptr<common::AppControl> appcontrol) {
   // send widget info to injected bundle
   ewk_context_tizen_app_id_set(ewk_context_, appid_.c_str());
 
+  SetupTizenVersion();
+
   // Setup View
   WebView* view = new WebView(window_, ewk_context_);
   SetupWebView(view);
@@ -702,13 +719,20 @@ void WebApplication::OnOrientationLock(
   // Only top-most view can set the orientation relate operation
   if (view_stack_.front() != view) return;
 
-  auto orientaion_setting =
-      app_data_->setting_info() != NULL
-          ? app_data_->setting_info()->screen_orientation()
-          :
-          wgt::parse::SettingInfo::ScreenOrientation::AUTO;
-  if (orientaion_setting != wgt::parse::SettingInfo::ScreenOrientation::AUTO) {
-    return;
+  // This is for 2.4 compatibility. Requested by Webengine Team.
+  //
+  // In Tizen 2.4 WebKit locking screen orientation was possible with Web API
+  // screen.lockOrientation(). This API was deprecated and replaced with
+  // screen.orientation.lock(). But for compatibility case we need to support
+  // old API.
+  if(!tizenWebKitCompatibilityEnabled()) {
+    auto orientaion_setting = app_data_->setting_info() != NULL
+        ? app_data_->setting_info()->screen_orientation()
+        : wgt::parse::SettingInfo::ScreenOrientation::AUTO;
+    if (wgt::parse::SettingInfo::ScreenOrientation::AUTO != orientaion_setting) {
+        // If Tizen version is 3.0, it return.
+        return;
+    }
   }
 
   if (lock) {
@@ -951,13 +975,13 @@ void WebApplication::SetupWebView(WebView* view) {
 }
 
 void WebApplication::SetupWebViewTizenApplicationInfo(WebView* view) {
-  if (app_data_->tizen_application_info() != NULL &&
-      !app_data_->tizen_application_info()->required_version().empty()) {
+  if (tizenWebKitCompatibilityEnabled()) {
     Ewk_Settings* settings = ewk_view_settings_get(view->evas_object());
-    std::string tizen_version = app_data_->tizen_application_info()->required_version();
-    std::vector<unsigned> parsed_tizen_version = ParseTizenVersion(tizen_version);
-    ewk_settings_tizen_compatibility_mode_set(settings, parsed_tizen_version[0], parsed_tizen_version[1], parsed_tizen_version[2]);
-  }
+    ewk_settings_tizen_compatibility_mode_set(settings,
+            m_tizenCompatibilitySettings.m_major,
+            m_tizenCompatibilitySettings.m_minor,
+            m_tizenCompatibilitySettings.m_release);
+    }
 }
 
 bool WebApplication::OnDidNavigation(WebView* /*view*/,
index 915287d44270f9df7778d35c21ec5ecfdcb35b60..fe5d594882f8568fed4f63ee5b376d6ad222bd67 100755 (executable)
@@ -115,6 +115,15 @@ class WebApplication : public WebView::EventListener {
   void SetupWebViewTizenApplicationInfo(WebView* view);
   void RemoveWebViewFromStack(WebView* view);
 
+  void SetupTizenVersion();
+  bool tizenWebKitCompatibilityEnabled() const;
+  struct {
+      unsigned m_major;
+      unsigned m_minor;
+      unsigned m_release;
+      bool tizenWebKitCompatibilityEnabled() const { return (m_major && m_major < 3); }
+  } m_tizenCompatibilitySettings;
+
   bool launched_;
   bool debug_mode_;
   bool verbose_mode_;