TSAM-11647 App be hang when trying to cancel import contacts for the 2nd time 74/105074/1 submit/tizen_3.0/20161215.135355
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 15 Dec 2016 09:25:43 +0000 (11:25 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 15 Dec 2016 09:25:43 +0000 (11:25 +0200)
Change-Id: I7b2e7029d7d6bf45bbb49feb8d4fff8ce2e12a6f
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-contacts/inc/Contacts/Settings/ImportController.h
lib-contacts/src/Contacts/Settings/ImportController.cpp

index a8872ba..0725157 100644 (file)
@@ -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<int> m_ImportedContacts;
index 4afc90a..795082b 100644 (file)
@@ -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;
 }