~aleteoryx/muditaos

1e55ef8f726ac8dfe56e394ef4558a1003f6cb4a — Pawel.Paprocki 5 years ago 22fa17a
[EGD-6033] Fix Analise and optimize stack for application-phonebook

Reduce application-phonebook stack size to 1k
Reduce stack usage for Phonebook functions:
contactRemove
contactBlock
showDialogDuplicatedNumber
showDialogDuplicatedSpeedDialNumber
M module-apps/application-phonebook/ApplicationPhonebook.hpp => module-apps/application-phonebook/ApplicationPhonebook.hpp +2 -2
@@ 1,4 1,4 @@
// 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

#pragma once


@@ 25,7 25,7 @@ namespace gui::window::name
namespace app
{
    inline constexpr auto name_phonebook         = "ApplicationPhonebook";
    constexpr std::uint16_t phonebook_stack_size = 8192;
    constexpr std::uint16_t phonebook_stack_size = 4096;

    class ApplicationPhonebook : public app::Application
    {

M module-apps/application-phonebook/windows/PhonebookContactOptions.cpp => module-apps/application-phonebook/windows/PhonebookContactOptions.cpp +18 -14
@@ 1,4 1,4 @@
// 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 "PhonebookContactOptions.hpp"


@@ 80,8 80,9 @@ namespace gui
    auto PhonebookContactOptions::contactBlock(bool shouldBeBlocked) -> bool
    {
        LOG_DEBUG("Blocking contact: %" PRIu32, contact->ID);
        DialogMetadata meta;
        meta.action = [=]() -> bool {
        std::unique_ptr<DialogMetadata> meta = std::make_unique<DialogMetadata>();

        meta->action = [=]() -> bool {
            contact->addToBlocked(shouldBeBlocked);
            DBServiceAPI::ContactUpdate(this->application, *contact);
            if (shouldBeBlocked) {


@@ 94,25 95,27 @@ namespace gui
            return true;
        };
        if (shouldBeBlocked) {
            meta.text = utils::localize.get("app_phonebook_options_block_confirm");
            meta->text = utils::localize.get("app_phonebook_options_block_confirm");
        }
        else {
            meta.text = utils::localize.get("app_phonebook_options_unblock_confirm");
            meta->text = utils::localize.get("app_phonebook_options_unblock_confirm");
        }

        auto contactRec = DBServiceAPI::ContactGetByID(this->application, contact->ID);
        auto cont       = !contactRec->empty() ? contactRec->front() : ContactRecord{};
        meta.title      = cont.getFormattedName();
        meta.icon       = "phonebook_contact_delete_trashcan";
        application->switchWindow(gui::window::name::dialog_yes_no, std::make_unique<gui::DialogMetadataMessage>(meta));
        meta->title     = cont.getFormattedName();
        meta->icon      = "phonebook_contact_delete_trashcan";
        application->switchWindow(gui::window::name::dialog_yes_no,
                                  std::make_unique<gui::DialogMetadataMessage>(std::move(*meta.release())));
        return true;
    }

    auto PhonebookContactOptions::contactRemove() -> bool
    {
        LOG_DEBUG("Removing contact: %" PRIu32, contact->ID);
        DialogMetadata meta;
        meta.action = [=]() -> bool {
        std::unique_ptr<DialogMetadata> meta = std::make_unique<DialogMetadata>();

        meta->action = [=]() -> bool {
            if (!DBServiceAPI::ContactRemove(this->application, contact->ID)) {
                LOG_ERROR("Contact id=%" PRIu32 "  remove failed", contact->ID);
                return false;


@@ 120,12 123,13 @@ namespace gui
            showNotification(NotificationType::Delete);
            return true;
        };
        meta.text       = utils::localize.get("app_phonebook_options_delete_confirm");
        meta->text      = utils::localize.get("app_phonebook_options_delete_confirm");
        auto contactRec = DBServiceAPI::ContactGetByID(this->application, contact->ID);
        auto cont       = !contactRec->empty() ? contactRec->front() : ContactRecord{};
        meta.title      = cont.getFormattedName();
        meta.icon       = "phonebook_contact_delete_trashcan";
        application->switchWindow(gui::window::name::dialog_yes_no, std::make_unique<DialogMetadataMessage>(meta));
        meta->title     = cont.getFormattedName();
        meta->icon      = "phonebook_contact_delete_trashcan";
        application->switchWindow(gui::window::name::dialog_yes_no,
                                  std::make_unique<DialogMetadataMessage>(std::move(*meta.release())));
        return true;
    }


M module-apps/application-phonebook/windows/PhonebookNewContact.cpp => module-apps/application-phonebook/windows/PhonebookNewContact.cpp +15 -14
@@ 1,4 1,4 @@
// 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 "PhonebookNewContact.hpp"


@@ 204,7 204,7 @@ namespace gui

    void PhonebookNewContact::showDialogDuplicatedNumber(const utils::PhoneNumber::View &duplicatedNumber)
    {
        DialogMetadata meta;
        std::unique_ptr<DialogMetadata> meta = std::make_unique<DialogMetadata>();
        auto matchedContact   = DBServiceAPI::MatchContactByPhoneNumber(application, duplicatedNumber);
        auto oldContactRecord = (matchedContact != nullptr) ? *matchedContact : ContactRecord{};



@@ 212,7 212,7 @@ namespace gui
            contact->ID = oldContactRecord.ID;
        }

        meta.action = [=]() -> bool {
        meta->action = [=]() -> bool {
            if (!DBServiceAPI::ContactUpdate(application, *contact)) {
                LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID);
                return false;


@@ 222,10 222,11 @@ namespace gui
        };
        std::string duplicatedNumberPhrase = utils::localize.get("app_phonebook_duplicate_numbers");
        phonebookUtils::fillContactData(duplicatedNumberPhrase, oldContactRecord);
        meta.text  = duplicatedNumberPhrase;
        meta.title = duplicatedNumber.getFormatted();
        meta.icon  = "info_big_circle_W_G";
        application->switchWindow(gui::window::name::dialog_yes_no, std::make_unique<gui::DialogMetadataMessage>(meta));
        meta->text  = duplicatedNumberPhrase;
        meta->title = duplicatedNumber.getFormatted();
        meta->icon  = "info_big_circle_W_G";
        application->switchWindow(gui::window::name::dialog_yes_no,
                                  std::make_unique<gui::DialogMetadataMessage>(std::move(*meta.release())));
    }

    void PhonebookNewContact::showDialogDuplicatedSpeedDialNumber()


@@ 237,8 238,8 @@ namespace gui
            contact->ID = oldContactRecord.ID;
        }

        DialogMetadata metadata;
        metadata.action = [=]() -> bool {
        std::unique_ptr<DialogMetadata> metadata = std::make_unique<DialogMetadata>();
        metadata->action                         = [=]() -> bool {
            if (!DBServiceAPI::ContactUpdate(application, *contact)) {
                LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID);
                return false;


@@ 250,13 251,13 @@ namespace gui
        phonebookUtils::fillContactData(duplicatedSpeedDialPhrase, oldContactRecord);
        std::string duplicatedSpeedDialTitle = utils::localize.get("app_phonebook_duplicate_speed_dial_title");
        phonebookUtils::fillContactData(duplicatedSpeedDialTitle, oldContactRecord);
        metadata.text     = duplicatedSpeedDialPhrase;
        metadata.title    = duplicatedSpeedDialTitle;
        metadata.icon     = "phonebook_empty_grey_circle_speed_dial";
        metadata.iconText = contact->speeddial;
        metadata->text     = duplicatedSpeedDialPhrase;
        metadata->title    = duplicatedSpeedDialTitle;
        metadata->icon     = "phonebook_empty_grey_circle_speed_dial";
        metadata->iconText = contact->speeddial;

        application->switchWindow(gui::window::name::dialog_yes_no_icon_txt,
                                  std::make_unique<gui::DialogMetadataMessage>(metadata));
                                  std::make_unique<gui::DialogMetadataMessage>(std::move(*metadata.release())));
    }

} // namespace gui