TizenRefApp-8157 Implement restoring of widget information after reboot 92/119392/6
authorSergii Kyryliuk <s.kyryliuk@partner.samsung.com>
Thu, 16 Mar 2017 16:33:40 +0000 (18:33 +0200)
committerSergii Kyryliuk <s.kyryliuk@partner.samsung.com>
Mon, 20 Mar 2017 11:05:38 +0000 (13:05 +0200)
Change-Id: I2d8fd87262f2a539a2aa0cf2535eec4900649d66
Signed-off-by: Sergii Kyryliuk <s.kyryliuk@partner.samsung.com>
alarm-widget/inc/AlarmWidget.h
alarm-widget/src/AlarmWidget.cpp

index 00408ff923256c0585a6eda02149939bf76f62c7..3cd9e66825d6257b2ff7f5230322ebdf39eb905a 100644 (file)
@@ -36,6 +36,7 @@ class AlarmWidget : public App::Widget
 {
 public:
        AlarmWidget();
+       virtual ~AlarmWidget() override;
 
 private:
        virtual void onCreate(bundle *content) override;
@@ -50,6 +51,7 @@ private:
 
        void onPickReply(app_control_h request, app_control_h reply, app_control_result_e result);
        void onCreateReply(app_control_h request, app_control_h reply, app_control_result_e result);
+       void onReply(const std::string &id);
        void setAlarm(Common::Model::Alarm *alarm);
 
        Evas_Object *m_Layout;
index 97f0d27d60515738c4596be834404d4cc9e4087e..3bcb691fe827a9813a38f3982cf960ce6de24e3c 100644 (file)
@@ -22,8 +22,8 @@
 #include "Common/Model/Alarm.h"
 #include "Common/Model/AlarmConsumer.h"
 #include "Ui/Window.h"
+#include "Utils/Bundle.h"
 #include "Utils/Callback.h"
-#include "Utils/Logger.h"
 
 #include "CommonPath.h"
 #include "WidgetLayout.h"
@@ -34,6 +34,7 @@ using namespace Model;
 using namespace Common;
 using namespace Common::Model;
 
+#define ALARM_ID_KEY "alarm_id"
 #define TIME_SIZE  40
 #define APP_CONTROL_MIME_ALARM "application/vnd.tizen.alarm"
 
@@ -42,10 +43,24 @@ AlarmWidget::AlarmWidget()
 {
 }
 
+AlarmWidget::~AlarmWidget()
+{
+       delete m_Alarm;
+}
+
 void AlarmWidget::onCreate(bundle *content)
 {
        elm_theme_extension_add(nullptr, App::getResourcePath(PATH_ALARM_CHECK_STYLE).c_str());
 
+       if (content) {
+               if (int alarmId = Utils::Bundle(content).getInt(ALARM_ID_KEY)) {
+                       AlarmConsumer::getInstance().getDataItem(alarmId, [this](AlarmConsumer::DataList dataList) {
+                               setAlarm(static_cast<Alarm *>(dataList.front()));
+                       });
+                       return;
+               }
+       }
+
        updateEmptyState();
 }
 
@@ -144,19 +159,22 @@ void AlarmWidget::onContentPressed(Evas_Object *obj, void *eventInfo)
 
 void AlarmWidget::onPickReply(app_control_h request, app_control_h reply, app_control_result_e result)
 {
-       std::string id = App::getStringExtraData(reply, APP_CONTROL_DATA_SELECTED);
-       AlarmConsumer::getInstance().getDataItem(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) {
-               setAlarm(static_cast<Alarm *>(dataList.front()));
-               updateEmptyState();
-       });
+       onReply(App::getStringExtraData(reply, APP_CONTROL_DATA_SELECTED));
 }
 
 void AlarmWidget::onCreateReply(app_control_h request, app_control_h reply, app_control_result_e result)
 {
-       std::string id = App::getStringExtraData(reply, APP_CONTROL_DATA_ID);
+       onReply(App::getStringExtraData(reply, APP_CONTROL_DATA_ID));
+}
+
+void AlarmWidget::onReply(const std::string &id)
+{
        AlarmConsumer::getInstance().getDataItem(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) {
                setAlarm(static_cast<Alarm *>(dataList.front()));
-               updateEmptyState();
+
+               Utils::Bundle bundle;
+               bundle.addInt(ALARM_ID_KEY, m_Alarm->getId());
+               saveContent(bundle.getBundle());
        });
 }
 
@@ -170,9 +188,15 @@ void AlarmWidget::setAlarm(Alarm *alarm)
                        delete widget->m_Alarm;
                        widget->m_Alarm = nullptr;
                        widget->updateEmptyState();
+
+                       Utils::Bundle bundle;
+                       bundle.addInt(ALARM_ID_KEY, 0);
+                       widget->saveContent(bundle.getBundle());
                }, this);
        }, this };
        m_Alarm->onUpdated() += { [this](int changes) {
                updateContentLayout(changes);
        }, this };
+
+       updateEmptyState();
 }