~aleteoryx/muditaos

b139f5bf176f2b3984dc4cce7b9880d33350f58c — Mateusz Piesta 2 years ago 9279e9a
[MOS-927] Fixed search engine labels

Removed incorrect CALL/OPEN labels when editing contact obtained by
using search engine.
M module-apps/application-phonebook/ApplicationPhonebook.cpp => module-apps/application-phonebook/ApplicationPhonebook.cpp +20 -35
@@ 4,7 4,6 @@
#include <application-phonebook/ApplicationPhonebook.hpp>
#include "Dialog.hpp"
#include "DialogMetadataMessage.hpp"
#include "models/PhonebookModel.hpp"
#include "models/MultipleNumbersModel.hpp"
#include "windows/PhonebookContactDetails.hpp"
#include "windows/PhonebookContactOptions.hpp"


@@ 16,7 15,6 @@
#include "windows/PhonebookSearchResults.hpp"
#include "windows/PhonebookIceContacts.hpp"
#include "windows/PhonebookInputOptions.hpp"
#include <service-appmgr/Controller.hpp>
#include <service-db/QueryMessage.hpp>
#include <service-db/DBNotificationMessage.hpp>
#include <utility>


@@ 31,6 29,19 @@ namespace app
    {
        bus.channels.push_back(sys::BusChannel::ServiceDBNotifications);
        addActionReceiver(manager::actions::ShowContacts, [this](auto &&data) {
            /// Phonebook's contact entries should present different content when the ApplicationPhonebook is invoked
            /// by external application request
            phonebookModel->customContactActivationCallback = [this](const auto &item) {
                if (item->contact->numbers.size() > 1) {
                    std::unique_ptr<PhonebookMultipleNumbersRequest> data =
                        std::make_unique<PhonebookMultipleNumbersRequest>("PhonebookMultipleNumbersRequest",
                                                                          item->contact);

                    switchWindow(gui::window::name::multiple_numbers_select, std::move(data));
                    return true;
                }
                return false;
            };
            switchWindow(gui::name::window::main_window, std::move(data));
            return actionHandled();
        });


@@ 82,10 93,11 @@ namespace app
    auto ApplicationPhonebook::InitHandler() -> sys::ReturnCodes
    {

        auto ret = Application::InitHandler();
        const auto ret = Application::InitHandler();
        if (ret != sys::ReturnCodes::Success) {
            return ret;
        }
        phonebookModel = std::make_shared<PhonebookModel>(this);

        createUserInterface();



@@ 96,7 108,7 @@ namespace app
    {
        windowsFactory.attach(gui::name::window::main_window, [&](ApplicationCommon *app, const std::string &name) {
            searchRequestModel = std::make_shared<SearchRequestModel>();
            return std::make_unique<gui::PhonebookMainWindow>(app, searchRequestModel);
            return std::make_unique<gui::PhonebookMainWindow>(app, searchRequestModel, phonebookModel);
        });
        windowsFactory.attach(gui::window::name::contact, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::PhonebookContactDetails>(app);


@@ 155,37 167,10 @@ namespace app

    void ApplicationPhonebook::onSearchRequest(const std::string &searchFilter)
    {
        auto phonebookModel = std::make_unique<PhonebookModel>(this, searchFilter);

        LOG_DEBUG("Search results count: %d", phonebookModel->requestRecordsCount());
        if (not searchRequestModel) {
            LOG_ERROR("application not build, model not available");
            assert(0);
        }
        if (phonebookModel->requestRecordsCount() > 0) {
            if (searchRequestModel->requestedSearch()) {
                phonebookModel->activateContactSelectCallback();
            }
            LOG_DEBUG("Switching to search results window.");
            auto data = std::make_unique<PhonebookSearchResultsData>(std::move(phonebookModel));
            switchWindow("SearchResults", gui::ShowMode::GUI_SHOW_INIT, std::move(data));
        }
        else {
            searchEmpty(searchFilter);
        }
    }

    bool ApplicationPhonebook::searchEmpty(const std::string &query)
    {
        gui::DialogMetadata meta;
        meta.icon                        = "search_128px_W_G";
        meta.text                        = utils::translate("app_phonebook_search_no_results");
        meta.title                       = utils::translate("common_results_prefix") + "\"" + query + "\"";
        auto data                        = std::make_unique<gui::DialogMetadataMessage>(meta);
        data->ignoreCurrentWindowOnStack = true;
        LOG_DEBUG("Switching to app_phonebook_search_no_results window.");
        switchWindow(gui::window::name::dialog, std::move(data));
        return true;
        phonebookModel->setFilter(searchFilter);
        LOG_DEBUG("Switching to search results window.");
        auto data = std::make_unique<PhonebookSearchResultsData>(phonebookModel);
        switchWindow(gui::window::name::search_results, gui::ShowMode::GUI_SHOW_INIT, std::move(data));
    }

} /* namespace app */

M module-apps/application-phonebook/data/PhonebookItemData.hpp => module-apps/application-phonebook/data/PhonebookItemData.hpp +2 -11
@@ 42,18 42,9 @@ class PhonebookSearchResultsData : public gui::SwitchData
{
  public:
    PhonebookSearchResultsData() = delete;
    PhonebookSearchResultsData(std::unique_ptr<PhonebookModel> model) : model(std::move(model)){};
    PhonebookSearchResultsData(std::shared_ptr<PhonebookModel> model) : model(std::move(model)){};

    std::unique_ptr<PhonebookModel> consumeSearchResultsModel()
    {
        assert(!consumed);
        consumed = true;
        return std::move(model);
    }

  protected:
    std::unique_ptr<PhonebookModel> model;
    bool consumed = false;
    std::shared_ptr<PhonebookModel> model;
};

class PhonebookSearchRequest : public gui::SwitchData

M module-apps/application-phonebook/include/application-phonebook/ApplicationPhonebook.hpp => module-apps/application-phonebook/include/application-phonebook/ApplicationPhonebook.hpp +2 -1
@@ 7,6 7,7 @@

#include <string>
#include <application-phonebook/models/SearchRequestModel.hpp>
#include <application-phonebook/models/PhonebookModel.hpp>

namespace gui::window::name
{


@@ 33,6 34,7 @@ namespace app
    class ApplicationPhonebook : public app::Application
    {
        std::shared_ptr<SearchRequestModel> searchRequestModel;
        std::shared_ptr<PhonebookModel> phonebookModel;

      public:
        explicit ApplicationPhonebook(std::string name                    = name_phonebook,


@@ 53,7 55,6 @@ namespace app
        void destroyUserInterface() override;

        void onSearchRequest(const std::string &searchFilter);
        bool searchEmpty(const std::string &query);
    };

    template <>

M module-apps/application-phonebook/models/PhonebookModel.cpp => module-apps/application-phonebook/models/PhonebookModel.cpp +10 -34
@@ 22,12 22,7 @@

const static std::uint32_t phonebookModelTimeout = 1000;

PhonebookModel::PhonebookModel(app::ApplicationCommon *app,
                               std::string filter,
                               std::uint32_t groupFilter,
                               std::uint32_t displayMode)
    : DatabaseModel(app), app::AsyncCallbackReceiver{app}, queryFilter(std::move(filter)),
      queryGroupFilter(std::move(groupFilter)), queryDisplayMode(std::move(displayMode))
PhonebookModel::PhonebookModel(app::ApplicationCommon *app) : DatabaseModel(app), app::AsyncCallbackReceiver{app}
{}

auto PhonebookModel::requestRecordsCount() -> unsigned int


@@ 60,7 55,7 @@ auto PhonebookModel::requestRecordsCount() -> unsigned int
    return recordsCount;
}

void PhonebookModel::requestRecords(const uint32_t offset, const uint32_t limit)
void PhonebookModel::requestRecords(const std::uint32_t offset, const std::uint32_t limit)
{
    auto query =
        std::make_unique<db::query::ContactGet>(limit, offset, queryFilter, queryGroupFilter, queryDisplayMode);


@@ 109,7 104,7 @@ auto PhonebookModel::getMinimalItemSpaceRequired() const -> unsigned int
auto PhonebookModel::getItem(gui::Order order) -> gui::ListItem *
{

    std::shared_ptr<ContactRecord> contact = getRecord(order);
    const auto contact = getRecord(order);

    if (contact == nullptr) {
        return nullptr;


@@ 120,20 115,15 @@ auto PhonebookModel::getItem(gui::Order order) -> gui::ListItem *
    item->setContact(contact);
    item->setLabelMarkerDisplayMode(getLabelMarkerDisplayMode(contact->contactPosOnList));
    item->activatedCallback = [this, item, contact](gui::Item &) {
        if (contactSelectCallback && contactSelectCallback(item)) {
            return true;
        if (customContactActivationCallback) {
            return customContactActivationCallback(item);
        }

        std::unique_ptr<gui::SwitchData> data = std::make_unique<PhonebookItemData>(contact);

        application->switchWindow(gui::window::name::contact, std::move(data));
        application->switchWindow(gui::window::name::contact, std::make_unique<PhonebookItemData>(contact));
        return true;
    };

    item->inputCallback = [this, item](gui::Item &, const gui::InputEvent &event) {
        if (contactSelectCallback) {
            return false;
        }
        if (event.isShortRelease(gui::KeyCode::KEY_LF)) {
            if (item->contact && !item->contact->numbers.empty()) {
                const auto phoneNumber = item->contact->numbers.front().number;


@@ 184,23 174,9 @@ auto PhonebookModel::getLabelMarkerDisplayMode(uint32_t posOnList) -> LabelMarke
    }
}

void PhonebookModel::activateContactSelectCallback()
void PhonebookModel::setFilter(std::string filter, const std::uint32_t groupFilter, const std::uint32_t displayMode)
{
    contactSelectCallback = [=](gui::PhonebookItem *item) {
        if (item->contact->numbers.size() > 1) {
            std::unique_ptr<PhonebookMultipleNumbersRequest> data =
                std::make_unique<PhonebookMultipleNumbersRequest>("PhonebookMultipleNumbersRequest", item->contact);

            application->switchWindow(gui::window::name::multiple_numbers_select, std::move(data));
            return true;
        }
        else {
            std::unique_ptr<PhonebookSearchRequest> data = std::make_unique<PhonebookSearchRequest>();
            data->result                                 = item->contact;
            data->setDescription("PhonebookSearchRequest");
            return app::manager::Controller::switchBack(
                application,
                std::make_unique<app::manager::SwitchBackRequest>(application->GetName(), std::move(data)));
        }
    };
    queryFilter      = std::move(filter);
    queryGroupFilter = groupFilter;
    queryDisplayMode = displayMode;
}

M module-apps/application-phonebook/models/PhonebookModel.hpp => module-apps/application-phonebook/models/PhonebookModel.hpp +5 -10
@@ 25,18 25,14 @@ class PhonebookModel : public app::DatabaseModel<ContactRecord>,
    std::string queryFilter;
    std::uint32_t queryGroupFilter;
    std::uint32_t queryDisplayMode;
    std::uint32_t lastRequestedOffset = 0;

  public:
    ContactsMapData letterMap;
    PhonebookModel(app::ApplicationCommon *app,
                   std::string filter        = "",
                   std::uint32_t groupFilter = 0,
                   std::uint32_t displayMode = 0);
    explicit PhonebookModel(app::ApplicationCommon *app);

    // virtual methods from DatabaseModel
    auto updateRecords(std::vector<ContactRecord> records) -> bool override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;
    void requestRecords(std::uint32_t offset, std::uint32_t limit) override;
    auto requestLetterMap() -> ContactsMapData;

    // virtual methods for ListViewProvider


@@ 47,14 43,13 @@ class PhonebookModel : public app::DatabaseModel<ContactRecord>,

    [[nodiscard]] auto requestRecordsCount() -> unsigned int override;

    auto setFilter(std::string filter, std::uint32_t groupFilter = 0, std::uint32_t displayMode = 0) -> void;
    [[nodiscard]] auto getFilter() const -> const std::string &;

    void setDisplayMode(std::uint32_t displayMode);
    auto getDisplayMode() -> std::uint32_t;
    auto getLastRequestedOffset() -> std::uint32_t;
    auto getLabelMarkerDisplayMode(uint32_t posOnList) -> LabelMarkerDisplayMode;

    void activateContactSelectCallback();
    // onClick callback to register
    std::function<bool(gui::PhonebookItem *item)> contactSelectCallback = nullptr;
    /// User can define custom action that will be executed when a contact item is activated
    std::function<bool(gui::PhonebookItem *item)> customContactActivationCallback = nullptr;
};

M module-apps/application-phonebook/windows/PhonebookIceContacts.cpp => module-apps/application-phonebook/windows/PhonebookIceContacts.cpp +3 -2
@@ 11,9 11,10 @@
namespace gui
{
    PhonebookIceContacts::PhonebookIceContacts(app::ApplicationCommon *app)
        : AppWindow(app, gui::window::name::ice_contacts), phonebookModel{std::make_shared<PhonebookModel>(
                                                               this->application, "", ContactsDB::iceGroupId())}
        : AppWindow(app, gui::window::name::ice_contacts), phonebookModel{
                                                               std::make_shared<PhonebookModel>(this->application)}
    {
        phonebookModel->setFilter("", ContactsDB::iceGroupId());
        buildInterface();
    }


M module-apps/application-phonebook/windows/PhonebookMainWindow.cpp => module-apps/application-phonebook/windows/PhonebookMainWindow.cpp +4 -3
@@ 16,9 16,11 @@

namespace gui
{
    PhonebookMainWindow::PhonebookMainWindow(app::ApplicationCommon *app, std::shared_ptr<SearchRequestModel> model)
    PhonebookMainWindow::PhonebookMainWindow(app::ApplicationCommon *app,
                                             std::shared_ptr<SearchRequestModel> model,
                                             std::shared_ptr<PhonebookModel> phonebookModel)
        : AppWindow(app, gui::name::window::main_window),
          model(std::move(model)), phonebookModel{std::make_shared<PhonebookModel>(this->application)}
          model(std::move(model)), phonebookModel{std::move(phonebookModel)}
    {
        buildInterface();
    }


@@ 91,7 93,6 @@ namespace gui
        model->setRequested(contactRequest != nullptr);
        if (model->requestedSearch()) {
            enableNewContact = false;
            phonebookModel->activateContactSelectCallback();

            navBar->setActive(nav_bar::Side::Left, false);
            navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::add));

M module-apps/application-phonebook/windows/PhonebookMainWindow.hpp => module-apps/application-phonebook/windows/PhonebookMainWindow.hpp +3 -1
@@ 36,7 36,9 @@ namespace gui
        void onListFilled();

      public:
        PhonebookMainWindow(app::ApplicationCommon *app, std::shared_ptr<SearchRequestModel> model);
        PhonebookMainWindow(app::ApplicationCommon *app,
                            std::shared_ptr<SearchRequestModel> model,
                            std::shared_ptr<PhonebookModel> phonebookModel);
        virtual ~PhonebookMainWindow();

        // virtual methods

M module-apps/application-phonebook/windows/PhonebookSearchResults.cpp => module-apps/application-phonebook/windows/PhonebookSearchResults.cpp +35 -12
@@ 4,7 4,6 @@
#include "PhonebookSearchResults.hpp"
#include "application-phonebook/ApplicationPhonebook.hpp"
#include "application-phonebook/data/PhonebookStyle.hpp"
#include "application-phonebook/widgets/PhonebookItem.hpp"

#include <service-db/QueryMessage.hpp>
#include <queries/phonebook/QueryContactGet.hpp>


@@ 41,6 40,20 @@ namespace gui
        navBar->setActive(nav_bar::Side::Right, true);
        navBar->setText(nav_bar::Side::Right, utils::translate(style::strings::common::back));

        icon = new Icon(this,
                        style::window::default_left_margin,
                        style::window::default_vertical_pos,
                        style::window::default_body_width,
                        style::window::default_body_height,
                        "",
                        "");

        icon->text->addRichText(utils::translate("app_phonebook_search_no_results"));
        icon->image->set("search_128px_W_G");
        icon->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Top));
        icon->image->setMargins(Margins(0, icon::image_top_margin, 0, icon::image_bottom_margin));
        icon->setVisible(false);

        setTitle(utils::translate("common_results_prefix"));
    }



@@ 56,6 69,10 @@ namespace gui

    void PhonebookSearchResults::onBeforeShow(ShowMode mode, SwitchData *data)
    {
        // Model's data might have changed between calls
        if (mode == ShowMode::GUI_SHOW_RETURN) {
            handleContentUpdate();
        }
        searchResultList->rebuildList();
    }



@@ 65,25 82,31 @@ namespace gui
            return false;
        }

        auto searchResultsData = dynamic_cast<PhonebookSearchResultsData *>(data);
        const auto searchResultsData = dynamic_cast<PhonebookSearchResultsData *>(data);
        assert(searchResultsData != nullptr);

        searchResultsModel = searchResultsData->consumeSearchResultsModel();
        setTitle(utils::translate("common_results_prefix") + "\"" + searchResultsModel->getFilter() + "\"");
        searchResultsModel = searchResultsData->model;
        searchResultList->setProvider(searchResultsModel);
        handleContentUpdate();

        if (searchResultsModel->contactSelectCallback) {
            navBar->setActive(nav_bar::Side::Left, false);
            navBar->setText(nav_bar::Side::Left, "");
            navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::select));
        }
        else {
        return true;
    }
    void PhonebookSearchResults::handleContentUpdate()
    {
        setTitle(utils::translate("common_results_prefix") + "\"" + searchResultsModel->getFilter() + "\"");

        if (searchResultsModel->requestRecordsCount() > 0) {
            navBar->setActive(nav_bar::Side::Left, true);
            navBar->setText(nav_bar::Side::Left, utils::translate(style::strings::common::call));
            navBar->setActive(nav_bar::Side::Center, true);
            navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::open));
            setFocusItem(searchResultList);
        }
        else {
            navBar->setActive(nav_bar::Side::Left, false);
            navBar->setActive(nav_bar::Side::Center, false);
            setFocusItem(icon);
        }

        return true;
    }

} /* namespace gui */

M module-apps/application-phonebook/windows/PhonebookSearchResults.hpp => module-apps/application-phonebook/windows/PhonebookSearchResults.hpp +3 -0
@@ 7,6 7,7 @@
#include "application-phonebook/models/PhonebookModel.hpp"
#include "application-phonebook/widgets/PhonebookListView.hpp"
#include <AppWindow.hpp>
#include <Icon.hpp>

namespace gui
{


@@ 22,9 23,11 @@ namespace gui
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        auto handleSwitchData(SwitchData *data) -> bool override;
        void rebuild() override;
        void handleContentUpdate();

        std::shared_ptr<PhonebookModel> searchResultsModel;
        PhonebookListView *searchResultList = nullptr;
        Icon *icon                          = nullptr;
    };

} /* namespace gui */

M pure_changelog.md => pure_changelog.md +1 -0
@@ 67,6 67,7 @@
* Fixed lack of contact search list update when returning to list after contact edition
* Fixed wrong USSD flow when user closed USSD popup with back button
* Fixed broken abbreviating of multiline text messages content in deletion window
* Fixed misleading labels in the Phonebook application when using search engine

## [1.6.0 2023-02-27]