Handle exceptions from popup/toast creation 43/123143/1
authorZofia Abramowska <z.abramowska@samsung.com>
Tue, 4 Apr 2017 15:36:34 +0000 (17:36 +0200)
committerZofia Abramowska <z.abramowska@samsung.com>
Tue, 4 Apr 2017 15:36:40 +0000 (17:36 +0200)
Return error when creating popup/toast fails

Change-Id: Ica628d41e23707d485ecf40a2f45d0d12c6da85f

src/agent/notification-daemon/ui/Popupper.cpp

index 955cea5a74ff633b3618082597338f3f3d0b6586..ce1e2b04c2782d0de50c1ff8f55681b91b9f1309 100644 (file)
@@ -169,16 +169,21 @@ void Popupper::show() {
 void Popupper::popupCheck(int popupId, const std::string &appId, const std::string &pkgId, const std::string &priv) {
     std::string profileName = getProfileName();
     PopupCheck *popup;
-    if (profileName[0] != 'w' && profileName[0] != 'W') {
-        // Not wearable
-        popup = new PopupCheckMobile(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
-    } else {
-        // Wearable
-        popup = new PopupCheckWearable(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
+    try {
+        if (profileName[0] != 'w' && profileName[0] != 'W') {
+            // Not wearable
+            popup = new PopupCheckMobile(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
+        } else {
+            // Wearable
+            popup = new PopupCheckWearable(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
+        }
+        popup->create();
+    } catch (const std::exception &e) {
+        ALOGE("Failed to create popup check : " << e.what());
+        m_popupResponseHandler(popupId, NResponseType::Error);
+        return;
     }
 
-    popup->create();
-
     m_answerablePtr.reset(new AnswerablePopupCheck(popup, m_popupResponseHandler));
     evas_object_smart_callback_add(popup->getAllowButton(), "clicked", &Popupper::allowPressedCb,
                                    m_answerablePtr.get());
@@ -192,16 +197,21 @@ void Popupper::popupCheck(int popupId, const std::string &appId, const std::stri
 void Popupper::popupLaunch(int popupId, const std::string &appId, const std::string &pkgId, const std::vector<std::string> &privs) {
     std::string profileName = getProfileName();
     Popup *popup;
-    if (profileName[0] != 'w' && profileName[0] != 'W') {
-        // Not wearable
-        popup = new PopupLaunchMobile(m_win, popupId, Po::createPopupLaunchMsg(appId, pkgId, privs));
-    } else {
-        // Wearable
-        popup = new PopupLaunchWearable(m_win, popupId, Po::createPopupLaunchMsg(appId, pkgId, privs));
+    try {
+        if (profileName[0] != 'w' && profileName[0] != 'W') {
+            // Not wearable
+            popup = new PopupLaunchMobile(m_win, popupId, Po::createPopupLaunchMsg(appId, pkgId, privs));
+        } else {
+            // Wearable
+            popup = new PopupLaunchWearable(m_win, popupId, Po::createPopupLaunchMsg(appId, pkgId, privs));
+        }
+        popup->create();
+    } catch (const std::exception &e) {
+        ALOGE("Failed to create popup launch : " << e.what());
+        m_popupResponseHandler(popupId, NResponseType::Error);
+        return;
     }
 
-    popup->create();
-
     m_answerablePtr.reset(new AnswerablePopupLaunch(popup, m_popupResponseHandler));
     evas_object_smart_callback_add(popup->getAllowButton(), "clicked", &Popupper::allowPressedCb,
                                    m_answerablePtr.get());
@@ -212,17 +222,25 @@ void Popupper::popupLaunch(int popupId, const std::string &appId, const std::str
     show();
 }
 void Popupper::toastDeny(int toastId, const std::string &appId, const std::string &pkgId, const std::string &priv) {
-    Toast *toast = new Toast(m_win, toastId, Po::createToastDenyMsg(appId, pkgId, priv));
-    toast->create();
-    m_elementPtr.reset(toast);
-
+    try {
+        Toast *toast = new Toast(m_win, toastId, Po::createToastDenyMsg(appId, pkgId, priv));
+        toast->create();
+        m_elementPtr.reset(toast);
+    } catch (const std::exception &e) {
+        ALOGE("Failed to create toast deny : " << e.what());
+        return;
+    }
     m_toastFinishedHandler(toastId);
 }
 void Popupper::toastFail(int toastId, const std::string &appId, const std::string &pkgId) {
-    Toast *toast = new Toast(m_win, toastId, Po::createToastFailMsg(appId, pkgId));
-    toast->create();
-    m_elementPtr.reset(toast);
-
+    try {
+        Toast *toast = new Toast(m_win, toastId, Po::createToastFailMsg(appId, pkgId));
+        toast->create();
+        m_elementPtr.reset(toast);
+    } catch (const std::exception &e) {
+        ALOGE("Failed to create toast fail : " << e.what());
+        return;
+    }
     m_toastFinishedHandler(toastId);
 }