From 8bd8096777051f3025fff83bd36ac1ea092e2550 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Thu, 3 Sep 2015 16:25:39 +0200 Subject: [PATCH 01/16] TT-158 Fixed 'Clear History' bug [Issue#] https://bugs.tizen.org/jira/browse/TT-158 [Problem] Browser's crash after clicking on 'clear history' button [Cause] 'm_historyUI' object was not freed after closing the HistoryUI, which caused multiple sending of the clearHistory signal [Solution] Provided proper object management and prevented multiple creation of the 'm_historyUI'. In addition, there is a problem with displaying NoHistoryLabel from the HistoryUI - currently, it is not available from there [Verify] Do some browsing -> MoreMenu -> History Manager -> Clear Check if this action causes browser's crash Change-Id: I8be4b31c67b901d241d0bafdd621b72d5ea4c5f4 --- services/HistoryUI/HistoryUI.cpp | 25 +------------------------ services/HistoryUI/HistoryUI.h | 3 --- services/SimpleUI/SimpleUI.cpp | 27 ++++++++++++++------------- 3 files changed, 15 insertions(+), 40 deletions(-) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index a2dc558..f9c3a12 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -185,7 +185,6 @@ void HistoryUI::addHistoryItem(std::shared_ptr hi) itemData->item = hi; itemData->historyUI = std::shared_ptr(this); _history_item_data.push_back(itemData); - setEmptyGengrid(false); } void HistoryUI::addHistoryItems(std::shared_ptr items) @@ -253,33 +252,12 @@ void HistoryUI::removeHistoryItem(const std::string& uri) Elm_Object_Item* historyView = m_map_history_views.at(uri); elm_object_item_del(historyView); m_map_history_views.erase(uri); - - setEmptyGengrid(0 == m_map_history_views.size()); -} - -Evas_Object* HistoryUI::createNoHistoryLabel() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Evas_Object *label = elm_label_add(m_parent); - elm_object_text_set(label, "No favorite websites."); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - return label; -} - -void HistoryUI::setEmptyGengrid(bool setEmpty) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Evas_Object *obj = (setEmpty ? createNoHistoryLabel() : nullptr); - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", obj); } void HistoryUI::hide() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - evas_object_hide(elm_layout_content_get(m_history_layout, "m_genListToday")); - evas_object_hide(elm_layout_content_get(m_history_layout, "m_gengrid")); - evas_object_hide(elm_layout_content_get(m_history_layout, "m_ActionBar")); + evas_object_hide(elm_layout_content_get(m_history_layout, "action_bar_history")); evas_object_hide(m_history_layout); } @@ -291,7 +269,6 @@ void HistoryUI::clearItems() elm_gengrid_clear(m_gengrid); m_map_history_views.clear(); _history_item_data.clear(); - setEmptyGengrid(true); } void HistoryUI::_history_item_clicked_cb(void *data, Evas_Object *obj, void *event_info) diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 1eb4a24..83bd6f6 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -60,8 +60,6 @@ private: static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info); static void _history_item_clicked_cb(void *data, Evas_Object *obj, void *event_info); - void setEmptyGengrid(bool setEmpty); - Evas_Object *m_history_layout; Evas_Object *m_actionBar; Evas_Object *m_genListToday; @@ -71,7 +69,6 @@ private: Elm_Gengrid_Item_Class * m_item_class; std::map m_map_history_views; std::string m_edjFilePath; - Evas_Object *createNoHistoryLabel(); }; } diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 91bcecb..de0e0d6 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -313,7 +313,6 @@ int SimpleUI::exec(const std::string& _url) m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); - } if (url.empty()) { @@ -621,8 +620,7 @@ void SimpleUI::onClearHistoryClicked(const std::string&) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_historyService->clearAllHistory(); - m_mainUI->clearHistoryGenlist(); - m_mainUI->showHistory(); + m_historyUI.reset(); } void SimpleUI::onMostVisitedClicked(const std::string&) @@ -1111,21 +1109,24 @@ void SimpleUI::showMainUI() void SimpleUI::showHistoryUI(const std::string& str) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_historyUI = - std::dynamic_pointer_cast - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); - M_ASSERT(m_historyUI); - m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1)); - m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); - m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this,_1)); - m_historyUI->addHistoryItems(getHistory()); - m_historyUI->show(m_window.get()); + if(!m_historyUI) + { + m_historyUI = + std::dynamic_pointer_cast + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); + M_ASSERT(m_historyUI); + m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1)); + m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); + m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this,_1)); + m_historyUI->addHistoryItems(getHistory()); + m_historyUI->show(m_window.get()); + } } void SimpleUI::closeHistoryUI(const std::string& str) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_historyUI = nullptr; + m_historyUI.reset(); } void SimpleUI::showSettingsUI(const std::string& str) -- 2.7.4 From f0d3a9e9e6a6a06069ed4b1b3d15e7103e336637 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Fri, 4 Sep 2015 13:23:47 +0200 Subject: [PATCH 02/16] Added switching between 'Open Tabs' and 'On Other Devices' [Issue] https://bugs.tizen.org/jira/browse/TT-149 [Problem] "Opened Tabs" is not toggle with "On Other Devices" in Tab Manager. [Cause] Lack of implementation. [Solution] Added boolean onOtherDevicesSwitch variable, which allows to switch between 'Open Tabs' and 'On Other Devices' correctly. Changed type of onotherdevices_click and openedtabs_click from RECT to SWALLOW. Additionally, changed 'tab_gengird' to 'tab_gengrid'. [Verify] Launch browser > Open new tab > Tabs > On Other Devices > Obs Tabs should be hidden when 'On Other Devices' is clicked. Change-Id: I18529df81e274dcbc658e8db7ef038b4080e907d --- services/SimpleUI/SimpleUI.cpp | 6 +++++ services/SimpleUI/SimpleUI.h | 1 + services/TabUI/TabUI.cpp | 51 +++++++++++++++++++++++++++++++----------- services/TabUI/TabUI.h | 2 ++ services/TabUI/edc/TabUI.edc | 18 +++++---------- 5 files changed, 53 insertions(+), 25 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index de0e0d6..1b0e8d5 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -938,6 +938,7 @@ void SimpleUI::showTabUI() m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1)); m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1)); m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); + m_tabUI->tabsCount.connect(boost::bind(&SimpleUI::tabsCount, this)); m_tabUI->show(m_window.get()); m_tabUI->addTabItems(m_webEngine->getTabContents()); } @@ -966,6 +967,11 @@ void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tab m_webEngine->closeTab(tabId); } +int SimpleUI::tabsCount() +{ + return m_webEngine->tabsCount(); +} + void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation) { BROWSER_LOGD("%s", __func__); diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index b8df3a1..f8faab1 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -270,6 +270,7 @@ private: void tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/); void openLinkFromPopup(const std::string &); void disableHistoryButton(bool flag); + int tabsCount(); void onNetworkError(); void onNetworkConnected(); diff --git a/services/TabUI/TabUI.cpp b/services/TabUI/TabUI.cpp index cfb9e36..e93f03e 100644 --- a/services/TabUI/TabUI.cpp +++ b/services/TabUI/TabUI.cpp @@ -51,6 +51,7 @@ TabUI::TabUI() elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); createTabItemClass(); editMode = false; + onOtherDevicesSwitch = false; } TabUI::~TabUI() @@ -100,7 +101,7 @@ Evas_Object* TabUI::createTabUILayout(Evas_Object* parent) //create gengrid containing tabs m_gengrid = elm_gengrid_add(tab_layout); - elm_object_part_content_set(tab_layout, "tab_gengird", m_gengrid); + elm_object_part_content_set(tab_layout, "tab_gengrid", m_gengrid); M_ASSERT(m_parent); elm_gengrid_align_set(m_gengrid, 0, 0); @@ -155,7 +156,6 @@ Evas_Object* TabUI::createActionBar(Evas_Object* parent) return actionBarLayout; } - void TabUI::_close_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -164,6 +164,7 @@ void TabUI::_close_clicked(void* data, Evas_Object*, void*) tabUI->closeTabUIClicked(std::string()); tabUI->clearItems(); tabUI->editMode = false; + tabUI->onOtherDevicesSwitch = false; } } @@ -171,7 +172,7 @@ void TabUI::hide() { evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar")); evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar")); - evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengird")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengrid")); evas_object_hide(m_tab_layout); } @@ -188,14 +189,14 @@ Evas_Object* TabUI::createTopButtons(Evas_Object* parent) Evas_Object *button = elm_button_add(topLayout); elm_object_style_set(button, "tab_button"); evas_object_smart_callback_add(button, "clicked", _openedtabs_clicked, this); - //TODO: "openedtabs_button" is not swallow, change it when implementing callbacks - elm_object_part_content_set(topLayout, "openedtabs_button", button); + evas_object_show(button); + elm_layout_content_set(topLayout, "openedtabs_click", button); button = elm_button_add(topLayout); elm_object_style_set(button, "tab_button"); - //TODO: "onotherdevices_button" is not swallow, change it when implementing callbacks evas_object_smart_callback_add(button, "clicked", _onotherdevices_clicked, this); - elm_object_part_content_set(topLayout, "onotherdevices_button", button); + evas_object_show(button); + elm_layout_content_set(topLayout, "onotherdevices_click", button); return topLayout; } @@ -208,17 +209,36 @@ void TabUI::_newtab_clicked(void * data, Evas_Object*, void*) tabUI->clearItems(); tabUI->newTabClicked(std::string()); tabUI->editMode = false; + tabUI->onOtherDevicesSwitch = false; } } -void TabUI::_openedtabs_clicked(void*, Evas_Object*, void*) +void TabUI::_openedtabs_clicked(void* data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + TabUI* tabUI = static_cast(data); + if(tabUI->onOtherDevicesSwitch) { + tabUI->onOtherDevicesSwitch = false; + evas_object_show(tabUI->m_gengrid); + elm_layout_text_set(elm_layout_content_get(tabUI->m_tab_layout, "action_bar"), "closetabs_text", "Close Tabs"); + tabUI->editMode = false; + } + } } -void TabUI::_onotherdevices_clicked(void*, Evas_Object*, void*) +void TabUI::_onotherdevices_clicked(void* data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + TabUI* tabUI = static_cast(data); + if(!tabUI->onOtherDevicesSwitch) { + tabUI->onOtherDevicesSwitch = true; + evas_object_hide(tabUI->m_gengrid); + elm_layout_text_set(elm_layout_content_get(tabUI->m_tab_layout, "action_bar"), "closetabs_text", "Close Tabs"); + tabUI->editMode = false; + } + } } void TabUI::_newincognitotab_clicked(void* data, Evas_Object*, void*) @@ -229,6 +249,7 @@ void TabUI::_newincognitotab_clicked(void* data, Evas_Object*, void*) tabUI->clearItems(); tabUI->newIncognitoTabClicked(std::string()); tabUI->editMode = false; + tabUI->onOtherDevicesSwitch = false; } } @@ -237,11 +258,11 @@ void TabUI::_closetabs_clicked(void* data, Evas_Object* obj, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { TabUI* tabUI = static_cast(data); - if (!tabUI->editMode) { + if (!tabUI->editMode && !tabUI->onOtherDevicesSwitch) { tabUI->editMode = true; BROWSER_LOGD("[%s:%d] --------> edit mode: %d ", __PRETTY_FUNCTION__, __LINE__, tabUI->editMode); elm_layout_text_set(elm_layout_content_get(tabUI->m_tab_layout, "action_bar"), "closetabs_text", "Close all"); - } else { + } else if (tabUI->editMode && !tabUI->onOtherDevicesSwitch) { tabUI->closeAllTabs(); elm_gengrid_realized_items_update(tabUI->m_gengrid); } @@ -329,6 +350,10 @@ void TabUI::_thumbSelected(void *data, Evas_Object*, void*) Elm_Object_Item* it = elm_gengrid_selected_item_get(itemData->tabUI->m_gengrid); elm_object_item_del(it); elm_gengrid_realized_items_update(itemData->tabUI->m_gengrid); + int tabsNumber = *(itemData->tabUI->tabsCount()); + BROWSER_LOGD("%s:%d %s, items: %d", __FILE__, __LINE__, __func__, tabsNumber); + if (!tabsNumber) + itemData->tabUI->hide(); } } } diff --git a/services/TabUI/TabUI.h b/services/TabUI/TabUI.h index b83f118..21cd5b2 100644 --- a/services/TabUI/TabUI.h +++ b/services/TabUI/TabUI.h @@ -51,6 +51,7 @@ public: boost::signals2::signal openedTabsClicked; boost::signals2::signal onOtherDevicesClicked; boost::signals2::signal closeTabUIClicked; + boost::signals2::signal tabsCount; private: static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); @@ -80,6 +81,7 @@ private: Evas_Object *m_gengrid; Evas_Object *m_parent; bool editMode; + bool onOtherDevicesSwitch; Elm_Gengrid_Item_Class * m_item_class; std::map m_map_tab_views; diff --git a/services/TabUI/edc/TabUI.edc b/services/TabUI/edc/TabUI.edc index 07f5192..faa4dac 100644 --- a/services/TabUI/edc/TabUI.edc +++ b/services/TabUI/edc/TabUI.edc @@ -256,7 +256,7 @@ group { visible: 1; } } - part { name: "tab_gengird"; + part { name: "tab_gengrid"; type : SWALLOW; scale: 1; description { @@ -1317,11 +1317,8 @@ group { name: "top_buttons_layout"; visible: 1; align: 0 0; fixed: 1 1; - min: 348 65; - max: 348 65; - rel1 { relative: 0.0 0.0; to: "openedtabs_over";} - rel2 { relative: 1.0 1.0; to: "openedtabs_over";} - color_class: transparent; + rel1 { relative: 0.0 0.0; to: "openedtabs_button";} + rel2 { relative: 1.0 1.0; to: "openedtabs_button";} } } part { @@ -1400,7 +1397,7 @@ group { name: "top_buttons_layout"; } part { - name: "onotherdevicess_click"; + name: "onotherdevices_click"; scale:1; type: SWALLOW; description { @@ -1408,11 +1405,8 @@ group { name: "top_buttons_layout"; visible: 1; align: 0 0; fixed: 1 1; - min: 348 65; - max: 348 65; - rel1 { relative: 0.0 0.0; to: "onotherdevices_over";} - rel2 { relative: 1.0 1.0; to: "onotherdevices_over";} - color_class: transparent; + rel1 { relative: 0.0 0.0; to: "onotherdevices_button";} + rel2 { relative: 1.0 1.0; to: "onotherdevices_button";} } } } -- 2.7.4 From 22ed25f1896905d77d85e43726e7bebf932ff70d Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Tue, 8 Sep 2015 10:39:46 +0200 Subject: [PATCH 03/16] Refactoring - deleted unused history SQLite classes. [Issue#] N/A [Problem] These history classes were not used. [Cause] N/A [Solution] Removed dead code. [Verify] Open few pages, check if they appeared in history. Change-Id: Ia996b2259a7cc8c6e5506eb707a4f0a89c494aae Signed-off-by: Maciej Skrzypkowski --- services/HistoryService/HistoryService.cpp | 7 - services/HistoryService/HistoryService.h | 37 -- services/StorageService/CMakeLists.txt | 6 - services/StorageService/HistoryException.h | 44 -- services/StorageService/HistorySQLite.h | 134 ---- services/StorageService/HistoryStorage.h | 92 --- services/StorageService/StorageService.h | 56 -- services/StorageService/src/HistoryException.cpp | 39 -- services/StorageService/src/HistorySQLite.cpp | 752 ----------------------- services/StorageService/src/HistoryStorage.cpp | 35 -- services/StorageService/src/StorageService.cpp | 99 --- 11 files changed, 1301 deletions(-) delete mode 100644 services/StorageService/HistoryException.h delete mode 100644 services/StorageService/HistorySQLite.h delete mode 100644 services/StorageService/HistoryStorage.h delete mode 100644 services/StorageService/src/HistoryException.cpp delete mode 100644 services/StorageService/src/HistorySQLite.cpp delete mode 100644 services/StorageService/src/HistoryStorage.cpp diff --git a/services/HistoryService/HistoryService.cpp b/services/HistoryService/HistoryService.cpp index e3d2a82..b5826ef 100644 --- a/services/HistoryService/HistoryService.cpp +++ b/services/HistoryService/HistoryService.cpp @@ -338,9 +338,6 @@ void HistoryService::insertOrRefresh(std::shared_ptr hi) { //getStorageManager()->insertOrRefresh(hi); } -/** - * @throws HistoryException on error - */ void HistoryService::clearAllHistory() { bp_history_adaptor_reset(); @@ -368,10 +365,6 @@ int HistoryService::getHistoryId(const std::string & url) return 0; } - -/** - * @throws HistoryException on error - */ void HistoryService::clearURLHistory(const std::string & url) { int id = getHistoryId(url); diff --git a/services/HistoryService/HistoryService.h b/services/HistoryService/HistoryService.h index f6fc91c..f8e10e1 100644 --- a/services/HistoryService/HistoryService.h +++ b/services/HistoryService/HistoryService.h @@ -26,7 +26,6 @@ #include "service_macros.h" #include "BrowserImage.h" #include "HistoryItem.h" -#include "HistoryStorage.h" #include "StorageService.h" #include #define DOMAIN_HISTORY_SERVICE "org.tizen.browser.historyservice" @@ -42,40 +41,13 @@ public: HistoryService(); virtual ~HistoryService(); virtual std::string getName(); - int getHistoryId(const std::string & url); - - /** - * @throws HistoryException on error - */ void addHistoryItem(std::shared_ptr hi, std::shared_ptr thumbnail=std::shared_ptr()); - - /** - * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. - * - * @throws HistoryException on error - */ void insertOrRefresh(std::shared_ptr hi); - - /** - * @throws HistoryException on error - */ void clearAllHistory(); - - /** - * @throws HistoryException on error - */ void clearURLHistory(const std::string & url); - - /** - * @throws HistoryException on error - */ std::shared_ptr getHistoryItem(const std::string & url); - - /** - * @throws HistoryException on error - */ std::shared_ptr getHistoryAll(); std::shared_ptr getHistoryToday(); std::shared_ptr getHistoryYesterday(); @@ -85,17 +57,8 @@ public: std::shared_ptr getCurrentTab(); std::shared_ptr getMostVisitedHistoryItems(); std::shared_ptr getHistoryItemsByURL(const std::string & url, int maxItems); - - /** - * @throws HistoryException on error - */ int getHistoryItemsCount(); - - /** - * @throws HistoryException on error - */ int getHistoryVisitCounter(const std::string & url); - void setStorageServiceTestMode(bool testmode = true); boost::signals2::signalhistoryEmpty; diff --git a/services/StorageService/CMakeLists.txt b/services/StorageService/CMakeLists.txt index bfd5488..0b6aaf3 100644 --- a/services/StorageService/CMakeLists.txt +++ b/services/StorageService/CMakeLists.txt @@ -8,9 +8,6 @@ set(StorageServiceSOURCES Storage/SQLDatabase.cpp src/BookmarksSorage.cpp src/BookmarksSQLite.cpp - src/HistoryException.cpp - src/HistorySQLite.cpp - src/HistoryStorage.cpp src/StorageService.cpp ) @@ -20,9 +17,6 @@ set(StorageService_HEADERS StorageService.h BookmarksStorage.h BookmarksSQLite.h - HistoryStorage.h - HistorySQLite.h - HistoryException.h Storage/include/Field.h Storage/include/DriverManager.h Storage/include/SQLDatabase.h diff --git a/services/StorageService/HistoryException.h b/services/StorageService/HistoryException.h deleted file mode 100644 index d6a5849..0000000 --- a/services/StorageService/HistoryException.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __HISTORY_EXCEPTION_H -#define __HISTORY_EXCEPTION_H - -#include -#include - -#include "ServiceFactory.h" -#include "service_macros.h" - -namespace tizen_browser -{ -namespace services -{ - -class BROWSER_EXPORT HistoryException : public std::exception -{ -public: - HistoryException(const std::string & message); - virtual ~HistoryException() throw (); - virtual const char * getMessage() const throw (); -protected: - std::string m_message; -}; - -} -} - -#endif diff --git a/services/StorageService/HistorySQLite.h b/services/StorageService/HistorySQLite.h deleted file mode 100644 index 451e2cd..0000000 --- a/services/StorageService/HistorySQLite.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __HISTORY_H -#define __HISTORY_H - -#include -#include -#include -#include - -#include "BrowserImage.h" -#include "Config.h" -#include "HistoryStorage.h" -#include "SQLDatabase.h" - -///\todo temporary dirty include -#include "../HistoryService/HistoryItem.h" - -namespace tizen_browser -{ -namespace services -{ - -class HistorySQLite: virtual public HistoryStorage -{ -public: - HistorySQLite(); - ~HistorySQLite(); - - /** - * @throws HistoryException on error - */ - void addHistoryItem(std::shared_ptr hi, storage::SQLTransactionScope * transactionScope); - - void addHistoryItem(std::shared_ptr hi); - - /** - * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. - * - * @throws HistoryException on error - */ - void insertOrRefresh(std::shared_ptr hi, storage::SQLTransactionScope * transactionScope); - - void insertOrRefresh(std::shared_ptr hi); - - /** - * @throws HistoryException on error - */ - std::shared_ptr getFavicon(const std::string & url, storage::SQLTransactionScope * transactionScope); - - std::shared_ptr getFavicon(const std::string & url); - - /** - * @throws HistoryException on error - */ - void deleteHistory(storage::SQLTransactionScope * transactionScope); - - void deleteHistory(); - - /** - * @throws HistoryException on error - */ - void deleteHistory(const std::string & url, storage::SQLTransactionScope * transactionScope); - - void deleteHistory(const std::string & url); - - /** - * @throws HistoryException on error - */ - std::shared_ptr getHistoryItem(const std::string & url, storage::SQLTransactionScope * transactionScope); - - std::shared_ptr getHistoryItem(const std::string & url); - - /** - * @throws HistoryException on error - */ - HistoryItemVector & getHistoryItems(storage::SQLTransactionScope * transactionScope, int historyDepthInDays, int maxItems); - - HistoryItemVector & getHistoryItems(int historyDepthInDays, int maxItems); - - /** - * @throws HistoryException on error - */ - int getHistoryItemsCount(storage::SQLTransactionScope * transactionScope); - - int getHistoryItemsCount(); - - /** - * @throws HistoryException on error - */ - int getHistoryVisitCounter(const std::string & url, storage::SQLTransactionScope * transactionScope); - - int getHistoryVisitCounter(const std::string & url); - - void init(bool testmode = false); - -private: - config::DefaultConfig config; - std::string DB_HISTORY; - bool m_dbHistoryInitialised; - - HistoryItemVector m_histItems; - /** - * @throws StorageExceptionInitialization on error - */ - void initDatabaseHistory(const std::string & db_str); - - /** - * @throws StorageException on error - */ - std::shared_ptr createHistoryItem(const storage::SQLQuery & query); - - bool m_isInitialized; - -}; - -} -} - -#endif diff --git a/services/StorageService/HistoryStorage.h b/services/StorageService/HistoryStorage.h deleted file mode 100644 index 0e55ff6..0000000 --- a/services/StorageService/HistoryStorage.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __HISTORYSTORAGE_H -#define __HISTORYSTORAGE_H - -#include -#include -#include - -#include "BrowserImage.h" - -///\todo temporary dirty include -#include "../HistoryService/HistoryItem.h" - -namespace tizen_browser -{ -namespace services -{ - -class HistoryStorage -{ -public: - HistoryStorage(); - virtual ~HistoryStorage(); - - /** - * @throws HistoryException on error - */ - virtual void addHistoryItem(std::shared_ptr hi) = 0; - - /** - * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. - * - * @throws HistoryException on error - */ - virtual void insertOrRefresh(std::shared_ptr hi) = 0; - - /** - * @throws HistoryException on error - */ - virtual std::shared_ptr getFavicon(const std::string & url) = 0; - - /** - * @throws HistoryException on error - */ - virtual void deleteHistory() = 0; - - /** - * @throws HistoryException on error - */ - virtual void deleteHistory(const std::string & url) = 0; - - /** - * @throws HistoryException on error - */ - virtual std::shared_ptr getHistoryItem(const std::string & url) = 0; - - /** - * @throws HistoryException on error - */ - virtual HistoryItemVector & getHistoryItems(int historyDepthInDays, int maxItems) = 0; - - /** - * @throws HistoryException on error - */ - virtual int getHistoryItemsCount() = 0; - - /** - * @throws HistoryException on error - */ - virtual int getHistoryVisitCounter(const std::string & url) = 0; - -}; - -} -} - -#endif diff --git a/services/StorageService/StorageService.h b/services/StorageService/StorageService.h index 96c2145..ad67a65 100644 --- a/services/StorageService/StorageService.h +++ b/services/StorageService/StorageService.h @@ -23,12 +23,8 @@ #include "service_macros.h" #include "BrowserImage.h" #include "Config.h" -#include "HistorySQLite.h" #include "BookmarksStorage.h" #include "BookmarksSQLite.h" -///\todo temporary dirty include -//#include "HistoryItem.h" -#include "../HistoryService/HistoryItem.h" #define DOMAIN_STORAGE_SERVICE "org.tizen.browser.storageservice" @@ -84,54 +80,6 @@ public: */ static void checkAndCreateTable(storage::SQLTransactionScope * transactionScope, const std::string & tablename, const std::string & ddl); - /** - * @throws HistoryException on error - */ - void addHistoryItem(std::shared_ptr hi); - - /** - * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. - * - * @throws HistoryException on error - */ - void insertOrRefresh(std::shared_ptr hi); - - /** - * @throws HistoryException on error - */ - std::shared_ptr getFavicon(const std::string & url); - - /** - * @throws HistoryException on error - */ - void deleteHistory(); - - /** - * @throws HistoryException on error - */ - void deleteHistory(const std::string & url); - - /** - * @throws HistoryException on error - */ - std::shared_ptr getHistoryItem(const std::string & url); - - /** - * @throws HistoryException on error - */ - HistoryItemVector & getHistoryItems(int historyDepthInDays, int maxItems); - - /** - * @throws HistoryException on error - */ - int getHistoryItemsCount(); - - /** - * @throws HistoryException on error - */ - int getHistoryVisitCounter(const std::string & url); - - void init(bool testmode = false); /** @@ -147,9 +95,6 @@ private: */ void initDatabaseSettings(const std::string & db_str); - - void initHistoryService(const std::string & storage, bool testmode); - /** * @throws StorageExceptionInitialization on error */ @@ -159,7 +104,6 @@ private: config::DefaultConfig config; std::string DB_SETTINGS; - std::shared_ptr m_history; // std::shared_ptr m_rssStorage; std::shared_ptr m_bookmarks; diff --git a/services/StorageService/src/HistoryException.cpp b/services/StorageService/src/HistoryException.cpp deleted file mode 100644 index 929fce7..0000000 --- a/services/StorageService/src/HistoryException.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "HistoryException.h" - -namespace tizen_browser -{ -namespace services -{ - -HistoryException::HistoryException(const std::string & message) -{ - this->m_message = message; -} - -HistoryException::~HistoryException() throw () -{ -} - -const char * HistoryException::getMessage() const throw () -{ - return m_message.c_str(); -} - -} -} diff --git a/services/StorageService/src/HistorySQLite.cpp b/services/StorageService/src/HistorySQLite.cpp deleted file mode 100644 index 1b232c9..0000000 --- a/services/StorageService/src/HistorySQLite.cpp +++ /dev/null @@ -1,752 +0,0 @@ -/* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "HistorySQLite.h" - -#include - -#include "BrowserLogger.h" -#include "DriverManager.h" -#include "Blob.h" -#include "StorageException.h" -#include "StorageExceptionInitialization.h" -#include "HistoryException.h" -#include "EflTools.h" -#include "StorageService.h" - -namespace -{ -// ------ Database FAVICON ------ -const std::string TABLE_FAVICON = "FAVICON"; -//const std::string COL_FAVICON_ID = "id"; -const std::string COL_FAVICON_IMAGE_TYPE = "image_type"; -const std::string COL_FAVICON_WIDTH = "width"; -const std::string COL_FAVICON_HEIGHT = "height"; -const std::string COL_FAVICON_URI_PK = "uri"; - -const std::string COL_FAVICON_FAVICON = "fav_icon"; - -const std::string FAVICON_MODIFIERS = "DEFERRABLE INITIALLY DEFERRED"; - -const std::string DDL_CREATE_TABLE_FAVICON = "CREATE TABLE " + TABLE_FAVICON - + "(" + COL_FAVICON_URI_PK + " TEXT PRIMARY KEY, " - + COL_FAVICON_WIDTH + " INTEGER DEFAULT 0, " - + COL_FAVICON_HEIGHT + " INTEGER DEFAULT 0, " - + COL_FAVICON_IMAGE_TYPE + " INTEGER DEFAULT 0, " - + COL_FAVICON_FAVICON + " BLOB " - + ")"; - -const std::string INSERT_TABLE_FAVICON = "insert into " + TABLE_FAVICON + " (" - + COL_FAVICON_URI_PK + ", " - + COL_FAVICON_WIDTH + ", " - + COL_FAVICON_HEIGHT + ", " - + COL_FAVICON_IMAGE_TYPE + ", " - + COL_FAVICON_FAVICON - + ") values (?, ?, ?, ?, ?)"; - -//const std::string VIRTUAL_COL_FAVICON_ROWID = "rowid"; -//const std::string SELECT_FAVICON_LAST_ID = "SELECT last_insert_rowid() AS " + VIRTUAL_COL_FAVICON_ROWID + " FROM " + TABLE_FAVICON + " LIMIT 1"; -const std::string SELECT_FAVICON_EXISTS = - "select " + COL_FAVICON_URI_PK + " from " + TABLE_FAVICON - + " where " + COL_FAVICON_URI_PK + "=?"; - -const std::string DELETE_ALL_FAVICON = "delete from " + TABLE_FAVICON; -// ------ (end) Database FAVICON ------ - -// ------ Database HISTORY ------ -const std::string TABLE_HISTORY = "HISTORY"; -const std::string COL_HISTORY_URL = "url"; -const std::string COL_HISTORY_TITLE = "title"; -const std::string COL_HISTORY_VISIT_DATE = "visit_date"; -const std::string COL_HISTORY_VISIT_COUNTER = "visit_counter"; -const std::string COL_HISTORY_URI_FK = "uri_fk"; - -// foreign key -//const std::string COL_HISTORY_FAVICON_ID_FK = "favicon_id_fk"; - - -const std::string DDL_CREATE_TABLE_HISTORY = "CREATE TABLE " + TABLE_HISTORY - + "(" + COL_HISTORY_URL + " TEXT PRIMARY KEY, " - + COL_HISTORY_TITLE + " TEXT, " - + COL_HISTORY_VISIT_DATE + " DATETIME DEFAULT (datetime('now', 'localtime')), " - + COL_HISTORY_VISIT_COUNTER + " INTEGER DEFAULT 1, " - + COL_HISTORY_URI_FK + " TEXT REFERENCES " + TABLE_FAVICON + "(" + COL_FAVICON_URI_PK + ") " - + FAVICON_MODIFIERS - + ")"; - -const std::string INSERT_TABLE_HISTORY = "insert or replace into " + TABLE_HISTORY + " (" - + COL_HISTORY_URL + ", " - + COL_HISTORY_TITLE + ", " - + COL_HISTORY_VISIT_DATE + ", " - + COL_HISTORY_VISIT_COUNTER + ", " - + COL_HISTORY_URI_FK - + ") values (?,?,?,?,?)"; - -const std::string INSERT_TABLE_HISTORY_DEFAULT_VALUES = "insert or replace into " + TABLE_HISTORY + " (" - + COL_HISTORY_URL + ", " - + COL_HISTORY_TITLE + ", " - + COL_HISTORY_URI_FK - + ") values (?,?,?)"; - -const std::string VIRTUAL_COL_HISTORY_AMOUNT = "amount"; -const std::string SELECT_HISTORY_COUNT_ID = "select count(*) as " + VIRTUAL_COL_HISTORY_AMOUNT + " from " + TABLE_HISTORY; -const std::string SELECT_HISTORY_VISIT_COUNTER = "select " + COL_HISTORY_VISIT_COUNTER + " from " + TABLE_HISTORY + " where " + COL_HISTORY_URL + "=?"; - -const std::string DELETE_HISTORY_ITEM = "delete from " + TABLE_HISTORY + " where " + COL_HISTORY_URL + "=?"; -const std::string DELETE_ALL_HISTORY = "delete from " + TABLE_HISTORY; - -const std::string UPDATE_HISTORY_ITEM_COUNTER_DATE = - "update HISTORY set visit_counter=visit_counter+1, visit_date=(datetime('now', 'localtime')) where url=?"; - -// ------ (end) Database HISTORY ------ - -const std::string SELECT_FAVICON = - "select f." + COL_FAVICON_FAVICON + " as " + COL_FAVICON_FAVICON + "," - + "f." + COL_FAVICON_WIDTH + " as " + COL_FAVICON_WIDTH + "," - + "f." + COL_FAVICON_HEIGHT + " as " + COL_FAVICON_HEIGHT + "," - + "f." + COL_FAVICON_IMAGE_TYPE + " as " + COL_FAVICON_IMAGE_TYPE - + " from " - + TABLE_FAVICON + " f, " + TABLE_HISTORY + " h" - + " where f." + COL_FAVICON_URI_PK + "=h." + COL_HISTORY_URI_FK - + " and " + COL_HISTORY_URL + "=?"; - -const int SELECT_FAVICON_FAVICON = 0; -const int SELECT_FAVICON_WIDTH = 1; -const int SELECT_FAVICON_HEIGHT = 2; -const int SELECT_FAVICON_IMAGE_TYPE = 3; - -const std::string SELECT_FULL_HISTORY_ALL_ROW = - "select f." + COL_FAVICON_FAVICON + " as " + COL_FAVICON_FAVICON - + ", f." + COL_FAVICON_WIDTH + " as " + COL_FAVICON_WIDTH - + ", f." + COL_FAVICON_HEIGHT + " as " + COL_FAVICON_HEIGHT - + ", f." + COL_FAVICON_IMAGE_TYPE + " as " + COL_FAVICON_IMAGE_TYPE - + ", h." + COL_HISTORY_URL + " as " + COL_HISTORY_URL - + ", h." + COL_HISTORY_TITLE + " as " + COL_HISTORY_TITLE - + ", h." + COL_HISTORY_VISIT_DATE + " as " + COL_HISTORY_VISIT_DATE - + ", h." + COL_HISTORY_VISIT_COUNTER + " as " + COL_HISTORY_VISIT_COUNTER - + ", h." + COL_HISTORY_URI_FK + " as " + COL_HISTORY_URI_FK - + " from " - + TABLE_HISTORY + " h left outer join " + TABLE_FAVICON + " f" - + " on f." + COL_FAVICON_URI_PK + "=h." + COL_HISTORY_URI_FK; - -const int SELECT_FULL_HISTORY_ALL_ROW_URL = 4; -const int SELECT_FULL_HISTORY_FAVICON = 0; -const int SELECT_FULL_HISTORY_FAVICON_IMAGE_TYPE = 3; -const int SELECT_FULL_HISTORY_FAVICON_WIDTH = 1; -const int SELECT_FULL_HISTORY_FAVICON_HEIGHT = 2; -const int SELECT_FULL_HISTORY_TITLE = 5; -const int SELECT_FULL_HISTORY_VISIT_DATE = 6; -const int SELECT_FULL_HISTORY_VISIT_COUNTER = 7; -const int SELECT_FULL_HISTORY_URI_FK = 8; - -const std::string SELECT_HISTORY_BY_URL = - SELECT_FULL_HISTORY_ALL_ROW - + " where " + COL_HISTORY_URL + "=?"; - -} - - -namespace tizen_browser -{ -namespace services -{ - -HistorySQLite::HistorySQLite() - : m_dbHistoryInitialised(false) - , m_histItems() - , m_isInitialized(false) -{ -} - - -HistorySQLite::~HistorySQLite() -{ -} - -void HistorySQLite::init(bool testmode) -{ - if (m_isInitialized) { - return; - } - - config.load("whatever"); - - std::string resourceDbDir; - std::string dbHistory; - - if (!testmode) { - resourceDbDir = boost::any_cast < std::string > (config.get("resourcedb/dir")); - dbHistory = boost::any_cast < std::string > (config.get("DB_HISTORY")); - } else { - resourceDbDir = boost::any_cast < std::string > (config.get("resourcedb/dir")); - dbHistory = "history_test.db"; - } - - DB_HISTORY = resourceDbDir + dbHistory; - - try { - initDatabaseHistory(DB_HISTORY); - m_isInitialized = true; - } catch (storage::StorageExceptionInitialization & e) { - BROWSER_LOGE("Cannot initialize database: %s!", DB_HISTORY.c_str()); - } - -} - -std::string message(const std::string & text, int errcode, const std::string & errMsg) -{ - return text + std::to_string(errcode) + "; " + errMsg; -} - - -//void History::addHistoryItem( -// const std::string & url, -// const std::string & title, -// std::shared_ptr image, -// tizen_browser::tools::BrowserImage::ImageType outputImageType) -//{ -//} - -void HistorySQLite::addHistoryItem(std::shared_ptr hi) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - addHistoryItem(hi, &scope); -} - -/** - * @throws HistoryException on error - */ -void HistorySQLite::addHistoryItem(std::shared_ptr hi, storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::addHistoryItem begin"); - - std::unique_ptr blob; - if (hi->getFavIcon()) { - if (tizen_browser::tools::BrowserImage::ImageTypePNG == hi->getFavIcon()->imageType) { - blob = tizen_browser::tools::EflTools::getBlobPNG(hi->getFavIcon()); - } else { - std::vector < uint8_t > rawImageData = tizen_browser::tools::EflTools::rawEvasImageData(hi->getFavIcon()); - blob = std::unique_ptr(new tizen_browser::tools::Blob(rawImageData.data(), rawImageData.size())); - } - } - std::shared_ptr conIns = transactionScope->database(); - try { - storage::SQLQuery select(conIns->prepare(SELECT_FAVICON_EXISTS)); - select.bindText(1, hi->getUrl()); - select.exec(); - - if (!select.hasNext() && blob) { - BROWSER_LOGI("Favicon URI=%s - not found. Adding to database...", hi->getUriFavicon().c_str()); - storage::SQLQuery insertFavIcon(conIns->prepare(INSERT_TABLE_FAVICON)); - insertFavIcon.bindText(1, hi->getUrl()); - insertFavIcon.bindInt(2, hi->getFavIcon()->width); - insertFavIcon.bindInt(3, hi->getFavIcon()->height); - insertFavIcon.bindInt(4, hi->getFavIcon()->imageType); - insertFavIcon.bindBlob(5, std::move(blob)); - insertFavIcon.exec(); - BROWSER_LOGI("Favicon added"); - BROWSER_LOGI("History item: url: %s", hi->getUriFavicon().c_str()); - } else { - BROWSER_LOGI("Favicon URI=%s was found.", hi->getUriFavicon().c_str()); - } - - BROWSER_LOGI("A new record will be added to a table %s", TABLE_HISTORY.c_str()); - - storage::SQLQuery insertHist(conIns->prepare(INSERT_TABLE_HISTORY_DEFAULT_VALUES)); - insertHist.bindText(1, hi->getUrl()); - insertHist.bindText(2, hi->getTitle()); - insertHist.bindText(3, hi->getUrl()); - insertHist.exec(); - - BROWSER_LOGI("History::addHistoryItem - commited"); - } catch (storage::StorageException & e) { - BROWSER_LOGE("Cannot add a history item (url='%s', title='%s'): %s", - hi->getUrl().c_str(), hi->getTitle().c_str(), e.getMessage()); - - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - throw HistoryException(msg); - } - - BROWSER_LOGI("History::addHistoryItem end"); -} - - -/** - * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. - * - * @throws HistoryException on error - */ - -void HistorySQLite::insertOrRefresh(std::shared_ptr hi) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - insertOrRefresh(hi, &scope); -} - -void HistorySQLite::insertOrRefresh(std::shared_ptr hi, storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::insertOrRefresh begin"); - - - M_ASSERT(hi); - - std::shared_ptr con = transactionScope->database(); - - bool isUpdate = false; - - try { - storage::SQLQuery select(con->prepare(SELECT_HISTORY_VISIT_COUNTER)); - select.bindText(1, hi->getUrl()); - select.exec(); - - if (select.hasNext()) { - storage::SQLQuery update(con->prepare(UPDATE_HISTORY_ITEM_COUNTER_DATE)); - update.bindText(1, hi->getUrl()); - update.exec(); - isUpdate = true; - BROWSER_LOGI("visit_counter and visit_date has been updated"); - - } - - BROWSER_LOGI("[%s] - commited", __func__); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg); - } - - if (!isUpdate) { - addHistoryItem(hi, transactionScope); - BROWSER_LOGI("New HistoryItem object has been added."); - - } - - BROWSER_LOGI("History::insertOrRefresh end"); -} - -/** - * ... or just (better) use getHistoryItem method - * @throws HistoryException on error - */ -std::shared_ptr HistorySQLite::getFavicon(const std::string & url) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - return getFavicon(url, &scope); -} - -std::shared_ptr HistorySQLite::getFavicon(const std::string & url, storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::getFavicon begin"); - - std::shared_ptr rsBlob = std::make_shared(); - std::shared_ptr bi - = std::make_shared(); - - auto imageType = tizen_browser::tools::BrowserImage::ImageTypeNoImage; - - auto con = transactionScope->database(); - - try { - storage::SQLQuery select(con->prepare(SELECT_FAVICON)); - select.bindText(1, url); - select.exec(); - - if (select.hasNext()) { - rsBlob = select.getBlob(SELECT_FAVICON_FAVICON); - if (rsBlob.get()) { - bi->width = select.getInt(SELECT_FAVICON_WIDTH); - bi->height = select.getInt(SELECT_FAVICON_HEIGHT); - const auto autoimageType = select.getInt(SELECT_FAVICON_IMAGE_TYPE); - bi->imageType = static_cast(autoimageType); - if(rsBlob->getLength() > 0 ){ - bi->dataSize = rsBlob->transferData(&bi->imageData); - } else { - bi->dataSize = 0; - bi->imageData = 0; - } - BROWSER_LOGI("History::getFavicon - commited"); - } else { - BROWSER_LOGW("History::getFavicon - empty blob"); - } - } else { - BROWSER_LOGW("Can't find a favicon (url=%s)", url.c_str()); - } - - BROWSER_LOGI("History::getFavicon - commited"); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg.c_str()); - } - - BROWSER_LOGI("History::getFavicon end"); - - return bi; -} - -/** - * @throws HistoryException on error - */ -void HistorySQLite::deleteHistory() -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - deleteHistory(&scope); -} - -void HistorySQLite::deleteHistory(storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::deleteHistory begin"); - - std::shared_ptr con = transactionScope->database(); - - try { - con->exec(DELETE_ALL_HISTORY); - con->exec(DELETE_ALL_FAVICON); - - BROWSER_LOGI("History::deleteHistory - commited"); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - throw HistoryException(msg.c_str()); - } - m_histItems.clear(); - - BROWSER_LOGI("History::deleteHistory end"); -} - -/** - * @throws HistoryException on error - */ -void HistorySQLite::deleteHistory(const std::string & url) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - deleteHistory(url, &scope); -} - -void HistorySQLite::deleteHistory(const std::string & url, storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::deleteHistory (url: %s) - begin", url.c_str()); - - std::shared_ptr con = transactionScope->database(); - - try { - storage::SQLQuery deleteQuery(con->prepare(DELETE_HISTORY_ITEM)); - - deleteQuery.bindText(1, url); - deleteQuery.exec(); - - // consider delete a corresponding record from a table FAVICON if dangling - - BROWSER_LOGI("History::deleteHistory (url: %s) - commited", url.c_str()); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg.c_str()); - } - - for (HistoryItemVector::iterator it(m_histItems.begin()), end(m_histItems.end()); it != end; ++it) { - if ((*it)->getUrl() == url) { - m_histItems.erase(it); - break; - } - } - - BROWSER_LOGI("History::deleteHistory (url: %s) - end", url.c_str()); -} - -/** - * @throws StorageException on error - */ -/*private*/ std::shared_ptr HistorySQLite::createHistoryItem(const storage::SQLQuery & query) -{ - BROWSER_LOGI("History::createHistoryItem begin"); - - std::shared_ptr hi; - - try { - int len = 0; - std::shared_ptr rsBlob = std::make_shared(); - auto imageType = tizen_browser::tools::BrowserImage::ImageTypeNoImage; - - std::shared_ptr bi = std::make_shared(); - - std::string url = query.getString(SELECT_FULL_HISTORY_ALL_ROW_URL); - - hi = std::make_shared(url); - hi->setUrl(url); - hi->setTitle(query.getString(SELECT_FULL_HISTORY_TITLE)); - - std::string strVisitDate = query.getString(SELECT_FULL_HISTORY_VISIT_DATE); - BROWSER_LOGD("[%s:%d] VD!!!! %s", __PRETTY_FUNCTION__, __LINE__, strVisitDate.c_str()); - boost::posix_time::ptime visitDate = boost::posix_time::time_from_string(strVisitDate); - - BROWSER_LOGD("%s:%d\n", __FILE__, __LINE__); - - hi->setLastVisit(visitDate); - hi->setVisitCounter(query.getInt(SELECT_FULL_HISTORY_VISIT_COUNTER)); - hi->setUriFavicon(query.getString(SELECT_FULL_HISTORY_URI_FK)); - - rsBlob = query.getBlob(SELECT_FULL_HISTORY_FAVICON); - if (rsBlob.get()) { - const auto autoimageType = query.getInt(SELECT_FULL_HISTORY_FAVICON_IMAGE_TYPE); - imageType = static_cast(autoimageType); - - bi->imageType = imageType; - bi->width = query.getInt(SELECT_FULL_HISTORY_FAVICON_WIDTH); - bi->height = query.getInt(SELECT_FULL_HISTORY_FAVICON_HEIGHT); - bi->url = url; - - len = rsBlob->getLength(); - BROWSER_LOGI("History::createHistoryItem. I've got an icon. Length = %d, url = %s", len, url.c_str()); - } - - if (len > 0) { - bi->dataSize = rsBlob->transferData(&bi->imageData); - } else { - bi = std::make_shared(); - bi->imageData = NULL; - bi->dataSize = 0; - } - - if (bi.get()) { - hi->setFavIcon(bi); - } - - BROWSER_LOGI("Favicon uri: %s, visit_date: %s, title: %s", hi->getUriFavicon().c_str(), strVisitDate.c_str(), query.getString(SELECT_FULL_HISTORY_TITLE).c_str()); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw; - } - - BROWSER_LOGI("History::createHistoryItem end"); - - return hi; -} - -/** - * @throws HistoryException on error - */ -std::shared_ptr HistorySQLite::getHistoryItem(const std::string & url) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - return getHistoryItem(url, &scope); -} - -std::shared_ptr HistorySQLite::getHistoryItem(const std::string & url, storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::getHistoryItem begin"); - - std::shared_ptr hi; - - std::shared_ptr con = transactionScope->database(); - - try { - storage::SQLQuery select(con->prepare(SELECT_HISTORY_BY_URL)); - select.bindText(1, url); - select.exec(); - - if (select.hasNext()) { - hi = createHistoryItem(select); - } else { - BROWSER_LOGI("No records found for url %s.\n%s\n", url.c_str(), SELECT_HISTORY_BY_URL.c_str()); - hi = std::shared_ptr(new HistoryItem(url)); - } - - BROWSER_LOGI("History::getHistoryItem - commited"); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg.c_str()); - } - - BROWSER_LOGI("History::getHistoryItem end"); - return hi; -} - -/** - * @throws HistoryException on error - */ -HistoryItemVector & HistorySQLite::getHistoryItems(int historyDepthInDays, int maxItems) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - return getHistoryItems(&scope, historyDepthInDays, maxItems); -} - -HistoryItemVector & HistorySQLite::getHistoryItems(storage::SQLTransactionScope * transactionScope, int historyDepthInDays, int maxItems) -{ - BROWSER_LOGI("History::getHistoryItems begin"); - m_histItems.clear(); - std::shared_ptr con = transactionScope->database(); - - const std::string historyNotOlderThan = COL_HISTORY_VISIT_DATE + ">=date('now','-" + std::to_string(historyDepthInDays) + " day')"; - const std::string historyItemsLimit = std::to_string(maxItems); - - const std::string SQL = SELECT_FULL_HISTORY_ALL_ROW + - " and " + historyNotOlderThan + - " order by " + COL_HISTORY_VISIT_DATE + - " desc limit " + historyItemsLimit; - - try { - storage::SQLQuery select(con->prepare(SQL)); - select.exec(); - - while (select.hasNext()) { - std::shared_ptr hi = createHistoryItem(select); - m_histItems.push_back(hi); - select.next(); - - } - BROWSER_LOGI("History::getHistoryItems - commited"); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg.c_str()); - } - - BROWSER_LOGI("History::getHistoryItems end"); - return m_histItems; -} - -/** - * @throws HistoryException on error - */ -int HistorySQLite::getHistoryItemsCount() -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - return getHistoryItemsCount(&scope); -} - -int HistorySQLite::getHistoryItemsCount(storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::getHistoryItemsAmount begin"); - - int res = 0; - - std::shared_ptr con = transactionScope->database(); - - try { - storage::SQLQuery select(con->prepare(SELECT_HISTORY_COUNT_ID)); - select.exec(); - - bool isRecord = select.hasNext(); - - (void)isRecord; - M_ASSERT(isRecord); - - res = select.getInt(0); - - BROWSER_LOGI("History::getHistoryItemsAmount - commited"); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg.c_str()); - } - - BROWSER_LOGI("History::getHistoryItemsAmount end"); - - return res; -} - -/** - * @throws HistoryException on error - */ -int HistorySQLite::getHistoryVisitCounter(const std::string & url) -{ - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_HISTORY)); - return getHistoryVisitCounter(url, &scope); -} - -int HistorySQLite::getHistoryVisitCounter(const std::string & url, storage::SQLTransactionScope * transactionScope) -{ - BROWSER_LOGI("History::getHistoryVisitCounter begin"); - - int res = 0; - - std::shared_ptr con = transactionScope->database(); - - try { - storage::SQLQuery select(con->prepare(SELECT_HISTORY_VISIT_COUNTER)); - select.bindText(1, url); - select.exec(); - - if (select.hasNext()) { - res = select.getInt(0); - } else { - res = -1; // no record was found - } - - BROWSER_LOGI("History::getHistoryVisitCounter - commited"); - } catch (storage::StorageException & e) { - std::string msg = message("SQLite error (code = ", e.getErrorCode(), e.getMessage()); - - BROWSER_LOGE("%s - exception: %s", __PRETTY_FUNCTION__, msg.c_str()); - - throw HistoryException(msg.c_str()); - } - - BROWSER_LOGI("History::getHistoryVisitCounter end"); - - return res; -} - -/** - * @throws StorageExceptionInitialization on error - */ -void HistorySQLite::initDatabaseHistory(const std::string & db_str) -{ - BROWSER_LOGI("History::initDatabaseHistory begin"); - - if (!m_dbHistoryInitialised) { - storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(db_str)); - - try { - StorageService::checkAndCreateTable(&scope, TABLE_FAVICON, DDL_CREATE_TABLE_FAVICON); - StorageService::checkAndCreateTable(&scope, TABLE_HISTORY, DDL_CREATE_TABLE_HISTORY); - - BROWSER_LOGI("History::initDatabaseHistory - done"); - } catch (storage::StorageException & e) { - BROWSER_LOGE("[ERROR] History::initDatabaseHistory (error code - %d): %s", e.getErrorCode(), e.getMessage()); - throw storage::StorageExceptionInitialization(e.getMessage(), - e.getErrorCode()); - } - - m_dbHistoryInitialised = true; - } - - M_ASSERT(m_dbHistoryInitialised); - - BROWSER_LOGI("History::initDatabaseHistory end"); -} - -} -} - diff --git a/services/StorageService/src/HistoryStorage.cpp b/services/StorageService/src/HistoryStorage.cpp deleted file mode 100644 index 88983b6..0000000 --- a/services/StorageService/src/HistoryStorage.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "HistoryStorage.h" - -namespace tizen_browser -{ -namespace services -{ - -HistoryStorage::HistoryStorage() -{ -} - - -HistoryStorage::~HistoryStorage() -{ -} - - -} -} diff --git a/services/StorageService/src/StorageService.cpp b/services/StorageService/src/StorageService.cpp index e5ba582..45930d4 100644 --- a/services/StorageService/src/StorageService.cpp +++ b/services/StorageService/src/StorageService.cpp @@ -114,8 +114,6 @@ void StorageService::init(bool testmode) BROWSER_LOGE("Cannot initialize database %s!", DB_SETTINGS.c_str()); } - initHistoryService("SQLITE", testmode); - m_isInitialized = true; } @@ -290,102 +288,5 @@ void StorageService::setSettingsString(const std::string & key, std::string valu setSettingsValue(key, field); } -/** - * @throws HistoryException on error - */ -void StorageService::addHistoryItem(std::shared_ptr hi) -{ - M_ASSERT(m_history); - m_history->addHistoryItem(hi); -} - -/** - * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. - * - * @throws HistoryException on error - */ -void StorageService::insertOrRefresh(std::shared_ptr hi) -{ - M_ASSERT(m_history); - m_history->insertOrRefresh(hi); -} - -/** - * @throws HistoryException on error - */ -std::shared_ptr StorageService::getFavicon(const std::string & url) -{ - M_ASSERT(m_history); - return m_history->getFavicon(url); -} - -/** - * @throws HistoryException on error - */ -void StorageService::deleteHistory() -{ - M_ASSERT(m_history); - m_history->deleteHistory(); -} - -/** - * @throws HistoryException on error - */ -void StorageService::deleteHistory(const std::string & url) -{ - M_ASSERT(m_history); - m_history->deleteHistory(url); -} - -/** - * @throws HistoryException on error - */ -std::shared_ptr StorageService::getHistoryItem(const std::string & url) -{ - M_ASSERT(m_history); - return m_history->getHistoryItem(url); -} - -/** - * @throws HistoryException on error - */ -HistoryItemVector & StorageService::getHistoryItems(int historyDepthInDays, int maxItems) -{ - M_ASSERT(m_history); - return m_history->getHistoryItems(historyDepthInDays, maxItems); -} - -/** - * @throws HistoryException on error - */ -int StorageService::getHistoryItemsCount() -{ - M_ASSERT(m_history); - return m_history->getHistoryItemsCount(); -} - -/** - * @throws HistoryException on error - */ -int StorageService::getHistoryVisitCounter(const std::string & url) -{ - M_ASSERT(m_history); - return m_history->getHistoryVisitCounter(url); -} - -void StorageService::initHistoryService(const std::string & storage, bool testmode) -{ - // Depend on "storage" variable use an appropriate class as a storage. By default it's a HistorySQLite class. - if (m_history.get() == NULL) { - if (storage.compare("SQLITE") == 0) { - m_history = std::make_shared(); - m_history->init(testmode); - } - } -} - - - - } } -- 2.7.4 From a86c19d6af72a1abdb05a2ca61e19e18a485d1d2 Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Tue, 8 Sep 2015 10:27:34 +0200 Subject: [PATCH 04/16] Switching between mobile/desktop mode per tab. [Issue#] https://bugs.tizen.org/jira/browse/TT-132 [Problem] View mode was set as global flag. [Cause] N/A [Solution] Added flag for each tab to remeber current mode. [Verify] Open new tab (google.com), open settings, switch to mobile mode, page should reload in mobile view. Change-Id: I19a6f1965938930b45f46b076ce030f2fe9c10ed Signed-off-by: Maciej Skrzypkowski --- core/AbstractWebEngine/AbstractWebEngine.h | 18 ++++++--- services/MainUI/DetailPopup.cpp | 7 +++- services/MainUI/DetailPopup.h | 2 +- services/MainUI/MainUI.cpp | 26 ++++++++----- services/MainUI/MainUI.h | 11 ++++-- services/MoreMenuUI/MoreMenuUI.cpp | 30 +++++++-------- services/MoreMenuUI/MoreMenuUI.h | 10 ++--- services/SimpleUI/SimpleUI.cpp | 44 ++++++++++++++-------- services/SimpleUI/SimpleUI.h | 8 ++-- .../WebKitEngineService/WebKitEngineService.cpp | 29 +++++++------- services/WebKitEngineService/WebKitEngineService.h | 9 ++--- services/WebKitEngineService/WebView.cpp | 21 +++++++---- services/WebKitEngineService/WebView.h | 17 ++++++--- 13 files changed, 137 insertions(+), 95 deletions(-) diff --git a/core/AbstractWebEngine/AbstractWebEngine.h b/core/AbstractWebEngine/AbstractWebEngine.h index 8416229..ea0e663 100644 --- a/core/AbstractWebEngine/AbstractWebEngine.h +++ b/core/AbstractWebEngine/AbstractWebEngine.h @@ -132,9 +132,10 @@ public: /** * Adds new tab * @param uri if not empty opens specified uri + * @param desktopMode true if desktop mode, false if mobile mode * @return TabId of created tab */ - virtual TabId addTab(const std::string & uri = std::string(), const TabId * openerId = NULL) = 0; + virtual TabId addTab(const std::string & uri = std::string(), const TabId * openerId = NULL, bool desktopMode = true) = 0; /** * @param tab id @@ -257,14 +258,21 @@ public: virtual void backButtonClicked() const = 0; /** - * @brief Switch view to mobile + * @brief Switch current view to mobile mode */ - virtual void switchToMobileView() = 0; + virtual void switchToMobileMode() = 0; /** - * @brief Switch view to desktop + * @brief Switch current view to desktop mode */ - virtual void switchToDesktopView() = 0; + virtual void switchToDesktopMode() = 0; + + /** + * @brief Check if desktop mode is enabled for current view + * + * @return true if desktop mode is enabled + */ + virtual bool isDesktopMode() const = 0; /** * FavIcon of current page changed diff --git a/services/MainUI/DetailPopup.cpp b/services/MainUI/DetailPopup.cpp index f3d2ced..4aa5604 100644 --- a/services/MainUI/DetailPopup.cpp +++ b/services/MainUI/DetailPopup.cpp @@ -75,7 +75,6 @@ void DetailPopup::createLayout(Evas_Object *parent) evas_object_show(m_layout); } - void DetailPopup::show(Evas_Object *parent, std::shared_ptr currItem, std::shared_ptr prevItems) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -86,6 +85,10 @@ void DetailPopup::show(Evas_Object *parent, std::shared_ptr(data); dp->hide(); - dp->m_mainUI->openURLInNewTab(dp->m_item); + dp->openURLInNewTab(dp->m_item, dp->m_mainUI->isDesktopMode()); } char* DetailPopup::_get_history_link_text(void* data, Evas_Object* obj, const char* part) diff --git a/services/MainUI/DetailPopup.h b/services/MainUI/DetailPopup.h index 8d24a51..1ad8a02 100644 --- a/services/MainUI/DetailPopup.h +++ b/services/MainUI/DetailPopup.h @@ -38,7 +38,7 @@ namespace base_ui{ */ void show(Evas_Object *parent, std::shared_ptr currItem, std::shared_ptr prevItems); - boost::signals2::signal)> openURLInNewTab; + boost::signals2::signal, bool)> openURLInNewTab; static const int HISTORY_ITEMS_NO; private: diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index 74a2c52..6dbdbbc 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -130,6 +130,7 @@ void MainUI::show(Evas_Object* parent) Evas_Object* MainUI::createQuickAccessLayout(Evas_Object* parent) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + m_desktopMode = true; Evas_Object* layout = elm_layout_add(parent); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -429,16 +430,6 @@ Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, c return nullptr; } - -void MainUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) -{ - Elm_Object_Item * selected = reinterpret_cast(event_info); - HistoryItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - MainUI * self = reinterpret_cast(data); - - self->openURLInNewTab(itemData->item); -} - void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) { HistoryItemData * itemData = reinterpret_cast(data); @@ -544,5 +535,20 @@ void MainUI::setEmptyView(bool empty) } } +bool MainUI::isDesktopMode() const +{ + return m_desktopMode; +} + +void MainUI::setDesktopMode(bool mode) +{ + m_desktopMode = mode; +} + +DetailPopup& MainUI::getDetailPopup() +{ + return m_detailPopup; +} + } } diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 352051d..667a844 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -49,13 +49,15 @@ public: void showBookmarks(); void clearItems(); void openDetailPopup(std::shared_ptr currItem, std::shared_ptr prevItems); + bool isDesktopMode() const; + void setDesktopMode(bool mode); + DetailPopup & getDetailPopup(); void addHistoryItem(std::shared_ptr); void addHistoryItems(std::shared_ptr); void addBookmarkItem(std::shared_ptr); void addBookmarkItems(std::vector >); - boost::signals2::signal)> openURLInNewTab; boost::signals2::signal, int)> mostVisitedTileClicked; boost::signals2::signal mostVisitedClicked; boost::signals2::signal bookmarkClicked; @@ -63,8 +65,8 @@ public: static const int MAX_TILE_WIDTH; static const int MAX_TILE_HEIGHT; -private: +private: void createItemClasses(); Evas_Object* createQuickAccessLayout(Evas_Object *parent); @@ -82,11 +84,12 @@ private: static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); void setEmptyView(bool empty); + void showNoHistoryLabel(); static void _mostVisited_clicked(void * data, Evas_Object * obj, void * event_info); static void _bookmark_clicked(void * data, Evas_Object * obj, void * event_info); static void _bookmark_manager_clicked(void * data, Evas_Object * obj, void * event_info); -private: + Evas_Object *m_parent; Evas_Object *m_layout; Evas_Object *m_bookmarksView; @@ -107,7 +110,7 @@ private: std::map m_map_bookmark_views; bool m_gengridSetup; std::string edjFilePath; - void showNoHistoryLabel(); + bool m_desktopMode; }; } diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index 8279289..088ae44 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -48,7 +48,7 @@ MoreMenuUI::MoreMenuUI() : m_gengrid(NULL) , m_parent(NULL) , m_item_class(NULL) - , m_desktopView(true) + , m_desktopMode(true) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_edjFilePath = EDJE_DIR; @@ -59,10 +59,11 @@ MoreMenuUI::~MoreMenuUI() { } -void MoreMenuUI::show(Evas_Object* parent) +void MoreMenuUI::show(Evas_Object* parent, bool desktopMode) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_parent = parent; + m_desktopMode = desktopMode; elm_theme_extension_add(NULL, m_edjFilePath.c_str()); m_mm_layout = elm_layout_add(parent); elm_layout_file_set(m_mm_layout, m_edjFilePath.c_str(), "moremenu-layout"); @@ -234,9 +235,9 @@ void MoreMenuUI::addItems() for (int i = 0; i <= EXIT_BROWSER; i++) { ItemType type = static_cast(i); // take proper image for desktop/mobile view - if (type == ItemType::VIEW_DESKTOP_WEB && m_desktopView) + if (type == ItemType::VIEW_DESKTOP_WEB && m_desktopMode) continue; - if (type == ItemType::VIEW_MOBILE_WEB && !m_desktopView) + if (type == ItemType::VIEW_MOBILE_WEB && !m_desktopMode) continue; MoreMenuItemData *itemData = new MoreMenuItemData(); @@ -441,14 +442,16 @@ 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(); + itemData->moreMenuUI->switchToMobileMode(); + itemData->moreMenuUI->m_desktopMode = false; + itemData->moreMenuUI->closeMoreMenuClicked(std::string()); + itemData->moreMenuUI->clearItems(); break; case VIEW_DESKTOP_WEB: - itemData->moreMenuUI->switchToDesktopView(); - itemData->moreMenuUI->m_desktopView = true; - itemData->moreMenuUI->refreshGengrid(); + itemData->moreMenuUI->switchToDesktopMode(); + itemData->moreMenuUI->m_desktopMode = true; + itemData->moreMenuUI->closeMoreMenuClicked(std::string()); + itemData->moreMenuUI->clearItems(); break; case SHARE: break; @@ -477,13 +480,6 @@ 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__); diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index a6df318..4bbf489 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -61,7 +61,7 @@ class BROWSER_EXPORT MoreMenuUI public: MoreMenuUI(); ~MoreMenuUI(); - void show(Evas_Object *main_layout); + void show(Evas_Object *main_layout, bool desktopMode); void showCurrentTab(); virtual std::string getName(); void addItems(); @@ -80,8 +80,8 @@ public: boost::signals2::signal historyUIClicked; boost::signals2::signal settingsClicked; boost::signals2::signal closeMoreMenuClicked; - boost::signals2::signal switchToMobileView; - boost::signals2::signal switchToDesktopView; + boost::signals2::signal switchToMobileMode; + boost::signals2::signal switchToDesktopMode; 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); @@ -95,8 +95,6 @@ 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); @@ -117,7 +115,7 @@ private: std::string m_folderName; bool m_gengridSetup; Evas_Object *m_icon; - bool m_desktopView; + bool m_desktopMode; }; } diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 1b0e8d5..d2f532e 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -48,6 +48,7 @@ #include "boost/date_time/posix_time/posix_time.hpp" #include "NetworkErrorHandler.h" #include "SqlStorage.h" +#include "DetailPopup.h" namespace tizen_browser{ @@ -308,7 +309,7 @@ int SimpleUI::exec(const std::string& _url) M_ASSERT(m_mainUI.get()); m_historyService->historyAllDeleted.connect(boost::bind(&tizen_browser::base_ui::MainUI::clearHistoryGenlist, m_mainUI.get())); - m_mainUI->openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this,_1)); + m_mainUI->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); m_mainUI->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2)); m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); @@ -486,7 +487,6 @@ void SimpleUI::switchToTab(const tizen_browser::basic_webengine::TabId& tabId) bool SimpleUI::isHomePageActive() { - BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive); return m_isHomePageActive; } @@ -540,9 +540,9 @@ void SimpleUI::checkTabId(const tizen_browser::basic_webengine::TabId& id){ } } -void SimpleUI::openNewTab(const std::string &uri) +void SimpleUI::openNewTab(const std::string &uri, bool desktopMode) { - switchToTab(m_webEngine->addTab(uri)); + switchToTab(m_webEngine->addTab(uri, nullptr, desktopMode)); } void SimpleUI::closeTab(){ @@ -595,8 +595,9 @@ void SimpleUI::onHistoryAdded(std::shared_ptr historyItem) +void SimpleUI::onOpenURLInNewTab(std::shared_ptr historyItem, bool desktopMode) { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); std::string historyAddress = historyItem->getUrl(); if(m_historyUI) { // TODO: remove this section when naviframes will be available m_historyUI->clearItems(); @@ -607,7 +608,7 @@ void SimpleUI::onOpenURLInNewTab(std::shared_ptrclearItems(); m_moreMenuUI = nullptr; } - openNewTab(historyAddress); + openNewTab(historyAddress, desktopMode); } void SimpleUI::onMostVisitedTileClicked(std::shared_ptr< services::HistoryItem > historyItem, int itemsNumber) @@ -1123,7 +1124,7 @@ void SimpleUI::showHistoryUI(const std::string& str) M_ASSERT(m_historyUI); m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1)); m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); - m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this,_1)); + m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true)); // desktop mode as default m_historyUI->addHistoryItems(getHistory()); m_historyUI->show(m_window.get()); } @@ -1166,7 +1167,7 @@ void SimpleUI::closeSettingsUI(const std::string& str) void SimpleUI::showMoreMenu() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - bool current_tab_as_new_tab = isHomePageActive() || (m_historyService->getHistoryItemsCount() == 0); + bool desktopMode = isHomePageActive() ? m_mainUI->isDesktopMode() : m_webEngine->isDesktopMode(); if(!m_moreMenuUI){ m_moreMenuUI = std::dynamic_pointer_cast @@ -1183,13 +1184,13 @@ 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->switchToMobileMode.connect(boost::bind(&SimpleUI::switchToMobileMode, this)); + m_moreMenuUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, 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)); - m_moreMenuUI->show(m_window.get()); + m_moreMenuUI->show(m_window.get(), desktopMode); m_moreMenuUI->showCurrentTab(); m_moreMenuUI->setFavIcon(m_webEngine->getFavicon()); m_moreMenuUI->setWebTitle(m_webEngine->getTitle()); @@ -1204,13 +1205,26 @@ void SimpleUI::closeMoreMenu(const std::string& str) m_moreMenuUI.reset(); } -void SimpleUI::switchToMobileView() +void SimpleUI::switchToMobileMode() { - m_webEngine->switchToMobileView(); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (!isHomePageActive()) { + m_webEngine->switchToMobileMode(); + m_webEngine->reload(); + } else { + m_mainUI->setDesktopMode(false); + } } -void SimpleUI::switchToDesktopView() { - m_webEngine->switchToDesktopView(); +void SimpleUI::switchToDesktopMode() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (!isHomePageActive()) { + m_webEngine->switchToDesktopMode(); + m_webEngine->reload(); + } else { + m_mainUI->setDesktopMode(true); + } } void SimpleUI::showBookmarkManagerMenu() diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index f8faab1..8c13280 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -112,7 +112,7 @@ private: void updateURIBarView(); void updateView(); - void openNewTab(const std::string &uri); + void openNewTab(const std::string &uri, bool desktopMode = true); void switchToTab(const tizen_browser::basic_webengine::TabId& tabId); void newTabClicked(const std::string &); void tabClicked(const tizen_browser::basic_webengine::TabId& tabId); @@ -133,7 +133,7 @@ private: void onHistoryAdded(std::shared_ptr historyItem); void onHistoryRemoved(const std::string& uri); - void onOpenURLInNewTab(std::shared_ptr historyItem); + void onOpenURLInNewTab(std::shared_ptr historyItem, bool desktopMode); void onMostVisitedTileClicked(std::shared_ptr historyItem, int itemsNumber); void onClearHistoryClicked(const std::string&); @@ -230,8 +230,8 @@ private: void closeTabUI(const std::string& str); void showMoreMenu(); void closeMoreMenu(const std::string& str); - void switchToMobileView(); - void switchToDesktopView(); + void switchToMobileMode(); + void switchToDesktopMode(); void showHistoryUI(const std::string& str); void closeHistoryUI(const std::string&); void showMainUI(); diff --git a/services/WebKitEngineService/WebKitEngineService.cpp b/services/WebKitEngineService/WebKitEngineService.cpp index 2506a63..f88b5da 100644 --- a/services/WebKitEngineService/WebKitEngineService.cpp +++ b/services/WebKitEngineService/WebKitEngineService.cpp @@ -45,7 +45,6 @@ WebKitEngineService::WebKitEngineService() , m_privateMode(false) , m_guiParent(nullptr) , m_currentTabId(TabId::NONE) - , m_desktopView(true) { m_mostRecentTab.clear(); m_tabs.clear(); @@ -279,7 +278,7 @@ std::vector > WebKitEngineService::getTabContents() return result; } -TabId WebKitEngineService::addTab(const std::string & uri, const TabId * openerId) +TabId WebKitEngineService::addTab(const std::string & uri, const TabId * openerId, bool desktopMode) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -287,9 +286,9 @@ TabId WebKitEngineService::addTab(const std::string & uri, const TabId * openerI TabId newTabId; WebViewPtr p = std::make_shared(reinterpret_cast(m_guiParent), newTabId); if (openerId) - p->init(m_desktopView, getTabView(*openerId)); + p->init(desktopMode, getTabView(*openerId)); else - p->init(m_desktopView); + p->init(desktopMode); m_tabs[newTabId] = p; @@ -508,20 +507,22 @@ void WebKitEngineService::backButtonClicked() const } } -void WebKitEngineService::switchToDesktopView() +void WebKitEngineService::switchToDesktopMode() { - m_desktopView = true; - for (auto it = m_tabs.begin(); it != m_tabs.end(); ++it) { - it->second->switchToDesktopView(); - } + M_ASSERT(m_currentWebView); + m_currentWebView->switchToDesktopMode(); } -void WebKitEngineService::switchToMobileView() +void WebKitEngineService::switchToMobileMode() { - m_desktopView = false; - for (auto it = m_tabs.begin(); it != m_tabs.end(); ++it) { - it->second->switchToMobileView(); - } + M_ASSERT(m_currentWebView); + m_currentWebView->switchToMobileMode(); +} + +bool WebKitEngineService::isDesktopMode() const +{ + M_ASSERT(m_currentWebView); + return m_currentWebView->isDesktopMode(); } } /* end of webkitengine_service */ diff --git a/services/WebKitEngineService/WebKitEngineService.h b/services/WebKitEngineService/WebKitEngineService.h index 5c0f47d..4f586cb 100644 --- a/services/WebKitEngineService/WebKitEngineService.h +++ b/services/WebKitEngineService/WebKitEngineService.h @@ -77,7 +77,7 @@ public: * @param uri * @return TabId of created tab */ - TabId addTab(const std::string & uri = std::string(), const TabId * openerId = NULL); + TabId addTab(const std::string & uri = std::string(), const TabId * openerId = NULL, bool desktopMode = true); Evas_Object* getTabView(TabId id); bool switchToTab(TabId); bool closeTab(); @@ -159,8 +159,9 @@ public: */ void backButtonClicked() const; - void switchToMobileView(); - void switchToDesktopView(); + void switchToMobileMode(); + void switchToDesktopMode(); + bool isDesktopMode() const; private: // callbacks from WebView @@ -209,8 +210,6 @@ private: std::list m_mostRecentTab; // recently added tabs first std::list m_chronoTabs; - // true if desktop view is enabled, false if mobile - bool m_desktopView; }; } /* end of webkitengine_service */ diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 603543c..3c5c5d4 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -83,7 +83,7 @@ WebView::~WebView() ewk_context_delete(m_ewkContext); } -void WebView::init(bool desktopView, Evas_Object * opener) +void WebView::init(bool desktopMode, Evas_Object * opener) { #if defined(USE_EWEBKIT) m_ewkView = ewk_view_add_with_context(evas_object_evas_get(m_parent), m_ewkContext); @@ -94,10 +94,11 @@ void WebView::init(bool desktopView, 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); - if (desktopView) - switchToDesktopView(); - else - switchToMobileView(); + if (desktopMode) { + switchToDesktopMode(); + } else { + switchToMobileMode(); + } //\todo: when value is other than 1.0, scroller is located improperly // ewk_view_device_pixel_ratio_set(m_ewkView, 1.0f); @@ -877,14 +878,20 @@ void WebView::searchOnWebsite(const std::string & searchString, int flags) BROWSER_LOGD("Ewk search; word: %s, result: %d", searchString.c_str(), result); } -void WebView::switchToDesktopView() { +void WebView::switchToDesktopMode() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); int res = ewk_view_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT); + m_desktopMode = true; } -void WebView::switchToMobileView() { +void WebView::switchToMobileMode() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); int res = ewk_view_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT_MOBILE); + m_desktopMode = false; +} + +bool WebView::isDesktopMode() const { + return m_desktopMode; } } /* namespace webkitengine_service */ diff --git a/services/WebKitEngineService/WebView.h b/services/WebKitEngineService/WebView.h index 846af9c..98b3e65 100644 --- a/services/WebKitEngineService/WebView.h +++ b/services/WebKitEngineService/WebView.h @@ -41,7 +41,7 @@ class WebView public: WebView(Evas_Object *, TabId); virtual ~WebView(); - void init(bool desktopView = true, Evas_Object * opener = NULL); + void init(bool desktopMode, Evas_Object * opener = NULL); void setURI(const std::string &); @@ -112,12 +112,19 @@ public: /** * @brief Change user agent to desktop type */ - void switchToDesktopView(); + void switchToDesktopMode(); /** * @brief Change user agent to mobile type */ - void switchToMobileView(); + void switchToMobileMode(); + + /** + * @brief Check if desktop mode is enabled + * + * @return true if desktop mode is enabled + */ + bool isDesktopMode() const; /** * @brief Get favicon of URL @@ -194,8 +201,8 @@ private: bool m_isLoading; double m_loadProgress; bool m_loadError; - - + // true if desktop view is enabled, false if mobile + bool m_desktopMode; config::DefaultConfig config; -- 2.7.4 From 24206804e050da8f6e007a7a84ec48bea1f70492 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Tue, 8 Sep 2015 09:44:29 +0200 Subject: [PATCH 05/16] Fixed radio selection in settings [Issue] https://bugs.tizen.org/jira/browse/TT-154 [Problem] Cannot select any item in radio list at Web contents Sharing section. [Cause] Every radio was set to one group. Missing state valuesof radios. [Solution] Added enums with state values and separate radio buttons within 3 lists. [Verify] Launch browser > More Menu > Settings > Obs You should be able to select any radio in settings. Change-Id: I894d6527770c51066be60372cc3e69646c21ff82 --- services/SettingsUI/SettingsUI.cpp | 16 ++++++++++++++-- services/SettingsUI/SettingsUI.h | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/services/SettingsUI/SettingsUI.cpp b/services/SettingsUI/SettingsUI.cpp index 2b68784..0799958 100644 --- a/services/SettingsUI/SettingsUI.cpp +++ b/services/SettingsUI/SettingsUI.cpp @@ -156,35 +156,47 @@ void SettingsUI::showSettingsPage() elm_check_state_set(history_checkbox, EINA_TRUE); edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "history_cb_text", __checkbox_label_click_cb, (void*)id); - Evas_Object *accept_all_rb = elm_radio_add(m_items_layout); elm_object_style_set(accept_all_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "accept_all_rb", accept_all_rb); + Evas_Object *sharingRequestGroup = accept_all_rb; + elm_radio_state_value_set(accept_all_rb, SR_ACCEPT_ALL); Evas_Object *ask_rb = elm_radio_add(m_items_layout); elm_object_style_set(ask_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "ask_rb", ask_rb); + elm_radio_group_add(ask_rb, sharingRequestGroup); + elm_radio_state_value_set(ask_rb, SR_ASK); Evas_Object *sr_disable_rb = elm_radio_add(m_items_layout); elm_object_style_set(sr_disable_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "sr_disable_rb", sr_disable_rb); + elm_radio_group_add(sr_disable_rb, sharingRequestGroup); + elm_radio_state_value_set(sr_disable_rb, SR_DISABLE); Evas_Object *bs_enable_rb = elm_radio_add(m_items_layout); elm_object_style_set(bs_enable_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "bs_enable_rb", bs_enable_rb); + Evas_Object *bookmarkSyncGroup = bs_enable_rb; + elm_radio_state_value_set(bs_enable_rb, BS_ENABLE); Evas_Object *bs_disable_rb = elm_radio_add(m_items_layout); elm_object_style_set(bs_disable_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "bs_disable_rb", bs_disable_rb); + elm_radio_group_add(bs_disable_rb, bookmarkSyncGroup); + elm_radio_state_value_set(bs_disable_rb, BS_DISABLE); Evas_Object *ts_enable_rb = elm_radio_add(m_items_layout); elm_object_style_set(ts_enable_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "ts_enable_rb", ts_enable_rb); + Evas_Object *tabSyncGroup = ts_enable_rb; + elm_radio_state_value_set(ts_enable_rb, TS_ENABLE); Evas_Object *ts_disable_rb = elm_radio_add(m_items_layout); elm_object_style_set(ts_disable_rb, "settings_radio"); elm_layout_content_set(m_items_layout, "ts_disable_rb", ts_disable_rb); - + elm_radio_group_add(ts_disable_rb, tabSyncGroup); + elm_radio_state_value_set(ts_disable_rb, TS_DISABLE); } Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) diff --git a/services/SettingsUI/SettingsUI.h b/services/SettingsUI/SettingsUI.h index 8adbf4d..70ffab2 100644 --- a/services/SettingsUI/SettingsUI.h +++ b/services/SettingsUI/SettingsUI.h @@ -63,7 +63,6 @@ private: static void _closetabs_clicked(void * data, Evas_Object * obj, void * event_info); static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info); -private: Evas_Object *m_settings_layout; Evas_Object *m_genListActionBar; Evas_Object *m_scroller; @@ -73,7 +72,19 @@ private: Elm_Gengrid_Item_Class * m_item_class; std::string m_edjFilePath; - + enum SharingRequest { + SR_DISABLE = 0, + SR_ASK, + SR_ACCEPT_ALL, + }; + enum BookmarkSync { + BS_DISABLE = 0, + BS_ENABLE + }; + enum TabSync { + TS_DISABLE = 0, + TS_ENABLE + }; }; } -- 2.7.4 From 7d65e7f2db89b41bec2a6d89283921bf3515a95e Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Tue, 8 Sep 2015 16:04:20 +0200 Subject: [PATCH 06/16] Fixed crash while loading page without title. [Issue] https://bugs.tizen.org/jira/browse/TT-162 [Problem] Browser crashed while loading page. [Cause] There was no check if page title is empty while comparing. [Solution] Changed compering to URL, added check if it's empty. [Verify] Launch browser > go to: http://jmajnert.github.io/tests/localStorage_test/localStoragePersistance.html refresh page > close browser > open again > go to previous site. Browser shouldn't crash. Change-Id: Icc19ad7a327d97fe6ff79777b0fc819189cf660a Signed-off-by: Maciej Skrzypkowski --- services/HistoryService/HistoryService.cpp | 64 ++++++++---------------------- services/HistoryService/HistoryService.h | 4 +- 2 files changed, 18 insertions(+), 50 deletions(-) diff --git a/services/HistoryService/HistoryService.cpp b/services/HistoryService/HistoryService.cpp index b5826ef..1d93507 100644 --- a/services/HistoryService/HistoryService.cpp +++ b/services/HistoryService/HistoryService.cpp @@ -88,24 +88,9 @@ int HistoryService::getHistoryItemsCount(){ return count; } -static int __get_duplicated_ids_p(int **ids, int *count, const int limit, const int offset, - const bp_history_offset order_column_offset, const int ordering, - const bp_history_offset check_column_offset, - const char *keyword, const int is_like) -{ - bp_history_rows_cond_fmt conds; - conds.limit = limit; - conds.offset = offset; - conds.ordering = ordering; - conds.order_offset = order_column_offset; - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_ALL; - - return bp_history_adaptor_get_cond_ids_p(ids, count, &conds, check_column_offset, keyword, is_like); -} - -bool isDuplicate(const char* title) +bool HistoryService::isDuplicate(const char* url) const { + M_ASSERT(url); int *ids=nullptr; int count=0; bp_history_rows_cond_fmt conds; @@ -120,21 +105,22 @@ bool isDuplicate(const char* title) BROWSER_LOGD("Error! Could not get ids!"); } - bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_DATE_CREATED); - for(int i = 0; i< count; i++){ + for (int i = 0; i < count; i++) { bp_history_info_fmt history_info; - bp_history_adaptor_get_info(ids[i],offset,&history_info); - if(!strcmp(history_info.title, title)) { - int freq; - bp_history_adaptor_get_frequency(ids[i], &freq); - bp_history_adaptor_set_frequency(ids[i], freq + 1); - bp_history_adaptor_set_date_visited(ids[i],-1); - return true; + bp_history_adaptor_get_info(ids[i], offset, &history_info); + if (!history_info.url) { + BROWSER_LOGD("Warning: history entry without url!"); + } else if (!strcmp(history_info.url, url)) { + int freq; + bp_history_adaptor_get_frequency(ids[i], &freq); + bp_history_adaptor_set_frequency(ids[i], freq + 1); + bp_history_adaptor_set_date_visited(ids[i],-1); + return true; } } return false; - } std::shared_ptr HistoryService::getHistoryAll() @@ -284,7 +270,7 @@ void HistoryService::addHistoryItem(std::shared_ptr his,std::shared his->setFavIcon(his->getFavIcon()); his->setThumbnail(thumbnail); - if(isDuplicate(his->getTitle().c_str())) + if (isDuplicate(his->getUrl().c_str())) return; int id = -1; @@ -330,14 +316,6 @@ void HistoryService::addHistoryItem(std::shared_ptr his,std::shared historyAdded(his); } - -void HistoryService::insertOrRefresh(std::shared_ptr hi) { - /** - * No browser- provider implementation till now. Needs to be done - */ - //getStorageManager()->insertOrRefresh(hi); -} - void HistoryService::clearAllHistory() { bp_history_adaptor_reset(); @@ -357,7 +335,9 @@ int HistoryService::getHistoryId(const std::string & url) int *ids = nullptr; int ids_count = 0; int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0); - if (ids_count!=0){ + if (ret < 0) { + BROWSER_LOGD("Error! Could not get ids!"); + } else if (ids_count != 0) { int i = *ids; free(ids); return i; @@ -390,9 +370,7 @@ std::shared_ptr HistoryService::getHistoryItem(int * ids, int idNum int m_year = item_time_info->tm_year; int m_month = item_time_info->tm_mon + 1; - int m_day = item_time_info->tm_yday; int m_month_day = item_time_info->tm_mday; - int m_date = date; int min = item_time_info->tm_min; int hour = item_time_info->tm_hour; int sec = item_time_info->tm_sec; @@ -465,13 +443,5 @@ std::shared_ptr HistoryService::getHistoryItems(bp_history_da return ret_history_list; } -int HistoryService::getHistoryVisitCounter(const std::string & url) -{ /** - * No browser- provider implementation till now. Needs to be done - */ -// return getStorageManager()->getHistoryVisitCounter(url); - -} - } } diff --git a/services/HistoryService/HistoryService.h b/services/HistoryService/HistoryService.h index f8e10e1..7764bd3 100644 --- a/services/HistoryService/HistoryService.h +++ b/services/HistoryService/HistoryService.h @@ -44,7 +44,6 @@ public: int getHistoryId(const std::string & url); void addHistoryItem(std::shared_ptr hi, std::shared_ptr thumbnail=std::shared_ptr()); - void insertOrRefresh(std::shared_ptr hi); void clearAllHistory(); void clearURLHistory(const std::string & url); std::shared_ptr getHistoryItem(const std::string & url); @@ -58,7 +57,6 @@ public: std::shared_ptr getMostVisitedHistoryItems(); std::shared_ptr getHistoryItemsByURL(const std::string & url, int maxItems); int getHistoryItemsCount(); - int getHistoryVisitCounter(const std::string & url); void setStorageServiceTestMode(bool testmode = true); boost::signals2::signalhistoryEmpty; @@ -79,7 +77,7 @@ private: std::shared_ptr getHistoryItem(int* ids, int idNumber = 0); std::shared_ptr getHistoryItems(bp_history_date_defs period = BP_HISTORY_DATE_TODAY); std::shared_ptr getStorageManager(); - + bool isDuplicate(const char* url) const; }; } -- 2.7.4 From 5b81863b07ce0a44a3edcf285155248b473bcd51 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Thu, 10 Sep 2015 15:55:02 +0200 Subject: [PATCH 07/16] Fixed bookmark creation [Issue#] N/A [Problem] Bookmarks couldn't be created [Cause] Variables used in 'bp_bookmark_adaptor_easy_create()' had some not initialized values [Solution] std::memset before passing its reference [Verify] Check if bookmarks can be created Change-Id: I861e70a6f6fa8e980423eb2721899421de9c485b --- services/BookmarkService/BookmarkService.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index 322e826..edb3469 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -102,6 +102,8 @@ std::shared_ptr BookmarkService::addToBookmarks( } bp_bookmark_info_fmt info; + + std::memset(&info, 0, sizeof(bp_bookmark_info_fmt)); info.type = 0; info.parent = dirId; info.sequence = -1; @@ -457,6 +459,8 @@ int BookmarkService::update_bookmark(int id, const char *title, const char *uri, } } bp_bookmark_info_fmt info; + + std::memset(&info, 0, sizeof(bp_bookmark_info_fmt)); info.type = -1; info.parent = parent_id; info.sequence = order; -- 2.7.4 From 3a188631e8fb54f91fb5f1f17d16f95af299b955 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Wed, 9 Sep 2015 15:57:01 +0200 Subject: [PATCH 08/16] TT-101 Fixed URL bar update and added doc icon [Issue#] https://bugs.tizen.org/jira/browse/TT-101 [Problem] URL bar shows wrong URL after back/forward action [Cause] Multiple URL changes and lack of direct connection to proper SimpleURI method [Solution] Added direct connection to SimpleURI::changeUri and added doc icon for pages not loaded completely (placeholder) [Verify] Check if back/forward action causes correct URL update Change-Id: Ibc5cad20397328789d3bfcc07e0852d41d1a87b7 --- services/MoreMenuUI/MoreMenuUI.cpp | 22 ++++++++++++++++++++-- services/MoreMenuUI/MoreMenuUI.h | 2 +- services/MoreMenuUI/edc/MoreMenu.edc | 1 + services/MoreMenuUI/images/ico_url.png | Bin 0 -> 4317 bytes services/SimpleUI/SimpleUI.cpp | 20 ++++++++++++++------ services/SimpleUI/SimpleUI.h | 2 +- services/SimpleURI/SimpleURI.cpp | 2 +- services/SimpleURI/SimpleURI.h | 2 +- services/WebKitEngineService/WebView.cpp | 4 +--- services/WebKitEngineService/WebView.h | 2 +- 10 files changed, 41 insertions(+), 16 deletions(-) create mode 100755 services/MoreMenuUI/images/ico_url.png diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index 088ae44..7489ab6 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -119,15 +119,33 @@ void MoreMenuUI::showCurrentTab() void MoreMenuUI::setFavIcon(std::shared_ptr favicon) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(favicon && favicon->imageType != tools::BrowserImage::ImageTypeNoImage){ + if(favicon && favicon->imageType != tools::BrowserImage::ImageTypeNoImage) { + if(m_icon) + evas_object_del(m_icon); + m_icon = tizen_browser::tools::EflTools::getEvasImage(favicon, m_current_tab_bar); - if(m_icon){ + if(m_icon) { evas_object_size_hint_weight_set(m_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(m_icon, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_object_part_content_set(m_current_tab_bar, "favicon", m_icon); evas_object_show(m_icon); } } + else { + setDocIcon(); + } +} + +void MoreMenuUI::setDocIcon() +{ + if(m_icon) + evas_object_del(m_icon); + + m_icon = elm_icon_add(m_mm_layout); + elm_image_file_set(m_icon, m_edjFilePath.c_str(), "ico_url.png"); + evas_object_size_hint_weight_set(m_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_part_content_set(m_current_tab_bar, "favicon", m_icon); } void MoreMenuUI::setWebTitle(const std::string& title) diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 4bbf489..06e4017 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -88,6 +88,7 @@ private: static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static void _exitClicked(); + void setDocIcon(); void newFolderPopup(std::string); void NewFolderCreate(Evas_Object * popup_content); void CancelClicked(Evas_Object * popup_content); @@ -101,7 +102,6 @@ private: static void __cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); static void __cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); -private: Evas_Object *m_current_tab_bar; std::shared_ptr m_new_folder_popup; Evas_Object *m_mm_layout; diff --git a/services/MoreMenuUI/edc/MoreMenu.edc b/services/MoreMenuUI/edc/MoreMenu.edc index 553416b..fcfd99a 100644 --- a/services/MoreMenuUI/edc/MoreMenu.edc +++ b/services/MoreMenuUI/edc/MoreMenu.edc @@ -54,6 +54,7 @@ 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") +RESOURCE_IMAGE_LOSSY("ico_url.png") #define WIDTH 1920 #define HEIGHT 366 diff --git a/services/MoreMenuUI/images/ico_url.png b/services/MoreMenuUI/images/ico_url.png new file mode 100755 index 0000000000000000000000000000000000000000..fa4625fc1f1a8030525bc08442f52c814ee9ad1f GIT binary patch literal 4317 zcmV<35F+o1P)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^Ra2?+}vI|Pk#IRF3#4@pEp zRA}Dqo6C<}R}sd)ug<+a-EBJ)5<8IiDaT4A7AWjNV#NX}OI9q95MqG@2%O-6ADMWP z$i^fg2qB`ZS+Qk_6bXdHe}E7oi98C4lGC*A!qfRYpeFwI>bl9U#j?heU|wY9Z*lGkT0zqv4T<|lEa!0xf@?#BU~0^pKI z03azzwim$7BPhAty^wT`4$s|p?`_a0tPStgFpt$KjnXK&qDgYgKKU@_3r^>Q_^8DiJA3ue7aw0d z^W*Q=BLPkV5=d4gKQ^;}*LA(p?sT%ED5w~>2^=uhZtKS4yr!og&g;7F#uyI)FiDX# zHHK|~n^1-)?kSQ7J;op*zp*eM&c5`k#aCYZd9h>Q+X_vRR(HCc{_MHuYXJ4AMCwm} zey9G&-~Sd#Vz3bd0!ar@rA5!1kP-n3KycS109r-AAIvy);nmkay7-Y@14~P? zvM9r-Rk3PiZeEDnN{MI#w@GmpFN@A6yC;6tDZyU)r$uGJ4$r$7D zkmZlO`G-G-9Ru%Drm=Zv7>E=?$oTBnzbd+a5JLD5fH{yin=Eksi!m)*2f!hhPPqH= zxvTFUy!_j@v+ao1{aT6j)p+gFOnu?y*FNr*Wf7~g@2(R@J|uad*?Jldp#|tr^q3LI z=dWE0vsZq1z1{BCV-G9|d6uv5dl%20t^mxRf93UJb!EALbOhi*Nv$M$4v-LX$R7on zRaMnmUbRNY+6@SCU&c;{IaB#UcYB(igYa9x)FgUzb4t16nI+)2Kjg@X}MpD zM?DzbY%>5$x6siKN$pWe72BA~GWj?o2R zMbbiY@Oqf_{y!|0Lb#pEO&fOdVr+mzmPNDhUIM1O-*e4r78GMdmSrKv_%whgl84k| z3;g_#z9#?+X>NDV=ILL&^h7$PJeuNRoX6!i-U`wu$Nc9CxYz63r^Wr}3Rvr9@&f{F zBl-*;v_+W!Pk<-D6W|H(1b6~G0iFO)fG5Bc;0f>qcmg~Do&ZmP_iEfrgWNWoTKJ$? zSOB4rPgR#(;ib5RQj!L-&}tN!}VU%HaFn-uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1)); + m_webEngine->uriChanged.connect(boost::bind(&SimpleURI::changeUri, m_simpleURI.get(), _1)); m_webEngine->uriChanged.connect(boost::bind(&SimpleUI::webEngineURLChanged, this, _1)); m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::checkTabId,this,_1)); m_webEngine->webViewClicked.connect(boost::bind(&SimpleURI::clearFocus, m_simpleURI.get())); @@ -853,11 +854,9 @@ void SimpleUI::filterURL(const std::string& url) //addBookmarkEnable(false); } -void SimpleUI::webEngineURLChanged(const std::string& url) +void SimpleUI::webEngineURLChanged(const std::string url) { BROWSER_LOGD("webEngineURLChanged:%s", url.c_str()); - - m_simpleURI->changeUri(url); m_simpleURI->clearFocus(); bookmarkCheck(); } @@ -1174,11 +1173,8 @@ void SimpleUI::showMoreMenu() (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); M_ASSERT(m_moreMenuUI); - m_webEngine->favIconChanged.disconnect_all_slots(); m_webEngine->favIconChanged.connect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1)); - m_webEngine->titleChanged.disconnect_all_slots(); m_webEngine->titleChanged.connect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1)); - m_webEngine->uriChanged.disconnect_all_slots(); m_webEngine->uriChanged.connect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1)); m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); @@ -1202,6 +1198,18 @@ void SimpleUI::showMoreMenu() void SimpleUI::closeMoreMenu(const std::string& str) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_webEngine->favIconChanged.disconnect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1)); + m_webEngine->titleChanged.disconnect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1)); + m_webEngine->uriChanged.disconnect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1)); + m_moreMenuUI->bookmarkManagerClicked.disconnect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); + m_moreMenuUI->historyUIClicked.disconnect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); + m_moreMenuUI->settingsClicked.disconnect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); + m_moreMenuUI->closeMoreMenuClicked.disconnect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); + m_moreMenuUI->switchToMobileMode.disconnect(boost::bind(&SimpleUI::switchToMobileMode, this)); + m_moreMenuUI->switchToDesktopMode.disconnect(boost::bind(&SimpleUI::switchToDesktopMode, this)); + m_moreMenuUI->addToBookmarkClicked.disconnect(boost::bind(&SimpleUI::addBookmarkFolders, this)); + m_moreMenuUI->AddBookmarkInput.disconnect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); + m_moreMenuUI->BookmarkFolderCreated.disconnect(boost::bind(&SimpleUI::newFolderMoreMenu, this,_1,_2)); m_moreMenuUI.reset(); } diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 8c13280..476d5dd 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -195,7 +195,7 @@ private: * For filtered addresses we need to hide real URI so the user would be confused. * and this is a back function that checks if address emited from browser should be changed. */ - void webEngineURLChanged(const std::string& url); + void webEngineURLChanged(const std::string url); void onmostHistoryvisitedClicked(); void onBookmarkvisitedClicked(); /** diff --git a/services/SimpleURI/SimpleURI.cpp b/services/SimpleURI/SimpleURI.cpp index cc07c13..2c5b9ba 100644 --- a/services/SimpleURI/SimpleURI.cpp +++ b/services/SimpleURI/SimpleURI.cpp @@ -96,7 +96,7 @@ Evas_Object * SimpleURI::getContent(Evas_Object *main_layout) return m_entry_layout; } -void SimpleURI::changeUri(const std::string &newUri) +void SimpleURI::changeUri(const std::string newUri) { BROWSER_LOGD("%s: newUri=%s", __func__, newUri.c_str()); elm_entry_entry_set(m_entry, elm_entry_utf8_to_markup(newUri.c_str())); diff --git a/services/SimpleURI/SimpleURI.h b/services/SimpleURI/SimpleURI.h index ad268c5..77ec107 100644 --- a/services/SimpleURI/SimpleURI.h +++ b/services/SimpleURI/SimpleURI.h @@ -50,7 +50,7 @@ public: Evas_Object * getContent() { return m_entry_layout;}; - void changeUri(const std::string&); + void changeUri(const std::string); boost::signals2::signal uriChanged; void setFavIcon(std::shared_ptr favicon); diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 3c5c5d4..3355e32 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -616,7 +616,7 @@ void WebView::__urlChanged(void * data, Evas_Object * /* obj */, void * event_in m_webEngine = std::dynamic_pointer_cast, tizen_browser::core::AbstractService>( tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice")); M_ASSERT(m_webEngine); - self->uriChanged(fromChar(reinterpret_cast(event_info))); + self->uriChanged(self->getURI()); self->tabIdChecker(self->m_tabId); } @@ -841,8 +841,6 @@ const TabId& WebView::getTabId(){ std::shared_ptr WebView::getFavicon() { BROWSER_LOGD("%s:%d, TabId: %s", __PRETTY_FUNCTION__, __LINE__, m_tabId.toString().c_str()); - if(faviconImage.get()) - return faviconImage; Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); faviconImage = EflTools::getBrowserImage(favicon); diff --git a/services/WebKitEngineService/WebView.h b/services/WebKitEngineService/WebView.h index 98b3e65..1672438 100644 --- a/services/WebKitEngineService/WebView.h +++ b/services/WebKitEngineService/WebView.h @@ -134,7 +134,7 @@ public: // signals boost::signals2::signal)> favIconChanged; boost::signals2::signal titleChanged; - boost::signals2::signal uriChanged; + boost::signals2::signal uriChanged; boost::signals2::signal tabIdChecker; boost::signals2::signal loadFinished; -- 2.7.4 From dbb8a09c87417077fe87ec3e8939ad8bd5dd918c Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Thu, 10 Sep 2015 14:34:17 +0200 Subject: [PATCH 09/16] Added thubnail and history links clicking for detail popup. [Issue] https://bugs.tizen.org/jira/browse/TT-144 [Problem] Detail popup missed thumbnail. [Cause] N/A [Solution] Added thumbnail in proper size. [Verify] Launch browser > open few pages > check thubnails Most Visited view in detail popup, check if history links in popup are clickable. Change-Id: I50d3e2862fc672a41de8cdc50f790f48f19ff21d Signed-off-by: Maciej Skrzypkowski --- core/Tools/EflTools.cpp | 3 - services/HistoryService/HistoryItem.cpp | 2 +- services/HistoryService/HistoryItem.h | 2 +- services/MainUI/DetailPopup.cpp | 43 +++++++++++++-- services/MainUI/DetailPopup.h | 10 ++++ services/MainUI/MainUI.cpp | 14 ++--- services/MainUI/MainUI.h | 4 +- services/MainUI/edc/DetailPopup.edc | 73 +++++++++++++++++++++++-- services/MainUI/edc/MainUI.edc | 18 +++--- services/MainUI/images/ic_popup_list_arrow.png | Bin 0 -> 3070 bytes services/SimpleUI/SimpleUI.cpp | 2 +- 11 files changed, 133 insertions(+), 38 deletions(-) create mode 100644 services/MainUI/images/ic_popup_list_arrow.png diff --git a/core/Tools/EflTools.cpp b/core/Tools/EflTools.cpp index f6cf03d..b8e1f49 100644 --- a/core/Tools/EflTools.cpp +++ b/core/Tools/EflTools.cpp @@ -83,9 +83,6 @@ Evas_Object * getEvasImage(std::shared_ptr b_image, Evas_Object * } else { BROWSER_LOGD("Image loaded"); evas_object_image_fill_set(eo_image, 0, 0, b_image->width, b_image->height); - - //EFL BUG without resizing image is not displayed - evas_object_resize(eo_image, b_image->width, b_image->height); } return eo_image; }; diff --git a/services/HistoryService/HistoryItem.cpp b/services/HistoryService/HistoryItem.cpp index 1d9ce89..6808685 100644 --- a/services/HistoryService/HistoryItem.cpp +++ b/services/HistoryService/HistoryItem.cpp @@ -87,7 +87,7 @@ void HistoryItem::setUrl(const std::string & url) m_url = url; } -std::string HistoryItem::getUrl() +std::string HistoryItem::getUrl() const { return m_url; } diff --git a/services/HistoryService/HistoryItem.h b/services/HistoryService/HistoryItem.h index 1d1e7ab..98875b9 100644 --- a/services/HistoryService/HistoryItem.h +++ b/services/HistoryService/HistoryItem.h @@ -51,7 +51,7 @@ public: bool operator!=(const HistoryItem& other); void setUrl(const std::string & url); - std::string getUrl(); + std::string getUrl() const; void setTitle(const std::string & title); std::string getTitle() const; diff --git a/services/MainUI/DetailPopup.cpp b/services/MainUI/DetailPopup.cpp index 4aa5604..9d2f1ea 100644 --- a/services/MainUI/DetailPopup.cpp +++ b/services/MainUI/DetailPopup.cpp @@ -16,15 +16,19 @@ #include +#include +#include #include "BrowserAssert.h" #include "DetailPopup.h" #include "BrowserLogger.h" #include "Tools/GeneralTools.h" +#include "Tools/EflTools.h" #include "MainUI.h" namespace tizen_browser{ namespace base_ui{ +const char * DetailPopup::URL_SEPARATOR = " - "; const int DetailPopup::HISTORY_ITEMS_NO = 5; DetailPopup::DetailPopup(MainUI *mainUI) @@ -62,14 +66,20 @@ void DetailPopup::createLayout(Evas_Object *parent) edje_object_signal_callback_add(elm_layout_edje_get(m_layout), "mouse,clicked,1", "thumbnail", _url_click, this); elm_layout_text_set(m_layout, "history_title", "History"); elm_layout_text_set(m_layout, "url", tools::clearURL(m_item->getUrl())); + m_historyList = elm_genlist_add(m_layout); evas_object_size_hint_weight_set(m_historyList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(m_historyList, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(m_historyList, "pressed", _history_url_click, this); + for (auto it = m_prevItems->begin(); it != m_prevItems->end(); ++it) { + elm_genlist_item_append(m_historyList, m_history_item_class, it->get(), nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + } evas_object_show(m_historyList); elm_object_part_content_set(m_layout, "history_list", m_historyList); - for (auto it = m_prevItems->begin(); it != m_prevItems->end(); ++it) { - elm_genlist_item_append(m_historyList, m_history_item_class, it->get(), nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + if (m_item->getThumbnail()) { + Evas_Object * thumb = tools::EflTools::getEvasImage(m_item->getThumbnail(), m_layout); + elm_object_part_content_set(m_layout, "thumbnail", thumb); } evas_object_show(m_layout); @@ -88,18 +98,19 @@ void DetailPopup::hide() edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "bg", _bg_click); edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "url_over", _url_click); edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "thumbnail", _url_click); + evas_object_smart_callback_del(m_historyList, "pressed", _history_url_click); elm_genlist_clear(m_historyList); evas_object_hide(m_layout); } -void DetailPopup::_bg_click(void* data, Evas_Object* obj, const char* emission, const char* source) +void DetailPopup::_bg_click(void* data, Evas_Object*, const char*, const char*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); DetailPopup *dp = reinterpret_cast(data); dp->hide(); } -void DetailPopup::_url_click(void* data, Evas_Object* obj, const char* emission, const char* source) +void DetailPopup::_url_click(void* data, Evas_Object*, const char*, const char*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); DetailPopup *dp = reinterpret_cast(data); @@ -107,14 +118,34 @@ void DetailPopup::_url_click(void* data, Evas_Object* obj, const char* emission, dp->openURLInNewTab(dp->m_item, dp->m_mainUI->isDesktopMode()); } -char* DetailPopup::_get_history_link_text(void* data, Evas_Object* obj, const char* part) +void DetailPopup::_history_url_click(void* data, Evas_Object*, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *glit = reinterpret_cast(event_info); + void *itemData = elm_object_item_data_get(glit); + services::HistoryItem *item = reinterpret_cast(itemData); + + DetailPopup *dp = reinterpret_cast(data); + // find shared pointer pointed to HistoryItem object + auto it = std::find_if(dp->m_prevItems->begin(), + dp->m_prevItems->end(), + [item] (const std::shared_ptr i) + { return i.get() == item; } + ); + std::shared_ptr itemPtr= *it; + dp->hide(); + dp->openURLInNewTab(itemPtr, dp->m_mainUI->isDesktopMode()); +} + +char* DetailPopup::_get_history_link_text(void* data, Evas_Object*, const char* part) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); services::HistoryItem *item = reinterpret_cast(data); if (!strcmp(part, "page_dsc")) { if (item != nullptr) { - return strdup(tools::clearURL(item->getUrl())); + std::string text = item->getTitle() + URL_SEPARATOR + tools::clearURL(item->getUrl()); + return strdup(text.c_str()); } } return strdup(""); diff --git a/services/MainUI/DetailPopup.h b/services/MainUI/DetailPopup.h index 1ad8a02..953e9b8 100644 --- a/services/MainUI/DetailPopup.h +++ b/services/MainUI/DetailPopup.h @@ -53,10 +53,18 @@ namespace base_ui{ static void _url_click(void *data, Evas_Object *obj, const char *emission, const char *source); /** + * @brief History genlist item click callback + */ + static void _history_url_click(void *data, Evas_Object *o, void *event_info); + + /** * @brief Hide popup */ void hide(); + /** + * @brief Create main layout and all compnents. + */ void createLayout(Evas_Object *parent); /** @@ -71,6 +79,8 @@ namespace base_ui{ std::string edjFilePath; std::shared_ptr m_item; std::shared_ptr m_prevItems; + + static const char * URL_SEPARATOR; }; } diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index 6dbdbbc..1367a87 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -33,8 +33,8 @@ namespace base_ui{ const int SMALL_TILES_ROWS = 2; const int MAX_TILES_NUMBER = 5; -const int MainUI::MAX_TILE_WIDTH = 784; -const int MainUI::MAX_TILE_HEIGHT = 498; +const int MainUI::MAX_THUMBNAIL_WIDTH = 840; +const int MainUI::MAX_THUMBNAIL_HEIGHT = 648; EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui") @@ -50,12 +50,6 @@ typedef struct _BookmarkItemData std::shared_ptr mainUI; } BookmarkItemData; -struct ItemData{ - tizen_browser::base_ui::MainUI * mainUI; - const char* button_name; - Elm_Object_Item * e_item; -}; - MainUI::MainUI() : m_parent(nullptr) , m_layout(nullptr) @@ -360,7 +354,7 @@ void MainUI::addBookmarkItems(std::vector(data); if (!strcmp(part, "page_title")) { @@ -372,7 +366,7 @@ char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) return strdup(""); } -char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part) +char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *, const char *part) { BookmarkItemData *itemData = reinterpret_cast(data); if (!strcmp(part, "page_title")) { diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 667a844..9814981 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -63,8 +63,8 @@ public: boost::signals2::signal bookmarkClicked; boost::signals2::signal bookmarkManagerClicked; - static const int MAX_TILE_WIDTH; - static const int MAX_TILE_HEIGHT; + static const int MAX_THUMBNAIL_WIDTH; + static const int MAX_THUMBNAIL_HEIGHT; private: void createItemClasses(); diff --git a/services/MainUI/edc/DetailPopup.edc b/services/MainUI/edc/DetailPopup.edc index 5a2ea1b..dd291d8 100644 --- a/services/MainUI/edc/DetailPopup.edc +++ b/services/MainUI/edc/DetailPopup.edc @@ -2,7 +2,9 @@ collections { group { name: "popup"; - + images { + image: "ic_popup_list_arrow.png" COMP; + } parts { part { name: "bg"; type: RECT; @@ -44,10 +46,8 @@ collections { } part { name: "thumbnail"; - //type: SWALLOW; TODO: change to swallow while adding thumbnail to Detail popup - type: RECT; + type: SWALLOW; description { - color: 113 128 147 255; min: 840 648; max: 840 648; visible: 1; @@ -90,8 +90,8 @@ collections { type: TEXT; description { visible: 1; - min: 428 122; - max: 428 122; + min: 408 122; + max: 408 122; align: 0.0 0.0; fixed: 1 1; color: 51 51 51 255; @@ -117,6 +117,29 @@ collections { } } + part { name: "url_arrow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.5; + min: 38 38; + max: 38 38; + image.normal: "ic_popup_list_arrow.png"; + rel1 { + to: "url_bg"; + relative: 0.0 0.0; + offset: 442 0; + } + rel2 { + to: "url_bg"; + relative: 1.0 1.0; + } + } + } + part { name: "url_over"; type: RECT; mouse_events: 1; @@ -229,6 +252,10 @@ collections { color: 255 255 255 255; align: 0.0 0.0; } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } } part { name: "page_dsc"; @@ -253,8 +280,42 @@ collections { align: 0 0.5; } } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + + part { name: "dsc_over"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + visible: 1; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "bg"; + } } } + programs { + program { + name: "mouse_in_url"; + signal: "mouse,in"; + source: "dsc_over"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "page_dsc"; + } + program { + name: "mouse_out_url"; + signal: "mouse,out"; + source: "dsc_over"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "page_dsc"; + } + } } } \ No newline at end of file diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index de77956..030e8dd 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -402,8 +402,8 @@ group { name: "elm/genlist/item/big_grid_item/default"; fixed: 1 0; align: 0.0 0.0; color : 231 231 231 255; - min: 784 498; - max: 784 498; + min: 784 577; // size adjusted to max thubnail with and height + max: 784 577; rel1 { relative: 0.0 0.0; to: "bg"; } @@ -494,8 +494,9 @@ group { name: "elm/genlist/item/big_grid_item/default"; color: 113 128 147 255; visible: 1; rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; + to: "bg"; + relative: 0.0 0.0; + offset: 0 498; // thumbnail height } rel2 { relative: 1.0 1.0; @@ -666,8 +667,8 @@ group { name: "elm/genlist/item/small_grid_item/default"; fixed: 1 0; align: 0.0 0.0; color : 231 231 231 255; - min: 378 198; - max: 378 198; + min: 378 292; // size adjusted to max thubnail with and height + max: 378 292; rel1 { relative: 0.0 0.0; to: "bg"; } @@ -758,8 +759,9 @@ group { name: "elm/genlist/item/small_grid_item/default"; color: 113 128 147 255; visible: 1; rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; + to: "bg"; + relative: 0.0 0.0; + offset: 0 198; // thumbnail height } rel2 { relative: 1.0 1.0; diff --git a/services/MainUI/images/ic_popup_list_arrow.png b/services/MainUI/images/ic_popup_list_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..d54f171ca0cb46306d4f82628944d8bbe99d2faf GIT binary patch literal 3070 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003gNklg1YgT% zP$bdcX4-(+-Giq%1H)E(_?UB>-AX0L=#Xg?Sb-JTjBx{O=LmZTMnEr_Os$)T>W{kL zV2r8Rbbx-~j&g&c_5yd78w_>zcmx)JVbcM-E$*WyU=q)H;3O9q zz)Mu_IdB8O9AE%%QMuQ^^=si$oI#N*>X$lFtN+@S({f4uQ154bH}xfMWGAPoTvk7$ zT64KfKd~*L6`TVC(8wy=sDL8@8cN)XSVM@y$S8NO!63va0-sDzE}8u)oFc0Ne&pRlMV%-v9sr M07*qoM6N<$f)5?NF8}}l literal 0 HcmV?d00001 diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index f4380d7..2747a12 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -801,7 +801,7 @@ void SimpleUI::loadFinished() if(!m_webEngine->isPrivateMode()){ m_historyService->addHistoryItem(std::make_shared (m_webEngine->getURI(), m_webEngine->getTitle(), - m_webEngine->getFavicon()), m_webEngine->getSnapshotData(MainUI::MAX_TILE_WIDTH, MainUI::MAX_TILE_HEIGHT)); + m_webEngine->getFavicon()), m_webEngine->getSnapshotData(MainUI::MAX_THUMBNAIL_WIDTH, MainUI::MAX_THUMBNAIL_HEIGHT)); } #if 0 if(!m_platformInputManager->getPointerModeEnabled()) -- 2.7.4 From 098dc33d176296cba8110a84b32fb99e4d75140e Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Thu, 10 Sep 2015 15:14:29 +0200 Subject: [PATCH 10/16] HistoryUI Refactor [Issue] https://bugs.tizen.org/jira/browse/TT-157 [Problem] Improper view navigation is used. [Cause] N/A [Solution] Implemented needed methods: void init(Evas_Object *parent) Evas_Object* getContent() void showUI() void hideUI() [Verify] Launch browser > More Menu > History > Obs History should be displayed correctly. It needs implementation on SimpleUI side - when it's done, show() function should removed. Change-Id: I83500ec9053f9ac9fc418f63f7b87f5a24a38c92 --- services/HistoryUI/HistoryUI.cpp | 139 ++++++++++++++++++++++++++++----------- services/HistoryUI/HistoryUI.h | 10 ++- 2 files changed, 107 insertions(+), 42 deletions(-) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index f9c3a12..8443e04 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -53,80 +53,139 @@ HistoryUI::HistoryUI() , m_itemClassToday(nullptr) , m_gengrid(nullptr) , m_parent(nullptr) - , m_item_class(nullptr) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_edjFilePath = EDJE_DIR; m_edjFilePath.append("HistoryUI/History.edj"); + m_item_class = crateItemClass(); } HistoryUI::~HistoryUI() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (m_itemClassToday) + elm_gengrid_item_class_free(m_itemClassToday); +} + +void HistoryUI::showUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_history_layout); + m_gengrid = createGengrid(m_history_layout); + addItems(); + evas_object_show(m_actionBar); + evas_object_show(m_history_layout); +} +void HistoryUI::hideUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_history_layout); + evas_object_del(m_genListToday); + m_genListToday = nullptr; + evas_object_del(m_gengrid); + m_gengrid = nullptr; + evas_object_hide(m_actionBar); + evas_object_hide(m_history_layout); } +// TODO: Remove this function when proper view handling will be introduced void HistoryUI::show(Evas_Object* parent) { - elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_history_layout = elm_layout_add(parent); - elm_layout_file_set(m_history_layout, m_edjFilePath.c_str(), "history-layout"); - evas_object_size_hint_weight_set(m_history_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_history_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(m_history_layout); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + init(parent); + m_history_layout = createHistoryUILayout(m_parent); + showUI(); +} + +void HistoryUI::init(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(parent); + m_parent = parent; +} - showActionBar(); +Evas_Object* HistoryUI::getContent() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_parent); + if (!m_history_layout) + m_history_layout = createHistoryUILayout(m_parent); + return m_history_layout; +} - m_gengrid = elm_gengrid_add(m_history_layout); - elm_object_part_content_set(m_history_layout, "history_gengird", m_gengrid); +Evas_Object* HistoryUI::createHistoryUILayout(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); + Evas_Object* history_layout = elm_layout_add(parent); + elm_layout_file_set(history_layout, m_edjFilePath.c_str(), "history-layout"); + evas_object_size_hint_weight_set(history_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(history_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - if (!m_item_class) { - m_item_class = elm_gengrid_item_class_new(); - m_item_class->item_style = "history_item"; - m_item_class->func.text_get = _grid_text_get; - m_item_class->func.content_get = _history_grid_content_get; - m_item_class->func.state_get = nullptr; - m_item_class->func.del = nullptr; - } + m_actionBar = createActionBar(history_layout); + m_gengrid = createGengrid(history_layout); - elm_gengrid_align_set(m_gengrid, 0, 0); - elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); - elm_gengrid_horizontal_set(m_gengrid, EINA_TRUE); - elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); - elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); - elm_scroller_page_size_set(m_gengrid, 0, 580); + return history_layout; +} - evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); +Evas_Object* HistoryUI::createGengrid(Evas_Object* history_layout) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(history_layout); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); + Evas_Object* gengrid = elm_gengrid_add(history_layout); + elm_object_part_content_set(history_layout, "history_gengird", gengrid); + + elm_gengrid_align_set(gengrid, 0, 0); + elm_gengrid_select_mode_set(gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_multi_select_set(gengrid, EINA_FALSE); + elm_gengrid_horizontal_set(gengrid, EINA_TRUE); + elm_gengrid_highlight_mode_set(gengrid, EINA_TRUE); + elm_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + elm_scroller_page_size_set(gengrid, 0, 580); + evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); - elm_gengrid_item_size_set(m_gengrid, 580 * efl_scale, 580 * efl_scale); + elm_gengrid_item_size_set(gengrid, 580 * efl_scale, 580 * efl_scale); + return gengrid; +} - addItems(); +Elm_Gengrid_Item_Class* HistoryUI::crateItemClass() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Gengrid_Item_Class* item_class = elm_gengrid_item_class_new(); + item_class->item_style = "history_item"; + item_class->func.text_get = _grid_text_get; + item_class->func.content_get = _history_grid_content_get; + item_class->func.state_get = nullptr; + item_class->func.del = nullptr; + return item_class; } -void HistoryUI::showActionBar() +Evas_Object* HistoryUI::createActionBar(Evas_Object* history_layout) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_actionBar = elm_layout_add(m_history_layout); - elm_object_part_content_set(m_history_layout, "action_bar_history", m_actionBar); - evas_object_size_hint_weight_set(m_actionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_actionBar, EVAS_HINT_FILL, EVAS_HINT_FILL); + Evas_Object* actionBar = elm_layout_add(history_layout); + elm_object_part_content_set(history_layout, "action_bar_history", actionBar); + evas_object_size_hint_weight_set(actionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(actionBar, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_layout_file_set(m_actionBar, m_edjFilePath.c_str(), "action_bar"); + elm_layout_file_set(actionBar, m_edjFilePath.c_str(), "action_bar"); - Evas_Object *button = elm_button_add(m_actionBar); + Evas_Object *button = elm_button_add(actionBar); elm_object_style_set(button, "history_button"); evas_object_smart_callback_add(button, "clicked", HistoryUI::_clearHistory_clicked, this); - elm_object_part_content_set(m_actionBar, "clearhistory_click", button); + elm_object_part_content_set(actionBar, "clearhistory_click", button); - button = elm_button_add(m_actionBar); + button = elm_button_add(actionBar); elm_object_style_set(button, "history_button"); evas_object_smart_callback_add(button, "clicked", HistoryUI::_close_clicked_cb, this); - elm_object_part_content_set(m_actionBar, "close_click", button); + elm_object_part_content_set(actionBar, "close_click", button); - evas_object_show(m_actionBar); + return actionBar; } void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 83bd6f6..c849f5f 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -36,14 +36,18 @@ class BROWSER_EXPORT HistoryUI public: HistoryUI(); ~HistoryUI(); - void init(Evas_Object *main_layout); + void init(Evas_Object *parent); + Evas_Object* getContent(); + void showUI(); + void hideUI(); + Evas_Object* createGengrid(Evas_Object* history_layout); virtual std::string getName(); void addHistoryItem(std::shared_ptr); void addHistoryItems(std::shared_ptr); void removeHistoryItem(const std::string& uri); void clearItems(); void hide(); - void showActionBar(); + Evas_Object* createActionBar(Evas_Object* history_layout); void show(Evas_Object *main_layout); void addItems(); boost::signals2::signal closeHistoryUIClicked; @@ -51,6 +55,8 @@ public: boost::signals2::signal)> historyItemClicked; boost::signals2::signal)> historyDeleteClicked; private: + Evas_Object* createHistoryUILayout(Evas_Object* parent); + Elm_Gengrid_Item_Class* crateItemClass(); static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _history_grid_content_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); -- 2.7.4 From d9fda64ac39d92bb6cf2ca4078d1dde4fa418a8c Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Fri, 11 Sep 2015 10:27:53 +0200 Subject: [PATCH 11/16] Implementing AbstractUIComponent's new interface methods in SettingsUI [Issue] https://bugs.tizen.org/jira/browse/TT-157 [Problem] Improper view navigation is used. [Cause] N/A [Solution] Implemented needed methods: void init(Evas_Object *parent) Evas_Object* getContent() void showUI() void hideUI() [Verify] Launch browser > More Menu > Settings > Obs Settings should be displayed correctly. It needs implementation on SimpleUI side - when it's done, show() function should be removed. Change-Id: Ic28f501398cf55de4b4a5a9d5bae20bada55c525 --- services/SettingsUI/SettingsUI.cpp | 126 ++++++++++++++++++++--------------- services/SettingsUI/SettingsUI.h | 12 ++-- services/SettingsUI/edc/Settings.edc | 2 +- 3 files changed, 83 insertions(+), 57 deletions(-) diff --git a/services/SettingsUI/SettingsUI.cpp b/services/SettingsUI/SettingsUI.cpp index 0799958..c51b6ff 100644 --- a/services/SettingsUI/SettingsUI.cpp +++ b/services/SettingsUI/SettingsUI.cpp @@ -39,8 +39,6 @@ struct ItemData { SettingsUI::SettingsUI() : m_settings_layout(nullptr) - , m_genListActionBar(nullptr) - , m_itemClassActionBar(nullptr) , m_parent(nullptr) , m_item_class(nullptr) , m_scroller(nullptr) @@ -56,74 +54,97 @@ SettingsUI::~SettingsUI() } -void SettingsUI::show(Evas_Object* parent) +void SettingsUI::init(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_settings_layout = elm_layout_add(parent); - elm_layout_file_set(m_settings_layout, m_edjFilePath.c_str(), "settings-layout"); - evas_object_size_hint_weight_set(m_settings_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_settings_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + M_ASSERT(parent); + m_parent = parent; +} + +Evas_Object* SettingsUI::getContent() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_parent); + if (!m_settings_layout) + m_settings_layout = createSettingsUILayout(m_parent); + return m_settings_layout; +} + +void SettingsUI::showUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + evas_object_show(m_scroller); + evas_object_show(m_items_layout); evas_object_show(m_settings_layout); + evas_object_show(m_actionBar); +} - showActionBar(); - showSettingsPage(); +void SettingsUI::hideUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + evas_object_hide(m_scroller); + evas_object_hide(m_items_layout); + evas_object_hide(m_settings_layout); + evas_object_hide(m_actionBar); } -void SettingsUI::showActionBar() +Evas_Object* SettingsUI::createSettingsUILayout(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(parent); elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_genListActionBar = elm_genlist_add(m_settings_layout); - elm_object_part_content_set(m_settings_layout, "actionbar_swallow", m_genListActionBar); - elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); - elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE); - elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT); - elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); - evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - m_itemClassActionBar = elm_genlist_item_class_new(); - m_itemClassActionBar->item_style = "settings_action_bar_items"; - m_itemClassActionBar->func.text_get = nullptr; - m_itemClassActionBar->func.content_get = &listActionBarContentGet; - m_itemClassActionBar->func.state_get = nullptr; - m_itemClassActionBar->func.del = nullptr; + Evas_Object* settings_layout = elm_layout_add(parent); + elm_layout_file_set(settings_layout, m_edjFilePath.c_str(), "settings-layout"); + evas_object_size_hint_weight_set(settings_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(settings_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + m_actionBar = createActionBar(settings_layout); + m_scroller = createSettingsPage(settings_layout); + return settings_layout; +} - ItemData *id = new ItemData; - id->settingsUI = this; - Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id->e_item = elmItem; +void SettingsUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + init(parent); + m_settings_layout = createSettingsUILayout(m_parent); + showUI(); +} +Evas_Object* SettingsUI::createActionBar(Evas_Object* settings_layout) +{ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Evas_Object* actionBar = elm_layout_add(settings_layout); + elm_object_part_content_set(settings_layout, "actionbar_swallow", actionBar); + evas_object_size_hint_weight_set(actionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(actionBar, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_layout_file_set(actionBar, m_edjFilePath.c_str(), "action_bar"); + Evas_Object *close_click_btn = elm_button_add(actionBar); + elm_object_style_set(close_click_btn, "basic_button"); + evas_object_smart_callback_add(close_click_btn, "clicked", SettingsUI::close_clicked_cb, this); + elm_object_part_content_set(actionBar, "close_click", close_click_btn); + + return actionBar; } -void SettingsUI::showSettingsPage() +Evas_Object* SettingsUI::createSettingsPage(Evas_Object* settings_layout) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); ItemData *id = new ItemData; id->settingsUI = this; - m_scroller = elm_scroller_add(m_settings_layout); - m_items_layout = elm_layout_add(m_scroller); - elm_object_content_set(m_scroller, m_items_layout); + Evas_Object* scroller = elm_scroller_add(settings_layout); + m_items_layout = elm_layout_add(scroller); + elm_object_content_set(scroller, m_items_layout); elm_layout_file_set(m_items_layout, m_edjFilePath.c_str(), "settings_items"); - elm_object_part_content_set(m_settings_layout, "settings_scroller_swallow", m_scroller); - evas_object_size_hint_weight_set(m_scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_part_content_set(settings_layout, "settings_scroller_swallow", scroller); + evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_scroller_policy_set(m_items_layout, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO); - elm_scroller_bounce_set(m_scroller, EINA_TRUE, EINA_FALSE); - elm_scroller_propagate_events_set(m_scroller, EINA_TRUE); - evas_object_show(m_scroller); - evas_object_show(m_items_layout); + elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_FALSE); + elm_scroller_propagate_events_set(scroller, EINA_TRUE); Evas_Object *del_selected_data_button = elm_button_add(m_items_layout); elm_object_style_set(del_selected_data_button, "basic_button"); @@ -197,6 +218,8 @@ void SettingsUI::showSettingsPage() elm_layout_content_set(m_items_layout, "ts_disable_rb", ts_disable_rb); elm_radio_group_add(ts_disable_rb, tabSyncGroup); elm_radio_state_value_set(ts_disable_rb, TS_DISABLE); + + return scroller; } Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) @@ -243,9 +266,9 @@ void SettingsUI::close_clicked_cb(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData * id = static_cast(data); - id->settingsUI->closeSettingsUIClicked(std::string()); - id->settingsUI->clearItems(); + SettingsUI * s_ui = static_cast(data); + s_ui->closeSettingsUIClicked(std::string()); + s_ui->clearItems(); } } @@ -294,7 +317,6 @@ void SettingsUI::clearItems() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); hide(); - elm_genlist_clear(m_genListActionBar); } } diff --git a/services/SettingsUI/SettingsUI.h b/services/SettingsUI/SettingsUI.h index 70ffab2..d07c9d4 100644 --- a/services/SettingsUI/SettingsUI.h +++ b/services/SettingsUI/SettingsUI.h @@ -35,10 +35,14 @@ class BROWSER_EXPORT SettingsUI public: SettingsUI(); ~SettingsUI(); + void init(Evas_Object* parent); + Evas_Object* getContent(); + void showUI(); + void hideUI(); void show(Evas_Object *main_layout); virtual std::string getName(); - void showActionBar(); - void showSettingsPage(); + Evas_Object* createActionBar(Evas_Object* settings_layout); + Evas_Object* createSettingsPage(Evas_Object* settings_layout); void clearItems(); void hide(); @@ -48,6 +52,7 @@ public: boost::signals2::signal closeSettingsUIClicked; private: + Evas_Object* createSettingsUILayout(Evas_Object* parent); static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); static Evas_Object* listSettingsGenlistContentGet(void *data, Evas_Object *obj, const char *part); @@ -64,10 +69,9 @@ private: static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info); Evas_Object *m_settings_layout; - Evas_Object *m_genListActionBar; + Evas_Object *m_actionBar; Evas_Object *m_scroller; Evas_Object *m_items_layout; - Elm_Genlist_Item_Class *m_itemClassActionBar; Evas_Object *m_parent; Elm_Gengrid_Item_Class * m_item_class; diff --git a/services/SettingsUI/edc/Settings.edc b/services/SettingsUI/edc/Settings.edc index 603c8d0..e22ae4c 100644 --- a/services/SettingsUI/edc/Settings.edc +++ b/services/SettingsUI/edc/Settings.edc @@ -1197,7 +1197,7 @@ group { name: "settings_items"; } -group { name: "elm/genlist/item/settings_action_bar_items/default"; +group { name: "action_bar"; min: 1920 104; max: 1920 104; data.item: "texts" "settings_title"; -- 2.7.4 From c88073101a90e6d53e149b26e06cc49547785fde Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Tue, 1 Sep 2015 13:33:29 +0200 Subject: [PATCH 12/16] SimpleUI refactoring [Issue#:] https://bugs.tizen.org/jira/browse/TT-157 [Problem:] Function exec() covers functionality which will be covered by different classes; [Cause:] N/A [Sollution:] Splitted huge exec() to few smaller. [Verify:] Refactor is not affecting browsers behaviour. Change-Id: I073154a3116ef7ff9723e2445737a699f59e214e --- services/SimpleUI/SimpleUI.cpp | 510 +++++++++++++++++++---------------------- services/SimpleUI/SimpleUI.h | 14 +- 2 files changed, 244 insertions(+), 280 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 2747a12..0f539a5 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -77,6 +77,7 @@ SimpleUI::SimpleUI() , m_wvIMEStatus(false) , m_ewkContext(ewk_context_new()) { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_init(0, nullptr); Evas_Object *main_window = elm_win_util_standard_add("browserApp", "browserApp"); if (main_window == nullptr) @@ -86,7 +87,7 @@ SimpleUI::SimpleUI() } SimpleUI::~SimpleUI() { - BROWSER_LOGD("%s", __func__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_sessionService->getStorage()->deleteSession(m_currentSession); /// \todo Auto-generated destructor stub evas_object_del(m_window.get()); @@ -95,7 +96,7 @@ SimpleUI::~SimpleUI() { void SimpleUI::destroyUI() { - BROWSER_LOGD("%s", __func__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); evas_object_del(m_window.get()); } @@ -119,19 +120,15 @@ std::shared_ptr SimpleUI::getHistory() return m_historyService->getHistoryToday(); } - std::vector > SimpleUI::getBookmarkFolders(int folder_id) { return m_favoriteService->getBookmarkFolders(folder_id); } - - int SimpleUI::exec(const std::string& _url) { BROWSER_LOGD("[%s] _url=%s, initialised=%d", __func__, _url.c_str(), m_initialised); std::string url = _url; - Session::Session lastSession; if(!m_initialised){ if (m_window.get()) { @@ -139,147 +136,37 @@ int SimpleUI::exec(const std::string& _url) config.load(""); m_tabLimit = boost::any_cast (config.get("TAB_LIMIT")); m_favoritesLimit = boost::any_cast (config.get("FAVORITES_LIMIT")); - elm_win_alpha_set(m_window.get(), EINA_FALSE); - // creating main window + // Set up main window + //TODO: These functions seems redundant. Check if these functions are neccessary. int width = 0; int height = 0; ecore_wl_screen_size_get(&width, &height); evas_object_move(m_window.get(), 0, 0); evas_object_resize(m_window.get(), width, height); - // create main layout - m_mainLayout = elm_layout_add(m_window.get()); - evas_object_size_hint_weight_set(m_mainLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(m_window.get(), m_mainLayout); - - ///\todo Integrate with pointer / tab mode switch elm_win_focus_highlight_style_set(m_window.get(), "invisible"); - //elm_config_focus_highlight_animate_set(EINA_TRUE); - - m_errorLayout = elm_layout_add(m_window.get()); - evas_object_size_hint_weight_set(m_errorLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - //elm_win_resize_object_add(m_window.get(), m_errorLayout); //set global show tooltip timeout elm_config_tooltip_delay_set( boost::any_cast (config.get("TOOLTIP_DELAY"))); loadThemes(); - if(!elm_layout_file_set(m_mainLayout, edjePath("SimpleUI/MainLayout.edj").c_str(), "main_layout")) - throw std::runtime_error("Layout file not found: " + edjePath("SimpleUI/MainLayout.edj")); - - //elm_object_style_set(m_errorLayout, "error_message"); - if(!elm_layout_file_set(m_errorLayout, edjePath("SimpleUI/ErrorMessage.edj").c_str(), "error_message")) - throw std::runtime_error("Layout file not found: " + edjePath("SimpleUI/ErrorMessage.edj")); - - // load && initialize components - // simpleURI - BROWSER_LOGD("[%s:%d] service: simpleURI ", __PRETTY_FUNCTION__, __LINE__); - m_simpleURI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleuri")); - M_ASSERT(m_simpleURI); - - // webengine - BROWSER_LOGD("[%s:%d] service: webkitengineservice ", __PRETTY_FUNCTION__, __LINE__); - m_webEngine = - std::dynamic_pointer_cast - ,tizen_browser::core::AbstractService> - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice")); - M_ASSERT(m_webEngine); - m_webEngine->init(m_mainLayout); - - // bookmarks UI - BROWSER_LOGD("[%s:%d] service: bookmarksui ", __PRETTY_FUNCTION__, __LINE__); - - // favorites service - BROWSER_LOGD("[%s:%d] service: favoriteservice ", __PRETTY_FUNCTION__, __LINE__); - std::string favoriteService(boost::any_cast < std::string > (config.get("favorite_service_name"))); - BROWSER_LOGD("favorite config"); - m_favoriteService = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService(favoriteService)); - BROWSER_LOGD("favorite create"); - M_ASSERT(m_favoriteService); - m_favoriteService->synchronizeBookmarks(); - BROWSER_LOGD("favorite before getBookmarks"); - m_favoriteService->getBookmarks(); - BROWSER_LOGD("favorite after getBookmarks"); - - // history service - BROWSER_LOGD("[%s:%d] service: historyservice ", __PRETTY_FUNCTION__, __LINE__); - m_historyService = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice")); - M_ASSERT(m_historyService); - + loadUIServices(); + loadModelServices(); + createActions(); - // Platforminputmanager - BROWSER_LOGD("[%s:%d] service: platforminputmanager ", __PRETTY_FUNCTION__, __LINE__); - m_platformInputManager = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager")); - M_ASSERT(m_platformInputManager); - m_platformInputManager->init(m_window.get()); - m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit)); - m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this)); + // create view layouts + m_mainLayout = createWebLayout(m_window.get()); + elm_win_resize_object_add(m_window.get(), m_mainLayout); - createActions(); + m_errorLayout = createErrorLayout(m_window.get()); - // left buttons - leftButtonBar = std::make_shared(m_mainLayout, "SimpleUI/LeftButtonBar.edj", "left_button_bar"); - leftButtonBar->addAction(m_back, "prev_button"); - leftButtonBar->addAction(m_forward, "next_button"); - leftButtonBar->addAction(m_reload, "refresh_stop_button"); - //register action that will be used later by buttons - leftButtonBar->registerEnabledChangedCallback(m_stopLoading, "refresh_stop_button"); - - // right buttons - rightButtonBar = std::make_shared(m_mainLayout, "SimpleUI/RightButtonBar.edj", "right_button_bar"); - rightButtonBar->addAction(m_tab, "tab_button"); - rightButtonBar->addAction(m_showMoreMenu, "setting_button"); - - m_progressBar = elm_progressbar_add(m_mainLayout); - elm_object_style_set(m_progressBar,"play_buffer"); - - webTitleBar = std::make_shared(m_mainLayout, "SimpleUI/WebTitleBar.edj", "web_title_bar"); - elm_object_part_content_set(m_mainLayout, "web_title_bar", webTitleBar->getContent()); - - elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout)); - elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent()); - elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent()); - - // connecting all together - m_simpleURI->uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1)); - m_webEngine->uriChanged.connect(boost::bind(&SimpleURI::changeUri, m_simpleURI.get(), _1)); - m_webEngine->uriChanged.connect(boost::bind(&SimpleUI::webEngineURLChanged, this, _1)); - m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::checkTabId,this,_1)); - m_webEngine->webViewClicked.connect(boost::bind(&SimpleURI::clearFocus, m_simpleURI.get())); - m_webEngine->backwardEnableChanged.connect(boost::bind(&SimpleUI::backEnable, this, _1)); - m_webEngine->forwardEnableChanged.connect(boost::bind(&SimpleUI::forwardEnable, this, _1)); - m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this)); - m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1)); - m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this)); - m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadFinished, this)); - m_webEngine->loadError.connect(boost::bind(&SimpleUI::loadError, this)); - m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1)); - m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this)); - m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1)); - m_webEngine->titleChanged.connect(boost::bind(&WebTitleBar::show, webTitleBar.get(), _1)); - m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1)); - - m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1)); - m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1)); - - //m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1)); - m_historyService->historyAdded.connect(boost::bind(&SimpleUI::onHistoryAdded, this,_1)); - m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1)); + //this needs to be called after UI is estabilished + initModelServices(); + connectModelSignals(); + connectUISignals(); connectActions(); elm_layout_signal_callback_add(m_simpleURI->getContent(), "slide_websearch", "elm", SimpleUI::favicon_clicked, this); @@ -287,65 +174,208 @@ int SimpleUI::exec(const std::string& _url) // show main layout and window evas_object_show(m_mainLayout); evas_object_show(m_window.get()); - - m_netErrorHandler = std::unique_ptr(new tizen_browser::basic_ui::NetworkErrorHandler); - m_netErrorHandler->networkError.connect(boost::bind(&SimpleUI::onNetworkError, this)); - m_netErrorHandler->networkConnected.connect(boost::bind(&SimpleUI::onNetworkConnected, this)); - - m_sessionService = std::dynamic_pointer_cast - < - tizen_browser::services::SessionStorage, - tizen_browser::core::AbstractService - >(tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.sessionStorageService")); - if(m_sessionService){ - lastSession = std::move(m_sessionService->getStorage()->getLastSession()); - m_currentSession = std::move(m_sessionService->getStorage()->createSession()); - } - } m_initialised = true; + } - m_mainUI = std::dynamic_pointer_cast - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); - M_ASSERT(m_mainUI.get()); - - m_historyService->historyAllDeleted.connect(boost::bind(&tizen_browser::base_ui::MainUI::clearHistoryGenlist, m_mainUI.get())); - m_mainUI->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); - m_mainUI->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2)); - m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); - m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); - m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); - } - - if (url.empty()) { - BROWSER_LOGD("[%s]: changing to homeUrl", __func__); - switchViewToHomePage(); -#if MERGE_ME // Not sure if this should be enabled - filterURL(HomePageURL); -#endif - if(lastSession.items().size() >= 1){ - for(auto iter=lastSession.items().begin(), - end=lastSession.items().end(); - iter != end; - iter++ - ){ - openNewTab(iter->second); - } - m_sessionService->getStorage()->deleteSession(lastSession); - } - } - else - openNewTab(url); - - BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); + m_currentSession = std::move(m_sessionService->getStorage()->createSession()); + if (url.empty()) + { + BROWSER_LOGD("[%s]: changing to homeUrl", __func__); + switchViewToHomePage(); + restoreLastSession(); + } + else + openNewTab(url); m_simpleURI->setFocus(); + BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); return 0; } +Evas_Object* SimpleUI::createWebLayout(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + // create web layout + Evas_Object* web_layout = elm_layout_add(parent); + evas_object_size_hint_weight_set(web_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_layout_file_set(web_layout, edjePath("SimpleUI/MainLayout.edj").c_str(), "main_layout"); + + // left buttons + leftButtonBar = std::make_shared(web_layout, "SimpleUI/LeftButtonBar.edj", "left_button_bar"); + leftButtonBar->addAction(m_back, "prev_button"); + leftButtonBar->addAction(m_forward, "next_button"); + leftButtonBar->addAction(m_reload, "refresh_stop_button"); + + //register action that will be used later by buttons" + leftButtonBar->registerEnabledChangedCallback(m_stopLoading, "refresh_stop_button"); + + // right buttons + rightButtonBar = std::make_shared(web_layout, "SimpleUI/RightButtonBar.edj", "right_button_bar"); + rightButtonBar->addAction(m_tab, "tab_button"); + rightButtonBar->addAction(m_showMoreMenu, "setting_button"); + + // progress bar + m_progressBar = elm_progressbar_add(web_layout); + elm_object_style_set(m_progressBar,"play_buffer"); + + //URL bar (Evas Object is shipped by SimpleURI object) + elm_object_part_content_set(web_layout, "uri_entry", m_simpleURI->getContent(web_layout)); + elm_object_part_content_set(web_layout, "uri_bar_buttons_left", leftButtonBar->getContent()); + elm_object_part_content_set(web_layout, "uri_bar_buttons_right", rightButtonBar->getContent()); + + return web_layout; +} + +Evas_Object* SimpleUI::createErrorLayout(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Evas_Object* errorLayout = elm_layout_add(parent); + evas_object_size_hint_weight_set(errorLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_layout_file_set(errorLayout, edjePath("SimpleUI/ErrorMessage.edj").c_str(), "error_message"); + + return errorLayout; +} + +void SimpleUI::restoreLastSession() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_sessionService); + Session::Session lastSession = std::move(m_sessionService->getStorage()->getLastSession()); + if(lastSession.items().size() >= 1) + { + for(auto iter=lastSession.items().begin(), end=lastSession.items().end(); iter != end; ++iter) + { + openNewTab(iter->second); + } + m_sessionService->getStorage()->deleteSession(lastSession); + } +} + + +//TODO: Move all service creation here: +void SimpleUI::loadUIServices() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + m_simpleURI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleuri")); + + m_mainUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); + + m_netErrorHandler = + std::unique_ptr + + (new tizen_browser::basic_ui::NetworkErrorHandler); +} + +void SimpleUI::connectUISignals() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + M_ASSERT(m_simpleURI.get()); + m_simpleURI->uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1)); + + M_ASSERT(m_mainUI.get()); + m_mainUI->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); + m_mainUI->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2)); + m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); + m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); + m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); +} + +void SimpleUI::loadModelServices() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + m_webEngine = + std::dynamic_pointer_cast + ,tizen_browser::core::AbstractService> + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice")); + + m_favoriteService = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.favoriteservice")); + + m_historyService = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice")); + + m_platformInputManager = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager")); + + m_sessionService = std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.sessionStorageService")); +} + +void SimpleUI::initModelServices() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + M_ASSERT(m_webEngine); + M_ASSERT(m_mainLayout); + m_webEngine->init(m_mainLayout); + + M_ASSERT(m_favoriteService); + m_favoriteService->synchronizeBookmarks(); + m_favoriteService->getBookmarks(); + + M_ASSERT(m_platformInputManager); + m_platformInputManager->init(m_window.get()); +} + +void SimpleUI::connectModelSignals() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + m_webEngine->uriChanged.connect(boost::bind(&SimpleUI::webEngineURLChanged, this, _1)); + m_webEngine->uriChanged.connect(boost::bind(&SimpleURI::changeUri, m_simpleURI.get(), _1)); + m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::checkTabId,this,_1)); + m_webEngine->webViewClicked.connect(boost::bind(&SimpleURI::clearFocus, m_simpleURI.get())); + m_webEngine->backwardEnableChanged.connect(boost::bind(&SimpleUI::backEnable, this, _1)); + m_webEngine->forwardEnableChanged.connect(boost::bind(&SimpleUI::forwardEnable, this, _1)); + m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this)); + m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1)); + m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this)); + m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadFinished, this)); + m_webEngine->loadError.connect(boost::bind(&SimpleUI::loadError, this)); + m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1)); + m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this)); + m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1)); + m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1)); + + m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1)); + m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1)); + + //m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1)); + m_historyService->historyAdded.connect(boost::bind(&SimpleUI::onHistoryAdded, this,_1)); + m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1)); + //TODO "clearHistoryGenlist" should be renamed to "onHistoryDeleteFinished" + //and "historyAllDeleted"should be renamed to historyDeleteFinished" + m_historyService->historyAllDeleted.connect(boost::bind(&MainUI::clearHistoryGenlist, m_mainUI.get())); + + m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit)); + m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this)); + +} + +//TODO: move it to WebUI void SimpleUI::loadThemes() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_theme_extension_add(nullptr, edjePath("SimpleUI/ZoomItem.edj").c_str()); elm_theme_extension_add(nullptr, edjePath("SimpleUI/TabItem.edj").c_str()); elm_theme_extension_add(nullptr, edjePath("SimpleUI/ErrorMessage.edj").c_str()); @@ -356,6 +386,7 @@ void SimpleUI::loadThemes() void SimpleUI::createActions() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); ///\todo Add MulitStateAction. and convert m_stopLoading and m_reload actons to it? m_back = sharedAction(new Action("Back")); @@ -376,18 +407,10 @@ void SimpleUI::createActions() m_tab = sharedAction(new Action("Tabs")); m_tab->setToolTip("Tab page"); m_tab->setIcon("browser/toolbar_tab"); - //m_tab->setCheckable(true); m_showMoreMenu = sharedAction(new Action("Settings")); m_showMoreMenu->setToolTip("Settings"); m_showMoreMenu->setIcon("browser/toolbar_setting"); -/* - m_settingPointerMode = sharedAction(new Action("Pointer mode")); - m_settingPointerMode->setToolTip("Switch to Pointer Mode"); - m_settingPointerMode->setCheckable(true); - m_settingPointerMode->setChecked(m_platformInputManager->getPointerModeEnabled()); - m_settingPointerMode->setEnabled(true); -*/ m_settingPrivateBrowsing = sharedAction(new Action("Private browsing")); m_settingPrivateBrowsing->setToolTip("On exit from private mode all cookies, history, and stored data will be deleted"); @@ -434,11 +457,7 @@ void SimpleUI::connectActions() m_tab->triggered.connect(boost::bind(&SimpleUI::showTabUI, this)); m_showMoreMenu->triggered.connect(boost::bind(&SimpleUI::showMoreMenu, this)); -// m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1)); m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); -// m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); -// m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; -// m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; } void SimpleUI::updateURIBarView() @@ -499,16 +518,6 @@ bool SimpleUI::isErrorPageActive() void SimpleUI::switchViewToHomePage() { -#if MERGE_ME // remove - if(!isHomePageActive()){ - evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); - elm_object_part_content_unset(m_mainLayout, "web_view"); - elm_object_part_content_set(m_mainLayout, "web_view", m_bookmarksUI->getContent()); - evas_object_show(m_bookmarksUI->getContent()); - //m_simpleURI->changeUri(HomePageURL); - filterURL(HomePageURL); - } -#endif BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive); if(isHomePageActive()) return; @@ -528,8 +537,6 @@ void SimpleUI::switchViewToHomePage() elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui"); elm_object_signal_emit(m_simpleURI->getContent(), "shiftback_uribg", "ui"); - webTitleBar->hide(); - hideProgressBar(); } @@ -577,23 +584,13 @@ void SimpleUI::bookmarkCheck() //addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); } } - +// Consider removing these functions void SimpleUI::onBookmarkAdded(std::shared_ptr bookmarkItem) { -#if 0 - BROWSER_LOGI("Bookmark added with address %s",bookmarkItem->getAddress().c_str()); - bookmarkCheck(); - webTitleBar->removeFavIcon(); - webTitleBar->show("Added to favorites"); -#endif } void SimpleUI::onHistoryAdded(std::shared_ptr historyItem) { -#if 0 - m_mainUI->addHistoryItem(historyItem); - BROWSER_LOGI("Bookmark added with address %s",historyItem->getUrl().c_str()); -#endif } void SimpleUI::onOpenURLInNewTab(std::shared_ptr historyItem, bool desktopMode) @@ -678,20 +675,15 @@ void SimpleUI::onBookmarkDeleteClicked(std::shared_ptrdeleteBookmark(bookmarkItem->getAddress()); } +// Consider removing these functions void SimpleUI::onBookmarkRemoved(const std::string& uri) { -#if 0 BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str()); - bookmarkCheck(); - webTitleBar->removeFavIcon(); - webTitleBar->show("Removed from favorites"); -#endif } void SimpleUI::onHistoryRemoved(const std::string& uri) { BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str()); - //m_mainUI->removeHistoryItem(uri.c_str()); } void SimpleUI::onReturnPressed(MenuButton *m) @@ -738,14 +730,10 @@ void SimpleUI::stopEnable(bool enable) void SimpleUI::addBookmarkEnable(bool enable) { - //MERGE_ME - //m_bookmark->setEnabled(enable); } void SimpleUI::removeBookmarkEnable(bool enable) { - //MERGE_ME - //m_unbookmark->setEnabled(enable); } void SimpleUI::zoomEnable(bool enable) { @@ -769,11 +757,6 @@ void SimpleUI::loadStarted() if(!m_webEngine->isPrivateMode()){ m_currentSession.updateItem(m_webEngine->currentTabId().toString(), m_webEngine->getURI()); } - -#if 0 - if(!m_platformInputManager->getPointerModeEnabled()) - elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); -#endif } void SimpleUI::progressChanged(double progress) @@ -803,10 +786,6 @@ void SimpleUI::loadFinished() m_webEngine->getTitle(), m_webEngine->getFavicon()), m_webEngine->getSnapshotData(MainUI::MAX_THUMBNAIL_WIDTH, MainUI::MAX_THUMBNAIL_HEIGHT)); } -#if 0 - if(!m_platformInputManager->getPointerModeEnabled()) - elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); -#endif } void SimpleUI::loadError() @@ -830,8 +809,7 @@ void SimpleUI::setErrorButtons() void SimpleUI::filterURL(const std::string& url) { - BROWSER_LOGD("[%s] url=%s", __func__, url.c_str()); - + BROWSER_LOGD("[%s:%d] url=%s", __PRETTY_FUNCTION__, __LINE__, url.c_str()); //check for special urls (like: 'about:home') //if there will be more addresses may be we should //create some kind of std::man @@ -1057,38 +1035,13 @@ void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptrgetContent(m_mainLayout)); - evas_object_hide(rightButtonBar->getContent()); - evas_object_hide(leftButtonBar->getContent()); - elm_object_part_content_unset(m_mainLayout, "uri_entry"); - elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left"); - elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right"); -} - -void SimpleUI::showURIBar() -{ - elm_object_part_content_unset(m_mainLayout, "uri_entry"); - elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left"); - elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right"); - elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout)); - elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent()); - elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent()); - evas_object_show(m_simpleURI->getContent(m_mainLayout)); - evas_object_show(leftButtonBar->getContent()); - evas_object_show(rightButtonBar->getContent()); - m_simpleURI->setFocus(); -} -#endif - void SimpleUI::hideWebView() { - evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); - elm_object_part_content_unset(m_mainLayout, "web_view"); + evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); + elm_object_part_content_unset(m_mainLayout, "web_view"); } +//TODO: move it to ViewController void SimpleUI::hideMainUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -1261,6 +1214,7 @@ void SimpleUI::showBookmarkManagerMenu() void SimpleUI::updateBookmarkManagerGenGrid(int folder_id) { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_bookmarkManagerUI->updateGengrid(); m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders(folder_id)); m_bookmarkManagerUI->addBookmarkItems(getBookmarks(folder_id)); @@ -1286,12 +1240,14 @@ void SimpleUI::closeBookmarkManagerMenu(std::string& str) void SimpleUI::openLinkFromPopup(const std::string &uri) { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); filterURL(uri); hidePopup(); } void SimpleUI::hideHistory() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); hidePopup(); } @@ -1334,8 +1290,6 @@ void SimpleUI::onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr< m_webEngine->clearPrivateData(); if (dataText.find("HISTORY") != std::string::npos) m_historyService->clearAllHistory(); - //webTitleBar->removeFavIcon(); - //webTitleBar->show("History deleted"); } } @@ -1356,9 +1310,6 @@ void SimpleUI::onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr< P if(button == OK){ BROWSER_LOGD("[%s]: OK", __func__); BROWSER_LOGD("[%s]: Deleting most visited", __func__); - /*m_historyService->clearAllHistory(); - webTitleBar->removeFavIcon(); - webTitleBar->show("History deleted");*/ } } @@ -1379,8 +1330,6 @@ void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupD if(button == OK){ BROWSER_LOGD("[%s]: OK", __func__); BROWSER_LOGD("[%s]: Resetting browser", __func__); - /*webTitleBar->removeFavIcon(); - webTitleBar->show("History deleted");*/ } } @@ -1454,7 +1403,6 @@ void SimpleUI::onNetworkConnected() } } - void SimpleUI::showProgressBar() { elm_object_signal_emit(m_mainLayout, "show_progressbar_bg", "ui"); @@ -1474,7 +1422,7 @@ void SimpleUI::searchWebPage(std::string &text, int flags) m_webEngine->searchOnWebsite(text, flags); } -void SimpleUI::favicon_clicked(void *data, Evas_Object */*obj*/, const char */*emission*/, const char */*source*/) +void SimpleUI::favicon_clicked(void *data, Evas_Object *, const char *, const char *) { BROWSER_LOGD("[%s],", __func__); SimpleUI *self = reinterpret_cast(data); @@ -1487,22 +1435,25 @@ void SimpleUI::favicon_clicked(void *data, Evas_Object */*obj*/, const char */*e void SimpleUI::addToBookmarks(int folder_id) { BROWSER_LOGD("[%s,%d],", __func__, __LINE__); - if (m_favoriteService) - { if( m_webEngine && !m_webEngine->getURI().empty()) - { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), - m_webEngine->getSnapshotData(373, 240), - m_webEngine->getFavicon(),(unsigned int)folder_id); - } - } + if (m_favoriteService) + { + if( m_webEngine && !m_webEngine->getURI().empty()) + { + m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), + m_webEngine->getSnapshotData(373, 240), + m_webEngine->getFavicon(),(unsigned int)folder_id); + } + } } +//TODO: This probably should be replaced by direct call of m_moreMenuUI->getBookmarkFolderList +// as it does nothing more. void SimpleUI::addBookmarkFolders(void) { if(m_moreMenuUI) m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders(ROOT_FOLDER)); } - void SimpleUI::newFolderBookmarkManager(const char* title, int by_operator) { BROWSER_LOGD("[%s,%d],", __func__, __LINE__); @@ -1531,7 +1482,8 @@ void SimpleUI::newFolderMoreMenu(const char* title, int by_operator) } } -void SimpleUI::deleteBookmark(void) +//TODO: Replace by direct call. +void SimpleUI::deleteBookmark() { if (m_favoriteService) m_favoriteService->deleteBookmark(m_webEngine->getURI()); diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 476d5dd..bd2eb6e 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -81,8 +81,19 @@ public: void destroyUI(); private: + // setup functions + void loadThemes(); void createActions(); void connectActions(); + void loadUIServices(); + void connectUISignals(); + void loadModelServices(); + void initModelServices(); + void connectModelSignals(); + void restoreLastSession(); + Evas_Object* createWebLayout(Evas_Object* parent); + Evas_Object* createErrorLayout(Evas_Object* parent); + void backEnable(bool enable); void forwardEnable(bool enable); @@ -125,6 +136,8 @@ private: std::vector > getBookmarkFolders(int folder_id); std::shared_ptr getHistory(); std::shared_ptr getMostVisitedItems(); + + //UI signal handling functions void onBookmarkAdded(std::shared_ptr bookmarkItem); void onBookmarkClicked(std::shared_ptr bookmarkItem); @@ -146,7 +159,6 @@ private: void onActionTriggered(const Action& action); - void loadThemes(); void setwvIMEStatus(bool status); -- 2.7.4 From f51dfb522dbcf29774a91bc1f697258347c107e9 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Fri, 11 Sep 2015 13:16:44 +0200 Subject: [PATCH 13/16] TT-165 Fixed browser crash after opening page from history/bookmarks [Issue#] https://bugs.tizen.org/jira/browse/TT-165 [Problem] Browser's crash after opening a page from bookmarks/history [Cause] Favicon was inserted into freed object [Solution] Added disconnects from signals after closing MoreMenu [Verify] New Tab -> MoreMenu -> History -> open page or New Tab -> Bookmarks -> open page Check if browser crashes Please keep in mind that disconnects are needed here because views are removed when exiting, which won't be done in future new browser's structure. Change-Id: I7a8db96b35d397b88196bbdbba21f526c73c2ec8 --- services/SimpleUI/SimpleUI.cpp | 28 ++++++++++++++++------------ services/SimpleUI/SimpleUI.h | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 0f539a5..43dea86 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -599,12 +599,12 @@ void SimpleUI::onOpenURLInNewTab(std::shared_ptrgetUrl(); if(m_historyUI) { // TODO: remove this section when naviframes will be available m_historyUI->clearItems(); - m_historyUI = nullptr; + closeHistoryUI(std::string()); } if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available m_moreMenuUI->clearItems(); - m_moreMenuUI = nullptr; + closeMoreMenu(std::string()); } openNewTab(historyAddress, desktopMode); } @@ -645,6 +645,7 @@ void SimpleUI::onBookmarkManagerButtonClicked(const std::string&) BROWSER_LOGD("[%s]", __func__); if(m_mainUI) { // TODO: remove this section when naviframes will be available m_mainUI->clearBookmarkGengrid(); + m_mainUI->clearHistoryGenlist(); } if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available @@ -659,12 +660,12 @@ void SimpleUI::onBookmarkClicked(std::shared_ptrgetAddress(); if(m_bookmarkManagerUI) { // TODO: remove this section when naviframes will be available m_bookmarkManagerUI->clearItems(); - m_bookmarkManagerUI = nullptr; + closeBookmarkManagerMenu(std::string()); } if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available m_moreMenuUI->clearItems(); - m_moreMenuUI = nullptr; + closeMoreMenu(std::string()); } openNewTab(bookmarkAddress); } @@ -1085,6 +1086,9 @@ void SimpleUI::showHistoryUI(const std::string& str) void SimpleUI::closeHistoryUI(const std::string& str) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_historyUI->clearHistoryClicked.disconnect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1)); + m_historyUI->closeHistoryUIClicked.disconnect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); + m_historyUI->historyItemClicked.disconnect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true)); // desktop mode as default m_historyUI.reset(); } @@ -1197,13 +1201,9 @@ void SimpleUI::showBookmarkManagerMenu() (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui")); M_ASSERT(m_bookmarkManagerUI); - m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect_all_slots(); m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); - m_bookmarkManagerUI->saveFolderClicked.disconnect_all_slots(); m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::newFolderBookmarkManager, this,_1,_2)); - m_bookmarkManagerUI->bookmarkItemClicked.disconnect_all_slots(); m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1)); - m_bookmarkManagerUI->folderItemClicked.disconnect_all_slots(); m_bookmarkManagerUI->folderItemClicked.connect(boost::bind(&SimpleUI::updateBookmarkManagerGenGrid, this,_1)); m_bookmarkManagerUI->show(m_window.get()); m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders(ROOT_FOLDER)); @@ -1222,19 +1222,23 @@ void SimpleUI::updateBookmarkManagerGenGrid(int folder_id) m_curr_folder_id = folder_id; } -void SimpleUI::closeBookmarkManagerMenu(std::string& str) +void SimpleUI::closeBookmarkManagerMenu(const std::string& str) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); + m_bookmarkManagerUI->saveFolderClicked.disconnect(boost::bind(&SimpleUI::newFolderBookmarkManager, this,_1,_2)); + m_bookmarkManagerUI->bookmarkItemClicked.disconnect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1)); + m_bookmarkManagerUI->folderItemClicked.disconnect(boost::bind(&SimpleUI::updateBookmarkManagerGenGrid, this,_1)); m_bookmarkManagerUI.reset(); if(m_moreMenuUI) { - m_moreMenuUI.reset(); + closeMoreMenu(std::string()); showMoreMenu(); } if(m_mainUI) { - m_mainUI->addBookmarkItems(getBookmarks()); - m_mainUI->showBookmarks(); + m_mainUI->addHistoryItems(getMostVisitedItems()); + m_mainUI->showHistory(); } } diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index bd2eb6e..ce52557 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -258,7 +258,7 @@ private: void showProgressBar(); void hideProgressBar(); - void closeBookmarkManagerMenu(std::string& str); + void closeBookmarkManagerMenu(const std::string& str); void updateBookmarkManagerGenGrid(int folder_id); void showBookmarkManagerMenu(); -- 2.7.4 From 2b530a8ed593b9418c7c8fa9f7fe44d0e521a486 Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Mon, 14 Sep 2015 12:25:36 +0200 Subject: [PATCH 14/16] Refactoring - removed genlist from Quick Access tiles. [Issue] N/A [Problem] Genlist were unneeded for tiles. [Cause] N/A [Solution] Removed genlist, added aditional swallows for tiles. Change-Id: I9a561d2973c9db0b70f413792dfdab4a2e7c24ab Signed-off-by: Maciej Skrzypkowski --- services/MainUI/DetailPopup.cpp | 1 + services/MainUI/MainUI.cpp | 176 ++++------- services/MainUI/MainUI.h | 19 +- services/MainUI/edc/MainUI.edc | 638 ++++++++++++++++++++-------------------- 4 files changed, 382 insertions(+), 452 deletions(-) diff --git a/services/MainUI/DetailPopup.cpp b/services/MainUI/DetailPopup.cpp index 9d2f1ea..a058691 100644 --- a/services/MainUI/DetailPopup.cpp +++ b/services/MainUI/DetailPopup.cpp @@ -101,6 +101,7 @@ void DetailPopup::hide() evas_object_smart_callback_del(m_historyList, "pressed", _history_url_click); elm_genlist_clear(m_historyList); evas_object_hide(m_layout); + evas_object_del(m_layout); } void DetailPopup::_bg_click(void* data, Evas_Object*, const char*, const char*) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index 1367a87..afddf7c 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -31,12 +31,19 @@ namespace tizen_browser{ namespace base_ui{ -const int SMALL_TILES_ROWS = 2; -const int MAX_TILES_NUMBER = 5; +EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui") + +const int MainUI::MAX_TILES_NUMBER = 5; const int MainUI::MAX_THUMBNAIL_WIDTH = 840; const int MainUI::MAX_THUMBNAIL_HEIGHT = 648; - -EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui") +const int MainUI::BIG_TILE_INDEX = 0; +const std::vector MainUI::TILES_NAMES = { + "elm.swallow.big", + "elm.swallow.small_first", + "elm.swallow.small_second", + "elm.swallow.small_third", + "elm.swallow.small_fourth" +}; typedef struct _HistoryItemData { @@ -53,16 +60,11 @@ typedef struct _BookmarkItemData MainUI::MainUI() : m_parent(nullptr) , m_layout(nullptr) - , m_bookmarksButton(nullptr) - , m_mostVisitedButton(nullptr) , m_bookmarksView(nullptr) , m_mostVisitedView(nullptr) + , m_bookmarksButton(nullptr) + , m_mostVisitedButton(nullptr) , m_bookmarkGengrid(nullptr) - , m_genListLeft(nullptr) - , m_genListCenter(nullptr) - , m_genListRight(nullptr) - , m_big_item_class(nullptr) - , m_small_item_class(nullptr) , m_bookmark_item_class(nullptr) , m_detailPopup(this) { @@ -76,32 +78,12 @@ MainUI::MainUI() MainUI::~MainUI() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - elm_genlist_item_class_free(m_big_item_class); - elm_genlist_item_class_free(m_small_item_class); elm_gengrid_item_class_free(m_bookmark_item_class); } void MainUI::createItemClasses() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - if (!m_big_item_class) { - m_big_item_class = elm_genlist_item_class_new(); - m_big_item_class->item_style = "big_grid_item"; - m_big_item_class->func.text_get = _grid_text_get; - m_big_item_class->func.content_get = _grid_content_get; - m_big_item_class->func.state_get = nullptr; - m_big_item_class->func.del = nullptr; - } - - if (!m_small_item_class) { - m_small_item_class = elm_genlist_item_class_new(); - m_small_item_class->item_style = "small_grid_item"; - m_small_item_class->func.text_get = _grid_text_get; - m_small_item_class->func.content_get = _grid_content_get; - m_small_item_class->func.state_get = nullptr; - m_small_item_class->func.del = nullptr; - } - if (!m_bookmark_item_class) { m_bookmark_item_class = elm_gengrid_item_class_new(); m_bookmark_item_class->item_style = "grid_item"; @@ -150,37 +132,6 @@ Evas_Object* MainUI::createMostVisitedView (Evas_Object * parent) evas_object_size_hint_weight_set(mostVisitedLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set (mostVisitedLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); - Evas_Object* genListLeft = elm_genlist_add(mostVisitedLayout); - - elm_genlist_homogeneous_set(genListLeft, EINA_FALSE); - elm_genlist_multi_select_set(genListLeft, EINA_FALSE); - elm_genlist_select_mode_set(genListLeft, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(genListLeft, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(genListLeft, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - elm_object_part_content_set(mostVisitedLayout, "elm.swallow.left", genListLeft); - m_genListLeft = genListLeft; - - Evas_Object* genListCenter = elm_genlist_add(mostVisitedLayout); - elm_genlist_homogeneous_set(genListCenter, EINA_FALSE); - elm_genlist_multi_select_set(genListCenter, EINA_FALSE); - elm_genlist_select_mode_set(genListCenter, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(genListCenter, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(genListCenter, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - elm_object_part_content_set(mostVisitedLayout, "elm.swallow.center", genListCenter); - m_genListCenter = genListCenter; - - Evas_Object* genListRight = elm_genlist_add(mostVisitedLayout); - elm_genlist_homogeneous_set(genListRight, EINA_FALSE); - elm_genlist_multi_select_set(genListRight, EINA_FALSE); - elm_genlist_select_mode_set(genListRight, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(genListRight, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(genListRight, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - elm_object_part_content_set(mostVisitedLayout, "elm.swallow.right", genListRight); - m_genListRight=genListRight; - Evas_Object* topButtons = createTopButtons(mostVisitedLayout); elm_object_part_content_set(mostVisitedLayout, "elm.swallow.layoutTop", topButtons); @@ -272,21 +223,21 @@ Evas_Object* MainUI::createBottomButton(Evas_Object *parent) return layoutBottom; } -void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void MainUI::_mostVisited_clicked(void * data, Evas_Object *, void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = reinterpret_cast(data); mainUI->mostVisitedClicked(std::string()); } -void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void MainUI::_bookmark_clicked(void * data, Evas_Object *, void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = reinterpret_cast(data); mainUI->bookmarkClicked(std::string()); } -void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void MainUI::_bookmark_manager_clicked(void * data, Evas_Object *, void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = static_cast(data); @@ -296,33 +247,38 @@ void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, voi void MainUI::addHistoryItem(std::shared_ptr hi) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - if (m_map_history_views.size() >= MAX_TILES_NUMBER) - return; + M_ASSERT(m_historyItems.size() < MAX_TILES_NUMBER); + int tileNumber = m_historyItems.size(); HistoryItemData *itemData = new HistoryItemData(); itemData->item = hi; itemData->mainUI = std::shared_ptr(this); - Elm_Object_Item* historyView = nullptr; - - if (m_map_history_views.empty()) - { - BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); - historyView = elm_genlist_item_append(m_genListLeft, m_big_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); - } else if (m_map_history_views.size() <= SMALL_TILES_ROWS) { - BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); - historyView = elm_genlist_item_append(m_genListCenter, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); - } else { - BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); - historyView = elm_genlist_item_append(m_genListRight, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); - } - m_map_history_views.insert(std::pair(hi->getUrl(),historyView)); + Evas_Object* tile = elm_layout_add(m_mostVisitedView); + if (tileNumber == BIG_TILE_INDEX) + elm_layout_file_set(tile, edjFilePath.c_str(), "big_tile"); + else + elm_layout_file_set(tile, edjFilePath.c_str(), "small_tile"); + evas_object_size_hint_weight_set(tile, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set (tile, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(tile); + elm_object_part_content_set(m_mostVisitedView, TILES_NAMES[tileNumber].c_str(), tile); + m_tiles.push_back(tile); + + elm_layout_text_set(tile, "page_title", hi->getTitle().c_str()); + elm_layout_text_set(tile, "page_url", hi->getUrl().c_str()); + Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(hi->getThumbnail(), m_parent); + elm_object_part_content_set(tile, "elm.thumbnail", thumb); + edje_object_signal_callback_add(elm_layout_edje_get(tile), "mouse,clicked,1", "over", _thumbClicked, itemData); + + m_historyItems.push_back(hi); } void MainUI::addHistoryItems(std::shared_ptr items) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); int i = 0; + m_historyItems.clear(); for (auto it = items->begin(); it != items->end(); ++it) { i++; if (i > MAX_TILES_NUMBER) @@ -354,17 +310,6 @@ void MainUI::addBookmarkItems(std::vector(data); - if (!strcmp(part, "page_title")) { - return strdup(itemData->item->getTitle().c_str()); - } - if (!strcmp(part, "page_url")) { - return tools::clearURL(itemData->item->getUrl()); - } - return strdup(""); -} char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *, const char *part) { @@ -378,29 +323,6 @@ char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *, const char *par return strdup(""); } -Evas_Object * MainUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) -{ - BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - HistoryItemData *itemData = reinterpret_cast(data); - - if (!strcmp(part, "elm.thumbnail")) { - if (itemData->item->getThumbnail()) { - Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent); - return thumb; - } - else { - return nullptr; - } - } - else if (!strcmp(part, "elm.thumbButton")) { - Evas_Object *thumbButton = elm_button_add(obj); - elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", _thumbSelected, data); - return thumbButton; - } - return nullptr; -} - Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part) { BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); @@ -424,8 +346,16 @@ Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, c return nullptr; } -void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +void MainUI::_thumbSelected(void * data, Evas_Object * , void *) { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + HistoryItemData * itemData = reinterpret_cast(data); + itemData->mainUI->mostVisitedTileClicked(itemData->item, DetailPopup::HISTORY_ITEMS_NO); +} + +void MainUI::_thumbClicked(void* data, Evas_Object *, const char *, const char *) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); HistoryItemData * itemData = reinterpret_cast(data); itemData->mainUI->mostVisitedTileClicked(itemData->item, DetailPopup::HISTORY_ITEMS_NO); } @@ -434,10 +364,10 @@ void MainUI::clearHistoryGenlist() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - elm_genlist_clear(m_genListRight); - elm_genlist_clear(m_genListLeft); - elm_genlist_clear(m_genListCenter); - m_map_history_views.clear(); + for (auto it = m_tiles.begin(); it != m_tiles.end(); ++it) + edje_object_signal_callback_del(elm_layout_edje_get(*it), "mouse,clicked,1", "over", _thumbClicked); + + m_historyItems.clear(); } void MainUI::showHistory() @@ -455,7 +385,7 @@ void MainUI::showHistory() elm_object_focus_set(m_mostVisitedButton, true); - if (m_map_history_views.empty()) { + if (m_historyItems.empty()) { setEmptyView(true); return; } @@ -511,10 +441,6 @@ void MainUI::openDetailPopup(std::shared_ptr currItem, st void MainUI::showNoHistoryLabel() { - evas_object_hide(elm_object_part_content_get(m_mostVisitedView, "elm.swallow.left")); - evas_object_hide(elm_object_part_content_get(m_mostVisitedView, "elm.swallow.right")); - evas_object_hide(elm_object_part_content_get(m_mostVisitedView, "elm.swallow.center")); - elm_layout_text_set(m_mostVisitedView, "elm.text.empty", "No visited site"); elm_layout_signal_emit(m_mostVisitedView, "empty,view", "mainui"); } diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 9814981..7994674 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -75,14 +75,10 @@ private: Evas_Object* createBottomButton(Evas_Object *parent); Evas_Object* createTopButtons(Evas_Object *parent); - 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); static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part); - static void _itemSelected(void * data, Evas_Object * obj, void * event_info); - static void _item_deleted(void *data, Evas_Object *obj); static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); - static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); + static void _thumbClicked(void *data, Evas_Object *obj, const char *emission, const char *source); void setEmptyView(bool empty); void showNoHistoryLabel(); @@ -97,20 +93,19 @@ private: Evas_Object *m_bookmarksButton; Evas_Object *m_mostVisitedButton; Evas_Object *m_bookmarkGengrid; - Evas_Object *m_genListLeft; - Evas_Object *m_genListCenter; - Evas_Object *m_genListRight; + std::vector m_tiles; - Elm_Gengrid_Item_Class * m_big_item_class; - Elm_Gengrid_Item_Class * m_small_item_class; Elm_Gengrid_Item_Class * m_bookmark_item_class; - DetailPopup m_detailPopup; - std::multimap m_map_history_views; + services::HistoryItemVector m_historyItems; std::map m_map_bookmark_views; bool m_gengridSetup; std::string edjFilePath; bool m_desktopMode; + + static const int MAX_TILES_NUMBER; + static const int BIG_TILE_INDEX; + static const std::vector TILES_NAMES; }; } diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index 030e8dd..0625a90 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -20,43 +20,33 @@ collections { #define ITEM_WIDTH 374 #define PARENT_ITEM_HEIGHT 36 - group{ - name: "elm/button/base/invisible_button"; - parts{ - part{ - name: "button"; - type: RECT; - scale: 1; - description { state: "default" 0.0; - visible: 1; - fixed: 1 1; - color: 0 0 0 0; - } - } - part{ - name: "over"; - type: RECT; - scale: 1; - description { state: "default" 0.0; - visible: 1; - fixed: 1 1; - rel1 { relative: 0.0 0.0;to: "button";} - rel2 { relative: 1.0 1.0;to: "button";} - color: 0 0 0 0; - } +group{ + name: "elm/button/base/invisible_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; } } - programs{ - program { - name: "mouse_click"; - signal: "mouse,clicked,1"; - source: "over"; - script { - emit("elm,action,click", ""); - } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; } } } +} group { name: "elm/button/base/thumbButton"; images { @@ -90,243 +80,314 @@ group { name: "mv_bookmarks"; data { item: "focus_highlight" "off"; } - images { - image: "web_shadow.png" COMP; - } - color_classes{ - color_class{ - name: "defaultBgColor"; - color: 18 22 34 255; - } - color_class{ - name: "focusBgColor"; - color: 0 119 246 255; + images { + image: "web_shadow.png" COMP; + } + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 0 119 246 255; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusbtBgColor"; + color: 22 120 224 255; + } + color_class{ + name: "titleTextColor"; + color: 74 74 74 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + + parts { + part { name: "layoutTop_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + min: 0 181; + max: -1 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; offset: 0 104; + } + rel2{ + relative: 1 1; + } } - color_class{ - name: "imageHighlight"; - color: 255 255 255 102; + } + part { name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + min: 1920 626; + max: -1 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + to: "layoutTop_bg"; + relative: 0 1; + } + rel2{ + relative: 1 1; + } } - color_class{ - name: "focusbtBgColor"; - color: 22 120 224 255; + } + part { name: "layoutBottom_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 1; to: "gengrid_bg"; + } + rel2{ + relative: 1 1; + } } - color_class{ - name: "titleTextColor"; - color: 74 74 74 255; + } + + part { name: "elm.swallow.grid"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 614; + max: 1920 614; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 63 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } } - color_class{ - name: "focusTextColor"; - color: 255 255 255 255; + } + + part { name: "center_rect"; + type: RECT; + description { state: "default" 0.0; + min: 1592 614; + max: 1592 614; + visible: 0; + align: 0.5 0.0; + rel1 { + to: "gengrid_bg"; + relative: 0 0; + } + rel2 { + to: "gengrid_bg"; + relative: 1 1; + } } - color_class{ - name: "highlightTextColor"; - color: 255 255 255 51; + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 229 229 229 255; } - color_class{ - name: "urlTextColor"; - color: 116 116 116 204; + } + + part { name: "elm.swallow.big"; + type: SWALLOW; + description { state: "default" 0.0; + min: 784 614; + max: 784 614; + align: 0.0 0.0; + fixed: 0 0; + visible: 1; + rel1 { + relative: 0 0; to: "center_rect"; + } + rel2 { + relative: 1 1; + offset: 0 0; + } } - color_class{ - name: "transparent"; - color: 0 0 0 0; + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 0; } } - parts { - part { name: "layoutTop_bg"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - color: 255 255 255 255; - min: 0 181; - max: -1 181; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - relative: 0 0; offset: 0 104; - } - rel2{ - relative: 1 1; - } + part { name: "elm.swallow.small_first"; + type: SWALLOW; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + align: 0.0 0.0; + fixed: 0 0; + visible: 1; + rel1 { + to: "center_rect"; + relative: 0 0; + offset: 810 0; } - } - part { name: "gengrid_bg"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - color: 255 255 255 255; - min: 1920 626; - max: -1 626; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - to: "layoutTop_bg"; - relative: 0 1; - } - rel2{ - relative: 1 1; - } + rel2{ + to: "center_rect"; + relative: 1 1; + offset: 0 0; } } - part { name: "layoutBottom_bg"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - color: 255 255 255 255; - min: 1920 181; - max: 1920 181; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - relative: 0 1; to: "gengrid_bg"; - } - rel2{ - relative: 1 1; - } - } + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 0; } + } - part { name: "elm.swallow.grid"; - type: SWALLOW; - description { state: "default" 0.0; - min: 1920 614; - max: 1920 614; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - relative: 0 0; to: "gengrid_bg"; offset: 63 0; - } - rel2 { - relative: 1 1; - offset: 0 0; - } + part { name: "elm.swallow.small_second"; + type: SWALLOW; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + align: 0.0 0.0; + fixed: 0 0; + visible: 1; + rel1 { + to: "center_rect"; + relative: 0 0; + offset: 810 320; + } + rel2{ + to: "center_rect"; + relative: 1 1; + offset: 0 0; } } + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } - part { name: "center_rect"; - type: RECT; - description { state: "default" 0.0; - min: 1592 614; - max: 1592 614; - visible: 0; - align: 0.5 0.0; - rel1 { - to: "gengrid_bg"; - relative: 0 0; - } - rel2 { - to: "gengrid_bg"; - relative: 1 1; - } + part { name: "elm.swallow.small_third"; + type: SWALLOW; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + align: 0.0 0.0; + fixed: 0 0; + visible: 1; + rel1 { + to: "center_rect"; + relative: 0 0; + offset: 1214 0; } - description { state: "empty" 0.0; - inherit: "default" 0.0; - visible: 1; - color: 229 229 229 255; + rel2 { + to: "center_rect"; + relative: 1 1; + offset: 0 0; } } - part { name: "elm.swallow.left"; - type: SWALLOW; - description { state: "default" 0.0; - min: 784 614; - max: 784 614; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - relative: 0 0; to: "center_rect"; - } - rel2 { - relative: 1 1; - offset: 0 0; - } - } + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 0; } - part { name: "elm.swallow.center"; - type: SWALLOW; - description { state: "default" 0.0; - min: 378 614; - max: 378 614; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - to: "center_rect"; - relative: 0 0; - offset: 810 0; - } - rel2{ - to: "center_rect"; - relative: 1 1; - offset: 0 0; - } + } + + part { name: "elm.swallow.small_fourth"; + type: SWALLOW; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + align: 0.0 0.0; + fixed: 0 0; + visible: 1; + rel1 { + to: "center_rect"; + relative: 0 0; + offset: 1214 320; } - } - part { name: "elm.swallow.right"; - type: SWALLOW; - description { state: "default" 0.0; - min: 378 614; - max: 378 614; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - to: "center_rect"; - relative: 0 0; - offset: 1214 0; - } - rel2 { - to: "center_rect"; - relative: 1 1; - offset: 0 0; - } + rel2 { + to: "center_rect"; + relative: 1 1; + offset: 0 0; } } + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } - part { name: "elm.swallow.layoutTop"; - type: SWALLOW; - description { state: "default" 0.0; - min: 1920 181; - max: 1920 181; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - relative: 0 0; to: "layoutTop_bg"; - } - rel2 { - relative: 1 1; - offset: 0 0; - } + part { name: "elm.swallow.layoutTop"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "layoutTop_bg"; + } + rel2 { + relative: 1 1; + offset: 0 0; } } - part { name: "uri_bar_shadow"; - type: IMAGE; - scale: 1; - repeat_events: 1; - description { - state: "default" 0.0; - visible: 1; - align: 0.0 0.0; - fixed: 0 0; - min: 1920 14; - max: 1920 14; - image.normal: "web_shadow.png"; - rel1 { relative: 0.0 0.0; to: "elm.swallow.layoutTop"; } - rel2 { relative: 1.0 1.0; } + } + + part { name: "uri_bar_shadow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + fixed: 0 0; + min: 1920 14; + max: 1920 14; + image.normal: "web_shadow.png"; + rel1 { relative: 0.0 0.0; to: "elm.swallow.layoutTop"; } + rel2 { relative: 1.0 1.0; } + } + } + + part { name: "elm.swallow.layoutBottom"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + to: "layoutBottom_bg"; + relative: 0 0; } - } - part { name: "elm.swallow.layoutBottom"; - type: SWALLOW; - description { state: "default" 0.0; - min: 1920 181; - max: 1920 181; - align: 0.0 0.0; - fixed: 0 0; - rel1 { - relative: 0 0; to: "layoutBottom_bg"; - } - rel2 { - relative: 1 1; - offset: 0 0; - } + rel2 { + relative: 1 1; + offset: 0 0; } + } } part { name: "elm.text.empty"; @@ -362,6 +423,11 @@ group { name: "mv_bookmarks"; signal: "empty,view"; source: "mainui"; action: STATE_SET "empty" 0.0; + target: "elm.swallow.big"; + target: "elm.swallow.small_first"; + target: "elm.swallow.small_second"; + target: "elm.swallow.small_third"; + target: "elm.swallow.small_fourth"; target: "elm.text.empty"; target: "center_rect"; } @@ -371,13 +437,18 @@ group { name: "mv_bookmarks"; action: STATE_SET "default" 0.0; target: "elm.text.empty"; target: "center_rect"; + target: "elm.swallow.big"; + target: "elm.swallow.small_first"; + target: "elm.swallow.small_second"; + target: "elm.swallow.small_third"; + target: "elm.swallow.small_fourth"; } } } -group { name: "elm/genlist/item/big_grid_item/default"; +group { name: "big_tile"; data.item: "texts" "page_title page_url"; - data.item: "contents" "elm.thumbnail elm.thumbButton"; + data.item: "contents" "elm.thumbnail"; min: 600 614; max: 600 614; images { @@ -531,14 +602,6 @@ group { name: "elm/genlist/item/big_grid_item/default"; align: 0 0.5; } } - description { state: "focus" 0.0; - inherit: "default" 0.0; - color_class: focusTextColor; - } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color_class: highlightTextColor; - } } part { name: "page_url"; @@ -564,25 +627,9 @@ group { name: "elm/genlist/item/big_grid_item/default"; align: 0 0.5; } } - description { state: "focus" 0.0; - inherit: "default" 0.0; - color_class: focusTextColor; - } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color_class: highlightTextColor; - } } - part { name: "elm.thumbButton"; - type: SWALLOW; - description { state: "default" 0.0; - rel1.to: "bg"; - rel2.to: "bg"; - } - } - - part { name: "over2"; + part { name: "over"; type: RECT; mouse_events: 1; repeat_events: 1; @@ -592,22 +639,12 @@ group { name: "elm/genlist/item/big_grid_item/default"; rel2.to: "background"; } } - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } } programs{ program { name: "mouse_in"; signal: "mouse,in"; - source: "over2"; + source: "over"; action: STATE_SET "selected" 0.0; target: "background"; target: "border_top"; @@ -616,7 +653,7 @@ group { name: "elm/genlist/item/big_grid_item/default"; } program { name: "mouse_out"; signal: "mouse,out"; - source: "over2"; + source: "over"; action: STATE_SET "default" 0.0; target: "background"; target: "border_top"; @@ -626,9 +663,9 @@ group { name: "elm/genlist/item/big_grid_item/default"; } } -group { name: "elm/genlist/item/small_grid_item/default"; +group { name: "small_tile"; data.item: "texts" "page_title page_url"; - data.item: "contents" "elm.thumbnail elm.thumbButton"; + data.item: "contents" "elm.thumbnail"; images { image: "web_frame_selected.png" COMP; image: "ico_bg_round_shape_37x37.png" COMP; @@ -839,15 +876,7 @@ group { name: "elm/genlist/item/small_grid_item/default"; } } - part { name: "elm.thumbButton"; - type: SWALLOW; - description { state: "default" 0.0; - rel1.to: "bg"; - rel2.to: "bg"; - } - } - - part { name: "over2"; + part { name: "over"; type: RECT; mouse_events: 1; repeat_events: 1; @@ -857,23 +886,12 @@ group { name: "elm/genlist/item/small_grid_item/default"; rel2.to: "background"; } } - - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } } programs { program { name: "mouse_in"; signal: "mouse,in"; - source: "over2"; + source: "over"; action: STATE_SET "selected" 0.0; target: "background"; target: "border_top"; @@ -882,7 +900,7 @@ group { name: "elm/genlist/item/small_grid_item/default"; } program { name: "mouse_out"; signal: "mouse,out"; - source: "over2"; + source: "over"; action: STATE_SET "default" 0.0; target: "background"; target: "border_top"; @@ -1053,7 +1071,7 @@ group { name: "elm/gengrid/item/grid_item/default"; } } - part { name: "over2"; + part { name: "over"; type: RECT; mouse_events: 1; repeat_events: 1; @@ -1063,22 +1081,12 @@ group { name: "elm/gengrid/item/grid_item/default"; rel2.to: "background"; } } - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } } programs{ program { name: "mouse_in"; signal: "mouse,in"; - source: "over2"; + source: "over"; action: STATE_SET "selected" 0.0; target: "background"; target: "focus_highlight"; @@ -1086,7 +1094,7 @@ group { name: "elm/gengrid/item/grid_item/default"; } program { name: "mouse_out"; signal: "mouse,out"; - source: "over2"; + source: "over"; action: STATE_SET "default" 0.0; target: "background"; target: "focus_highlight"; -- 2.7.4 From 571cf603958864b0df21cb070d5b7a281c11d2e6 Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Mon, 14 Sep 2015 13:07:04 +0200 Subject: [PATCH 15/16] Added proper handler for bookmark click in Quick Access view. [Issue] N/A [Problem] Clicking on bookmark caused opening popup or crashing. [Cause] Wrong callback was assigned to bookmark click. [Solution] Changed callback to opening new tab. Change-Id: I85dbaa29ba83005e25a4796f80a80c901a23a1f9 Signed-off-by: Maciej Skrzypkowski --- services/MainUI/MainUI.cpp | 6 +++--- services/MainUI/MainUI.h | 3 ++- services/SimpleUI/SimpleUI.cpp | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index afddf7c..3822075 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -340,17 +340,17 @@ Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, c else if (!strcmp(part, "elm.thumbButton")) { Evas_Object *thumbButton = elm_button_add(obj); elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", _thumbSelected, data); + evas_object_smart_callback_add(thumbButton, "clicked", _thumbBookmarkClicked, data); return thumbButton; } return nullptr; } -void MainUI::_thumbSelected(void * data, Evas_Object * , void *) +void MainUI::_thumbBookmarkClicked(void * data, Evas_Object * , void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); HistoryItemData * itemData = reinterpret_cast(data); - itemData->mainUI->mostVisitedTileClicked(itemData->item, DetailPopup::HISTORY_ITEMS_NO); + itemData->mainUI->openURLInNewTab(itemData->item, itemData->mainUI->isDesktopMode()); } void MainUI::_thumbClicked(void* data, Evas_Object *, const char *, const char *) diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 7994674..94fa9d9 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -59,6 +59,7 @@ public: void addBookmarkItems(std::vector >); boost::signals2::signal, int)> mostVisitedTileClicked; + boost::signals2::signal, bool)> openURLInNewTab; boost::signals2::signal mostVisitedClicked; boost::signals2::signal bookmarkClicked; boost::signals2::signal bookmarkManagerClicked; @@ -77,7 +78,7 @@ private: static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part); - static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _thumbBookmarkClicked(void * data, Evas_Object * obj, void * event_info); static void _thumbClicked(void *data, Evas_Object *obj, const char *emission, const char *source); void setEmptyView(bool empty); void showNoHistoryLabel(); diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 43dea86..6d39786 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -286,6 +286,7 @@ void SimpleUI::connectUISignals() M_ASSERT(m_mainUI.get()); m_mainUI->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); + m_mainUI->openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); m_mainUI->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2)); m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); -- 2.7.4 From 1fc1fc36ce625d77f2580448a0505d3c26a8902e Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Fri, 11 Sep 2015 13:54:40 +0200 Subject: [PATCH 16/16] BookmarkManagerUI Implementing new AbstractUIComponent methods. [Issue#:] https://bugs.tizen.org/jira/browse/TT-157 [Problem:] New window management class needs AbstractUIComponent to have some view managing functions. [Cause:] N/A [Solution:] Implemented needed methods: void init(Evas_Object* parent) Evas_Object* getContent() void showUI() void hideUI() [Verify:] Change is not affecting browsers behaviour. Change-Id: Ia8f4eca29b82a54f239671f32bc6c43f9a47b7fe --- services/BookmarkManagerUI/BookmarkManagerUI.cpp | 97 ++++++++++++++++++------ services/BookmarkManagerUI/BookmarkManagerUI.h | 15 +++- 2 files changed, 87 insertions(+), 25 deletions(-) diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index cd50471..5d08bf0 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -58,16 +58,78 @@ BookmarkManagerUI::BookmarkManagerUI() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); edjFilePath = EDJE_DIR; edjFilePath.append("BookmarkManagerUI/BookmarkManagerUI.edj"); + createGengridItemClasses(); } BookmarkManagerUI::~BookmarkManagerUI() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(m_folder_item_class) + elm_gengrid_item_class_free(m_folder_item_class); + if(m_bookmark_item_class) + elm_gengrid_item_class_free(m_bookmark_item_class); +} + +void BookmarkManagerUI::createGengridItemClasses() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_folder_item_class = elm_gengrid_item_class_new(); + m_folder_item_class->item_style = "grid_bm_item"; + m_folder_item_class->func.text_get = _grid_folder_text_get; + m_folder_item_class->func.content_get = _grid_folder_content_get; + m_folder_item_class->func.state_get = nullptr; + m_folder_item_class->func.del = nullptr; + + m_bookmark_item_class = elm_gengrid_item_class_new(); + m_bookmark_item_class->item_style = "grid_ds_item"; + m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; + m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; + m_bookmark_item_class->func.state_get = nullptr; + m_bookmark_item_class->func.del = nullptr; } void BookmarkManagerUI::show(Evas_Object* parent) { + init(parent); + b_mm_layout=createBookmarksLayout(m_parent); + showUI(); +} + +void BookmarkManagerUI::init(Evas_Object* parent) +{ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(parent); m_parent = parent; +} + +void BookmarkManagerUI::showUI() +{ + evas_object_show(b_mm_layout); + //regenerate gengrid and genlist + createGenGrid(); + showTopContent(); +} + +void BookmarkManagerUI::hideUI() +{ + evas_object_hide(b_mm_layout); + evas_object_del(m_gengrid); + m_gengrid=nullptr; + evas_object_del(m_genList); + m_genList=nullptr; +} + +Evas_Object* BookmarkManagerUI::getContent() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_parent); + if (!b_mm_layout) + b_mm_layout = createBookmarksLayout(m_parent); + return b_mm_layout; +} + +Evas_Object* BookmarkManagerUI::createBookmarksLayout(Evas_Object* parent) +{ m_folder.clear(); elm_theme_extension_add(nullptr, edjFilePath.c_str()); b_mm_layout = elm_layout_add(parent); @@ -77,28 +139,14 @@ void BookmarkManagerUI::show(Evas_Object* parent) evas_object_show(b_mm_layout); createGenGrid(); - - if (!m_folder_item_class) { - m_folder_item_class = elm_gengrid_item_class_new(); - m_folder_item_class->item_style = "grid_bm_item"; - m_folder_item_class->func.text_get = _grid_folder_text_get; - m_folder_item_class->func.content_get = _grid_folder_content_get; - m_folder_item_class->func.state_get = nullptr; - m_folder_item_class->func.del = nullptr; - } - - if (!m_bookmark_item_class) { - m_bookmark_item_class = elm_gengrid_item_class_new(); - m_bookmark_item_class->item_style = "grid_ds_item"; - m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; - m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; - m_bookmark_item_class->func.state_get = nullptr; - m_bookmark_item_class->func.del = nullptr; - } + return b_mm_layout; } +//TODO: Make parend the argument and return created object to make code more modular. +// (After fixing window managment) void BookmarkManagerUI::createGenGrid() { + //TODO: After fixing window managment remove this. if(m_gengrid != nullptr) evas_object_del(m_gengrid); @@ -117,6 +165,9 @@ void BookmarkManagerUI::createGenGrid() elm_gengrid_item_size_set(m_gengrid, 404 * efl_scale, 320 * efl_scale); } +//TODO: Remove externall calls and make it private method. +// Make parend the argument and return created object +// to make code more modular.(After fixing window managment) void BookmarkManagerUI::showTopContent() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -269,7 +320,7 @@ Evas_Object * BookmarkManagerUI::getGenList() return m_genList; } -Evas_Object * BookmarkManagerUI::getContent() +Evas_Object * BookmarkManagerUI::getGenGrid() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); return m_gengrid; @@ -315,8 +366,8 @@ void BookmarkManagerUI::addBookmarkFolderItems(std::vector); @@ -62,7 +69,11 @@ public: boost::signals2::signal folderItemClicked; private: + Evas_Object* createBookmarksLayout(Evas_Object* parent); void createGenGrid(); + void createGengridItemClasses(); + Evas_Object *getGenList(); + Evas_Object *getGenGrid(); static char* _grid_folder_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_folder_content_get(void *data, Evas_Object *obj, const char *part); static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); -- 2.7.4