TT-163 'Add to bookmarks' UI change 79/48179/16 accepted/tizen/tv/20150922.001457 submit/tizen_tv/20150921.230152
authort.dakowicz <t.dakowicz@samsung.com>
Tue, 15 Sep 2015 14:40:23 +0000 (16:40 +0200)
committerTomasz Dakowicz <t.dakowicz@samsung.com>
Mon, 21 Sep 2015 13:21:12 +0000 (06:21 -0700)
[Issue#] https://bugs.tizen.org/jira/browse/TT-163
[Problem] N/A
[Cause] 1.02 UI guideline
[Solution] Added checkbox that defines current bookmark status
           and toast popup for info purpose

Choosing folder for a new bookmark is still there.
Checkbox's style 'favorite' is not available.

Change-Id: I78eaf6ca94d6c0ca6605b6822ea5e5c087260d90

services/MoreMenuUI/AddBookmarkPopup.cpp
services/MoreMenuUI/MoreMenuUI.cpp
services/MoreMenuUI/MoreMenuUI.h
services/MoreMenuUI/edc/MoreMenu.edc
services/MoreMenuUI/images/ic_add_bookmark_new.png [new file with mode: 0644]
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h

index a455589..13d4e8f 100644 (file)
@@ -159,7 +159,7 @@ void AddBookmarkPopup::addBookmarkFolderItems(std::vector<std::shared_ptr<tizen_
 {
     BROWSER_LOGD("%s:%d %s Bookmark Folder Items: %d", __FILE__, __LINE__, __func__, items.size());
     int i = 1;
-    addBookmarkFolderItem(nullptr, i);
+    addBookmarkFolderItem(nullptr, i++);
     for (auto it = items.begin(); it != items.end(); ++it, ++i) {
         addBookmarkFolderItem(*it, i);
     }
index 4db8fd8..5e55319 100644 (file)
@@ -50,11 +50,12 @@ MoreMenuUI::MoreMenuUI()
     , m_item_class(nullptr)
     , m_mm_layout(nullptr)
     , m_desktopMode(true)
+    , m_isBookmark(false)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_edjFilePath = EDJE_DIR;
     m_edjFilePath.append("MoreMenuUI/MoreMenu.edj");
-    m_item_class = crateItemClass();
+    m_item_class = createItemClass();
 }
 
 MoreMenuUI::~MoreMenuUI()
@@ -64,7 +65,7 @@ MoreMenuUI::~MoreMenuUI()
         elm_gengrid_item_class_free(m_item_class);
 }
 
-Elm_Gengrid_Item_Class* MoreMenuUI::crateItemClass()
+Elm_Gengrid_Item_Class* MoreMenuUI::createItemClass()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     Elm_Gengrid_Item_Class* item_class = elm_gengrid_item_class_new();
@@ -164,14 +165,16 @@ void MoreMenuUI::showCurrentTab()
 
     Evas_Object* button = elm_button_add(m_current_tab_bar);
     elm_object_style_set(button, "hidden_button");
-    evas_object_smart_callback_add(button, "clicked", _star_clicked, this);
-    elm_object_part_content_set(m_current_tab_bar, "star_click", button);
-
-    button = elm_button_add(m_current_tab_bar);
-    elm_object_style_set(button, "hidden_button");
     evas_object_smart_callback_add(button, "clicked", _close_clicked, this);
     elm_object_part_content_set(m_current_tab_bar, "close_click", button);
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    button = elm_button_add(m_mm_layout);
+    elm_object_style_set(button, "hidden_button");
+    evas_object_smart_callback_add(button, "clicked", _star_clicked, this);
+
+    m_bookmarkIcon = elm_icon_add(m_mm_layout);
+    elm_object_part_content_set(m_current_tab_bar, "bookmark_ico", m_bookmarkIcon);
+    elm_object_part_content_set(m_current_tab_bar, "star_click", button);
 }
 
 void MoreMenuUI::setFavIcon(std::shared_ptr<tizen_browser::tools::BrowserImage> favicon)
@@ -219,19 +222,75 @@ void MoreMenuUI::setWebTitle(const std::string& title)
 void MoreMenuUI::setURL(const std::string& url)
 {
     BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, url.c_str());
-    if(!url.empty())
+    char* part_name = "add_to_bookmark_text";
+
+    if(!url.empty()) {
         elm_object_part_text_set(m_current_tab_bar, "webpage_url", url.c_str());
-    else
+
+        if(true == isBookmark()) {
+            m_isBookmark = EINA_TRUE;
+            changeBookmarkStatus(true);
+        }
+        else {
+            m_isBookmark = EINA_FALSE;
+            changeBookmarkStatus(false);
+        }
+    }
+    else {
         elm_object_part_text_set(m_current_tab_bar, "webpage_url", "");
+        m_isBookmark = EINA_FALSE;
+        changeBookmarkStatus(false);
+    }
+}
+
+void MoreMenuUI::changeBookmarkStatus(bool data)
+{
+    if(data) {
+        m_isBookmark = EINA_TRUE;
+        elm_object_part_text_set(m_current_tab_bar, "add_to_bookmark_text", "Remove Bookmark");
+        elm_image_file_set(m_bookmarkIcon, m_edjFilePath.c_str(), "ic_add_bookmark.png");
+    }
+    else {
+        m_isBookmark = EINA_FALSE;
+        elm_object_part_text_set(m_current_tab_bar, "add_to_bookmark_text", "Add to Bookmark");
+        elm_image_file_set(m_bookmarkIcon, m_edjFilePath.c_str(), "ic_add_bookmark_new.png");
+    }
+}
+
+void MoreMenuUI::createToastPopup(const char* text)
+{
+    m_toastPopup = elm_popup_add(m_mm_layout);
+    elm_object_style_set(m_toastPopup, "toast");
+    evas_object_size_hint_weight_set(m_toastPopup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_toastPopup, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_object_part_content_set(m_current_tab_bar, "toast_popup", m_toastPopup);
+    elm_object_part_text_set(m_current_tab_bar, "toast_text", text);
+    evas_object_smart_callback_add(m_toastPopup, "timeout", _timeout, this);
+    elm_popup_timeout_set(m_toastPopup, 3.0);
+}
+
+void MoreMenuUI::_timeout(void *data, Evas_Object *obj, void *event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    MoreMenuUI *moreMenuUI = static_cast<MoreMenuUI*>(data);
+    elm_object_part_text_set(moreMenuUI->m_current_tab_bar, "toast_text", "");
+    evas_object_del(moreMenuUI->m_toastPopup);
 }
 
 void MoreMenuUI::_star_clicked(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (data) {
+    if(data) {
         MoreMenuUI *moreMenuUI = static_cast<MoreMenuUI*>(data);
-        moreMenuUI->addToBookmarkClicked();
-        moreMenuUI->AddBookmarkPopupCalled();
+
+        if (EINA_FALSE == moreMenuUI->m_isBookmark) {
+            moreMenuUI->addToBookmarkClicked();
+            moreMenuUI->AddBookmarkPopupCalled();
+        }
+        else {
+            moreMenuUI->m_isBookmark = EINA_FALSE;
+            moreMenuUI->deleteBookmark();
+        }
     }
 }
 
index 4b0fccb..7624b0a 100644 (file)
@@ -18,6 +18,7 @@
 #define MOREMENUUI_H
 
 #include <Evas.h>
+#include <Eina.h>
 #include <memory>
 #include <boost/signals2/signal.hpp>
 
@@ -82,6 +83,8 @@ public:
     void setFavIcon(std::shared_ptr<tizen_browser::tools::BrowserImage> favicon);
     void setWebTitle(const std::string& title);
     void setURL(const std::string& url);
+    void changeBookmarkStatus(bool data);
+    void createToastPopup(const char* text);
 
     boost::signals2::signal<void ()> addToBookmarkClicked;
     boost::signals2::signal<void (int)> AddBookmarkInput;
@@ -95,8 +98,10 @@ public:
     boost::signals2::signal<void (std::string)> closeMoreMenuClicked;
     boost::signals2::signal<void ()> switchToMobileMode;
     boost::signals2::signal<void ()> switchToDesktopMode;
+    boost::signals2::signal<bool ()> isBookmark;
+    boost::signals2::signal<void ()> deleteBookmark;
 private:
-    Elm_Gengrid_Item_Class* crateItemClass();
+    Elm_Gengrid_Item_Class* createItemClass();
     Evas_Object* createMoreMenuLayout(Evas_Object* parent);
     Evas_Object* createGengrid(Evas_Object* parent);
     static char* _grid_text_get(void *data, Evas_Object *obj, const char *part);
@@ -114,6 +119,7 @@ private:
 
     static void _star_clicked(void *data, Evas_Object *obj, void *event_info);
     static void _close_clicked(void *data, Evas_Object *obj, void *event_info);
+    static void _timeout(void *data, Evas_Object *obj, void *event_info);
 
     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);
@@ -124,14 +130,17 @@ private:
     std::shared_ptr<tizen_browser::base_ui::AddBookmarkPopup> m_add_bookmark_popup;
     Evas_Object *m_gengrid;
     Evas_Object *m_parent;
+    Evas_Object *m_toastPopup;
+    Evas_Object *m_icon;
+    Evas_Object *m_bookmarkIcon;
     Elm_Gengrid_Item_Class * m_item_class;
     std::map<ItemType,Elm_Object_Item*> m_map_menu_views;
     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > m_map_bookmark_folder_list;
     std::string m_edjFilePath;
     std::string m_folderName;
     bool m_gengridSetup;
-    Evas_Object *m_icon;
     bool m_desktopMode;
+    Eina_Bool m_isBookmark;
 };
 
 }
index fcfd99a..5347fd3 100644 (file)
@@ -43,6 +43,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_share_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_setting_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
 RESOURCE_IMAGE_LOSSY("ic_add_bookmark.png")
+RESOURCE_IMAGE_LOSSY("ic_add_bookmark_new.png")
 RESOURCE_IMAGE_LOSSY("ic_more_readermode_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_bookmark_foc.png")
 RESOURCE_IMAGE_LOSSY("ic_more_history_foc.png")
@@ -116,6 +117,40 @@ RESOURCE_IMAGE_LOSSY("ico_url.png")
         }
         parts {
             part {
+                name: "toast_popup";
+                scale:1;
+                type: SWALLOW;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                min: 200 120;
+                max: 338 120;
+                rel1 { relative: 0.0 0.0; offset: 63 700;}
+                rel2 { relative: 1.0 1.0;}
+                }
+            }
+            part {
+            name: "toast_text";
+            scale: 1;
+            type: TEXT;
+            description {
+                state: "default" 0.0;
+                visible: 1;
+                fixed: 1 1;
+                align: 0.5 0.5;
+                rel1 { relative: 0.0 0.0; to: "toast_popup";}
+                rel2 { relative: 1.0 1.0; to: "toast_popup";}
+                color_class: titleTextColor;
+                text {
+                    font: "Sans";
+                    size: 28;
+                    align: 0.5 0.5;
+                }
+            }
+            }
+            part {
                 name: "bg_rect";
                 scale:1;
                 mouse_events: 1;
@@ -371,7 +406,6 @@ RESOURCE_IMAGE_LOSSY("ico_url.png")
                     rel2 { relative: 1.0 1.0; to: "item_background";}
                     color_class: urlTextColor;
                     text {
-                        text: "http:/onet.pl";
                         font: "font_name";
                         size: 28;
                         align: 0 0.5;
@@ -415,6 +449,21 @@ RESOURCE_IMAGE_LOSSY("ico_url.png")
                     visible: 1;
                 }
             }
+            part {
+                name: "bookmark_ico";
+                type: SWALLOW;
+                scale: 1;
+                mouse_events: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    min: 58 58;
+                    max: 58 58;
+                    fixed: 1 1;
+                    align: 0.0 0.0;
+                    rel1 { relative: 0.0 0.0; to: "star_bg";}
+                }
+            }
             part{
                 name: "add_to_bookmark_text";
                 type: TEXT;
@@ -422,14 +471,14 @@ RESOURCE_IMAGE_LOSSY("ico_url.png")
                 description { state: "default" 0.0;
                     visible: 1;
                     fixed: 1 1;
-                    rel1 { relative: 0.0 0.0;to: "star_bg";}
+                    align: 0 0;
+                    rel1 { relative: 0.0 0.0;to: "star_bg"; offset: 56 0;}
                     rel2 { relative: 1.0 1.0;to: "star_bg";}
                     color: 0 0 0 255;
                     text {
-                        text: "Add to bookmark";
                         font: "Sans";
                         size: 28;
-                        align: 0.5 0.5;
+                        align: 0 0.5;
                     }
                 }
             }
@@ -591,7 +640,7 @@ RESOURCE_IMAGE_LOSSY("ico_url.png")
             program {
                 name: "mouse_click";
                 signal: "mouse,clicked,1";
-                source: "over";
+                source: "*";
                 script {
                     emit("elm,action,click", "");
                 }
@@ -671,17 +720,17 @@ group {
                     }
                 }
             }
-            part { name: "current_tab_bar";
+            part { name: "elm.swallow.grid";
                 type : SWALLOW;
                 scale: 1;
                 description {
                     state: "default" 0.0;
                     visible: 1;
-                    min: 1920 366;
-                    max: 1920 366;
+                    min: 1920 714;
+                   max: 1920 714;
                     align: 0.0 0.0;
                     fixed: 0 0;
-                    rel1 { relative: 0.0 0.0; to: "current_tab_bar_bg";}
+                    rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 0;}
                     rel2 { relative: 1.0 1.0; }
                 }
                 description {
@@ -694,18 +743,18 @@ group {
                     inherit: "default" 0.0;
                     visible: 1;
                 }
-             }
-            part { name: "elm.swallow.grid";
+           }
+            part { name: "current_tab_bar";
                 type : SWALLOW;
                 scale: 1;
                 description {
                     state: "default" 0.0;
                     visible: 1;
-                    min: 1920 714;
-                   max: 1920 714;
+                    min: 1920 366;
+                    max: 1920 366;
                     align: 0.0 0.0;
                     fixed: 0 0;
-                    rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 0;}
+                    rel1 { relative: 0.0 0.0; to: "current_tab_bar_bg";}
                     rel2 { relative: 1.0 1.0; }
                 }
                 description {
@@ -718,7 +767,7 @@ group {
                     inherit: "default" 0.0;
                     visible: 1;
                 }
-           }
+             }
             part { name: "elm.swallow.empty";
                 type: SWALLOW;
                 description { state: "default" 0.0;
diff --git a/services/MoreMenuUI/images/ic_add_bookmark_new.png b/services/MoreMenuUI/images/ic_add_bookmark_new.png
new file mode 100644 (file)
index 0000000..dabcfd7
Binary files /dev/null and b/services/MoreMenuUI/images/ic_add_bookmark_new.png differ
index 486ec7e..80d15a4 100644 (file)
@@ -433,26 +433,36 @@ void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id)
     updateView();
 }
 
-void SimpleUI::bookmarkCheck()
+bool SimpleUI::checkBookmark()
 {
     if (m_webPageUI->isHomePageActive())
-        return;
+        return false;
 
-    if(m_favoriteService->bookmarkExists(m_webEngine->getURI())){
+    if(m_favoriteService->bookmarkExists(m_webEngine->getURI())) {
         BROWSER_LOGD("[%s] There is bookmark for this site [%s], set indicator on!", __func__, m_webEngine->getURI().c_str());
-        // MERGE_ME
-        //leftButtonBar->setActionForButton("bookmark_button", m_unbookmark);
+        return true;
     }
-    else{
+    else {
         BROWSER_LOGD("[%s] There is no bookmark for this site [%s], set indicator off", __func__, m_webEngine->getURI().c_str());
-        // MERGE_ME
-        //leftButtonBar->setActionForButton("bookmark_button", m_bookmark);
-        //addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit);
+        return false;
     }
 }
 // Consider removing these functions
 void SimpleUI::onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
 {
+    if (m_moreMenuUI) {
+        m_moreMenuUI->changeBookmarkStatus(true);
+        m_moreMenuUI->createToastPopup( (std::string(m_webEngine->getTitle()) + std::string(" added to bookmark")).c_str() );
+    }
+}
+
+void SimpleUI::onBookmarkRemoved(const std::string& uri)
+{
+    BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
+    if (m_moreMenuUI) {
+        m_moreMenuUI->changeBookmarkStatus(false);
+        m_moreMenuUI->createToastPopup( (std::string(m_webEngine->getTitle()) + std::string(" removed from bookmark")).c_str() );
+    }
 }
 
 void SimpleUI::onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem)
@@ -527,17 +537,7 @@ void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::Bookma
     openNewTab(bookmarkAddress);
 }
 
-void SimpleUI::onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
-{
-    BROWSER_LOGD("[%s] delete %s", __func__, bookmarkItem->getAddress().c_str());
-    m_favoriteService->deleteBookmark(bookmarkItem->getAddress());
-}
-
 // Consider removing these functions
-void SimpleUI::onBookmarkRemoved(const std::string& uri)
-{
-    BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
-}
 
 void SimpleUI::onHistoryRemoved(const std::string& uri)
 {
@@ -667,7 +667,6 @@ void SimpleUI::webEngineURLChanged(const std::string url)
 {
     BROWSER_LOGD("webEngineURLChanged:%s", url.c_str());
     m_webPageUI->getURIEntry().clearFocus();
-    bookmarkCheck();
 }
 
 void SimpleUI::showTabUI()
@@ -876,6 +875,8 @@ void SimpleUI::showMoreMenu()
         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->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this));
+        m_moreMenuUI->deleteBookmark.connect(boost::bind(&SimpleUI::deleteBookmark, this));
 
         m_moreMenuUI->show(m_window.get(), desktopMode);
         m_moreMenuUI->showCurrentTab();
@@ -901,6 +902,8 @@ void SimpleUI::closeMoreMenu(const std::string& str)
     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->isBookmark.disconnect(boost::bind(&SimpleUI::checkBookmark, this));
+    m_moreMenuUI->deleteBookmark.disconnect(boost::bind(&SimpleUI::deleteBookmark, this));
     m_moreMenuUI.reset();
 }
 
index 5a9ff1f..b2600c3 100644 (file)
@@ -119,7 +119,6 @@ private:
     void tabCreated();
     void tabClosed(const tizen_browser::basic_webengine::TabId& id);
 
-    void bookmarkCheck();
     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks(int folder_id = -1);
     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarkFolders(int folder_id);
     std::shared_ptr<services::HistoryItemVector> getHistory();
@@ -129,7 +128,6 @@ private:
     void onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
 
     void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
-    void onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
     void onBookmarkRemoved(const std::string& uri);
 
     void onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem);
@@ -188,7 +186,12 @@ private:
     void webEngineURLChanged(const std::string url);
     void onmostHistoryvisitedClicked();
     void onBookmarkvisitedClicked();
-     /**
+    /**
+     * @brief Check if the current page exists as a bookmark.
+     *
+     */
+    bool checkBookmark();
+    /**
      * @brief Adds current page to bookmarks.
      *
      */