Fixed navigating by D-pad in Bookmark Manager 51/49151/6
authorAlbert Malewski <a.malewski@samsung.com>
Wed, 7 Oct 2015 08:34:04 +0000 (10:34 +0200)
committerAlbert Malewski <a.malewski@samsung.com>
Thu, 8 Oct 2015 12:19:15 +0000 (05:19 -0700)
[Issue]    https://bugs.tizen.org/jira/browse/TT-183
[Problem]  There was a problem with navigation in Bookmark Manager.
[Cause]    Disabled "Add to bookmarks" button was blocking moving
           the focus.
[Solution] This is a workaround (because 'custom focus chain' API
           did not work properly. FocusManager class is used.
           Additionally, changed topContent from genlist to layout.
[Verify]   Launch browser > Navigate to Bookmarka Manager > Use arrows to
           move the focus.

Change-Id: I8f22bb24653f9df0dde5f5e009fbbd73d887d6ec

services/BookmarkManagerUI/BookmarkManagerUI.cpp
services/BookmarkManagerUI/BookmarkManagerUI.h
services/BookmarkManagerUI/edc/BookmarkManagerUI.edc

index 213cca2..3e0e58c 100644 (file)
@@ -44,8 +44,7 @@ typedef struct
 } BookmarkItemData;
 
 BookmarkManagerUI::BookmarkManagerUI()
-    : m_genList(nullptr)
-    , b_mm_layout(nullptr)
+    : b_mm_layout(nullptr)
     , m_itemClass(nullptr)
     , m_gengrid(nullptr)
     , m_parent(nullptr)
@@ -85,7 +84,8 @@ void BookmarkManagerUI::init(Evas_Object* parent)
 
 void BookmarkManagerUI::showUI()
 {
-   evas_object_show(b_mm_layout);
+    evas_object_show(b_mm_layout);
+    m_focusManager.startFocusManager(m_gengrid);
 }
 
 void BookmarkManagerUI::hideUI()
@@ -93,6 +93,7 @@ void BookmarkManagerUI::hideUI()
     evas_object_hide(b_mm_layout);
     elm_gengrid_clear(m_gengrid);
     m_map_bookmark.clear();
+    m_focusManager.stopFocusManager();
 }
 
 Evas_Object* BookmarkManagerUI::getContent()
@@ -115,6 +116,7 @@ Evas_Object* BookmarkManagerUI::createBookmarksLayout(Evas_Object* parent)
 
     createGenGrid();
     showTopContent();
+    createFocusVector();
     return b_mm_layout;
 }
 
@@ -140,56 +142,27 @@ void BookmarkManagerUI::createGenGrid()
 void BookmarkManagerUI::showTopContent()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(b_mm_layout);
     elm_theme_extension_add(nullptr, edjFilePath.c_str());
-    m_genList = elm_genlist_add(b_mm_layout);
-    elm_object_part_content_set(b_mm_layout, "elm.swallow.genlist", m_genList);
-    elm_genlist_homogeneous_set(m_genList, EINA_FALSE);
-    elm_genlist_multi_select_set(m_genList, EINA_FALSE);
-    elm_genlist_select_mode_set(m_genList, ELM_OBJECT_SELECT_MODE_ALWAYS);
-    elm_genlist_mode_set(m_genList, ELM_LIST_LIMIT);
-    elm_genlist_decorate_mode_set(m_genList, EINA_TRUE);
-    evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-    m_itemClass = elm_genlist_item_class_new();
-    m_itemClass->item_style = "topContent";
-    m_itemClass->func.text_get = &listItemTextGet;
-    m_itemClass->func.content_get = &listItemContentGet;
-    m_itemClass->func.state_get = 0;
-    m_itemClass->func.del = 0;
-
-    ItemData * id = new ItemData;
-    id->m_bookmarkManager = this;
-    Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList,            //genlist
-                                                      m_itemClass,           //item Class
-                                                      id,
-                                                      nullptr,               //parent item
-                                                      ELM_GENLIST_ITEM_NONE, //item type
-                                                      nullptr,
-                                                      nullptr                //data passed to above function
-                                                     );
-
-    id->e_item = elmItem;
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-}
 
-Evas_Object* BookmarkManagerUI::listItemContentGet(void* data, Evas_Object* obj, const char* part)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if ((data != nullptr) && (obj != nullptr) && (part != nullptr))
-    {
-        const char *part_name = "close_click";
-        static const int part_name_len = strlen(part_name);
-        ItemData * id = static_cast<ItemData *>(data);
+    m_topContent = elm_layout_add(b_mm_layout);
+    elm_object_part_content_set(b_mm_layout, "top_content", m_topContent);
+    evas_object_size_hint_weight_set(m_topContent, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_topContent, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_show(m_topContent);
 
-        if(!strncmp(part_name, part, part_name_len))
-        {
-            Evas_Object *close_click = elm_button_add(obj);
-            elm_object_style_set(close_click, "hidden_button");
-            evas_object_smart_callback_add(close_click, "clicked", BookmarkManagerUI::close_clicked_cb, id);
-            return close_click;
-        }
-    }
-    return nullptr;
+    elm_layout_file_set(m_topContent, edjFilePath.c_str(), "topContent");
+
+    Evas_Object* close_button = elm_button_add(m_topContent);
+    elm_object_style_set(close_button, "hidden_button");
+    evas_object_smart_callback_add(close_button, "clicked", close_clicked_cb, this);
+    elm_object_part_content_set(m_topContent, "close_click", close_button);
+
+    evas_object_show(close_button);
+    elm_object_focus_custom_chain_append(m_topContent, close_button, nullptr);
+    elm_object_focus_set(close_button, EINA_TRUE);
+    elm_object_tree_focus_allow_set(b_mm_layout, EINA_TRUE);
+    elm_object_focus_allow_set(close_button, EINA_TRUE);
 }
 
 void BookmarkManagerUI::close_clicked_cb(void* data, Evas_Object*, void*)
@@ -197,22 +170,11 @@ void BookmarkManagerUI::close_clicked_cb(void* data, Evas_Object*, void*)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr)
     {
-        ItemData * id = static_cast<ItemData *>(data);
-        id->m_bookmarkManager->closeBookmarkManagerClicked();
+        BookmarkManagerUI* id = static_cast<BookmarkManagerUI*>(data);
+        id->closeBookmarkManagerClicked();
     }
 }
 
-char* BookmarkManagerUI::listItemTextGet(void* data, Evas_Object*, const char* part)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    return strdup("Bookmark");
-}
-
-Evas_Object * BookmarkManagerUI::getGenList()
-{
-    return m_genList;
-}
-
 Evas_Object * BookmarkManagerUI::getGenGrid()
 {
     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
@@ -331,5 +293,13 @@ void BookmarkManagerUI::_bookmarkItemClicked(void * data, Evas_Object *, void *
     }
 }
 
+void BookmarkManagerUI::createFocusVector()
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    m_focusManager.addItem(elm_object_part_content_get(m_topContent, "close_click"));
+    m_focusManager.addItem(m_gengrid);
+    m_focusManager.setIterator();
+}
+
 }
 }
index af9296b..e8caefd 100644 (file)
@@ -26,6 +26,7 @@
 #include "service_macros.h"
 #include "services/HistoryService/HistoryItem.h"
 #include "BookmarkItem.h"
+#include "FocusManager.h"
 
 namespace tizen_browser{
 namespace base_ui{
@@ -73,8 +74,10 @@ private:
 
     static void close_clicked_cb(void *data, Evas_Object *, void *);
 
+    void createFocusVector();
+
 private:
-    Evas_Object *m_genList;
+    Evas_Object *m_topContent;
     Evas_Object *b_mm_layout;
     Elm_Genlist_Item_Class *m_itemClass;
     Evas_Object *m_gengrid;
@@ -83,6 +86,7 @@ private:
     std::map<std::string,Elm_Object_Item*> m_map_bookmark;
     std::string edjFilePath;
     bool m_gengridSetup;
+    FocusManager m_focusManager;
 };
 
 }
index 761990d..e20906e 100644 (file)
@@ -24,7 +24,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
 
 
     group {
-        name: "elm/genlist/item/topContent/default";
+        name: "topContent";
         min: WIDTH HEIGHT;
         max: WIDTH HEIGHT;
         images {
@@ -85,7 +85,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
                 type: RECT;
                 description {
                     state: "default" 0.0;
-                    color: 255 255 255 255;
+                    color: 231 231 231 255;
                     align: 0 0;
                     min: 1920 285;
                     max: 1920 285;
@@ -116,8 +116,8 @@ RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
                     visible: 1;
                     align: 0.0 0.0;
                     fixed: 0 0;
-                    min: 1920 5;
-                    max: 1920 5;
+                    min: 1920 14;
+                    max: 1920 14;
                     image.normal: "web_shadow.png";
                     rel1 { relative: 0.0 1.0; to: "action_bar_bg"; }
                     rel2 { relative: 1.0 1.0; }
@@ -132,7 +132,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
                   fixed: 1 1;
                   rel1 { relative: 0.0 0.0;to: "action_bar_bg";}
                   rel2 { relative: 1.0 1.0;to: "action_bar_bg";}
-                  color: 116 116 116 255;
+                  color: 51 51 51 255;
                   text {
                       text: "Bookmark Manager";
                       font: "Sans";
@@ -153,7 +153,7 @@ RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
                   align: 0 0.5;
                   min: 82 102;
                   max: 82 102;
-                  rel1 { relative: 0.0 0.0; to: "action_bar_bg"; offset: 1828 0;}
+                  rel1 { relative: 0.0 0.0; to: "action_bar_bg"; offset: 1758 0;}
                   rel2 { relative: 1.0 1.0; to: "action_bar_bg";}
                   color_class: transparent;
               }
@@ -265,9 +265,9 @@ RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png")
                   fixed: 1 1;
                   rel1 { relative: 0.0 0.0;to: "bookmark_group_bg"; offset : 62 104; }
                   rel2 { relative: 1.0 1.0;to: "bookmark_group_bg";}
-                  color: 116 116 116 255;
+                  color: 74 74 74 255;
                   text {
-                      text: "Bookmark";
+                      text: "Bookmarks";
                       font: "Sans";
                       size: 34;
                       align: 0.0 0.0;
@@ -369,6 +369,7 @@ group {
                                visible: 1;
                                min: 1920 1080;
                        max: 1920 1080;
+                       color: 231 231 231 255;
                     rel1 {
                        relative: 0 0;
                     }
@@ -394,7 +395,7 @@ group {
                     }
                 }
             }
-            part { name: "elm.swallow.genlist";
+            part { name: "top_content";
                 type : SWALLOW;
                 scale: 1;
                 description {
@@ -426,7 +427,7 @@ group {
                                align: 0.0 0.0;
                                min: 1920 614;
                                max: 1920 614;
-                color: 255 255 255 255;
+                color: 231 231 231 255;
                 rel1 {
                        relative: 0 1; to: "genlist_bg";
                     }
@@ -459,48 +460,6 @@ group {
                     visible: 1;
                 }
            }
-
-           part { name: "genlist2_bg";
-                type: RECT;
-                mouse_events: 0;
-                description { state: "default" 0.0;
-                               visible: 1;
-                               align: 0.0 0.0;
-                               min: 1920 181;
-                               max: 1920 181;
-                color: 255 255 255 255;
-                rel1 {
-                       relative: 0 1; to: "gengrid_bg";
-                    }
-                rel2{
-                       relative: 1 1;
-                    }
-                }
-            }
-            part { name: "elm.swallow.genlist2";
-                type : SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    min: 1920 149;
-                    max: 1920 149;
-                    align: 0.0 0.0;
-                    fixed: 0 0;
-                    rel1 { relative: 0.0 0.0; to: "genlist2_bg"; offset: 0 32;}
-                    rel2 { relative: 1.0 1.0; to: "genlist2_bg";}
-                }
-                description {
-                    state: "hidden" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 0;
-                }
-                description {
-                    state: "visible" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 1;
-                }
-             }
             part { name: "elm.swallow.empty";
                 type: SWALLOW;
                 description { state: "default" 0.0;
@@ -539,7 +498,7 @@ group { name: "elm/gengrid/base/back_ground";
                 type: RECT;
                 mouse_events: 0;
                 description { state: "default" 0.0;
-                    color: 255 255 255 255;
+                    color: 231 231 231 255;
                     rel1 {
                         relative: 0 0;
                     }
@@ -784,7 +743,7 @@ group { name: "elm/gengrid/item/grid_ds_item/default";
                 min: 378 294;
                             max: 378 294;
                 visible: 1;
-                color: 231 231 231 255;
+                color: 255 255 255 255;
                 rel1.offset: -26 -26;
             }
             description { state: "selected";
@@ -798,7 +757,7 @@ group { name: "elm/gengrid/item/grid_ds_item/default";
             description { state: "default" 0.0;
                 fixed: 1 0;
                 align: 0.0 0.0;
-                color : 231 231 231 255;
+                color : 255 255 255 255;
                 min: 378 198;
                 max: 378 198;
                 rel1 {
@@ -842,7 +801,7 @@ group { name: "elm/gengrid/item/grid_ds_item/default";
                 min: 378 96;
                 max: 378 96;
                 align: 0.0 0.0;
-                color: 231 231 231 255;
+                color: 255 255 255 255;
                 rel1 {
                     to: "elm.thumbnail";
                     relative: 0.0  1.0;