From 4f7ec2efd387c6195288fa9086069c4b30e37aac Mon Sep 17 00:00:00 2001 From: Lukasz Mastalerz Date: Mon, 20 Feb 2023 13:09:23 +0100 Subject: [PATCH] [CP-1831] Editing contact which is deleted via Center can still be saved but with incomplete data Fix for editing contact when it was deleted via Center. Edited contact cannot be saved if it was deleted earlier. Proper communication is shown. Fix for phonebook app was not handling database notifications correctly. --- image/system_a/data/lang/Deutsch.json | 1 + image/system_a/data/lang/English.json | 1 + image/system_a/data/lang/Espanol.json | 1 + image/system_a/data/lang/Francais.json | 1 + image/system_a/data/lang/Polski.json | 1 + image/system_a/data/lang/Svenska.json | 1 + .../windows/PhonebookContactDetails.cpp | 2 +- .../windows/PhonebookContactDetails.hpp | 2 +- .../windows/PhonebookNewContact.cpp | 35 +++++++++++++++++-- .../windows/PhonebookNewContact.hpp | 4 ++- .../queries/phonebook/QueryContactAdd.cpp | 4 +-- .../queries/phonebook/QueryContactRemove.cpp | 4 +-- .../queries/phonebook/QueryContactUpdate.cpp | 4 +-- pure_changelog.md | 2 ++ 14 files changed, 52 insertions(+), 11 deletions(-) diff --git a/image/system_a/data/lang/Deutsch.json b/image/system_a/data/lang/Deutsch.json index 7c0d9f3633307228f61f4e54b7a58ba32cdfaa48..e79ea0fa5d9750388330c7cbc09b780e65030223 100644 --- a/image/system_a/data/lang/Deutsch.json +++ b/image/system_a/data/lang/Deutsch.json @@ -591,6 +591,7 @@ "app_phonebook_uncheck": "AUSWAHL ENTFERNEN", "app_phonebook_multiple_numbers_first": "Nummer", "app_phonebook_multiple_numbers_second": "Zweite nummer", + "app_phonebook_contact_deleted": "Der Kontakt wurde gelöscht.

Die Bearbeitung ist nicht möglich.
", "app_meditation_title_main": "Meditationstimer", "app_meditation_preparation_time": "Vorbereitungstimer", "app_meditation_put_down_phone_and_wait": "Legen Sie das Telefon weg
und warten Sie auf den Gong.
", diff --git a/image/system_a/data/lang/English.json b/image/system_a/data/lang/English.json index ed70c83bcc67b10608c1c325bf59ea6b0f64469f..8ad015e93283861d54c9cf023df283b5ac04ddfd 100644 --- a/image/system_a/data/lang/English.json +++ b/image/system_a/data/lang/English.json @@ -556,6 +556,7 @@ "app_phonebook_uncheck": "UNCHECK", "app_phonebook_multiple_numbers_first": "Number", "app_phonebook_multiple_numbers_second": "Second number", + "app_phonebook_contact_deleted": "Contact has been deleted.

Editing is not possible.
", "app_meditation_title_main": "Meditation timer", "app_meditation_preparation_time": "Preparation time", "app_meditation_put_down_phone_and_wait": "Put down the phone
and wait for the gong.
", diff --git a/image/system_a/data/lang/Espanol.json b/image/system_a/data/lang/Espanol.json index ab4e3da26bd07e163cc72390b232a5f5675ab1a4..62cf7718785fb8de645da56e7ecd989ff45f1d83 100644 --- a/image/system_a/data/lang/Espanol.json +++ b/image/system_a/data/lang/Espanol.json @@ -592,6 +592,7 @@ "app_phonebook_uncheck": "DESMARCAR", "app_phonebook_multiple_numbers_first": "Número", "app_phonebook_multiple_numbers_second": "Número alternativo", + "app_phonebook_contact_deleted": "Se ha eliminado el contacto.

No es posible editar.
", "app_meditation_title_main": "Temporizador de meditación", "app_meditation_preparation_time": "Tiempo de preparación", "app_meditation_put_down_phone_and_wait": "Deja a un lado el teléfono
y espera a que suene el gong.
", diff --git a/image/system_a/data/lang/Francais.json b/image/system_a/data/lang/Francais.json index c68df80c97bee90756f57cb75a73c1fec71ebb1e..e00cd96d78ab6651a66ccfdabeec31c3bc4e2e5b 100644 --- a/image/system_a/data/lang/Francais.json +++ b/image/system_a/data/lang/Francais.json @@ -560,6 +560,7 @@ "app_phonebook_uncheck": "DÉCOCHER", "app_phonebook_multiple_numbers_first": "Numéro", "app_phonebook_multiple_numbers_second": "Second numéro", + "app_phonebook_contact_deleted": "Le contact a été supprimé.

La modification n'est pas possible.
", "app_meditation_title_main": "Minuterie de méditation", "app_meditation_preparation_time": "Temps de préparation", "app_meditation_put_down_phone_and_wait": "Posez le téléphone
et attendez le son du gong.
", diff --git a/image/system_a/data/lang/Polski.json b/image/system_a/data/lang/Polski.json index 83971721672d3188ceefa1071fa3dc267719a019..69777610734162aef26491475edf9f01a8b37eb3 100644 --- a/image/system_a/data/lang/Polski.json +++ b/image/system_a/data/lang/Polski.json @@ -590,6 +590,7 @@ "app_phonebook_uncheck": "ODZNACZ", "app_phonebook_multiple_numbers_first": "Numer", "app_phonebook_multiple_numbers_second": "Drugi numer", + "app_phonebook_contact_deleted": "Kontakt został usunięty.

Brak możliwości edycji.
", "app_meditation_title_main": "Medytacja", "app_meditation_preparation_time": "Czas przygotowania", "app_meditation_put_down_phone_and_wait": "Odłóż telefon
i zaczekaj na gong.
", diff --git a/image/system_a/data/lang/Svenska.json b/image/system_a/data/lang/Svenska.json index 1e25d39a4004a5fd3dd9925da781153ca4751e8e..c9577aedd576a714e234f9078dd1ccbda1b7967e 100644 --- a/image/system_a/data/lang/Svenska.json +++ b/image/system_a/data/lang/Svenska.json @@ -496,6 +496,7 @@ "app_phonebook_uncheck": "AVMARKERA", "app_phonebook_multiple_numbers_first": "Nummer", "app_phonebook_multiple_numbers_second": "Alternativnummer", + "app_phonebook_contact_deleted": "Kontakten är raderad;

den kan inte redigeras.
", "app_meditation_title_main": "Meditationsklocka", "app_meditation_preparation_time": "Förbered dig", "app_meditation_put_down_phone_and_wait": "Sätt ner telefonen
och vänta på klockslaget.
", diff --git a/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp b/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp index eff65af9a3670768ab2e64e19901d62e91151e52..0ab776fe00ccc63b6ae42c49841ef283c0419d6b 100644 --- a/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp +++ b/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "PhonebookContactDetails.hpp" diff --git a/module-apps/application-phonebook/windows/PhonebookContactDetails.hpp b/module-apps/application-phonebook/windows/PhonebookContactDetails.hpp index b364562f82f5aa128b6941448375f4eba3ed4f2c..73802e450130dfd51c8a1ac1e149ce08f7d0fc62 100644 --- a/module-apps/application-phonebook/windows/PhonebookContactDetails.hpp +++ b/module-apps/application-phonebook/windows/PhonebookContactDetails.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once diff --git a/module-apps/application-phonebook/windows/PhonebookNewContact.cpp b/module-apps/application-phonebook/windows/PhonebookNewContact.cpp index 1981741920274a890f6185abea078d36523ba4aa..2c776c8a1f4e5f06a2b5f289e9b51606f30ee741 100644 --- a/module-apps/application-phonebook/windows/PhonebookNewContact.cpp +++ b/module-apps/application-phonebook/windows/PhonebookNewContact.cpp @@ -4,6 +4,7 @@ #include "PhonebookNewContact.hpp" #include "DialogMetadata.hpp" +#include "DialogMetadataMessage.hpp" #include "application-phonebook/ApplicationPhonebook.hpp" #include @@ -177,7 +178,6 @@ namespace gui else { contact->removeFromGroup(ContactsDB::temporaryGroupId()); } - // perform actual add/update operation if (contactAction == ContactAction::Add) { auto returnedContact = DBServiceAPI::ContactAdd(application, *contact); @@ -189,7 +189,12 @@ namespace gui } else if (contactAction == ContactAction::Edit || contactAction == ContactAction::EditTemporary) { contact->groups.erase(ContactsDB::temporaryGroupId()); - if (!DBServiceAPI::ContactUpdate(application, *contact)) { + if (checkIfContactWasDeletedDuringEditProcess()) { + LOG_WARN("Contact removed while editing by external resources."); + showContactDeletedNotification(); + return false; + } + else if (!DBServiceAPI::ContactUpdate(application, *contact)) { LOG_ERROR("verifyAndSave failed to UPDATE contact"); return false; } @@ -266,4 +271,30 @@ namespace gui }}); application->switchWindow(gui::window::name::dialog_yes_no_icon_txt, std::move(metaData)); } + + void PhonebookNewContact::showContactDeletedNotification() + { + auto icon = "info_128px_W_G"; + auto text = utils::translate("app_phonebook_contact_deleted"); + + auto metaData = std::make_unique(gui::DialogMetadata{ + contact->getFormattedName(ContactRecord::NameFormatType::Title), icon, text, "", [=]() -> bool { + std::unique_ptr data = + std::make_unique(contact, newContactModel->getRequestType()); + this->application->switchWindow(gui::name::window::main_window, std::move(data)); + + return true; + }}); + application->switchWindow(gui::window::name::dialog_confirm, std::move(metaData)); + } + + bool PhonebookNewContact::checkIfContactWasDeletedDuringEditProcess() const + { + const auto contactByID = DBServiceAPI::ContactGetByID(application, contact->ID); + + return contactByID->size() == 1 and contactByID->front().ID == 0 and + contactByID->front().primaryName.empty() and contactByID->front().alternativeName.empty() and + contactByID->front().numbers.empty(); + } + } // namespace gui diff --git a/module-apps/application-phonebook/windows/PhonebookNewContact.hpp b/module-apps/application-phonebook/windows/PhonebookNewContact.hpp index 69c6636d6732b0a00639b89646bf4dc7a281f2d0..6203a95827d5867840ca27de1196834c72c3582c 100644 --- a/module-apps/application-phonebook/windows/PhonebookNewContact.hpp +++ b/module-apps/application-phonebook/windows/PhonebookNewContact.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -39,6 +39,8 @@ namespace gui const std::uint32_t duplicatedNumberContactID = 0u); void showDialogDuplicatedSpeedDialNumber(); void setSaveButtonVisible(bool visible); + void showContactDeletedNotification(); + bool checkIfContactWasDeletedDuringEditProcess() const; std::shared_ptr contact = nullptr; std::shared_ptr newContactModel = nullptr; diff --git a/module-db/queries/phonebook/QueryContactAdd.cpp b/module-db/queries/phonebook/QueryContactAdd.cpp index f4ef5b57b87bac2da3b48a2446c6231cbf2f2321..813e860a67c63faa7614efc4ff01f499ede1e1df 100644 --- a/module-db/queries/phonebook/QueryContactAdd.cpp +++ b/module-db/queries/phonebook/QueryContactAdd.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "QueryContactAdd.hpp" @@ -8,7 +8,7 @@ using namespace db::query; -ContactAdd::ContactAdd(const ContactRecord &rec) : Query(Query::Type::Read), rec(rec) +ContactAdd::ContactAdd(const ContactRecord &rec) : Query(Query::Type::Create), rec(rec) {} ContactAddResult::ContactAddResult(bool result, unsigned int id, bool duplicated) diff --git a/module-db/queries/phonebook/QueryContactRemove.cpp b/module-db/queries/phonebook/QueryContactRemove.cpp index b1509743ba32dcdbbea72e378120cb3212665255..e7617d61339d04f1b4a03f03e59ae894a98fd6c2 100644 --- a/module-db/queries/phonebook/QueryContactRemove.cpp +++ b/module-db/queries/phonebook/QueryContactRemove.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "QueryContactRemove.hpp" @@ -7,7 +7,7 @@ using namespace db::query; -ContactRemove::ContactRemove(unsigned int id) : Query(Query::Type::Read), id(id) +ContactRemove::ContactRemove(unsigned int id) : Query(Query::Type::Delete), id(id) {} ContactRemoveResult::ContactRemoveResult(bool result) : result(result) diff --git a/module-db/queries/phonebook/QueryContactUpdate.cpp b/module-db/queries/phonebook/QueryContactUpdate.cpp index d7c47f898bb634fd75b0a51ebf037bd6e708da03..17a646102387cdc0f7a0aa237f199f9f4191c3ce 100644 --- a/module-db/queries/phonebook/QueryContactUpdate.cpp +++ b/module-db/queries/phonebook/QueryContactUpdate.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "QueryContactUpdate.hpp" @@ -8,7 +8,7 @@ using namespace db::query; -ContactUpdate::ContactUpdate(const ContactRecord &rec) : Query(Query::Type::Read), rec(std::move(rec)) +ContactUpdate::ContactUpdate(const ContactRecord &rec) : Query(Query::Type::Update), rec(std::move(rec)) {} ContactUpdateResult::ContactUpdateResult(bool result) : result(result) diff --git a/pure_changelog.md b/pure_changelog.md index fb8176b0bb895bf4700bf06d7524c85593262c78..f53e252c377dac9bc11d5a1b2867a3afd607294d 100644 --- a/pure_changelog.md +++ b/pure_changelog.md @@ -88,6 +88,8 @@ * Fixed incorrectly displayed Swedish translations in Onboarding * Fixed going back to wrong window after confirming or cancelling creation of new contact from call log * Fixed missing "No calls yet" text in call log +* Fixed phonebook is not handling database notification about contacts action done by Center +* Fixed contact deleted via Center cannot be edited by Phonebook app and saved again ## [1.5.0 2022-12-20]