bool m_IsVisible = true;
};
+ enum State
+ {
+ StateSearching = 1 << 0,
+ StateSelecting = 1 << 1
+ };
+
virtual Evas_Object *onCreate(Evas_Object *parent) override;
virtual void onCreated() override;
virtual void onDestroy() override;
void onDeleteSelected();
void onShareSelected();
+ bool onSelectFinished();
void onManageFavoritesSelected();
virtual void onSelectAllInsert(Ui::GenlistItem *item) override;
virtual void onSelectModeChanged(Ux::SelectMode selectMode) override;
+ void setState(State state, bool isEnabled);
+
Ui::GenlistGroupItem *createMyProfileSection();
Ui::GenlistGroupItem *createListSection(SectionId sectionId);
void fillPersonList();
Ui::Genlist *m_Genlist;
Evas_Object *m_Index;
Evas_Object *m_AddButton;
+
bool m_IsCurrentView;
bool m_IsSearching;
bool m_IsEmpty;
-
+ std::vector<State> m_StateHistory;
SearchItem *m_SearchItem;
Section m_Sections[SectionMax];
#include "Utils/Thread.h"
#include "ListPath.h"
+#include <algorithm>
#include <efl_extension.h>
using namespace Contacts;
bool ListView::onBackPressed()
{
- if (m_IsSearching) {
- m_SearchItem->clear();
- return false;
+ if (!m_StateHistory.empty()) {
+ switch (m_StateHistory.back()) {
+ case StateSearching:
+ m_SearchItem->clear();
+ return false;
+ case StateSelecting:
+ return SelectView::onBackPressed();
+ }
}
return true;
void ListView::onDeleteSelected()
{
- ListView *view = new ListView();
- view->setSelectMode(SelectMulti);
- view->setSelectCallback([view](SelectResults results) {
+ setSelectMode(SelectMulti);
+ setCancelCallback(std::bind(&ListView::onSelectFinished, this));
+ setSelectCallback([this](SelectResults results) {
auto task = [](SelectResults results) {
std::vector<int> ids;
ids.reserve(results.size());
contacts_disconnect_on_thread();
};
- auto popup = Ui::ProcessPopup::create(view->getEvasObject(), "IDS_PB_TPOP_DELETING_ING_ABB");
- new Thread(std::bind(task, std::move(results)), [view, popup] {
+ auto popup = Ui::ProcessPopup::create(getEvasObject(), "IDS_PB_TPOP_DELETING_ING_ABB");
+ new Thread(std::bind(task, std::move(results)), [this, popup] {
delete popup;
- view->getPage()->close();
+ onSelectFinished();
});
return false;
});
- getNavigator()->navigateTo(view);
}
void ListView::onShareSelected()
{
- ListView *view = new ListView();
- view->setSelectMode(SelectMulti);
- view->setSelectCallback([](SelectResults results) {
+ setSelectMode(SelectMulti);
+ setCancelCallback(std::bind(&ListView::onSelectFinished, this));
+ setSelectCallback([this](SelectResults results) {
size_t count = results.size();
std::vector<std::string> idString(count);
std::vector<const char *> ids(count);
request.launch();
request.detach();
- return true;
+ return onSelectFinished();
});
- getNavigator()->navigateTo(view);
+}
+
+bool ListView::onSelectFinished()
+{
+ setSelectMode(SelectNone);
+ setCancelCallback(nullptr);
+ setSelectCallback(nullptr);
+ return false;
}
void ListView::onManageFavoritesSelected()
void ListView::onSelectModeChanged(SelectMode selectMode)
{
+ if (Ui::NavigatorPage *page = getPage()) {
+ page->setExpanded(selectMode != SelectNone);
+ }
+
+ setState(StateSelecting, selectMode != SelectNone);
updateAddButton();
updateSections();
}
+void ListView::setState(State state, bool isEnabled)
+{
+ auto it = std::find(m_StateHistory.begin(), m_StateHistory.end(), state);
+ if (it != m_StateHistory.end()) {
+ m_StateHistory.erase(it);
+ }
+ if (isEnabled) {
+ m_StateHistory.push_back(state);
+ }
+}
+
Ui::GenlistGroupItem *ListView::createMyProfileSection()
{
MyProfileGroup *section = new MyProfileGroup();
bool isSearching = str && *str;
if (isSearching != m_IsSearching) {
m_IsSearching = isSearching;
+ setState(StateSearching, m_IsSearching);
updateIndex();
updateEmptyLayout();
updateSections();