QuickAccess edit mode implementation 41/89141/2
authorDariusz Frankiewicz <d.frankiewic@samsung.com>
Tue, 20 Sep 2016 12:28:31 +0000 (14:28 +0200)
committerDariusz Frankiewicz <d.frankiewic@samsung.com>
Fri, 23 Sep 2016 08:15:00 +0000 (01:15 -0700)
[Issue]    http://suprem.sec.samsung.net/jira/browse/TWF-2102
           http://suprem.sec.samsung.net/jira/browse/TWF-2117
[Problem]  Editing quick access wasn't implemented.
[Solution] Implement edit mode and fix problem with X button.
[Verify]   Open quick access edit from more menu and try to
           delete some items.

Change-Id: I61990ecd076c19ad8f013fb02d9422b6a092dac4

services/MoreMenuUI/MoreMenuUI.h
services/QuickAccess/QuickAccess.cpp
services/QuickAccess/QuickAccess.h
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/WebPageUI/CMakeLists.txt
services/WebPageUI/EditQuickAccessUI.cpp [new file with mode: 0644]
services/WebPageUI/EditQuickAccessUI.h [new file with mode: 0644]
services/WebPageUI/WebPageUI.cpp
services/WebPageUI/WebPageUI.h

index c8fe84003a20087bbf786703c29d68885647671c..c3fa84dfde9eb1863976384d2712d72f64e8f83a 100755 (executable)
@@ -156,7 +156,6 @@ private:
     Elm_Gengrid_Item_Class * m_item_class;
     std::map<ItemType,Elm_Object_Item*> m_map_menu_views;
     std::string m_edjFilePath;
-    bool m_gengridSetup;
     bool m_desktopMode;
 #if PROFILE_MOBILE
     bool m_shouldShowFindOnPage;
index 1412138b1bcf6a89379b855743ebc244e4f56ad2..26be98fa81e24022d8745d0711054555e2927ad9 100644 (file)
@@ -58,6 +58,7 @@ QuickAccess::QuickAccess()
     , m_currPage(QuickAccess::QUICKACCESS_PAGE)
     , m_quickAccess_item_class(nullptr)
     , m_mostVisited_item_class(nullptr)
+    , m_state(QuickAccessState::Default)
     , m_index(nullptr)
     , m_verticalScroller(nullptr)
     , m_quickAccess_tile_class(nullptr)
@@ -170,6 +171,7 @@ void QuickAccess::createQuickAccessLayout(Evas_Object* parent)
 
 void QuickAccess::createBox(Evas_Object* parent)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (m_box)
         elm_box_clear(m_box);
     m_box = elm_box_add(parent);
@@ -205,7 +207,7 @@ void QuickAccess::createMostVisitedView(Evas_Object * parent)
     evas_object_show(m_mostVisitedGengrid);
 }
 
-void QuickAccess::createQuickAccessView (Evas_Object * parent)
+void QuickAccess::createQuickAccessView(Evas_Object * parent)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
@@ -468,11 +470,13 @@ Evas_Object * QuickAccess::_grid_bookmark_content_get(void *data, Evas_Object* o
 
             }
         }
-        if (!strcmp(part, "elm.button")) {
-            auto button = elm_button_add(obj);
-            elm_object_style_set(button, "delete_button");
-            evas_object_smart_callback_add(button, "clicked", __quckAccess_del_clicked, data);
-            return button;
+        if (itemData->quickAccess->m_state == QuickAccessState::Edit) {
+            if (!strcmp(part, "elm.button")) {
+                auto button = elm_button_add(obj);
+                elm_object_style_set(button, "delete_button");
+                evas_object_smart_callback_add(button, "clicked", __quckAccess_del_clicked, data);
+                return button;
+            }
         }
     }
     return nullptr;
@@ -490,6 +494,9 @@ void QuickAccess::__quckAccess_del_clicked(void *data, Evas_Object */*obj*/, voi
     BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__);
     auto itemData = static_cast<BookmarkItemData*>(data);
     itemData->quickAccess->deleteQuickAccessItem(itemData->item);
+
+    elm_object_item_del(elm_gengrid_selected_item_get(itemData->quickAccess->m_quickAccessGengrid));
+    elm_gengrid_realized_items_update(itemData->quickAccess->m_quickAccessGengrid);
 }
 
 char *QuickAccess::_grid_mostVisited_text_get(void *data, Evas_Object *, const char *part)
@@ -529,8 +536,10 @@ void QuickAccess::_thumbQuickAccessClicked(void * data, Evas_Object * , void *)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
-    itemData->quickAccess->openURL(itemData->item, itemData->quickAccess->isDesktopMode());
-    itemData->quickAccess->m_after_history_thumb = false;
+    if (itemData->quickAccess->m_state == QuickAccessState::Default) {
+        itemData->quickAccess->openURL(itemData->item, itemData->quickAccess->isDesktopMode());
+        itemData->quickAccess->m_after_history_thumb = false;
+    }
 }
 
 void QuickAccess::_thumbMostVisitedClicked(void* data, Evas_Object*, void*)
@@ -571,11 +580,17 @@ void QuickAccess::showQuickAccess()
 void QuickAccess::editQuickAccess()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
+    m_state = QuickAccessState::Edit;
+    showUI();
     elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_TRUE);
+}
 
-    //TODO: show delete buttons in corners
-
+void QuickAccess::editingFinished()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_FALSE);
+    m_state = QuickAccessState::Default;
+    showUI();
 }
 
 void QuickAccess::showScrollerPage(int page)
@@ -596,25 +611,18 @@ void QuickAccess::showScrollerPage(int page)
 void QuickAccess::showUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    bool currentViewLandscape = isOrientationLandscape();
-    if (currentViewLandscape != m_landscapeView) {
-        m_landscapeView = currentViewLandscape;
-        createBox(m_horizontalScroller);
-    }
-
-    evas_object_show(m_layout);
-    getMostVisitedItems();
-    getQuickAccessItems();
+    orientationChanged();
     showScrollerPage(m_currPage);
 }
 
 void QuickAccess::hideUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    evas_object_hide(m_layout);
-    clearMostVisitedGengrid();
-    clearQuickAccessGengrid();
+    if (m_state == QuickAccessState::Default) {
+        evas_object_hide(m_layout);
+        clearMostVisitedGengrid();
+        clearQuickAccessGengrid();
+    }
 }
 
 void QuickAccess::showNoMostVisitedLabel()
index 3c5281ca783678c112d42a51ae2bdbb7296f22a2..1e23c6006063cf831d7bfbf6be10ade4f6cd1cfe 100644 (file)
 #include "services/HistoryService/HistoryItem.h"
 #include "services/HistoryService/HistoryItemTypedef.h"
 #include "BookmarkItem.h"
+#include "NaviframeWrapper.h"
 
 namespace tizen_browser{
 namespace base_ui{
 
+enum class QuickAccessState {
+    Default,
+    Edit,
+};
+
 class BROWSER_EXPORT QuickAccess
         : public tizen_browser::core::AbstractService
         , public interfaces::AbstractRotatable
@@ -42,6 +48,8 @@ public:
     ~QuickAccess();
     void init(Evas_Object *main_layout);
     Evas_Object* getContent();
+    Evas_Object* getQuickAccessGengrid() {return m_quickAccessGengrid;}
+    void setQuickAccessState(QuickAccessState state) {m_state = state;}
     void setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> vec);
     void setQuickAccessItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > vec);
     void hideUI();
@@ -56,6 +64,7 @@ public:
     void showMostVisited();
     void showQuickAccess();
     void editQuickAccess();
+    void editingFinished();
 
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, bool)> openURL;
     boost::signals2::signal<void ()> getMostVisitedItems;
@@ -119,9 +128,10 @@ private:
     Elm_Gengrid_Item_Class * m_quickAccess_item_class;
     Elm_Gengrid_Item_Class * m_mostVisited_item_class;
     std::shared_ptr<services::HistoryItemVector> m_mostVisitedItems;
-    bool m_gengridSetup;
     std::string edjFilePath;
     bool m_desktopMode;
+    QuickAccessState m_state;
+    SharedNaviframeWrapper m_naviframe;
 
     Evas_Object* m_index;
     Evas_Object* m_verticalScroller;
index f1afd627428c0dfcbc51aa0502d80ec4dadfbe86..228fad9ff981603542e08eaec6b99c16b1ea4d65 100755 (executable)
@@ -322,6 +322,9 @@ void SimpleUI::connectUISignals()
     m_webPageUI->forwardPage.connect(boost::bind(&basic_webengine::AbstractWebEngine::forward, m_webEngine.get()));
     m_webPageUI->showQuickAccess.connect(boost::bind(&SimpleUI::showQuickAccess, this));
     m_webPageUI->hideQuickAccess.connect(boost::bind(&QuickAccess::hideUI, m_quickAccess));
+    m_webPageUI->getQuickAccessEditUI()->requestQuickAccessGengrid.connect(boost::bind(&QuickAccess::getQuickAccessGengrid, m_quickAccess.get()));
+    m_webPageUI->getQuickAccessEditUI()->editingFinished.connect(boost::bind(&QuickAccess::editingFinished, m_quickAccess.get()));
+    m_webPageUI->getQuickAccessEditUI()->closeUI.connect(boost::bind(&SimpleUI::closeTopView, this));
     m_webPageUI->focusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::setFocus, m_webEngine.get()));
     m_webPageUI->unfocusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::clearFocus, m_webEngine.get()));
     m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
@@ -1094,6 +1097,8 @@ void SimpleUI::onBackPressed()
         m_popupVector.back()->onBackPressed();
     } else if (m_viewManager.topOfStack() == m_bookmarkManagerUI.get()) {
         m_bookmarkManagerUI->onBackPressed();
+    } else if (m_viewManager.topOfStack() == m_webPageUI->getQuickAccessEditUI().get()) {
+        m_webPageUI->getQuickAccessEditUI()->backPressed();
     } else if (m_viewManager.topOfStack() == nullptr) {
         switchViewToQuickAccess();
     } else if ((m_viewManager.topOfStack() == m_webPageUI.get())) {
@@ -1721,6 +1726,7 @@ void SimpleUI::editQuickAccess()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_quickAccess->editQuickAccess();
+    m_viewManager.pushViewToStack(m_webPageUI->getQuickAccessEditUI().get());
 }
 
 void SimpleUI::addQuickAccess()
index 0e3e035ea6fb8bc7ed8d6aac026d4f0ba5ecfd4e..a09debb64d455023996f8b1d939873a539b851b5 100644 (file)
@@ -65,6 +65,7 @@
 #include "ViewManager.h"
 #include "MenuButton.h"
 #include "ProgressiveWebApp.h"
+#include "NaviframeWrapper.h"
 
 namespace tizen_browser{
 namespace base_ui{
@@ -372,6 +373,7 @@ private:
     ViewManager m_viewManager;
     Evas_Object *main_window;
     ProgressiveWebApp m_pwa;
+    SharedNaviframeWrapper m_QAEditNaviframe;
 #if PROFILE_MOBILE
     Evas_Object *m_conformant;
     int m_current_angle;
index c950636e908666ec45cfa04dd4b7f4c286cab7be..0c8008145ec0fb4cee3dabeb41a58cf2560998b3 100755 (executable)
@@ -4,6 +4,7 @@ set(WebPageUI_SRCS
     WebPageUI.cpp
     WebPageUIStatesManager.cpp
     ButtonBar.cpp
+    EditQuickAccessUI.cpp
     URIEntry.cpp
     UrlHistoryList/UrlHistoryList.cpp
     UrlHistoryList/GenlistManager.cpp
diff --git a/services/WebPageUI/EditQuickAccessUI.cpp b/services/WebPageUI/EditQuickAccessUI.cpp
new file mode 100644 (file)
index 0000000..f295888
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2016 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 "EditQuickAccessUI.h"
+
+#include <Elementary.h>
+#include <AbstractMainWindow.h>
+#include "ServiceManager.h"
+#include "BrowserLogger.h"
+#include "Tools/EflTools.h"
+#include "QuickAccess.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+EditQuickAccessUI::EditQuickAccessUI()
+    : m_parent(nullptr)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+EditQuickAccessUI::~EditQuickAccessUI()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void EditQuickAccessUI::showUI()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_naviframe->getLayout());
+    m_naviframe->show();
+}
+
+void EditQuickAccessUI::hideUI()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_naviframe->getLayout());
+    m_naviframe->hide();
+}
+
+void EditQuickAccessUI::init(Evas_Object *parent)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(parent);
+    m_parent = parent;
+}
+
+Evas_Object *EditQuickAccessUI::getContent()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_parent);
+    if (!m_naviframe)
+        createEditQuickAccessLayout();
+
+    auto signal = requestQuickAccessGengrid();
+    if (signal)
+        m_naviframe->setContent(*signal);
+    else
+        BROWSER_LOGW("Missing signal value");
+
+    return m_naviframe->getLayout();
+}
+
+void EditQuickAccessUI::backPressed()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    editingFinished();
+    closeUI();
+}
+
+void EditQuickAccessUI::_cancel_clicked(void *data, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto self = static_cast<EditQuickAccessUI*>(data);
+    self->backPressed();
+}
+
+void EditQuickAccessUI::_done_clicked(void *data, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto self = static_cast<EditQuickAccessUI*>(data);
+    self->editingFinished();
+    //TODO: save reordered items
+    self->closeUI();
+}
+
+void EditQuickAccessUI::createEditQuickAccessLayout()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_parent);
+
+    m_naviframe = std::make_shared<NaviframeWrapper>(m_parent);
+    m_naviframe->setTitle("Edit quick access");
+
+    m_naviframe->addLeftButton(_cancel_clicked, this);
+    m_naviframe->setLeftButtonText("Cancel");
+    m_naviframe->setLeftButtonVisible(true);
+
+    m_naviframe->addRightButton(_done_clicked, this);
+    m_naviframe->setRightButtonText("Done");
+    m_naviframe->setRightButtonVisible(true);
+}
+
+}   // namespace tizen_browser
+}   // namespace base_ui
+
diff --git a/services/WebPageUI/EditQuickAccessUI.h b/services/WebPageUI/EditQuickAccessUI.h
new file mode 100644 (file)
index 0000000..6dd1e92
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2016 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 EDITQUICKACCESSUI
+#define EDITQUICKACCESSUI
+
+#include <Evas.h>
+
+#include "AbstractUIComponent.h"
+#include "AbstractService.h"
+#include "AbstractRotatable.h"
+#include "ServiceFactory.h"
+#include "service_macros.h"
+#include "NaviframeWrapper.h"
+#include "QuickAccess.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+class BROWSER_EXPORT EditQuickAccessUI
+    : public tizen_browser::interfaces::AbstractUIComponent
+{
+public:
+    EditQuickAccessUI();
+    ~EditQuickAccessUI();
+    //AbstractUIComponent interface implementation
+    void showUI();
+    void hideUI();
+    void init(Evas_Object *parent);
+    Evas_Object* getContent();
+    void backPressed();
+
+    boost::signals2::signal<Evas_Object* ()> requestQuickAccessGengrid;
+    boost::signals2::signal<void ()> editingFinished;
+
+private:
+
+    static void _cancel_clicked(void *data, Evas_Object *, void *);
+    static void _done_clicked(void *data, Evas_Object *, void *);
+
+    void createEditQuickAccessLayout();
+    SharedNaviframeWrapper m_naviframe;
+    Evas_Object *m_parent;
+    std::shared_ptr<QuickAccess> m_quickAccess;
+};
+
+}   // namespace tizen_browser
+}   // namespace base_ui
+
+#endif // EDITQUICKACCESSUI
+
index 406531d5f6fe21d04a9fcebeb44961aecf7fa45f..a7130db390aaf1c9ff2b1a6b1bef7ec3049d1c64 100755 (executable)
@@ -44,6 +44,7 @@ WebPageUI::WebPageUI()
     , m_bookmarkManagerButton(nullptr)
     , m_statesMgr(std::make_shared<WebPageUIStatesManager>(WPUState::MAIN_WEB_PAGE))
     , m_URIEntry(new URIEntry(m_statesMgr))
+    , m_editQuickAccessUI(std::make_shared<EditQuickAccessUI>())
     , m_urlHistoryList(std::make_shared<UrlHistoryList>(getStatesMgr()))
     , m_webviewLocked(false)
     , m_WebPageUIvisible(false)
@@ -67,6 +68,7 @@ void WebPageUI::init(Evas_Object* parent)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(parent);
     m_parent = parent;
+    m_editQuickAccessUI->init(parent);
 }
 
 Evas_Object* WebPageUI::getContent()
index 482ee4ef9f6cdd0d351feb9fee80063d40e74a0c..f076b4585852121bdf6d4fae51a23f8b39d16a89 100755 (executable)
@@ -28,6 +28,7 @@
 #include "ButtonBar.h"
 #include "URIEntry.h"
 #include "AbstractWebEngine/State.h"
+#include "EditQuickAccessUI.h"
 
 namespace tizen_browser {
 namespace base_ui {
@@ -106,6 +107,7 @@ public:
     void switchViewToIncognitoPage();
     void switchViewToQuickAccess(Evas_Object* content);
     URIEntry& getURIEntry() const { return *m_URIEntry.get(); }
+    std::shared_ptr<EditQuickAccessUI> getQuickAccessEditUI() { return m_editQuickAccessUI; }
     void setTabsNumber(int tabs);
     void setBackButtonEnabled(bool enabled) { m_back->setEnabled(enabled); }
     void setForwardButtonEnabled(bool enabled) { m_forward->setEnabled(enabled); }
@@ -212,6 +214,7 @@ private:
     std::unique_ptr<ButtonBar> m_rightButtonBar;
     WPUStatesManagerPtr m_statesMgr;
     std::unique_ptr<URIEntry> m_URIEntry;
+    std::shared_ptr<EditQuickAccessUI> m_editQuickAccessUI;
     UrlHistoryPtr m_urlHistoryList;
     bool m_webviewLocked;
     bool m_WebPageUIvisible;