M module-apps/application-phonebook/windows/PhonebookIceContacts.cpp => module-apps/application-phonebook/windows/PhonebookIceContacts.cpp +1 -6
@@ 4,7 4,6 @@
#include "PhonebookIceContacts.hpp"
#include "application-phonebook/ApplicationPhonebook.hpp"
#include "application-phonebook/data/PhonebookStyle.hpp"
-#include "service-appmgr/Controller.hpp"
#include <service-db/DBNotificationMessage.hpp>
@@ 57,11 56,7 @@ namespace gui
bool PhonebookIceContacts::onInput(const InputEvent &inputEvent)
{
if (inputEvent.isShortPress()) {
- if (inputEvent.is(KeyCode::KEY_RF)) {
- app::manager::Controller::switchBack(application);
- return true;
- }
- else if (inputEvent.is(KeyCode::KEY_ENTER)) {
+ if (inputEvent.is(KeyCode::KEY_ENTER)) {
return true;
}
}
M module-db/Tables/ContactsNameTable.cpp => module-db/Tables/ContactsNameTable.cpp +24 -5
@@ 1,7 1,8 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "ContactsNameTable.hpp"
+#include <Utils.hpp>
ContactsNameTable::ContactsNameTable(Database *db) : Table(db)
{}
@@ 174,10 175,28 @@ std::size_t ContactsNameTable::GetCountByName(const std::string &name)
if (name.empty()) {
return count();
}
- auto queryRet =
- db->query("SELECT COUNT(*) FROM contact_name WHERE name_primary like '%s%%' OR name_alternative like '%s%%';",
- name.c_str(),
- name.c_str());
+
+ const auto names = utils::split(name, " ");
+ const auto namePart1 = names[0];
+ const auto namePart2 = names.size() > 1 ? names[1] : "";
+
+ std::unique_ptr<QueryResult> queryRet;
+
+ if (!namePart1.empty() && !namePart2.empty()) {
+ queryRet = db->query(
+ "SELECT COUNT(*) FROM contact_name WHERE (name_primary like '%s%%' AND name_alternative like '%s%%') OR "
+ "(name_primary like '%s%%' AND name_alternative like '%s%%');",
+ namePart1.c_str(),
+ namePart2.c_str(),
+ namePart2.c_str(),
+ namePart1.c_str());
+ }
+ else {
+ queryRet = db->query(
+ "SELECT COUNT(*) FROM contact_name WHERE name_primary like '%s%%' OR name_alternative like '%s%%';",
+ namePart1.c_str(),
+ namePart1.c_str());
+ }
if ((queryRet == nullptr) || (queryRet->getRowCount() == 0)) {
return 0;
M module-db/Tables/ContactsTable.cpp => module-db/Tables/ContactsTable.cpp +17 -3
@@ 1,8 1,9 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "ContactsTable.hpp"
#include <log/log.hpp>
+#include <Utils.hpp>
namespace ColumnName
{
@@ 287,9 288,22 @@ std::vector<std::uint32_t> ContactsTable::GetIDsSortedByField(
switch (matchType) {
case MatchType::Name: {
query += exclude_temporary;
+
if (!name.empty()) {
- query += " AND ( contact_name.name_primary || ' ' || contact_name.name_alternative LIKE '" + name + "%%'";
- query += " OR contact_name.name_alternative || ' ' || contact_name.name_primary LIKE '" + name + "%%')";
+ const auto names = utils::split(name, " ");
+ const auto namePart1 = names[0];
+ const auto namePart2 = names.size() > 1 ? names[1] : "";
+
+ if (!namePart1.empty() && !namePart2.empty()) {
+ query += " AND (( contact_name.name_primary LIKE '" + namePart1 + "%%'";
+ query += " AND contact_name.name_alternative LIKE '" + namePart2 + "%%')";
+ query += " OR ( contact_name.name_primary LIKE '" + namePart2 + "%%'";
+ query += " AND contact_name.name_alternative LIKE '" + namePart1 + "%%'))";
+ }
+ else {
+ query += " AND ( contact_name.name_primary LIKE '" + namePart1 + "%%'";
+ query += " OR contact_name.name_alternative LIKE '" + namePart1 + "%%')";
+ }
}
} break;