HistoryUI Refactor 82/47982/9 accepted/tizen/tv/20150914.043144 submit/tizen_tv/20150913.234024
authorAlbert Malewski <a.malewski@samsung.com>
Thu, 10 Sep 2015 13:14:29 +0000 (15:14 +0200)
committerAlbert Malewski <a.malewski@samsung.com>
Fri, 11 Sep 2015 12:27:14 +0000 (05:27 -0700)
[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
services/HistoryUI/HistoryUI.h

index f9c3a12..8443e04 100644 (file)
@@ -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*)
index 83bd6f6..c849f5f 100644 (file)
@@ -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<services::HistoryItem>);
     void addHistoryItems(std::shared_ptr<services::HistoryItemVector>);
     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<void (const std::string&)> closeHistoryUIClicked;
@@ -51,6 +55,8 @@ public:
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>)> historyItemClicked;
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>)> 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);