}
}
+void HistoryService::setMostVisitedFrequency(int id, int frequency)
+{
+ if (bp_history_adaptor_set_frequency(id, frequency) < 0 )
+ errorPrint("bp_history_adaptor_set_frequency");
+}
+
std::shared_ptr<HistoryItem> HistoryService::getHistoryItem(int * ids, int idNumber)
{
bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_VISITED);
void clearAllHistory();
void clearURLHistory(const std::string & url);
void deleteHistoryItem(int id);
+ void setMostVisitedFrequency(int id, int frequency);
std::shared_ptr<HistoryItem> getHistoryItem(const std::string & url);
std::shared_ptr<HistoryItemVector> getHistoryAll();
std::shared_ptr<HistoryItemVector> getHistoryToday();
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
clearMostVisitedGengrid();
- m_mostVisitedItems = items;
-
for (auto it = items->begin(); it != items->end(); ++it)
addMostVisitedItem(*it);
void QuickAccess::setQuickAccessItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > items)
{
clearQuickAccessGengrid();
- m_QuickAccessItems = items;
for (auto it = items.begin(); it != items.end(); ++it)
addQuickAccessItem(*it);
return strdup("");
}
-Evas_Object *QuickAccess::_grid_mostVisited_content_get(void *data, Evas_Object *, const char *part)
+Evas_Object *QuickAccess::_grid_mostVisited_content_get(void *data, Evas_Object *obj, const char *part)
{
- HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
- if (!strcmp(part, "elm.swallow.icon")) {
- if (itemData->item->getThumbnail()) {
- Evas_Object * thumb = itemData->item->getThumbnail()->getEvasImage(itemData->quickAccess->m_parent);
- return thumb;
+ if (data) {
+ HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
+
+ if (!strcmp(part, "elm.swallow.icon")) {
+ if (itemData->item->getThumbnail()) {
+ Evas_Object * thumb = itemData->item->getThumbnail()->getEvasImage(itemData->quickAccess->m_parent);
+ return thumb;
+ }
}
- else {
- return nullptr;
+ if (itemData->quickAccess->m_state == QuickAccessState::DeleteMostVisited) {
+ if (!strcmp(part, "elm.check")) {
+ Evas_Object* checkbox = elm_check_add(obj);
+ evas_object_propagate_events_set(checkbox, EINA_FALSE);
+ evas_object_smart_callback_add(checkbox, "changed", _check_state_changed, data);
+ evas_object_show(checkbox);
+ return checkbox;
+ }
}
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
return nullptr;
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
- itemData->quickAccess->openURL(itemData->item, false);
+ if (itemData->quickAccess->m_state == QuickAccessState::Default) {
+ itemData->quickAccess->openURL(itemData->item, false);
+ }
+}
+
+void QuickAccess::_check_state_changed(void *data, Evas_Object *obj, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data) {
+ HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
+ if (elm_check_state_get(obj))
+ itemData->quickAccess->m_mv_delete_list.push_back(itemData->item);
+ else
+ itemData->quickAccess->m_mv_delete_list.remove(itemData->item);
+ itemData->quickAccess->sendSelectedMVItemsCount(static_cast<int>(itemData->quickAccess->m_mv_delete_list.size()));
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+ }
}
void QuickAccess::showMostVisited()
elm_object_translatable_part_text_set(m_layout, "screen_title", "Most visited websites"); //TODO: translate
setIndexPage(QuickAccess::MOST_VISITED_PAGE);
+ m_mv_delete_list.clear();
}
void QuickAccess::clearQuickAccessGengrid()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_state = QuickAccessState::Edit;
- showUI();
+ getQuickAccessItems();
elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_TRUE);
}
+void QuickAccess::deleteMostVisited()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_state = QuickAccessState::DeleteMostVisited;
+ getMostVisitedItems();
+}
+
+void QuickAccess::deleteSelectedMostVisitedItems()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ for (auto item : m_mv_delete_list) {
+ removeMostVisitedItem(item, 0);
+ }
+ getMostVisitedItems();
+}
+
void QuickAccess::editingFinished()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_FALSE);
m_state = QuickAccessState::Default;
- showUI();
+ getQuickAccessItems();
}
void QuickAccess::showScrollerPage(int page)
#include <Evas.h>
#include <boost/signals2/signal.hpp>
#include <cstdint>
+#include <list>
#include "AbstractUIComponent.h"
#include "AbstractService.h"
#include "services/HistoryService/HistoryItem.h"
#include "services/HistoryService/HistoryItemTypedef.h"
#include "BookmarkItem.h"
-#include "NaviframeWrapper.h"
#include "Tools/EflTools.h"
namespace tizen_browser{
enum class QuickAccessState {
Default,
Edit,
+ DeleteMostVisited,
};
class BROWSER_EXPORT QuickAccess
void init(Evas_Object *main_layout);
Evas_Object* getContent();
Evas_Object* getQuickAccessGengrid() {return m_quickAccessGengrid;}
+ Evas_Object* getMostVisitedGengrid() {return m_mostVisitedGengrid;}
void setQuickAccessState(QuickAccessState state) {m_state = state;}
+ QuickAccessState getQuickAccessState() {return m_state;}
void setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> vec);
void setQuickAccessItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > vec);
void hideUI();
void showMostVisited();
void showQuickAccess();
void editQuickAccess();
+ void deleteMostVisited();
+ void deleteSelectedMostVisitedItems();
void editingFinished();
- boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, bool)> openURL;
+ boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, bool)>
+ openURL;
boost::signals2::signal<void ()> getMostVisitedItems;
boost::signals2::signal<void ()> getQuickAccessItems;
boost::signals2::signal<void ()> addQuickAccessClicked;
boost::signals2::signal<void ()> switchViewToWebPage;
- boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)> deleteQuickAccessItem;
+ boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)>
+ deleteQuickAccessItem;
+ boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, int)>
+ removeMostVisitedItem;
+ boost::signals2::signal<void (int)> sendSelectedMVItemsCount;
private:
struct HistoryItemData
static void _grid_mostVisited_del(void *data, Evas_Object *obj);
static void _thumbQuickAccessClicked(void * data, Evas_Object * obj, void * event_info);
static void _thumbMostVisitedClicked(void * data, Evas_Object * obj, void * event_info);
+ static void _check_state_changed(void *data, Evas_Object *obj, void *);
void setEmptyView(bool empty);
void showNoMostVisitedLabel();
static void setButtonColor(Evas_Object* button, int r, int b, int g, int a);
int m_currPage;
Elm_Gengrid_Item_Class * m_quickAccess_item_class;
Elm_Gengrid_Item_Class * m_mostVisited_item_class;
- std::shared_ptr<services::HistoryItemVector> m_mostVisitedItems;
std::string edjFilePath;
bool m_desktopMode;
QuickAccessState m_state;
- SharedNaviframeWrapper m_naviframe;
Evas_Object* m_index;
Evas_Object* m_verticalScroller;
Elm_Gengrid_Item_Class * m_quickAccess_tile_class;
- std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > m_QuickAccessItems;
+ std::list<std::shared_ptr<tizen_browser::services::HistoryItem>> m_mv_delete_list;
bool m_landscapeView;
static const int MOST_VISITED_PAGE = 1;
static const int QUICKACCESS_PAGE = 0;
group {
name: "elm/gengrid/item/mostVisited/default";
data.item: "texts" "elm.text";
- data.item: "contents" "elm.swallow.icon";
+ data.item: "contents" "elm.swallow.icon elm.check";
parts {
part { name: "bg";
type: RECT;
}
}
+ swallow { "elm.check"; scale;
+ mouse_events: 1;
+ repeat_events: 0;
+ description { "default";
+ min: 50 50;
+ max: 50 50;
+ align: 1 0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ }
+ }
+
ADD_SPACER_BELOW("title_spacer", "elm.swallow.icon", 0, 2)
part { name: "text_bg";
return m_historyService->getMostVisitedHistoryItems();
}
+void SimpleUI::setMostVisitedFrequencyValue(
+ std::shared_ptr<services::HistoryItem> historyItem, int visitFrequency)
+{
+ m_historyService->setMostVisitedFrequency(historyItem->getId(), visitFrequency);
+}
+
std::shared_ptr<services::HistoryItemVector> SimpleUI::getHistory()
{
return m_historyService->getHistoryToday();
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->getQuickAccessEditUI()->requestQuickAccessGengrid.connect(
+ boost::bind(&QuickAccess::getQuickAccessGengrid, m_quickAccess.get()));
+ m_webPageUI->getQuickAccessEditUI()->requestMostVisitedGengrid.connect(
+ boost::bind(&QuickAccess::getMostVisitedGengrid, m_quickAccess.get()));
+ m_webPageUI->getQuickAccessEditUI()->requestQuickAccessState.connect(
+ boost::bind(&QuickAccess::getQuickAccessState, m_quickAccess.get()));
+ m_webPageUI->getQuickAccessEditUI()->editingFinished.connect(
+ boost::bind(&QuickAccess::editingFinished, m_quickAccess.get()));
+ m_webPageUI->getQuickAccessEditUI()->deleteSelectedMostVisitedItems.connect(
+ boost::bind(&QuickAccess::deleteSelectedMostVisitedItems, 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,
m_webPageUI->switchToMobileMode.connect(boost::bind(&SimpleUI::switchToMobileMode, this));
m_webPageUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, this));
m_webPageUI->quickAccessEdit.connect(boost::bind(&SimpleUI::editQuickAccess, this));
+ m_webPageUI->deleteMostVisited.connect(boost::bind(&SimpleUI::deleteMostVisited, this));
m_webPageUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccess, this));
m_webPageUI->getEngineState.connect(boost::bind(&basic_webengine::AbstractWebEngine::getState, m_webEngine.get()));
// WPA
m_quickAccess->switchViewToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
m_quickAccess->addQuickAccessClicked.connect(boost::bind(&SimpleUI::onNewQuickAccessClicked, this));
m_quickAccess->deleteQuickAccessItem.connect(boost::bind(&SimpleUI::onBookmarkDeleted, this, _1));
+ m_quickAccess->removeMostVisitedItem.connect(
+ boost::bind(&SimpleUI::setMostVisitedFrequencyValue, this, _1, _2));
+ m_quickAccess->sendSelectedMVItemsCount.connect(
+ boost::bind(&WebPageUI::setMostVisitedSelectedItemsCountInEditMode, m_webPageUI.get(), _1));
m_quickAccess->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
}
pushViewToStack(m_webPageUI->getQuickAccessEditUI().get());
}
+void SimpleUI::deleteMostVisited()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_quickAccess->deleteMostVisited();
+ pushViewToStack(m_webPageUI->getQuickAccessEditUI().get());
+}
+
void SimpleUI::addQuickAccess()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
std::shared_ptr<services::HistoryItemVector> getHistory();
std::shared_ptr<services::HistoryItemVector> getMostVisitedItems();
+ void setMostVisitedFrequencyValue(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem,
+ int visitFrequency);
void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
void onNewQuickAccessClicked();
void switchToMobileMode();
void switchToDesktopMode();
void editQuickAccess();
+ void deleteMostVisited();
void addQuickAccess();
Evas_Object* showHistoryUI(Evas_Object* parent, SharedNaviframeWrapper naviframe, bool removeMode = false);
void closeHistoryUI();
#include "EditQuickAccessUI.h"
#include <Elementary.h>
+#include <boost/format.hpp>
#include <AbstractMainWindow.h>
#include "ServiceManager.h"
#include "BrowserLogger.h"
#include "Tools/EflTools.h"
#include "QuickAccess.h"
+#include "app_i18n.h"
namespace tizen_browser{
namespace base_ui{
EditQuickAccessUI::EditQuickAccessUI()
: m_parent(nullptr)
+ , m_editState(QuickAccessState::Edit)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_naviframe->getLayout());
m_naviframe->show();
+ if (m_editState == QuickAccessState::Edit)
+ m_naviframe->setRightButtonEnabled(true);
}
void EditQuickAccessUI::hideUI()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_parent);
- if (!m_naviframe)
- createEditQuickAccessLayout();
- auto signal = requestQuickAccessGengrid();
+ auto signal = requestQuickAccessState();
if (signal)
- m_naviframe->setContent(*signal);
+ m_editState = *signal;
else
BROWSER_LOGW("Missing signal value");
+ if (!m_naviframe)
+ createEditLayout();
+
+ if (m_editState == QuickAccessState::Edit) {
+ m_naviframe->setTitle(_("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"));
+ m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+ auto signal = requestQuickAccessGengrid();
+ if (signal)
+ m_naviframe->setContent(*signal);
+ else
+ BROWSER_LOGW("Missing signal value");
+ } else if (m_editState == QuickAccessState::DeleteMostVisited) {
+ //TODO: add translation IDS_BR_HEADER_SELECT_ITEMS_ABB2
+ m_naviframe->setTitle("Select items");
+ m_naviframe->setRightButtonText(_("IDS_BR_SK_DELETE_ABB"));
+ auto signal = requestMostVisitedGengrid();
+ if (signal)
+ m_naviframe->setContent(*signal);
+ else
+ BROWSER_LOGW("Missing signal value");
+ } else {
+ BROWSER_LOGE("No correct Edit state");
+ }
+ m_naviframe->setRightButtonVisible(true);
+ m_naviframe->setRightButtonEnabled(false);
+
return m_naviframe->getLayout();
}
closeUI();
}
+void EditQuickAccessUI::setMVSelectedItems(int count)
+{
+ if (count)
+ m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str());
+ else
+ //TODO: Add translation
+ m_naviframe->setTitle("Select items");
+ m_naviframe->setRightButtonEnabled(count);
+}
+
void EditQuickAccessUI::_cancel_clicked(void *data, Evas_Object *, void *)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
auto self = static_cast<EditQuickAccessUI*>(data);
self->editingFinished();
- //TODO: save reordered items
+ if (self->m_editState == QuickAccessState::Edit) {
+ //TODO: save reordered items
+ } else if (self->m_editState == QuickAccessState::DeleteMostVisited) {
+ self->deleteSelectedMostVisitedItems();
+ }
+
self->closeUI();
}
-void EditQuickAccessUI::createEditQuickAccessLayout()
+void EditQuickAccessUI::createEditLayout()
{
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->setLeftButtonText(_("IDS_BR_SK_CANCEL_ABB"));
m_naviframe->setLeftButtonVisible(true);
m_naviframe->addRightButton(_done_clicked, this);
- m_naviframe->setRightButtonText("Done");
- m_naviframe->setRightButtonVisible(true);
}
} // namespace tizen_browser
void init(Evas_Object *parent);
Evas_Object* getContent();
void backPressed();
+ void setMVSelectedItems(int count);
boost::signals2::signal<Evas_Object* ()> requestQuickAccessGengrid;
+ boost::signals2::signal<Evas_Object* ()> requestMostVisitedGengrid;
+ boost::signals2::signal<QuickAccessState ()> requestQuickAccessState;
boost::signals2::signal<void ()> editingFinished;
+ boost::signals2::signal<void ()> deleteSelectedMostVisitedItems;
private:
static void _cancel_clicked(void *data, Evas_Object *, void *);
static void _done_clicked(void *data, Evas_Object *, void *);
- void createEditQuickAccessLayout();
+ void createEditLayout();
SharedNaviframeWrapper m_naviframe;
Evas_Object *m_parent;
std::shared_ptr<QuickAccess> m_quickAccess;
+ QuickAccessState m_editState;
};
} // namespace tizen_browser
setQuickAccessView();
}
+void WebPageUI::setMostVisitedSelectedItemsCountInEditMode(int count)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ m_editQuickAccessUI->setMVSelectedItems(count);
+}
+
void WebPageUI::faviconClicked(void* data, Evas_Object*, const char*, const char*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (!isMostVisitedOpt || !(*isMostVisitedOpt))
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"), nullptr, _cm_edit_qa_clicked, this);
else
- elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_DELETE"), nullptr, nullptr, nullptr);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_DELETE"), nullptr, _cm_delete_mv_clicked, this);
} else if (m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_SHARE"), nullptr, _cm_share_clicked, this);
elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_FIND_ON_PAGE"), nullptr, _cm_find_on_page_clicked, this);
BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
}
+void WebPageUI::_cm_delete_mv_clicked(void *data, Evas_Object *, void *)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->deleteMostVisited();
+ } else {
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+ }
+}
+
void WebPageUI::_cm_share_clicked(void* data, Evas_Object*, void* )
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
void switchViewToQuickAccess(Evas_Object* content);
URIEntry& getURIEntry() const { return *m_URIEntry.get(); }
std::shared_ptr<EditQuickAccessUI> getQuickAccessEditUI() { return m_editQuickAccessUI; }
+ void setMostVisitedSelectedItemsCountInEditMode(int count);
void setTabsNumber(int tabs);
void setBackButtonEnabled(bool enabled) { m_back->setEnabled(enabled); }
void setForwardButtonEnabled(bool enabled) { m_forward->setEnabled(enabled); }
boost::signals2::signal<void ()> switchToMobileMode;
boost::signals2::signal<void ()> switchToDesktopMode;
boost::signals2::signal<void ()> quickAccessEdit;
+ boost::signals2::signal<void ()> deleteMostVisited;
boost::signals2::signal<void ()> addToQuickAccess;
boost::signals2::signal<bool ()> isMostVisited;
static Evas_Event_Flags _gesture_move(void *data, void *event_info);
#endif
static void _cm_edit_qa_clicked(void*, Evas_Object*, void*);
+ static void _cm_delete_mv_clicked(void*, Evas_Object*, void*);
static void _cm_share_clicked(void*, Evas_Object*, void*);
static void _cm_find_on_page_clicked(void*, Evas_Object*, void*);
static void _cm_delete_bookmark_clicked(void*, Evas_Object*, void*);