From: Mu-Woong Lee Date: Thu, 21 Apr 2016 05:50:29 +0000 (+0900) Subject: Code cleanup: activity providers X-Git-Tag: submit/tizen/20160503.015801^2~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5c9d867b72e22db0723fa6c68557a6799129aea0;p=platform%2Fcore%2Fcontext%2Fcontext-provider.git Code cleanup: activity providers Change-Id: I652e9847753c61b53b78bcce436bb90923e9c0b4 Signed-off-by: Mu-Woong Lee --- diff --git a/src/activity/Activity.cpp b/src/activity/Activity.cpp new file mode 100644 index 0000000..faf864d --- /dev/null +++ b/src/activity/Activity.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 +#include "Activity.h" + +using namespace ctx; + +ActivityProvider::ActivityProvider(const char *subject, activity_type_e type) : + BasicProvider(subject), + __activityType(type), + __activityHandle(NULL) +{ +} + +ActivityProvider::~ActivityProvider() +{ + if (__activityHandle) + activity_release(__activityHandle); +} + +bool ActivityProvider::isSupported() +{ + return util::getSystemInfoBool("tizen.org/feature/sensor.activity_recognition"); +} + +void ActivityProvider::submitTriggerItem() +{ + registerTriggerItem(OPS_SUBSCRIBE, + "{\"Event\":{\"type\":\"string\", \"values\":[\"Detected\"]}}", + "{\"Accuracy\":{\"type\":\"string\", \"values\":[\"Low\", \"Normal\", \"High\"]}}" + ); +} + +void ActivityProvider::__updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData) +{ + IF_FAIL_VOID_TAG(error == ACTIVITY_ERROR_NONE, _E, "Error: %d", error); + + ActivityProvider *instance = static_cast(userData); + instance->__handleUpdate(activity, data, timestamp); +} + +void ActivityProvider::__handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp) +{ + IF_FAIL_VOID_TAG(activity == __activityType, _E, "Invalid activity: %d", activity); + + Json dataRead; + dataRead.set(NULL, CTX_ACTIVITY_EVENT, CTX_ACTIVITY_DETECTED); + + activity_accuracy_e accuracy = ACTIVITY_ACCURACY_LOW; + activity_get_accuracy(data, &accuracy); + + switch (accuracy) { + case ACTIVITY_ACCURACY_HIGH: + dataRead.set(NULL, CTX_ACTIVITY_ACCURACY, CTX_ACTIVITY_HIGH); + break; + case ACTIVITY_ACCURACY_MID: + dataRead.set(NULL, CTX_ACTIVITY_ACCURACY, CTX_ACTIVITY_NORMAL); + break; + default: + dataRead.set(NULL, CTX_ACTIVITY_ACCURACY, CTX_ACTIVITY_LOW); + break; + } + + publish(NULL, ERR_NONE, dataRead); +} + +int ActivityProvider::subscribe() +{ + IF_FAIL_RETURN(__activityHandle == NULL, ERR_NONE); + + activity_create(&__activityHandle); + IF_FAIL_RETURN_TAG(__activityHandle, ERR_OPERATION_FAILED, _E, "Memory allocation failed"); + + int ret = activity_start_recognition(__activityHandle, __activityType, __updateCb, this); + if (ret != ACTIVITY_ERROR_NONE) { + _E("Recognition starting failed"); + activity_release(__activityHandle); + __activityHandle = NULL; + return ERR_OPERATION_FAILED; + } + + return ERR_NONE; +} + +int ActivityProvider::unsubscribe() +{ + IF_FAIL_RETURN(__activityHandle, ERR_NONE); + + activity_stop_recognition(__activityHandle); + activity_release(__activityHandle); + __activityHandle = NULL; + + return ERR_NONE; +} diff --git a/src/activity/Activity.h b/src/activity/Activity.h index ab5be2e..c3c3dfe 100644 --- a/src/activity/Activity.h +++ b/src/activity/Activity.h @@ -14,23 +14,47 @@ * limitations under the License. */ -#ifndef _DEVICE_ACTIVITY_STATUS_H_ -#define _DEVICE_ACTIVITY_STATUS_H_ +#ifndef _CONTEXT_ACTIVITY_PROVIDER_H_ +#define _CONTEXT_ACTIVITY_PROVIDER_H_ -#include "ActivityBase.h" +#include +#include +#include #include "ActivityTypes.h" #define GENERATE_ACTIVITY_PROVIDER(actPrvd, actSubj, actType) \ - class actPrvd : public UserActivityBase { \ + class actPrvd : public ActivityProvider { \ public: \ - actPrvd() : UserActivityBase(actSubj, actType) {} \ + actPrvd() : ActivityProvider(actSubj, actType) {} \ }; \ namespace ctx { - GENERATE_ACTIVITY_PROVIDER(UserActivityStationary, USER_ACT_SUBJ_STATIONARY, ACTIVITY_STATIONARY); - GENERATE_ACTIVITY_PROVIDER(UserActivityWalking, USER_ACT_SUBJ_WALKING, ACTIVITY_WALK); - GENERATE_ACTIVITY_PROVIDER(UserActivityRunning, USER_ACT_SUBJ_RUNNING, ACTIVITY_RUN); - GENERATE_ACTIVITY_PROVIDER(UserActivityInVehicle, USER_ACT_SUBJ_IN_VEHICLE, ACTIVITY_IN_VEHICLE); + + class ActivityProvider : public BasicProvider { + public: + ActivityProvider(const char *subject, activity_type_e type); + virtual ~ActivityProvider(); + + int subscribe(); + int unsubscribe(); + + bool isSupported(); + void submitTriggerItem(); + + protected: + activity_type_e __activityType; + activity_h __activityHandle; + + private: + void __handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp); + static void __updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData); + }; + + + GENERATE_ACTIVITY_PROVIDER(StationaryActivityProvider, CTX_ACTIVITY_SUBJ_STATIONARY, ACTIVITY_STATIONARY); + GENERATE_ACTIVITY_PROVIDER(WalkingActivityProvider, CTX_ACTIVITY_SUBJ_WALKING, ACTIVITY_WALK); + GENERATE_ACTIVITY_PROVIDER(RunningActivityProvider, CTX_ACTIVITY_SUBJ_RUNNING, ACTIVITY_RUN); + GENERATE_ACTIVITY_PROVIDER(InVehicleActivityProvider, CTX_ACTIVITY_SUBJ_IN_VEHICLE, ACTIVITY_IN_VEHICLE); } -#endif // _DEVICE_ACTIVITY_STATUS_H_ +#endif // _CONTEXT_ACTIVITY_PROVIDER_H_ diff --git a/src/activity/ActivityBase.cpp b/src/activity/ActivityBase.cpp deleted file mode 100644 index b677b6e..0000000 --- a/src/activity/ActivityBase.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 -#include "ActivityTypes.h" -#include "ActivityBase.h" - -using namespace ctx; - -UserActivityBase::UserActivityBase(const char *subject, activity_type_e type) : - BasicProvider(subject), - __activityType(type), - __activityHandle(NULL) -{ -} - -UserActivityBase::~UserActivityBase() -{ - if (__activityHandle) - activity_release(__activityHandle); -} - -bool UserActivityBase::isSupported() -{ - return util::getSystemInfoBool("tizen.org/feature/sensor.activity_recognition"); -} - -void UserActivityBase::submitTriggerItem() -{ - registerTriggerItem(OPS_SUBSCRIBE, - "{\"Event\":{\"type\":\"string\", \"values\":[\"Detected\"]}}", - "{\"Accuracy\":{\"type\":\"string\", \"values\":[\"Low\", \"Normal\", \"High\"]}}" - ); -} - -void UserActivityBase::__updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData) -{ - IF_FAIL_VOID_TAG(error == ACTIVITY_ERROR_NONE, _E, "Error: %d", error); - - UserActivityBase *instance = static_cast(userData); - instance->__handleUpdate(activity, data, timestamp); -} - -void UserActivityBase::__handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp) -{ - IF_FAIL_VOID_TAG(activity == __activityType, _E, "Invalid activity: %d", activity); - - Json dataRead; - dataRead.set(NULL, USER_ACT_EVENT, USER_ACT_DETECTED); - - activity_accuracy_e accuracy = ACTIVITY_ACCURACY_LOW; - activity_get_accuracy(data, &accuracy); - - switch (accuracy) { - case ACTIVITY_ACCURACY_HIGH: - dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_HIGH); - break; - case ACTIVITY_ACCURACY_MID: - dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_NORMAL); - break; - default: - dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_LOW); - break; - } - - publish(NULL, ERR_NONE, dataRead); -} - -int UserActivityBase::subscribe() -{ - IF_FAIL_RETURN(__activityHandle == NULL, ERR_NONE); - - activity_create(&__activityHandle); - IF_FAIL_RETURN_TAG(__activityHandle, ERR_OPERATION_FAILED, _E, "Memory allocation failed"); - - int ret = activity_start_recognition(__activityHandle, __activityType, __updateCb, this); - if (ret != ACTIVITY_ERROR_NONE) { - _E("Recognition starting failed"); - activity_release(__activityHandle); - __activityHandle = NULL; - return ERR_OPERATION_FAILED; - } - - return ERR_NONE; -} - -int UserActivityBase::unsubscribe() -{ - IF_FAIL_RETURN(__activityHandle, ERR_NONE); - - activity_stop_recognition(__activityHandle); - activity_release(__activityHandle); - __activityHandle = NULL; - - return ERR_NONE; -} diff --git a/src/activity/ActivityBase.h b/src/activity/ActivityBase.h deleted file mode 100644 index 16235c6..0000000 --- a/src/activity/ActivityBase.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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 _DEVICE_ACTIVITY_STATUS_BASE_H_ -#define _DEVICE_ACTIVITY_STATUS_BASE_H_ - -#include -#include -#include "../shared/BasicProvider.h" - -namespace ctx { - - class UserActivityBase : public BasicProvider { - public: - UserActivityBase(const char *subject, activity_type_e type); - virtual ~UserActivityBase(); - - int subscribe(); - int unsubscribe(); - - bool isSupported(); - void submitTriggerItem(); - - protected: - activity_type_e __activityType; - activity_h __activityHandle; - - private: - void __handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp); - static void __updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData); - }; - -} - -#endif // _DEVICE_ACTIVITY_STATUS_BASE_H_ diff --git a/src/activity/ActivityTypes.h b/src/activity/ActivityTypes.h index 4562b7b..8a58776 100644 --- a/src/activity/ActivityTypes.h +++ b/src/activity/ActivityTypes.h @@ -14,23 +14,23 @@ * limitations under the License. */ -#ifndef _DEVICE_ACTIVITY_STATUS_TYPES_H_ -#define _DEVICE_ACTIVITY_STATUS_TYPES_H_ +#ifndef _CONTEXT_ACTIVITY_TYPES_H_ +#define _CONTEXT_ACTIVITY_TYPES_H_ -// Subject -#define USER_ACT_SUBJ_IN_VEHICLE "activity/in_vehicle" -#define USER_ACT_SUBJ_RUNNING "activity/running" -#define USER_ACT_SUBJ_STATIONARY "activity/stationary" -#define USER_ACT_SUBJ_WALKING "activity/walking" +/* Subject */ +#define CTX_ACTIVITY_SUBJ_IN_VEHICLE "activity/in_vehicle" +#define CTX_ACTIVITY_SUBJ_RUNNING "activity/running" +#define CTX_ACTIVITY_SUBJ_STATIONARY "activity/stationary" +#define CTX_ACTIVITY_SUBJ_WALKING "activity/walking" -// Data Key -#define USER_ACT_EVENT "Event" -#define USER_ACT_ACCURACY "Accuracy" +/* Data Key */ +#define CTX_ACTIVITY_EVENT "Event" +#define CTX_ACTIVITY_ACCURACY "Accuracy" -// Data Value -#define USER_ACT_DETECTED "Detected" -#define USER_ACT_LOW "Low" -#define USER_ACT_NORMAL "Normal" -#define USER_ACT_HIGH "High" +/* Data Value */ +#define CTX_ACTIVITY_DETECTED "Detected" +#define CTX_ACTIVITY_LOW "Low" +#define CTX_ACTIVITY_NORMAL "Normal" +#define CTX_ACTIVITY_HIGH "High" -#endif // _DEVICE_ACTIVITY_STATUS_TYPES_H_ +#endif /* _CONTEXT_ACTIVITY_TYPES_H_ */ diff --git a/src/shared/DeviceContextProvider.cpp b/src/shared/DeviceContextProvider.cpp index 5ff533d..f0a8d79 100644 --- a/src/shared/DeviceContextProvider.cpp +++ b/src/shared/DeviceContextProvider.cpp @@ -69,10 +69,10 @@ SO_EXPORT bool ctx::initDeviceContextProvider() registerProvider(DEVICE_ST_SUBJ_BATTERY, NULL); registerProvider(DEVICE_ST_SUBJ_PSMODE, NULL); - registerProvider(USER_ACT_SUBJ_STATIONARY, NULL); - registerProvider(USER_ACT_SUBJ_WALKING, NULL); - registerProvider(USER_ACT_SUBJ_RUNNING, NULL); - registerProvider(USER_ACT_SUBJ_IN_VEHICLE, NULL); + registerProvider(CTX_ACTIVITY_SUBJ_STATIONARY, NULL); + registerProvider(CTX_ACTIVITY_SUBJ_WALKING, NULL); + registerProvider(CTX_ACTIVITY_SUBJ_RUNNING, NULL); + registerProvider(CTX_ACTIVITY_SUBJ_IN_VEHICLE, NULL); #ifdef _MOBILE_ registerProvider(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);