2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "humanactivitymonitor/humanactivitymonitor_instance.h"
23 #include "common/picojson.h"
24 #include "common/logger.h"
25 #include "common/platform_result.h"
26 #include "common/task-queue.h"
27 #include "humanactivitymonitor/humanactivitymonitor_manager.h"
30 namespace humanactivitymonitor {
32 using common::PlatformResult;
33 using common::ErrorCode;
34 using common::TaskQueue;
36 HumanActivityMonitorInstance::HumanActivityMonitorInstance() {
38 using std::placeholders::_1;
39 using std::placeholders::_2;
41 #define REGISTER_SYNC(c, x) \
42 RegisterSyncHandler(c, std::bind(&HumanActivityMonitorInstance::x, this, _1, _2));
43 REGISTER_SYNC("HumanActivityMonitorManager_getHumanActivityData",
44 HumanActivityMonitorManagerGetHumanActivityData);
45 REGISTER_SYNC("HumanActivityMonitorManager_start",
46 HumanActivityMonitorManagerStart);
47 REGISTER_SYNC("HumanActivityMonitorManager_stop",
48 HumanActivityMonitorManagerStop);
49 REGISTER_SYNC("HumanActivityMonitorManager_setAccumulativePedometerListener",
50 HumanActivityMonitorManagerSetAccumulativePedometerListener);
51 REGISTER_SYNC("HumanActivityMonitorManager_unsetAccumulativePedometerListener",
52 HumanActivityMonitorManagerUnsetAccumulativePedometerListener);
56 HumanActivityMonitorInstance::~HumanActivityMonitorInstance() {
60 PlatformResult HumanActivityMonitorInstance::Init() {
64 manager_ = std::make_shared<HumanActivityMonitorManager>();
65 const PlatformResult& result = manager_->Init();
67 LOGGER(ERROR) << "Error initializing manager: " << result.message();
73 return PlatformResult(ErrorCode::NO_ERROR);
76 #define CHECK_EXIST(args, name, out) \
77 if (!args.contains(name)) { \
78 LogAndReportError(PlatformResult(ErrorCode::TYPE_MISMATCH_ERR, \
79 name" is required argument"), &out); \
84 void HumanActivityMonitorInstance::HumanActivityMonitorManagerGetHumanActivityData(
85 const picojson::value& args, picojson::object& out) {
87 CHECK_EXIST(args, "type", out)
89 PlatformResult result = Init();
91 LogAndReportError(result, &out, ("Failed: Init()"));
95 auto get = [this, args]() -> void {
96 picojson::value response = picojson::value(picojson::object());
97 picojson::object& response_obj = response.get<picojson::object>();
98 response_obj["callbackId"] = args.get("callbackId");
100 picojson::value data = picojson::value();
101 PlatformResult result = manager_->GetHumanActivityData(
102 args.get("type").get<std::string>(),
106 ReportSuccess(data, response_obj);
108 LogAndReportError(result, &response_obj, ("Failed: manager_->GetHumanActivityData()"));
111 Instance::PostMessage(this, response.serialize().c_str());
114 TaskQueue::GetInstance().Async(get);
119 void HumanActivityMonitorInstance::HumanActivityMonitorManagerStart(
120 const picojson::value& args, picojson::object& out) {
122 CHECK_EXIST(args, "type", out)
124 PlatformResult result = Init();
126 LogAndReportError(result, &out, ("Failed: Init()"));
130 JsonCallback cb = [this, args](picojson::value* data) -> void {
132 LOGGER(ERROR) << "No data passed to json callback";
136 picojson::object& data_o = data->get<picojson::object>();
137 data_o["listenerId"] = args.get("listenerId");
139 Instance::PostMessage(this, data->serialize().c_str());
142 result = manager_->SetListener(args.get("type").get<std::string>(), cb);
146 LogAndReportError(result, &out, ("Failed: manager_->SetListener()"));
150 void HumanActivityMonitorInstance::HumanActivityMonitorManagerStop(
151 const picojson::value& args, picojson::object& out) {
153 CHECK_EXIST(args, "type", out)
155 PlatformResult result = Init();
157 LogAndReportError(result, &out, ("Failed: Init()"));
161 result = manager_->UnsetListener(args.get("type").get<std::string>());
165 LogAndReportError(result, &out, ("Failed: manager_->UnsetListener()"));
169 void HumanActivityMonitorInstance::HumanActivityMonitorManagerSetAccumulativePedometerListener(
170 const picojson::value& args, picojson::object& out) {
171 // TODO(r.galka) implement
174 void HumanActivityMonitorInstance::HumanActivityMonitorManagerUnsetAccumulativePedometerListener(
175 const picojson::value& args, picojson::object& out) {
176 // TODO(r.galka) implement
181 } // namespace humanactivitymonitor
182 } // namespace extension