TizenRefApp-7977 Integrate AlarmProvider into AlarmsView 63/112763/1
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 2 Feb 2017 12:39:27 +0000 (14:39 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 2 Feb 2017 12:39:27 +0000 (14:39 +0200)
Change-Id: Ic326ea0c98b3863c3cbee7386e03e406a7418b59
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
alarm-app/inc/List/AlarmItem.h
alarm-app/inc/List/AlarmsView.h
alarm-app/src/List/AlarmItem.cpp
alarm-app/src/List/AlarmsView.cpp
lib-common/src/Common/Model/Alarm.cpp
lib-common/src/Common/Model/AlarmProvider.cpp

index af1f2dc88c567db0c6fbce333f27cb2e8582d7cc..5260f5f29699a49aa1be2c0136579b3f47b3d5bb 100644 (file)
@@ -32,7 +32,7 @@ namespace List
        class AlarmItem: public Ux::SelectItem
        {
        public:
-               explicit AlarmItem(Common::Model::Alarm *alarm);
+               explicit AlarmItem(Common::Model::Alarm &alarm);
 
        protected:
                /**
@@ -58,7 +58,7 @@ namespace List
        private:
                bool is24HourFormat() const;
 
-               Common::Model::Alarm *m_Alarm;
+               Common::Model::Alarm &m_Alarm;
        };
 }
 
index e751145534b4b3835a9ceca0df00a38ddd5f3055..f7795c170fc832cf474e9575fb02b5546d6ae13c 100644 (file)
@@ -17,6 +17,7 @@
 #ifndef LIST_ALARMS_VIEW_H
 #define LIST_ALARMS_VIEW_H
 
+#include "Common/Model/AlarmProvider.h"
 #include "Ux/SelectView.h"
 #include <system_settings.h>
 
@@ -27,23 +28,30 @@ namespace Ui
 
 namespace List
 {
+       class AlarmItem;
        class AlarmsView: public Ux::SelectView
        {
        public:
                AlarmsView();
                virtual ~AlarmsView() override;
 
+       private:
                virtual Evas_Object *onCreate(Evas_Object *parent) override;
                virtual void onCreated() override;
                virtual void onPageAttached(Ui::NavigatorPage *page) override;
                virtual void onNavigation(bool isCurrent) override;
 
                Evas_Object *createGenlist(Evas_Object *parent);
+               AlarmItem *createItem(::Model::DataItem &dataItem);
 
-       private:
+               void onAlarmInserted(::Model::DataItem &dataItem);
+               void onAlarmUpdated(AlarmItem *item, int changes);
+               void onAlarmDeleted(AlarmItem *item);
                void onFormatChanged(system_settings_key_e key);
 
                Ui::Genlist *m_Genlist;
+               Ui::GenItem *m_AddAlarmItem;
+               Common::Model::AlarmProvider m_Provider;
        };
 }
 
index 8974c880d98b899225a2eb99f15aa67d7471e553..ab6ab73b3ce54e52e5dc7620f2a6a89f3b35dbf4 100644 (file)
 using namespace Common::Model;
 using namespace List;
 
-AlarmItem::AlarmItem(Alarm *alarm)
+AlarmItem::AlarmItem(Alarm &alarm)
        : m_Alarm(alarm)
 {
 }
 
 Ux::SelectResult AlarmItem::getDefaultResult() const
 {
-       return { 0, m_Alarm };
+       return { 0, &m_Alarm };
 }
 
 Elm_Gen_Item_Class *AlarmItem::getItemClass() const
@@ -44,7 +44,7 @@ char *AlarmItem::getText(Evas_Object *parent, const char *part)
 {
        if (strcmp(part, "elm.text") == 0) {
                char buf[BUF_SIZE];
-               strftime(buf, sizeof(buf), is24HourFormat() ? "%H:%M" : "%I:%M %p", &m_Alarm->getDate());
+               strftime(buf, sizeof(buf), is24HourFormat() ? "%H:%M" : "%I:%M %p", &m_Alarm.getDate());
 
                return strdup(buf);
        } else if (strcmp(part, "elm.text.1") == 0) {
index 1cd0364f40fd2e1be01602a161300de04962629d..c65fead215f982e58656b1d3af1fa97becea5012 100644 (file)
@@ -30,7 +30,7 @@ using namespace List;
 using namespace std::placeholders;
 
 AlarmsView::AlarmsView()
-       : m_Genlist(nullptr)
+       : m_Genlist(nullptr), m_AddAlarmItem(nullptr)
 {
        System::Settings::addCallback(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
                        { std::bind(&AlarmsView::onFormatChanged, this, _1), this });
@@ -48,9 +48,14 @@ Evas_Object *AlarmsView::onCreate(Evas_Object *parent)
 
 void AlarmsView::onCreated()
 {
-       m_Genlist->insert(new TitleItem());
-       // TODO Here should be filled alarms from model
-       m_Genlist->insert(new AddAlarmItem());
+       m_Provider.onInserted() += { std::bind(&AlarmsView::onAlarmInserted, this, _1), this };
+       m_Provider.initialize([this] {
+               m_Genlist->insert(new TitleItem());
+               for (auto &&dataItem : m_Provider.getDataList()) {
+                       m_Genlist->insert(createItem(*dataItem));
+               }
+               m_Genlist->insert(m_AddAlarmItem = new AddAlarmItem());
+       });
 }
 
 void AlarmsView::onPageAttached(Ui::NavigatorPage *page)
@@ -74,6 +79,30 @@ Evas_Object *AlarmsView::createGenlist(Evas_Object *parent)
        return m_Genlist->getEvasObject();
 }
 
+AlarmItem *AlarmsView::createItem(::Model::DataItem &dataItem)
+{
+       auto item = new AlarmItem(static_cast<Alarm &>(dataItem));
+       dataItem.onUpdated() += { std::bind(&AlarmsView::onAlarmUpdated, this, item, _1), item };
+       dataItem.onDeleted() += { std::bind(&AlarmsView::onAlarmDeleted, this, item), item };
+       return item;
+}
+
+void AlarmsView::onAlarmInserted(::Model::DataItem &dataItem)
+{
+       m_Genlist->insert(createItem(dataItem), nullptr, m_AddAlarmItem);
+}
+
+void AlarmsView::onAlarmUpdated(AlarmItem *item, int changes)
+{
+       /* TODO: Use changes to update specific parts */
+       item->update("*", ELM_GENLIST_ITEM_FIELD_ALL);
+}
+
+void AlarmsView::onAlarmDeleted(AlarmItem *item)
+{
+       delete item;
+}
+
 void AlarmsView::onFormatChanged(system_settings_key_e key)
 {
        m_Genlist->update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
index ba9d6d3d5909d17cefabc781377367110af4a62b..3f7e394a8521ab5eebbb7e899af38bb91cde0e8e 100644 (file)
@@ -93,16 +93,18 @@ int Alarm::onUpdate(void *data)
        int changes = 0;
        Alarm &that = *(Alarm *) data;
 
-       if (mktime(&that.m_Date) != mktime(&m_Date)) {
+       if (mktime(&m_Date) != mktime(&that.m_Date)) {
+               m_Date = that.m_Date;
                changes |= ChangedDate;
        }
-       if (that.m_Repeat != m_Repeat) {
+       if (m_Repeat != that.m_Repeat) {
+               m_Repeat = that.m_Repeat;
                changes |= ChangedRepeat;
        }
-       if (that.m_IsEnabled != m_IsEnabled) {
+       if (m_IsEnabled != that.m_IsEnabled) {
+               m_IsEnabled = that.m_IsEnabled;
                changes |= ChangedEnabled;
        }
 
-       *this = std::move(that);
        return changes;
 }
index fe55ed2a6d5284c72116c0f3985167594b219b41..9476b46db1479e33dc4727469738ba0b355475fa 100644 (file)
@@ -65,7 +65,11 @@ void AlarmProvider::startUpdate()
                        }
                });
        }
+
        m_Changes.clear();
+       if (!m_ChangesPending) {
+               finishUpdate();
+       }
 }
 
 Alarm *AlarmProvider::findAlarm(int id)