From 7a8a8683c9618db06e440fa5bf2d5628fdc1bf2f Mon Sep 17 00:00:00 2001 From: Kuba Date: Wed, 27 Apr 2022 15:54:43 +0200 Subject: [PATCH] [MOS-420] Fix Call ending with sms reworked Reworked ending with sms is now reworked. Sms is send by call app, application messages is only providing template text. Also call hangup and sms send order is changed due to delays caused by sending sms. --- image/assets/lang/Deutsch.json | 1 + image/assets/lang/English.json | 1 + image/assets/lang/Espanol.json | 1 + image/assets/lang/Francais.json | 1 + image/assets/lang/Polski.json | 1 + image/assets/lang/Svenska.json | 1 + .../application-call/data/CallAppStyle.hpp | 1 + .../application-call/model/CallModel.cpp | 18 ++++++++++++++++++ .../application-call/model/CallModel.hpp | 7 ++++++- .../presenter/CallPresenter.cpp | 12 ++++++++++++ .../presenter/CallPresenter.hpp | 3 ++- .../test/mock/CallPresenterMocks.hpp | 8 ++++++-- .../application-call/windows/CallWindow.cpp | 9 ++++++--- .../application-call/windows/CallWindow.hpp | 2 +- .../application-messages/data/SMSdata.hpp | 12 +++++++++++- .../windows/SMSTemplatesWindow.cpp | 9 ++++----- .../service-cellular/ServiceCellular.cpp | 1 - 17 files changed, 73 insertions(+), 15 deletions(-) diff --git a/image/assets/lang/Deutsch.json b/image/assets/lang/Deutsch.json index 0357306ac91db55564eebc6f09a4a2ba3037cf92..e2374e1bb052d1024c19f137ad7427576979c992 100644 --- a/image/assets/lang/Deutsch.json +++ b/image/assets/lang/Deutsch.json @@ -614,6 +614,7 @@ "app_desktop_update_ready_for_reset": "Bereit für Reset …", "app_desktop_update_success": "MuditaOS wurde erfolgreich auf Version $VERSION aktualisiert.", "app_call_private_number": "Private Nummer", + "app_call_ending_call": "Anruf beenden", "tethering": "Tethering", "tethering_turn_off_question": "Tethering ausschalten?", "tethering_enable_question": "Sie sind mit dem Computer verbunden.
Tethering einschalten?
(einige Funktionen können deaktiviert sein)
", diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index 6fc12f5c74dea564cc3e5ba873854e0ab3d293f1..44008e59ba790c822e164eeae47d700af85bc0c5 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -589,6 +589,7 @@ "app_desktop_update_ready_for_reset": "Ready for reset...", "app_desktop_update_success": "MuditaOS has been updated to ver. $VERSION succesfully.", "app_call_private_number": "Private number", + "app_call_ending_call": "Ending a call", "tethering": "Tethering", "tethering_turn_off_question": "Turn tethering off?", "tethering_enable_question": "You're connected to the computer.
Turn tethering on?
(some functions may be disabled)
", diff --git a/image/assets/lang/Espanol.json b/image/assets/lang/Espanol.json index d4bda23851174d5b124268cade91e4b766bd04e6..107c87523569541d9d93e18f75a326b481c08e0d 100644 --- a/image/assets/lang/Espanol.json +++ b/image/assets/lang/Espanol.json @@ -615,6 +615,7 @@ "app_desktop_update_ready_for_reset": "Preparado para restablecer...", "app_desktop_update_success": "El SO de MuditaOS se ha actualizado a la ver. $VERSION correctamente.", "app_call_private_number": "Número privado", + "app_call_ending_call": "Terminar una llamada", "tethering": "Anclaje de red", "tethering_turn_off_question": "¿Desactivar el anclaje de red?", "tethering_enable_question": "Estás conectado al ordenador.
¿Activar el anclaje de red?
(algunas funciones podrían desactivarse)
", diff --git a/image/assets/lang/Francais.json b/image/assets/lang/Francais.json index d685dabe00e4125b6edaeed7f1f46f2c3f4c2b4f..1c6d7706b0bb5f05629f2b00596a45d00c1f878e 100644 --- a/image/assets/lang/Francais.json +++ b/image/assets/lang/Francais.json @@ -582,6 +582,7 @@ "app_desktop_update_ready_for_reset": "Prêt pour la réinitialisation...", "app_desktop_update_success": "La mise à jour de MuditaOS à la version $VERSION a été effectuée avec succès.", "app_call_private_number": "Numéro privé", + "app_call_ending_call": "Terminer un appel", "tethering": "Partage de connexion", "tethering_turn_off_question": "Voulez-vous désactiver le partage de connexion?", "tethering_enable_question": "Vous êtes connecté à l'ordinateur.
Voulez-vous activer le partage de connexion?
(certaines fonctions peuvent être désactivées)
", diff --git a/image/assets/lang/Polski.json b/image/assets/lang/Polski.json index cedf77028d487143899e91093930d1a0f1d4b12e..21fa00c0ae85d61ebd5dfadf61dfc96f44749230 100644 --- a/image/assets/lang/Polski.json +++ b/image/assets/lang/Polski.json @@ -626,6 +626,7 @@ "app_desktop_update_ready_for_reset": "Gotowy do resetu…", "app_desktop_update_success": "System MuditaOS został pomyślnie zaktualizowany do wer. $VERSION.", "app_call_private_number": "Numer prywatny", + "app_call_ending_call": "Kończenie połączenia", "tethering": "Tethering", "tethering_turn_off_question": "Wyłączyć tethering?", "tethering_enable_question": "Połączono z komputerem.
Włączyć tethering?
(Niektóre funkcje mogą być niedostępne)
", diff --git a/image/assets/lang/Svenska.json b/image/assets/lang/Svenska.json index eaa4e485aad8f04cd1ff098e8febf8cc4a139adb..4e9ec765d13f5c9f11a7ca8538ae1789d5be0bf7 100644 --- a/image/assets/lang/Svenska.json +++ b/image/assets/lang/Svenska.json @@ -520,6 +520,7 @@ "app_desktop_update_bytes": "bytes", "app_desktop_update_unpacking": "Packar upp", "app_call_private_number": "Dolt nummer", + "app_call_ending_call": "Avsluta ett samtal", "tethering": "Internetdelning", "tethering_turn_off_question": "Stänga av Internetdelning?", "tethering_enable_question": "Du är ansluten till datorn.
Slå på Internetdelning?
(vissa funktioner kan vara inaktiverade)
", diff --git a/module-apps/application-call/data/CallAppStyle.hpp b/module-apps/application-call/data/CallAppStyle.hpp index c1f645a8a98f876a72d6984f7855edfa91e56ac8..12073bbedf04b77c37b19dbc283d71a470e96327 100644 --- a/module-apps/application-call/data/CallAppStyle.hpp +++ b/module-apps/application-call/data/CallAppStyle.hpp @@ -27,6 +27,7 @@ namespace callAppStyle inline constexpr auto speakeron = "app_call_speaker_on"; inline constexpr auto bluetooth = "app_call_bluetooth"; inline constexpr auto privateNumber = "app_call_private_number"; + inline constexpr auto endingcall = "app_call_ending_call"; } // namespace strings namespace numberLabel diff --git a/module-apps/application-call/model/CallModel.cpp b/module-apps/application-call/model/CallModel.cpp index d498a52512a93f11af20841aab52dbe3d08d2120..a30acb22e12fe8d44dccc6ee32f81a2cdbff2137 100644 --- a/module-apps/application-call/model/CallModel.cpp +++ b/module-apps/application-call/model/CallModel.cpp @@ -67,6 +67,24 @@ namespace app::call CellularServiceAPI::AnswerIncomingCall(application); } + bool CallModel::sendSms(const UTF8 &smsBody) + { + if (phoneNumber.getView().getEntered().empty() || smsBody.length() == 0) { + LOG_WARN("Number or sms body is empty"); + return false; + } + SMSRecord record; + record.number = phoneNumber.getView(); + record.body = smsBody; + record.type = SMSType::QUEUED; + record.date = std::time(nullptr); + + using db::query::SMSAdd; + const auto [succeed, _] = + DBServiceAPI::GetQuery(application, db::Interface::Name::SMS, std::make_unique(record)); + return succeed; + } + void CallModel::transmitDtmfTone(const uint32_t &digit) { CellularServiceAPI::TransmitDtmfTones(application, digit); diff --git a/module-apps/application-call/model/CallModel.hpp b/module-apps/application-call/model/CallModel.hpp index 40ea4d5f9d1bf9837938f0bb07fe0d3e164191fa..30ef1e880fff0b6c527e2e407c811f5ccb9bd21a 100644 --- a/module-apps/application-call/model/CallModel.hpp +++ b/module-apps/application-call/model/CallModel.hpp @@ -19,7 +19,8 @@ namespace app::call Outgoing, Active, Ended, - Rejected + Rejected, + Disconnecting }; inline auto c_str(app::call::CallState state) -> const char * @@ -37,6 +38,8 @@ namespace app::call return "Ended"; case CallState::Rejected: return "Ended"; + case CallState::Disconnecting: + return "Disconnecting"; } return ""; } @@ -55,6 +58,7 @@ namespace app::call virtual void hangUpCall() = 0; virtual void answerCall() = 0; + virtual bool sendSms(const UTF8 &smsBody) = 0; virtual void transmitDtmfTone(const uint32_t &digit) = 0; virtual void muteCall() = 0; virtual void unmuteCall() = 0; @@ -84,6 +88,7 @@ namespace app::call void hangUpCall() final; void answerCall() final; + bool sendSms(const UTF8 &smsBody) final; void transmitDtmfTone(const uint32_t &digit) final; void muteCall(); void unmuteCall(); diff --git a/module-apps/application-call/presenter/CallPresenter.cpp b/module-apps/application-call/presenter/CallPresenter.cpp index c906437bb79c924a47041d63fc13f7ec283400d0..194344d30513e44095e15cf877f254f7178cf13e 100644 --- a/module-apps/application-call/presenter/CallPresenter.cpp +++ b/module-apps/application-call/presenter/CallPresenter.cpp @@ -63,6 +63,10 @@ namespace app::call view->updateDuration(utils::translate(callAppStyle::strings::callended)); view->setCallEndedLayout(); break; + case app::call::CallState::Disconnecting: + view->updateDuration(utils::translate(callAppStyle::strings::endingcall)); + view->setCallEndedLayout(false); + break; case app::call::CallState::None: view->clearNavBar(); break; @@ -114,6 +118,14 @@ namespace app::call void CallWindowContract::Presenter::hangUpCall() { model->hangUpCall(); + model->setState(app::call::CallState::Disconnecting); + } + + void CallWindowContract::Presenter::sendSms(const UTF8 &smsBody) + { + if (not model->sendSms(smsBody)) { + LOG_ERROR("SMS sending failed!"); + } } bool CallWindowContract::Presenter::handleDigitButton(const uint32_t &digit) diff --git a/module-apps/application-call/presenter/CallPresenter.hpp b/module-apps/application-call/presenter/CallPresenter.hpp index 6891b0f2059aaba319639f8a4d5ef9e1ba249a73..1671cb251c11174d5a4d40f5b3d1267cd460c4eb 100644 --- a/module-apps/application-call/presenter/CallPresenter.hpp +++ b/module-apps/application-call/presenter/CallPresenter.hpp @@ -22,7 +22,7 @@ namespace app::call virtual void clearNavBar() = 0; virtual void setIncomingCallLayout(bool isValidCallerId) = 0; virtual void setActiveCallLayout() = 0; - virtual void setCallEndedLayout() = 0; + virtual void setCallEndedLayout(bool delayedClose = true) = 0; virtual void updateNumber(const UTF8 &text) = 0; virtual ~View() noexcept = default; @@ -48,6 +48,7 @@ namespace app::call void turnLoudspeakerOff(); void hangUpCall(); + void sendSms(const UTF8 &smsBody); utils::PhoneNumber getPhoneNumber(); private: diff --git a/module-apps/application-call/test/mock/CallPresenterMocks.hpp b/module-apps/application-call/test/mock/CallPresenterMocks.hpp index bebdca72c0605791a32889934f821c8e356b6018..13c99653791bf68f596ef1002ccc417f2eee412e 100644 --- a/module-apps/application-call/test/mock/CallPresenterMocks.hpp +++ b/module-apps/application-call/test/mock/CallPresenterMocks.hpp @@ -32,11 +32,11 @@ namespace app::call layoutShowed = LayoutShowed::Active; }; ; - void setCallEndedLayout() override + void setCallEndedLayout(bool delayedClose = true) override { layoutShowed = LayoutShowed::Ended; }; - ; + void updateNumber(const UTF8 &text) override { number = text; @@ -94,6 +94,10 @@ namespace app::call { answerCallCalled = true; }; + bool sendSms(const UTF8 &smsBody) override + { + return true; + } void transmitDtmfTone(const uint32_t &digit) override{}; void muteCall() override{}; void unmuteCall() override{}; diff --git a/module-apps/application-call/windows/CallWindow.cpp b/module-apps/application-call/windows/CallWindow.cpp index fcbe9338d0bfd14c4f60c678c9ff4d9751f28bb0..f7c10ed4f67d5a07b69377b65991791c4a216187 100644 --- a/module-apps/application-call/windows/CallWindow.cpp +++ b/module-apps/application-call/windows/CallWindow.cpp @@ -154,8 +154,9 @@ namespace gui { presenter->buildLayout(); - if (dynamic_cast(data) != nullptr) { + if (auto switchData = dynamic_cast(data); switchData != nullptr) { presenter->hangUpCall(); + presenter->sendSms(switchData->getText()); return; } } @@ -273,7 +274,7 @@ namespace gui setFocusItem(microphoneIcon); } - void CallWindow::setCallEndedLayout() + void CallWindow::setCallEndedLayout(bool delayedClose) { navBar->setActive(gui::nav_bar::Side::Left, false); navBar->setActive(gui::nav_bar::Side::Center, false); @@ -286,7 +287,9 @@ namespace gui iconsBox->resizeItems(); setFocusItem(nullptr); - connectTimerOnExit(); + if (delayedClose) { + connectTimerOnExit(); + } } void CallWindow::updateNumber(const UTF8 &text) diff --git a/module-apps/application-call/windows/CallWindow.hpp b/module-apps/application-call/windows/CallWindow.hpp index f969582345968dbb7b3b67f1a2f291392a09f480..2beab5f8fd6d84339161b9ed2ee8f9c5a3827db1 100644 --- a/module-apps/application-call/windows/CallWindow.hpp +++ b/module-apps/application-call/windows/CallWindow.hpp @@ -66,7 +66,7 @@ namespace gui void clearNavBar() override; void setIncomingCallLayout(bool isValidCallerId) override; void setActiveCallLayout() override; - void setCallEndedLayout() override; + void setCallEndedLayout(bool delayedClose = true) override; void updateNumber(const UTF8 &text) override; }; diff --git a/module-apps/application-messages/data/SMSdata.hpp b/module-apps/application-messages/data/SMSdata.hpp index 65c4aa828ef31acad3a9531f8f76256411e93a84..02f12f0d2d9201ecf6728dd0671c8a1e3970365d 100644 --- a/module-apps/application-messages/data/SMSdata.hpp +++ b/module-apps/application-messages/data/SMSdata.hpp @@ -86,7 +86,17 @@ class SMSSendTemplateRequest : public SMSRequest }; class SMSTemplateSent : public gui::SwitchData -{}; +{ + public: + explicit SMSTemplateSent(const UTF8 &text) : smsText(text){}; + auto getText() -> UTF8 + { + return smsText; + } + + private: + UTF8 smsText; +}; class SMSTextData : public gui::SwitchData { diff --git a/module-apps/application-messages/windows/SMSTemplatesWindow.cpp b/module-apps/application-messages/windows/SMSTemplatesWindow.cpp index a214775d565b607f5b4774108a6c0bc898898129..276db8b1db9f756389503c5f0ed66eb424e9d28f 100644 --- a/module-apps/application-messages/windows/SMSTemplatesWindow.cpp +++ b/module-apps/application-messages/windows/SMSTemplatesWindow.cpp @@ -76,13 +76,12 @@ namespace gui auto app = dynamic_cast(application); assert(app != nullptr); - auto phoneNumber = switchData->getPhoneNumber(); app->templatesCallback = [=](std::shared_ptr templ) { LOG_DEBUG("SMS template id = %" PRIu32 "sent", templ->ID); - app->sendSms(phoneNumber, templ->text); - app::manager::Controller::switchBack(app, - std::make_unique( - application->GetName(), std::make_unique())); + app::manager::Controller::switchBack( + app, + std::make_unique(application->GetName(), + std::make_unique(templ->text))); app->popCurrentWindow(); return true; }; diff --git a/module-services/service-cellular/ServiceCellular.cpp b/module-services/service-cellular/ServiceCellular.cpp index 8561bb104588d298dc617ee7c1728a0641d57722..456913c8424304586ce54646541273646ba38de3 100644 --- a/module-services/service-cellular/ServiceCellular.cpp +++ b/module-services/service-cellular/ServiceCellular.cpp @@ -1948,7 +1948,6 @@ auto ServiceCellular::handleDBNotificationMessage(db::NotificationMessage *msg) (msg->type == db::Query::Type::Create || msg->type == db::Query::Type::Update)) { priv->outSMSHandler.handleDBNotification(); - return std::make_shared(); } return std::make_shared(sys::ReturnCodes::Failure);