summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandr Sapozhnik <a.sapozhnik@samsung.com>2017-03-14 14:08:30 +0200
committerAleksandr Sapozhnik <a.sapozhnik@samsung.com>2017-03-14 14:31:58 +0200
commit6c802c11b2dd74f8d3a3d83f0b754112b3609437 (patch)
tree6f8250fa9523e944cf00c46c8c35c7402a1d7543
parente2ffaea56b3a448d95e12269eaf752685af0884f (diff)
downloadalarm-6c802c11b2dd74f8d3a3d83f0b754112b3609437.tar.gz
alarm-6c802c11b2dd74f8d3a3d83f0b754112b3609437.tar.bz2
alarm-6c802c11b2dd74f8d3a3d83f0b754112b3609437.zip
TizenRefApp-8156 Integrate DataControlConsumer and DataControlProvider
Change-Id: I0dd60e354a3f4c98fdbf279926a591ef18eaac4e Signed-off-by: Aleksandr Sapozhnik <a.sapozhnik@samsung.com>
-rw-r--r--alarm-app/inc/List/AlarmsView.h4
-rw-r--r--alarm-app/src/Alert/AlertView.cpp6
-rw-r--r--alarm-app/src/Input/InputView.cpp6
-rw-r--r--alarm-app/src/List/AlarmItem.cpp2
-rw-r--r--alarm-app/src/List/AlarmsView.cpp7
-rw-r--r--alarm-app/src/OperationAlertController.cpp2
-rw-r--r--alarm-app/src/OperationEditController.cpp2
-rwxr-xr-xalarm-svc/inc/AlarmService.h4
-rwxr-xr-xalarm-svc/src/AlarmService.cpp4
-rw-r--r--alarm-widget/src/AlarmWidget.cpp8
-rw-r--r--lib-common/inc/Common/Bundle.h88
-rw-r--r--lib-common/inc/Common/Model/Alarm.h9
-rw-r--r--lib-common/inc/Common/Model/AlarmBuilder.h4
-rw-r--r--lib-common/inc/Common/Model/AlarmConsumer.h80
-rw-r--r--lib-common/inc/Common/Model/AlarmProvider.h62
-rw-r--r--lib-common/src/Common/Bundle.cpp85
-rw-r--r--lib-common/src/Common/Model/Alarm.cpp32
-rw-r--r--lib-common/src/Common/Model/AlarmBuilder.cpp5
-rw-r--r--lib-common/src/Common/Model/AlarmConsumer.cpp155
-rw-r--r--lib-common/src/Common/Model/AlarmProvider.cpp119
20 files changed, 57 insertions, 627 deletions
diff --git a/alarm-app/inc/List/AlarmsView.h b/alarm-app/inc/List/AlarmsView.h
index 7fb30b6..4052584 100644
--- a/alarm-app/inc/List/AlarmsView.h
+++ b/alarm-app/inc/List/AlarmsView.h
@@ -17,7 +17,7 @@
#ifndef LIST_ALARMS_VIEW_H
#define LIST_ALARMS_VIEW_H
-#include "Common/Model/AlarmProvider.h"
+#include "Model/DataControlProvider.h"
#include "Ux/SelectView.h"
#include <system_settings.h>
@@ -75,11 +75,11 @@ namespace List
void onItemLongpressed(Evas_Object *genlist, Elm_Object_Item *item);
bool onSelectFinished();
+ Model::DataControlProvider m_Provider;
Evas_Object *m_NoContents;
Evas_Object *m_ContentLayout;
Ui::Genlist *m_Genlist;
AddAlarmItem *m_AddAlarmItem;
- Common::Model::AlarmProvider m_Provider;
AddCallback m_OnAlarmAdded;
};
diff --git a/alarm-app/src/Alert/AlertView.cpp b/alarm-app/src/Alert/AlertView.cpp
index ba3ae95..ea1ab57 100644
--- a/alarm-app/src/Alert/AlertView.cpp
+++ b/alarm-app/src/Alert/AlertView.cpp
@@ -206,7 +206,7 @@ Eina_Bool AlertView::onCancel()
} else {
m_Alarm.dismiss();
}
- AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr);
+ AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr);
getPage()->close();
return EINA_FALSE;
@@ -215,14 +215,14 @@ Eina_Bool AlertView::onCancel()
void AlertView::onDismissClicked(Evas_Object *button, void *eventInfo)
{
m_Alarm.dismiss();
- AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr);
+ AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr);
getPage()->close();
}
void AlertView::onSnoozeClicked(Evas_Object *button, void *eventInfo)
{
m_Alarm.snooze();
- AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr);
+ AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr);
getPage()->close();
}
diff --git a/alarm-app/src/Input/InputView.cpp b/alarm-app/src/Input/InputView.cpp
index 7484ca7..2011c21 100644
--- a/alarm-app/src/Input/InputView.cpp
+++ b/alarm-app/src/Input/InputView.cpp
@@ -152,7 +152,7 @@ void InputView::saveAlarm()
return;
}
- AlarmConsumer::getInstance().saveAlarm(m_Alarm, [this](bool isSuccess, int alarmId) {
+ AlarmConsumer::getInstance().saveDataItem(m_Alarm, [this](bool isSuccess, int alarmId) {
if (!isSuccess) {
/* TODO: Show error message */
elm_object_disabled_set(m_Button, EINA_FALSE);
@@ -174,7 +174,7 @@ void InputView::saveAlarm()
void InputView::deleteAlarm()
{
elm_object_disabled_set(m_Button, EINA_TRUE);
- AlarmConsumer::getInstance().deleteAlarm(m_Alarm.getId(), [this](bool isSuccess, int alarmId) {
+ AlarmConsumer::getInstance().deleteDataItem(m_Alarm.getId(), [this](bool isSuccess, int alarmId) {
if (!isSuccess) {
/* TODO: Show error message */
elm_object_disabled_set(m_Button, EINA_FALSE);
@@ -191,7 +191,7 @@ void InputView::deleteAlarm()
void InputView::handleDuplicateAlarm()
{
if (m_Alarm.getId()) {
- AlarmConsumer::getInstance().deleteAlarm(m_Alarm.getId(), nullptr);
+ AlarmConsumer::getInstance().deleteDataItem(m_Alarm.getId(), nullptr);
}
char buffer[TOAST_BUFFER_SIZE];
diff --git a/alarm-app/src/List/AlarmItem.cpp b/alarm-app/src/List/AlarmItem.cpp
index ec988be..c53bf45 100644
--- a/alarm-app/src/List/AlarmItem.cpp
+++ b/alarm-app/src/List/AlarmItem.cpp
@@ -152,7 +152,7 @@ void AlarmItem::onSelected()
void AlarmItem::onAlarmEnabled(Evas_Object *check, void *eventInfo)
{
m_Alarm.setEnabled(elm_check_state_get(check));
- AlarmConsumer::getInstance().updateAlarm(m_Alarm, [this](bool isSuccess, int alarmId) {
+ AlarmConsumer::getInstance().updateDataItem(m_Alarm, [this](bool isSuccess, int alarmId) {
if (isSuccess && m_Alarm.isEnabled()) {
auto popup = new Common::AlarmSetPopup(m_Alarm);
popup->create(getParent()->getEvasObject());
diff --git a/alarm-app/src/List/AlarmsView.cpp b/alarm-app/src/List/AlarmsView.cpp
index d7ebd69..45a6e8d 100644
--- a/alarm-app/src/List/AlarmsView.cpp
+++ b/alarm-app/src/List/AlarmsView.cpp
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-#include "Common/Model/Alarm.h"
#include "Common/Model/AlarmConsumer.h"
#include "List/AddAlarmItem.h"
#include "List/AlarmItem.h"
@@ -44,8 +43,8 @@ using namespace List;
using namespace std::placeholders;
AlarmsView::AlarmsView()
- : m_NoContents(nullptr), m_ContentLayout(nullptr), m_Genlist(nullptr),
- m_AddAlarmItem(nullptr)
+ : m_Provider(AlarmConsumer::getInstance()), m_NoContents(nullptr),
+ m_ContentLayout(nullptr), m_Genlist(nullptr), m_AddAlarmItem(nullptr)
{
Strings strings{};
strings.selectAll = "WDS_MSG_OPT_SELECT_ALL_ABB";
@@ -284,7 +283,7 @@ void AlarmsView::onItemLongpressed(Evas_Object *genlist, Elm_Object_Item *item)
setSelectCallback([this](Ux::SelectResults results) {
for (auto &&result : results) {
auto alarm = (Alarm *)result.value.data;
- AlarmConsumer::getInstance().deleteAlarm(alarm->getId(), nullptr);
+ AlarmConsumer::getInstance().deleteDataItem(alarm->getId(), nullptr);
}
return onSelectFinished();
diff --git a/alarm-app/src/OperationAlertController.cpp b/alarm-app/src/OperationAlertController.cpp
index 09db8df..fd7bce6 100644
--- a/alarm-app/src/OperationAlertController.cpp
+++ b/alarm-app/src/OperationAlertController.cpp
@@ -26,7 +26,7 @@ using namespace Common::Model;
void OperationAlertController::onRequest(const char *operation, app_control_h request)
{
int id = App::getIntExtraData(request, APP_CONTROL_DATA_ID);
- AlarmConsumer::getInstance().getAlarm(id, [this](AlarmConsumer::DataList list) {
+ AlarmConsumer::getInstance().getDataItem(id, [this](AlarmConsumer::DataList list) {
auto alarm = static_cast<Alarm *>(list.front());
getNavigator()->navigateTo(new Alert::AlertView(*alarm));
delete alarm;
diff --git a/alarm-app/src/OperationEditController.cpp b/alarm-app/src/OperationEditController.cpp
index 9e71da2..3c8fd6f 100644
--- a/alarm-app/src/OperationEditController.cpp
+++ b/alarm-app/src/OperationEditController.cpp
@@ -24,7 +24,7 @@ using namespace Common::Model;
void OperationEditController::onRequest(const char *operation, app_control_h request)
{
int id = App::getIntExtraData(request, APP_CONTROL_DATA_ID);
- AlarmConsumer::getInstance().getAlarm(id, [this](AlarmConsumer::DataList dataList) {
+ AlarmConsumer::getInstance().getDataItem(id, [this](AlarmConsumer::DataList dataList) {
auto item = static_cast<Alarm *>(dataList.front());
getNavigator()->navigateTo(new Input::InputView(*item));
delete item;
diff --git a/alarm-svc/inc/AlarmService.h b/alarm-svc/inc/AlarmService.h
index cb3e6e0..cb3c2b0 100755
--- a/alarm-svc/inc/AlarmService.h
+++ b/alarm-svc/inc/AlarmService.h
@@ -18,7 +18,7 @@
#define ALARM_SERVICE_H
#include "App/Service.h"
-#include "Common/Bundle.h"
+#include "Utils/Bundle.h"
#include <data_control_provider.h>
#include <sqlite3.h>
@@ -40,7 +40,7 @@ private:
void onDeleteRequested(int requestId, data_control_h provider, const char *where);
static std::string formatWhere(const char *id);
- static Common::Bundle createNotiBundle(int id);
+ static Utils::Bundle createNotiBundle(int id);
sqlite3 *initDatabase();
bool initDataControl();
diff --git a/alarm-svc/src/AlarmService.cpp b/alarm-svc/src/AlarmService.cpp
index 5a04281..a5eb07e 100755
--- a/alarm-svc/src/AlarmService.cpp
+++ b/alarm-svc/src/AlarmService.cpp
@@ -198,9 +198,9 @@ std::string AlarmService::formatWhere(const char *id)
return std::string(COLUMN_ID " = ").append(id);
}
-Common::Bundle AlarmService::createNotiBundle(int id)
+Utils::Bundle AlarmService::createNotiBundle(int id)
{
- return std::move(Bundle().addInt(COLUMN_ID, id));
+ return std::move(Utils::Bundle().addInt(COLUMN_ID, id));
}
sqlite3 *AlarmService::initDatabase()
diff --git a/alarm-widget/src/AlarmWidget.cpp b/alarm-widget/src/AlarmWidget.cpp
index 34dddfc..97f0d27 100644
--- a/alarm-widget/src/AlarmWidget.cpp
+++ b/alarm-widget/src/AlarmWidget.cpp
@@ -111,13 +111,13 @@ void AlarmWidget::updateEmptyState()
void AlarmWidget::onCheckedPressed(Evas_Object *obj, void *eventInfo)
{
m_Alarm->setEnabled(elm_check_state_get(obj));
- AlarmConsumer::getInstance().updateAlarm(*m_Alarm, nullptr);
+ AlarmConsumer::getInstance().updateDataItem(*m_Alarm, nullptr);
elm_layout_signal_emit(m_Layout, m_Alarm->isEnabled() ? SIGNAL_ALARM_ENABLE : SIGNAL_ALARM_DISABLE, "");
}
void AlarmWidget::onCreatePressed(Evas_Object *obj, void *eventInfo)
{
- AlarmConsumer::getInstance().getAlarms([this](AlarmConsumer::DataList dataList) {
+ AlarmConsumer::getInstance().getDataItems([this](AlarmConsumer::DataList dataList) {
if (dataList.empty()) {
App::AppControl request(APP_CONTROL_OPERATION_ADD, APP_CONTROL_MIME_ALARM);
request.launch(makeCallbackWithLastParam(&AlarmWidget::onCreateReply), this);
@@ -145,7 +145,7 @@ 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().getAlarm(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) {
+ AlarmConsumer::getInstance().getDataItem(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) {
setAlarm(static_cast<Alarm *>(dataList.front()));
updateEmptyState();
});
@@ -154,7 +154,7 @@ void AlarmWidget::onPickReply(app_control_h request, app_control_h reply, app_co
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);
- AlarmConsumer::getInstance().getAlarm(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) {
+ AlarmConsumer::getInstance().getDataItem(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) {
setAlarm(static_cast<Alarm *>(dataList.front()));
updateEmptyState();
});
diff --git a/lib-common/inc/Common/Bundle.h b/lib-common/inc/Common/Bundle.h
deleted file mode 100644
index c0e2a2d..0000000
--- a/lib-common/inc/Common/Bundle.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef COMMON_BUNDLE_H
-#define COMMON_BUNDLE_H
-
-#include <bundle.h>
-#include <tizen.h>
-
-namespace Common
-{
- /**
- * @brief Bundle wrapper. Provides lifetime management and convenience
- * methods for adding and accessing stored values.
- */
- class EXPORT_API Bundle
- {
- public:
- Bundle();
-
- /**
- * @brief Wrap a pre-existing bundle object.
- * @param[in] bundle A bundle to wrap
- * @remark The bundle lifetime is not tied to the wrapper in this case.
- */
- explicit Bundle(bundle *bundle);
- Bundle(const Bundle &that) = delete;
- Bundle(Bundle &&that);
- virtual ~Bundle();
-
- Bundle &operator=(const Bundle &that) = delete;
- Bundle &operator=(Bundle &&that);
-
- /**
- * @return Wrapped bundle object.
- */
- bundle *getBundle() const;
-
- /**
- * @brief Get integer value from a bundle.
- * @param[in] key Value key
- * @return Integer value.
- */
- int getInt(const char *key) const;
-
- /**
- * @brief Get string value from a bundle.
- * @param[in] key Value key
- * @return string value.
- */
- const char *getStr(const char *key) const;
-
- /**
- * @brief Add integer value to a bundle.
- * @param[in] key Value key
- * @param[in] value Integer value
- * @return This object for method chaining.
- */
- Bundle &addInt(const char *key, int value);
-
- /**
- * @brief Add string value to a bundle.
- * @param[in] key Value key
- * @param[in] str String value
- * @return This object for method chaining.
- */
- Bundle &addStr(const char *key, const char *str);
-
- private:
- bundle *m_Bundle;
- bool m_IsOwner;
- };
-}
-
-#endif /* COMMON_BUNDLE_H */
diff --git a/lib-common/inc/Common/Model/Alarm.h b/lib-common/inc/Common/Model/Alarm.h
index e0561a2..7b9c612 100644
--- a/lib-common/inc/Common/Model/Alarm.h
+++ b/lib-common/inc/Common/Model/Alarm.h
@@ -19,7 +19,7 @@
#include "Model/DataItem.h"
#include <ctime>
-#include <data_control_noti.h>
+#include <data_control_types.h>
namespace Common
{
@@ -115,10 +115,7 @@ namespace Common
virtual void onStandalone(bool isStandalone) override;
virtual int onUpdate(void *data) override;
- void onDataChanged(data_control_h provider,
- data_control_data_change_type_e type, bundle *data);
- void onDataCallbackAdded(data_control_h provider,
- data_control_error_e result, int callbackId);
+ void onDataChanged(int id, data_control_data_change_type_e type);
tm m_Date;
int m_Repeat;
@@ -127,8 +124,6 @@ namespace Common
tm m_SnoozeDate;
int m_SnoozeCount;
bool m_IsSnoozed;
-
- int m_ChangeCallbackId;
};
}
}
diff --git a/lib-common/inc/Common/Model/AlarmBuilder.h b/lib-common/inc/Common/Model/AlarmBuilder.h
index 9d64a63..be02a23 100644
--- a/lib-common/inc/Common/Model/AlarmBuilder.h
+++ b/lib-common/inc/Common/Model/AlarmBuilder.h
@@ -17,7 +17,7 @@
#ifndef COMMON_MODEL_ALARM_BUILDER_H
#define COMMON_MODEL_ALARM_BUILDER_H
-#include "Common/Bundle.h"
+#include "Utils/Bundle.h"
#include <data_control_sql_cursor.h>
namespace Common
@@ -33,7 +33,7 @@ namespace Common
* @param[in] alarm Alarm to create bundle from
* @return Bundle containing alarm data.
*/
- static Bundle createBundle(const Alarm &alarm);
+ static Utils::Bundle createBundle(const Alarm &alarm);
/**
* @brief Create Alarm from result cursor.
diff --git a/lib-common/inc/Common/Model/AlarmConsumer.h b/lib-common/inc/Common/Model/AlarmConsumer.h
index 8f2d6b3..29d38eb 100644
--- a/lib-common/inc/Common/Model/AlarmConsumer.h
+++ b/lib-common/inc/Common/Model/AlarmConsumer.h
@@ -17,8 +17,7 @@
#ifndef COMMON_MODEL_ALARM_CONSUMER_H
#define COMMON_MODEL_ALARM_CONSUMER_H
-#include "Model/DataProvider.h"
-#include <data_control_sql.h>
+#include "Model/DataControlConsumer.h"
namespace Common
{
@@ -29,99 +28,34 @@ namespace Common
/**
* @brief Provides access to alarm database.
*/
- class EXPORT_API AlarmConsumer
+ class EXPORT_API AlarmConsumer : public ::Model::DataControlConsumer
{
public:
- typedef ::Model::DataProvider::DataList DataList;
-
- /**
- * @brief Called when requested Alarm(s) is received.
- * @param[in] dataList List of received Alarm objects
- */
- typedef std::function<void(DataList dataList)> GetCallback;
-
- /**
- * @brief Called when result of insert, update or delete is received.
- * @param[in] isSuccess Whether operation was successful
- * @param[in] alarmId Alarm Id if alarm was inserted
- */
- typedef std::function<void(bool isSuccess, int alarmId)> ResultCallback;
-
/**
* @return Consumer singleton instance.
*/
static AlarmConsumer &getInstance();
/**
- * @return Data control provider handle.
- */
- data_control_h getProvider() const;
-
- /**
- * @brief Retrieve alarm from database by ID.
- * @param[in] id Alarm ID
- * @param[in] callback Callback to be called when alarm is received
- */
- void getAlarm(int id, GetCallback callback);
-
- /**
* @brief Retrieve alarm from database that matches specified alarm by time and repeat.
* @param[in] alarm Alarm to compare against
* @param[in] callback Callback to be called when alarm is received
*/
void getAlarm(const Alarm &alarm, GetCallback callback);
+ protected:
/**
- * @brief Retrieve all alarms from database.
- * @param[in] callback Callback to be called when alarms are received
- */
- void getAlarms(GetCallback callback);
-
- /**
- * @brief Convenience wrapper to insert new or update existing alarm.
- * @see insertAlarm()
- * @see updateAlarm()
- */
- void saveAlarm(const Alarm &alarm, ResultCallback callback);
-
- /**
- * @brief Insert alarm into database.
- * @param[in] alarm Alarm to insert
- * @param[in] callback Callback to be called when operation is complete
- */
- void insertAlarm(const Alarm &alarm, ResultCallback callback);
-
- /**
- * @brief Update existing alarm in the database.
- * @param[in] alarm Alarm to update
- * @param[in] callback Callback to be called when operation is complete
+ * @see DataControlConsumer::createDataItem()
*/
- void updateAlarm(const Alarm &alarm, ResultCallback callback);
+ virtual ::Model::DataItem *createDataItem(result_set_cursor cursor) override;
/**
- * @brief Delete alarm from the database.
- * @param[in] id Alarm ID
- * @param[in] callback Callback to be called when operation is complete
+ * @see DataControlConsumer::createBundle()
*/
- void deleteAlarm(int id, ResultCallback callback);
+ virtual Utils::Bundle createBundle(const ::Model::DataItem &item) override;
private:
AlarmConsumer();
- ~AlarmConsumer();
-
- void selectAlarms(const char *where, GetCallback callback);
- void onSelectResponse(int requestId, data_control_h provider,
- result_set_cursor result, bool isSuccess, const char *error);
- void onInsertResponse(int requestId, data_control_h provider,
- long long id, bool isSuccess, const char *error);
- void onUpdateResponse(int requestId, data_control_h provider,
- bool isSuccess, const char *error);
- void onDeleteResponse(int requestId, data_control_h provider,
- bool isSuccess, const char *error);
-
- data_control_h m_Provider;
- std::vector<std::pair<int, ResultCallback>> m_ResultCallbacks;
- std::vector<std::pair<int, GetCallback>> m_GetCallbacks;
};
}
}
diff --git a/lib-common/inc/Common/Model/AlarmProvider.h b/lib-common/inc/Common/Model/AlarmProvider.h
deleted file mode 100644
index dc828e0..0000000
--- a/lib-common/inc/Common/Model/AlarmProvider.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef COMMON_MODEL_ALARM_PROVIDER_H
-#define COMMON_MODEL_ALARM_PROVIDER_H
-
-#include "Model/DataProvider.h"
-#include <data_control_noti.h>
-
-namespace Common
-{
- namespace Model
- {
- class Alarm;
- class AlarmConsumer;
- class EXPORT_API AlarmProvider : public ::Model::DataProvider
- {
- public:
- AlarmProvider();
- virtual ~AlarmProvider() override;
-
- private:
- struct ChangeInfo
- {
- int id;
- data_control_data_change_type_e type;
- };
-
- virtual void startInit() override;
- virtual void startUpdate() override;
-
- Alarm *findAlarm(int id);
- void applyChange(ChangeInfo change, ::Model::DataItem *newItem);
-
- void onDataChanged(data_control_h provider,
- data_control_data_change_type_e type, bundle *data);
- void onDataCallbackAdded(data_control_h provider,
- data_control_error_e result, int callbackId);
-
- AlarmConsumer &m_Consumer;
- int m_ChangeCallbackId;
-
- std::vector<ChangeInfo> m_Changes;
- int m_ChangesPending;
- };
- }
-}
-
-#endif /* COMMON_MODEL_ALARM_PROVIDER_H */
diff --git a/lib-common/src/Common/Bundle.cpp b/lib-common/src/Common/Bundle.cpp
deleted file mode 100644
index ed8481c..0000000
--- a/lib-common/src/Common/Bundle.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "Common/Bundle.h"
-
-using namespace Common;
-
-Bundle::Bundle()
- : m_Bundle(nullptr), m_IsOwner(true)
-{
- m_Bundle = bundle_create();
-}
-
-Bundle::Bundle(bundle *bundle)
- : m_Bundle(bundle), m_IsOwner(false)
-{
-}
-
-Bundle::Bundle(Bundle &&that)
- : m_Bundle(that.m_Bundle), m_IsOwner(that.m_IsOwner)
-{
- that.m_IsOwner = false;
-}
-
-Bundle::~Bundle()
-{
- if (m_IsOwner) {
- bundle_free(m_Bundle);
- }
-}
-
-Bundle &Bundle::operator=(Bundle &&that)
-{
- if (m_IsOwner) {
- bundle_free(m_Bundle);
- }
- m_Bundle = that.m_Bundle;
- m_IsOwner = that.m_IsOwner;
- that.m_IsOwner = false;
- return *this;
-}
-
-bundle *Bundle::getBundle() const
-{
- return m_Bundle;
-}
-
-int Bundle::getInt(const char *key) const
-{
- int *value = nullptr;
- bundle_get_byte(m_Bundle, key, (void **) &value, nullptr);
- return value ? *value : 0;
-}
-
-const char *Bundle::getStr(const char *key) const
-{
- char *str = nullptr;
- bundle_get_str(m_Bundle, key, &str);
- return str;
-}
-
-Bundle &Bundle::addInt(const char *key, int value)
-{
- bundle_add_byte(m_Bundle, key, &value, sizeof(value));
- return *this;
-}
-
-Bundle &Bundle::addStr(const char *key, const char *str)
-{
- bundle_add_str(m_Bundle, key, str);
- return *this;
-}
diff --git a/lib-common/src/Common/Model/Alarm.cpp b/lib-common/src/Common/Model/Alarm.cpp
index cf023de..855418b 100644
--- a/lib-common/src/Common/Model/Alarm.cpp
+++ b/lib-common/src/Common/Model/Alarm.cpp
@@ -15,11 +15,7 @@
*/
#include "Common/Model/Alarm.h"
-#include "Common/Model/AlarmDb.h"
-#include "Common/Bundle.h"
#include "Common/Model/AlarmConsumer.h"
-#include "Utils/Callback.h"
-#include "Utils/Logger.h"
#define DEFAULT_TIME 6, 0
#define SNOOZE_TIME 5 * 60
@@ -28,17 +24,18 @@
#define DAY_SECONDS 60 * 60 * 24
using namespace Common::Model;
+using namespace std::placeholders;
Alarm::Alarm()
: m_Repeat(0), m_IsEnabled(true), m_SnoozeDate{0},
- m_SnoozeCount(0), m_IsSnoozed(false), m_ChangeCallbackId(0)
+ m_SnoozeCount(0), m_IsSnoozed(false)
{
setTime(DEFAULT_TIME);
}
Alarm::~Alarm()
{
- data_control_remove_data_change_cb(AlarmConsumer::getInstance().getProvider(), m_ChangeCallbackId);
+ AlarmConsumer::getInstance().onDataItemChanged() -= this;
}
Alarm::Alarm(const Alarm &that)
@@ -177,28 +174,21 @@ void Alarm::resetSnooze()
void Alarm::onStandalone(bool isStandalone)
{
- data_control_h provider = AlarmConsumer::getInstance().getProvider();
if (isStandalone) {
- int err = data_control_add_data_change_cb(provider,
- makeCallbackWithLastParam(&Alarm::onDataChanged), this,
- makeCallbackWithLastParam(&Alarm::onDataCallbackAdded), this,
- &m_ChangeCallbackId);
- WARN_IF_ERR(err, "data_control_add_data_change_cb() failed.");
+ AlarmConsumer::getInstance().onDataItemChanged() += { std::bind(&Alarm::onDataChanged, this, _1, _2), this };
} else {
- data_control_remove_data_change_cb(provider, m_ChangeCallbackId);
- m_ChangeCallbackId = 0;
+ AlarmConsumer::getInstance().onDataItemChanged() -= this;
}
}
-void Alarm::onDataChanged(data_control_h provider,
- data_control_data_change_type_e type, bundle *data)
+void Alarm::onDataChanged(int id, data_control_data_change_type_e type)
{
- if (Bundle(data).getInt(COLUMN_ID) != getId()) {
+ if (id != getId()) {
return;
}
if (type == DATA_CONTROL_DATA_CHANGE_SQL_UPDATE) {
- AlarmConsumer::getInstance().getAlarm(getId(), [this](AlarmConsumer::DataList dataList) {
+ AlarmConsumer::getInstance().getDataItem(getId(), [this](AlarmConsumer::DataList dataList) {
update(dataList.front());
delete dataList.front();
});
@@ -207,12 +197,6 @@ void Alarm::onDataChanged(data_control_h provider,
}
}
-void Alarm::onDataCallbackAdded(data_control_h provider,
- data_control_error_e result, int callbackId)
-{
- WARN_IF_ERR(result, "data_control_add_data_change_cb() failed.");
-}
-
int Alarm::onUpdate(void *data)
{
int changes = 0;
diff --git a/lib-common/src/Common/Model/AlarmBuilder.cpp b/lib-common/src/Common/Model/AlarmBuilder.cpp
index 12655d3..55a8e52 100644
--- a/lib-common/src/Common/Model/AlarmBuilder.cpp
+++ b/lib-common/src/Common/Model/AlarmBuilder.cpp
@@ -22,12 +22,11 @@
#define NAME_BUFFER_SIZE 32
-using namespace Common;
using namespace Common::Model;
-Bundle AlarmBuilder::createBundle(const Alarm &alarm)
+Utils::Bundle AlarmBuilder::createBundle(const Alarm &alarm)
{
- Bundle bundle;
+ Utils::Bundle bundle;
const tm &date = alarm.getDate();
const tm &snoozeDate = alarm.getSnoozeDate();
diff --git a/lib-common/src/Common/Model/AlarmConsumer.cpp b/lib-common/src/Common/Model/AlarmConsumer.cpp
index 59a7f40..40bf45c 100644
--- a/lib-common/src/Common/Model/AlarmConsumer.cpp
+++ b/lib-common/src/Common/Model/AlarmConsumer.cpp
@@ -19,175 +19,48 @@
#include "Common/Model/AlarmBuilder.h"
#include "Common/Model/AlarmDb.h"
-#include "Utils/Callback.h"
-#include "Utils/Logger.h"
-#include "Utils/Range.h"
-
#define PROVIDER_ID "http://alarm.tizen.org/datacontrol/provider/alarm"
#define WHERE_BUFFER_SIZE 60
-using namespace Common;
using namespace Common::Model;
namespace
{
- template <typename T, typename... A>
- void sendResponse(T &callbacks, int requestId, A... args)
- {
- for (auto it = callbacks.begin(); it != callbacks.end(); ++it) {
- if (it->first == requestId) {
- if (it->second) {
- it->second(std::move(args)...);
- }
- callbacks.erase(it);
- break;
- }
- }
- }
+ const char *columnList[] = {
+ COLUMN_ID,
+ COLUMN_DATE,
+ COLUMN_REPEAT,
+ COLUMN_ENABLED,
+ COLUMN_SNOOZE_DATE,
+ COLUMN_SNOOZE_COUNT
+ };
}
AlarmConsumer::AlarmConsumer()
- : m_Provider(nullptr)
+ : DataControlConsumer(PROVIDER_ID, TABLE_ALARMS, columnList)
{
- data_control_sql_create(&m_Provider);
- data_control_sql_set_provider_id(m_Provider, PROVIDER_ID);
- data_control_sql_set_data_id(m_Provider, TABLE_ALARMS);
-
- data_control_sql_response_cb cbs;
- cbs.select_cb = makeCallbackWithLastParam(&AlarmConsumer::onSelectResponse);
- cbs.insert_cb = makeCallbackWithLastParam(&AlarmConsumer::onInsertResponse);
- cbs.update_cb = makeCallbackWithLastParam(&AlarmConsumer::onUpdateResponse);
- cbs.delete_cb = makeCallbackWithLastParam(&AlarmConsumer::onDeleteResponse);
-
- int err = data_control_sql_register_response_cb(m_Provider, &cbs, this);
- WARN_IF_ERR(err, "data_control_sql_register_response_cb() failed.");
}
-
-AlarmConsumer::~AlarmConsumer()
-{
- data_control_sql_destroy(m_Provider);
-}
-
AlarmConsumer &AlarmConsumer::getInstance()
{
static AlarmConsumer instance;
return instance;
}
-data_control_h AlarmConsumer::getProvider() const
-{
- return m_Provider;
-}
-
-void AlarmConsumer::getAlarm(int id, GetCallback callback)
-{
- std::string where;
- if (id) {
- where.append(COLUMN_ID " = " )
- .append(std::to_string(id));
- }
-
- selectAlarms(!where.empty() ? where.c_str() : nullptr, std::move(callback));
-}
-
void AlarmConsumer::getAlarm(const Alarm &alarm, GetCallback callback)
{
const tm &date = alarm.getDate();
char where[WHERE_BUFFER_SIZE];
snprintf(where, sizeof(where), COLUMN_TIME " = %d AND " COLUMN_REPEAT " = %d AND " COLUMN_ID " <> %d",
date.tm_hour * 60 + date.tm_min, alarm.getRepeat(), alarm.getId());
- selectAlarms(where, std::move(callback));
-}
-
-void AlarmConsumer::getAlarms(GetCallback callback)
-{
- getAlarm(0, std::move(callback));
-}
-
-void AlarmConsumer::saveAlarm(const Alarm &alarm, ResultCallback callback)
-{
- if (alarm.getId() == 0) {
- insertAlarm(alarm, std::move(callback));
- } else {
- updateAlarm(alarm, std::move(callback));
- }
-}
-
-void AlarmConsumer::insertAlarm(const Alarm &alarm, ResultCallback callback)
-{
- int requestId = 0;
- int err = data_control_sql_insert(m_Provider,
- AlarmBuilder::createBundle(alarm).getBundle(), &requestId);
-
- WARN_IF_ERR(err, "data_control_sql_insert() failed.");
- m_ResultCallbacks.push_back({ requestId, std::move(callback)} );
-}
-
-void AlarmConsumer::updateAlarm(const Alarm &alarm, ResultCallback callback)
-{
- int requestId = 0;
- int err = data_control_sql_update(m_Provider,
- AlarmBuilder::createBundle(alarm).getBundle(),
- std::to_string(alarm.getId()).c_str(), &requestId);
-
- WARN_IF_ERR(err, "data_control_sql_update() failed.");
- m_ResultCallbacks.push_back({ requestId, std::move(callback)} );
-}
-
-void AlarmConsumer::deleteAlarm(int id, ResultCallback callback)
-{
- int requestId = 0;
- int err = data_control_sql_delete(m_Provider, std::to_string(id).c_str(), &requestId);
-
- WARN_IF_ERR(err, "data_control_sql_delete() failed.");
- m_ResultCallbacks.push_back({ requestId, std::move(callback)} );
-}
-
-void AlarmConsumer::selectAlarms(const char *where, GetCallback callback)
-{
- static const char *columns[] = {
- COLUMN_ID,
- COLUMN_DATE,
- COLUMN_REPEAT,
- COLUMN_ENABLED,
- COLUMN_SNOOZE_DATE,
- COLUMN_SNOOZE_COUNT
- };
-
- int requestId = 0;
- int err = data_control_sql_select(m_Provider, (char **) columns, Utils::count(columns),
- where, COLUMN_DATE, &requestId);
-
- WARN_IF_ERR(err, "data_control_sql_select() failed.");
- m_GetCallbacks.push_back({ requestId, std::move(callback)} );
-}
-
-void AlarmConsumer::onSelectResponse(int requestId, data_control_h provider,
- result_set_cursor result, bool isSuccess, const char *error)
-{
- DataList list;
- int err = data_control_sql_step_first(result);
- while (err == DATA_CONTROL_ERROR_NONE) {
- list.push_back(AlarmBuilder::createAlarm(result));
- err = data_control_sql_step_next(result);
- }
- sendResponse(m_GetCallbacks, requestId, std::move(list));
-}
-
-void AlarmConsumer::onInsertResponse(int requestId, data_control_h provider,
- long long id, bool isSuccess, const char *error)
-{
- sendResponse(m_ResultCallbacks, requestId, isSuccess, id);
+ selectDataItems(where, std::move(callback));
}
-void AlarmConsumer::onUpdateResponse(int requestId, data_control_h provider,
- bool isSuccess, const char *error)
+::Model::DataItem *AlarmConsumer::createDataItem(result_set_cursor cursor)
{
- sendResponse(m_ResultCallbacks, requestId, isSuccess, -1);
+ return AlarmBuilder::createAlarm(cursor);
}
-void AlarmConsumer::onDeleteResponse(int requestId, data_control_h provider,
- bool isSuccess, const char *error)
+Utils::Bundle AlarmConsumer::createBundle(const ::Model::DataItem &item)
{
- sendResponse(m_ResultCallbacks, requestId, isSuccess, -1);
+ return AlarmBuilder::createBundle(static_cast<const Alarm &>(item));
}
diff --git a/lib-common/src/Common/Model/AlarmProvider.cpp b/lib-common/src/Common/Model/AlarmProvider.cpp
deleted file mode 100644
index 9476b46..0000000
--- a/lib-common/src/Common/Model/AlarmProvider.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2017 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "Common/Model/AlarmProvider.h"
-#include "Common/Model/AlarmConsumer.h"
-#include "Common/Model/AlarmDb.h"
-#include "Common/Model/Alarm.h"
-#include "Common/Bundle.h"
-
-#include "Utils/Callback.h"
-#include "Utils/Logger.h"
-
-using namespace Common;
-using namespace Common::Model;
-using namespace std::placeholders;
-
-AlarmProvider::AlarmProvider()
- : m_Consumer(AlarmConsumer::getInstance()),
- m_ChangeCallbackId(0), m_ChangesPending(0)
-{
-}
-
-AlarmProvider::~AlarmProvider()
-{
- data_control_remove_data_change_cb(m_Consumer.getProvider(),
- m_ChangeCallbackId);
-}
-
-void AlarmProvider::startInit()
-{
- m_Consumer.getAlarms(std::bind(&AlarmProvider::finishInit, this, _1));
- int err = data_control_add_data_change_cb(m_Consumer.getProvider(),
- makeCallbackWithLastParam(&AlarmProvider::onDataChanged), this,
- makeCallbackWithLastParam(&AlarmProvider::onDataCallbackAdded), this,
- &m_ChangeCallbackId);
- WARN_IF_ERR(err, "data_control_add_data_change_cb() failed.");
-}
-
-void AlarmProvider::startUpdate()
-{
- for (auto &&change : m_Changes) {
- if (change.type == DATA_CONTROL_DATA_CHANGE_SQL_DELETE) {
- applyChange(change, nullptr);
- continue;
- }
-
- ++m_ChangesPending;
- m_Consumer.getAlarm(change.id, [this, change](DataList dataList) {
- applyChange(change, dataList.front());
- if (!--m_ChangesPending) {
- finishUpdate();
- }
- });
- }
-
- m_Changes.clear();
- if (!m_ChangesPending) {
- finishUpdate();
- }
-}
-
-Alarm *AlarmProvider::findAlarm(int id)
-{
- for (auto &&dataItem : getDataList()) {
- auto alarm = static_cast<Alarm *>(dataItem);
- if (alarm->getId() == id) {
- return alarm;
- }
- }
- return nullptr;
-}
-
-void AlarmProvider::applyChange(ChangeInfo change, ::Model::DataItem *newItem)
-{
- switch (change.type) {
- case DATA_CONTROL_DATA_CHANGE_SQL_INSERT:
- insertDataItem(newItem);
- break;
- case DATA_CONTROL_DATA_CHANGE_SQL_UPDATE:
- if (auto alarm = findAlarm(change.id)) {
- alarm->update(newItem);
- }
- delete newItem;
- break;
- case DATA_CONTROL_DATA_CHANGE_SQL_DELETE:
- if (auto alarm = findAlarm(change.id)) {
- deleteDataItem(*alarm);
- }
- break;
- default:
- break;
- }
-}
-
-void AlarmProvider::onDataChanged(data_control_h provider,
- data_control_data_change_type_e type, bundle *data)
-{
- m_Changes.push_back({ Bundle(data).getInt(COLUMN_ID), type });
- update();
-}
-
-void AlarmProvider::onDataCallbackAdded(data_control_h provider,
- data_control_error_e result, int callbackId)
-{
- WARN_IF_ERR(result, "data_control_add_data_change_cb() failed.");
-}