User agent set depending on browsing mode (desktop/mobile). 51/47451/2
authorMaciej Skrzypkowski <m.skrzypkows@samsung.com>
Thu, 3 Sep 2015 10:28:26 +0000 (12:28 +0200)
committerMaciej Skrzypkowski <m.skrzypkows@samsung.com>
Thu, 3 Sep 2015 10:28:26 +0000 (12:28 +0200)
[Issue#]  https://bugs.tizen.org/jira/browse/TT-132
[Problem] Browising mode switching was not implemented.
[Cause]   N/A
[Solution]Added changing user agent by using EWK API
          method: ewk_view_user_agent_set.
[Verify]  Open new page, go to google.com then
          settings > view mobile web then close settings,
          type in new URL google.com, it should appear
          in mobile mode.

Change-Id: I8a6888d09b94f97eb51b9d2440f04bf8e2ba544c
Signed-off-by: Maciej Skrzypkowski <m.skrzypkows@samsung.com>
core/AbstractWebEngine/AbstractWebEngine.h
services/MoreMenuUI/MoreMenuUI.cpp
services/MoreMenuUI/MoreMenuUI.h
services/MoreMenuUI/edc/MoreMenu.edc
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/WebKitEngineService/WebKitEngineService.cpp
services/WebKitEngineService/WebKitEngineService.h
services/WebKitEngineService/WebView.cpp
services/WebKitEngineService/WebView.h

index bfe4199..8416229 100644 (file)
@@ -257,6 +257,16 @@ public:
     virtual void backButtonClicked() const = 0;
 
     /**
+     * @brief Switch view to mobile
+     */
+    virtual void switchToMobileView() = 0;
+
+    /**
+     * @brief Switch view to desktop
+     */
+    virtual void switchToDesktopView() = 0;
+
+    /**
      * FavIcon of current page changed
      */
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::tools::BrowserImage>)> favIconChanged;
index fb1bcb5..8279289 100644 (file)
@@ -48,6 +48,7 @@ MoreMenuUI::MoreMenuUI()
     : m_gengrid(NULL)
     , m_parent(NULL)
     , m_item_class(NULL)
+    , m_desktopView(true)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_edjFilePath = EDJE_DIR;
@@ -230,9 +231,16 @@ void MoreMenuUI::hide()
 void MoreMenuUI::addItems()
 {
      BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
-     for (size_t i = 0; i < static_cast<int>(END_OF_RANGE); i++) {
+     for (int i = 0; i <= EXIT_BROWSER; i++) {
+         ItemType type = static_cast<ItemType>(i);
+         // take proper image for desktop/mobile view
+         if (type == ItemType::VIEW_DESKTOP_WEB && m_desktopView)
+             continue;
+         if (type == ItemType::VIEW_MOBILE_WEB && !m_desktopView)
+             continue;
+
          MoreMenuItemData *itemData = new MoreMenuItemData();
-         itemData->item = static_cast<ItemType>(i);;
+         itemData->item = type;
          itemData->moreMenuUI = std::shared_ptr<tizen_browser::base_ui::MoreMenuUI>(this);
          Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this);
          m_map_menu_views.insert(std::pair<ItemType, Elm_Object_Item*>(itemData->item, bookmarkView));
@@ -277,6 +285,9 @@ char* MoreMenuUI::_grid_text_get(void* data, Evas_Object*, const char* part)
             case VIEW_MOBILE_WEB:
                 item_name = "View mobile web";
                 break;
+            case VIEW_DESKTOP_WEB:
+                item_name = "View desktop web";
+                break;
             case SHARE:
                 item_name = "Share";
                 break;
@@ -324,6 +335,9 @@ static const char* getImageFileNameForType(ItemType type, bool focused)
     case VIEW_MOBILE_WEB:
         file_name = focused ? "ic_more_mobileview_foc.png" : "ic_more_mobileview_nor.png";
         break;
+    case VIEW_DESKTOP_WEB:
+        file_name = focused ? "ic_more_desktopview_foc.png" : "ic_more_desktopview_nor.png";
+        break;
     case SHARE:
         file_name = focused ? "ic_more_share_foc.png" : "ic_more_share_nor.png";
         break;
@@ -401,6 +415,7 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*)
     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         MoreMenuItemData *itemData = static_cast<MoreMenuItemData*>(data);
+    BROWSER_LOGD("type: %d", itemData->item);
         switch (itemData->item) {
         case HISTORY:
             itemData->moreMenuUI->historyUIClicked(std::string());
@@ -426,6 +441,14 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*)
         case FOCUS_MODE:
             break;
         case VIEW_MOBILE_WEB:
+            itemData->moreMenuUI->switchToMobileView();
+            itemData->moreMenuUI->m_desktopView = false;
+            itemData->moreMenuUI->refreshGengrid();
+            break;
+        case VIEW_DESKTOP_WEB:
+            itemData->moreMenuUI->switchToDesktopView();
+            itemData->moreMenuUI->m_desktopView = true;
+            itemData->moreMenuUI->refreshGengrid();
             break;
         case SHARE:
             break;
@@ -454,6 +477,13 @@ void MoreMenuUI::clearItems()
     elm_cache_all_flush();
 }
 
+void MoreMenuUI::refreshGengrid()
+{
+    elm_gengrid_clear(m_gengrid);
+    m_map_menu_views.clear();
+    addItems();
+}
+
 void MoreMenuUI::_exitClicked()
 {
     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
index cd3d6c1..a6df318 100644 (file)
@@ -48,10 +48,10 @@ enum ItemType {
 #endif
     FOCUS_MODE,
     VIEW_MOBILE_WEB,
+    VIEW_DESKTOP_WEB,
     SHARE,
     SETTINGS,
-    EXIT_BROWSER,
-    END_OF_RANGE
+    EXIT_BROWSER
 } item;
 
 class BROWSER_EXPORT MoreMenuUI
@@ -80,6 +80,8 @@ public:
     boost::signals2::signal<void (std::string)> historyUIClicked;
     boost::signals2::signal<void (const std::string&)> settingsClicked;
     boost::signals2::signal<void (std::string)> closeMoreMenuClicked;
+    boost::signals2::signal<void ()> switchToMobileView;
+    boost::signals2::signal<void ()> switchToDesktopView;
 private:
     static char* _grid_text_get(void *data, Evas_Object *obj, const char *part);
     static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part);
@@ -93,6 +95,8 @@ private:
     void AddBookmarkPopupCalled();
     void addToBookmarks(int folder_id);
 
+    void refreshGengrid();
+
     static void _star_clicked(void *data, Evas_Object *obj, void *event_info);
     static void _close_clicked(void *data, Evas_Object *obj, void *event_info);
 
@@ -113,6 +117,7 @@ private:
     std::string m_folderName;
     bool m_gengridSetup;
     Evas_Object *m_icon;
+    bool m_desktopView;
 };
 
 }
index 91dbe04..553416b 100644 (file)
@@ -38,6 +38,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_zoom_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_minibrowser_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_focusmode_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_mobileview_nor.png")
+RESOURCE_IMAGE_LOSSY("ic_more_desktopview_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_share_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_setting_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
@@ -49,6 +50,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_zoom_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_minibrowser_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_focusmode_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_mobileview_foc.png")
+RESOURCE_IMAGE_LOSSY("ic_more_desktopview_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_share_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_setting_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_exit_foc.png")
index 14ce4b8..951e86d 100644 (file)
@@ -1169,6 +1169,8 @@ void SimpleUI::showMoreMenu()
         m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1));
         m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1));
         m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1));
+        m_moreMenuUI->switchToMobileView.connect(boost::bind(&SimpleUI::switchToMobileView, this));
+        m_moreMenuUI->switchToDesktopView.connect(boost::bind(&SimpleUI::switchToDesktopView, this));
         m_moreMenuUI->addToBookmarkClicked.connect(boost::bind(&SimpleUI::addBookmarkFolders, this));
         m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1));
         m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::newFolderMoreMenu, this,_1,_2));
@@ -1188,6 +1190,15 @@ void SimpleUI::closeMoreMenu(const std::string& str)
     m_moreMenuUI.reset();
 }
 
+void SimpleUI::switchToMobileView()
+{
+    m_webEngine->switchToMobileView();
+}
+
+void SimpleUI::switchToDesktopView() {
+    m_webEngine->switchToDesktopView();
+}
+
 void SimpleUI::showBookmarkManagerMenu()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
index 82d03ee..e760b6f 100644 (file)
@@ -229,6 +229,8 @@ private:
     void closeTabUI(const std::string& str);
     void showMoreMenu();
     void closeMoreMenu(const std::string& str);
+    void switchToMobileView();
+    void switchToDesktopView();
     void showHistoryUI(const std::string& str);
     void closeHistoryUI(const std::string&);
     void showMainUI();
index 5d8f076..2506a63 100644 (file)
@@ -45,6 +45,7 @@ WebKitEngineService::WebKitEngineService()
     , m_privateMode(false)
     , m_guiParent(nullptr)
     , m_currentTabId(TabId::NONE)
+    , m_desktopView(true)
 {
     m_mostRecentTab.clear();
     m_tabs.clear();
@@ -286,9 +287,9 @@ TabId WebKitEngineService::addTab(const std::string & uri, const TabId * openerI
     TabId newTabId;
     WebViewPtr p = std::make_shared<WebView>(reinterpret_cast<Evas_Object *>(m_guiParent), newTabId);
     if (openerId)
-        p->init(getTabView(*openerId));
+        p->init(m_desktopView, getTabView(*openerId));
     else
-        p->init();
+        p->init(m_desktopView);
 
     m_tabs[newTabId] = p;
 
@@ -507,6 +508,22 @@ void WebKitEngineService::backButtonClicked() const
     }
 }
 
+void WebKitEngineService::switchToDesktopView()
+{
+    m_desktopView = true;
+    for (auto it = m_tabs.begin(); it != m_tabs.end(); ++it) {
+        it->second->switchToDesktopView();
+    }
+}
+
+void WebKitEngineService::switchToMobileView()
+{
+    m_desktopView = false;
+    for (auto it = m_tabs.begin(); it != m_tabs.end(); ++it) {
+        it->second->switchToMobileView();
+    }
+}
+
 } /* end of webkitengine_service */
 } /* end of basic_webengine */
 } /* end of tizen_browser */
index 6f47216..5c0f47d 100644 (file)
@@ -159,6 +159,9 @@ public:
      */
     void backButtonClicked() const;
 
+    void switchToMobileView();
+    void switchToDesktopView();
+
 private:
     // callbacks from WebView
     void _favIconChanged(std::shared_ptr<tizen_browser::tools::BrowserImage> bi);
@@ -206,6 +209,8 @@ private:
     std::list<TabId> m_mostRecentTab;
     // recently added tabs first
     std::list<TabId> m_chronoTabs;
+    // true if desktop view is enabled, false if mobile
+    bool m_desktopView;
 };
 
 } /* end of webkitengine_service */
index f634541..603543c 100644 (file)
@@ -51,6 +51,9 @@
 #define APPLICATION_NAME_FOR_USER_AGENT "Mozilla/5.0 (X11; SMART-TV; Linux) AppleWebkit/538.1 (KHTML, like Gecko) Safari/538.1"
 #endif
 
+//TODO: temporary user agent for mobile display, change to proper one
+#define APPLICATION_NAME_FOR_USER_AGENT_MOBILE "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG SM-Z130H) AppleWebKit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 Mobile Safari/538.1"
+
 using namespace tizen_browser::tools;
 
 namespace tizen_browser {
@@ -80,7 +83,7 @@ WebView::~WebView()
     ewk_context_delete(m_ewkContext);
 }
 
-void WebView::init(Evas_Object * opener)
+void WebView::init(bool desktopView, Evas_Object * opener)
 {
 #if defined(USE_EWEBKIT)
     m_ewkView = ewk_view_add_with_context(evas_object_evas_get(m_parent), m_ewkContext);
@@ -91,7 +94,10 @@ void WebView::init(Evas_Object * opener)
     evas_object_color_set(m_ewkView, 255, 255, 255, 255);
     evas_object_size_hint_weight_set(m_ewkView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_ewkView, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    ewk_view_application_name_for_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT);
+    if (desktopView)
+        switchToDesktopView();
+    else
+        switchToMobileView();
     //\todo: when value is other than 1.0, scroller is located improperly
 //    ewk_view_device_pixel_ratio_set(m_ewkView, 1.0f);
 
@@ -871,6 +877,16 @@ void WebView::searchOnWebsite(const std::string & searchString, int flags)
     BROWSER_LOGD("Ewk search; word: %s, result: %d", searchString.c_str(), result);
 }
 
+void WebView::switchToDesktopView() {
+    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
+    int res = ewk_view_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT);
+}
+
+void WebView::switchToMobileView() {
+    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
+    int res = ewk_view_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT_MOBILE);
+}
+
 } /* namespace webkitengine_service */
 } /* end of basic_webengine */
 } /* end of tizen_browser */
index 9dd26dc..846af9c 100644 (file)
@@ -41,7 +41,7 @@ class WebView
 public:
     WebView(Evas_Object *, TabId);
     virtual ~WebView();
-    void init(Evas_Object * opener = NULL);
+    void init(bool desktopView = true, Evas_Object * opener = NULL);
 
 
     void setURI(const std::string &);
@@ -110,9 +110,18 @@ public:
     void searchOnWebsite(const std::string &, int);
 
     /**
-     * @brief Get favicon of URL
+     * @brief Change user agent to desktop type
+     */
+    void switchToDesktopView();
+
+    /**
+     * @brief Change user agent to mobile type
      */
+    void switchToMobileView();
 
+    /**
+     * @brief Get favicon of URL
+     */
     std::shared_ptr<tizen_browser::tools::BrowserImage> getFavicon();
 
 // signals