From 194b47483a9ece31ce624a88bda33eabdf1f6b48 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Wed, 7 Oct 2015 10:34:04 +0200 Subject: [PATCH] Fixed navigating by D-pad in Bookmark Manager [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 | 96 ++++++++-------------- services/BookmarkManagerUI/BookmarkManagerUI.h | 6 +- .../BookmarkManagerUI/edc/BookmarkManagerUI.edc | 71 ++++------------ 3 files changed, 53 insertions(+), 120 deletions(-) diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index 213cca2..3e0e58c 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -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(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(data); - id->m_bookmarkManager->closeBookmarkManagerClicked(); + BookmarkManagerUI* id = static_cast(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(); +} + } } diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.h b/services/BookmarkManagerUI/BookmarkManagerUI.h index af9296b..e8caefd 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.h +++ b/services/BookmarkManagerUI/BookmarkManagerUI.h @@ -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 m_map_bookmark; std::string edjFilePath; bool m_gengridSetup; + FocusManager m_focusManager; }; } diff --git a/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc b/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc index 761990d..e20906e 100644 --- a/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc +++ b/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc @@ -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; -- 2.7.4