From: Eugene Kurzberg Date: Thu, 15 Dec 2016 09:25:43 +0000 (+0200) Subject: TSAM-11647 App be hang when trying to cancel import contacts for the 2nd time X-Git-Tag: submit/tizen_3.0/20161215.135355^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=66c7f926ceccf6e32bbcac0ee463da4aeebca2fd;p=profile%2Fmobile%2Fapps%2Fnative%2Fphone-contacts.git TSAM-11647 App be hang when trying to cancel import contacts for the 2nd time Change-Id: I7b2e7029d7d6bf45bbb49feb8d4fff8ce2e12a6f Signed-off-by: Eugene Kurzberg --- diff --git a/lib-contacts/inc/Contacts/Settings/ImportController.h b/lib-contacts/inc/Contacts/Settings/ImportController.h index a8872ba..0725157 100644 --- a/lib-contacts/inc/Contacts/Settings/ImportController.h +++ b/lib-contacts/inc/Contacts/Settings/ImportController.h @@ -65,14 +65,9 @@ namespace Contacts virtual size_t getTotalCount() const override; private: - /** - * @brief Private destructor. Only parent class ProgressController should call it. - */ - virtual ~ImportController() override; - - void createCancelPopup(Evas_Object *parent); - bool onPopupContinue(); - bool onPopupCancel(); + void pause(); + void resume(); + void showCancelPopup(); virtual void onStart() override; virtual void onCanceled() override; @@ -80,8 +75,7 @@ namespace Contacts static bool onVcardParse(contacts_record_h record, void *data); - private: - Ui::Popup *m_CancelPopup; + Evas_Object *m_Parent; std::condition_variable m_ContinueCondition; std::string m_CurrentVcard; std::vector m_ImportedContacts; diff --git a/lib-contacts/src/Contacts/Settings/ImportController.cpp b/lib-contacts/src/Contacts/Settings/ImportController.cpp index 4afc90a..795082b 100644 --- a/lib-contacts/src/Contacts/Settings/ImportController.cpp +++ b/lib-contacts/src/Contacts/Settings/ImportController.cpp @@ -26,15 +26,10 @@ using namespace Contacts::Settings; ImportController::ImportController(Evas_Object *parent, const char *title, size_t totalCount, Vcards vcards, Records records) - : ProgressController(parent, title, totalCount), m_IsPaused(false), + : ProgressController(parent, title, totalCount), + m_Parent(parent), m_IsPaused(false), m_Records(std::move(records)), m_Vcards(std::move(vcards)) { - createCancelPopup(parent); -} - -ImportController::~ImportController() -{ - delete m_CancelPopup; } size_t ImportController::getTotalCount() const @@ -42,34 +37,38 @@ size_t ImportController::getTotalCount() const return m_ImportedContacts.size(); } -void ImportController::createCancelPopup(Evas_Object *parent) +void ImportController::pause() { - m_CancelPopup = new Ui::Popup(); - m_CancelPopup->create(parent); - m_CancelPopup->setTitle("IDS_PB_HEADER_CANCEL_IMPORTING_ABB"); - - m_CancelPopup->setCancelCallback(std::bind(&ImportController::onPopupContinue, this)); - m_CancelPopup->addButton("IDS_PB_BUTTON_CANCEL"); - m_CancelPopup->addButton("IDS_PB_BUTTON_OK_ABB2", std::bind(&ImportController::onPopupCancel, this)); + m_IsPaused = true; } -bool ImportController::onPopupContinue() +void ImportController::resume() { - evas_object_hide(m_CancelPopup->getEvasObject()); m_IsPaused = false; m_ContinueCondition.notify_one(); - - return false; } -bool ImportController::onPopupCancel() +void ImportController::showCancelPopup() { - cancel(); - m_IsPaused = false; - m_ContinueCondition.notify_one(); - m_CancelPopup = nullptr; + auto popup = new Ui::Popup(); + popup->create(m_Parent); + popup->setTitle("IDS_PB_HEADER_CANCEL_IMPORTING_ABB"); - return true; + char text[BUFFER_SIZE]; + snprintf(text, sizeof(text), _("IDS_PB_POP_CONTACTS_WILL_STOP_BEING_IMPORTED_FROM_PS"), m_CurrentVcard.c_str()); + popup->setText(text); + + popup->addButton("IDS_PB_BUTTON_CANCEL"); + popup->addButton("IDS_PB_BUTTON_OK_ABB2", [this] { + cancel(); + resume(); + return true; + }); + popup->setCancelCallback([this] { + resume(); + return true; + }); + popup->show(); } void ImportController::onStart() @@ -103,13 +102,8 @@ void ImportController::onCanceled() bool ImportController::onCancel() { - char text[BUFFER_SIZE] = { 0, }; - snprintf(text, sizeof(text), _("IDS_PB_POP_CONTACTS_WILL_STOP_BEING_IMPORTED_FROM_PS"), m_CurrentVcard.c_str()); - m_CancelPopup->setText(text); - - evas_object_show(m_CancelPopup->getEvasObject()); - m_IsPaused = true; - + pause(); + showCancelPopup(); return false; }