From: Mu-Woong Lee Date: Thu, 3 Aug 2017 03:58:38 +0000 (+0900) Subject: trigger: add the skeleton of the class ContextItem, which is used to verify event... X-Git-Tag: submit/tizen/20170926.083539^2~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8711298394cba7acbd56295db587ec6bc3c83887;p=platform%2Fcore%2Fapi%2Fcontext.git trigger: add the skeleton of the class ContextItem, which is used to verify event and condition items Change-Id: I165bcaf612241c31699abb043249a180ab1f957a Signed-off-by: Mu-Woong Lee --- diff --git a/src/trigger/ContextItem.cpp b/src/trigger/ContextItem.cpp new file mode 100644 index 0000000..9568cae --- /dev/null +++ b/src/trigger/ContextItem.cpp @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2017 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 +#include +#include "PrivilegeChecker.h" +#include "ContextItem.h" + +#define URI(x) CTX_SCHED_URI_##x +#define NAME(x) CTX_SCHED_ATTR_NAME_##x +#define VALUE(x) CTX_SCHED_ATTR_VALUE_##x + +ContextItem::ContextItem(int cx) : + __context(cx) +{ +} + +bool ContextItem::allowed() +{ + return PrivilegeChecker::hasPrivilege(__getPrivilege()); +} + +bool ContextItem::isValid(ctx_sched_job_context_h jobContext) +{ + //TODO: Check if the context has all mandatory fields + return true; +} + +bool ContextItem::isValid(const std::string& attribute) +{ + //TODO: Check if the attribute is valid for this __context + return true; +} + +bool ContextItem::isValid(const std::string& attribute, int value) +{ + //TODO: Check if the attribute & value pair is valid for this __context + return true; +} + +bool ContextItem::isValid(const std::string& attribute, const std::string& value) +{ + //TODO: Check if the attribute & value pair is valid for this __context + return true; +} + +EventItem::EventItem(int event) : + ContextItem(event) +{ +} + +bool EventItem::deprecated() +{ + switch (__context) { + case CONTEXT_TRIGGER_EVENT_TIME: + case CONTEXT_TRIGGER_EVENT_POWER_SAVING_MODE: + case CONTEXT_TRIGGER_EVENT_CALL: + case CONTEXT_TRIGGER_EVENT_EMAIL: + case CONTEXT_TRIGGER_EVENT_MESSAGE: + return true; + default: + return false; + } +} + +const char* EventItem::getUri() +{ + static const std::map uriMap = { + {CONTEXT_TRIGGER_EVENT_TIME, CTX_SCHED_URI_PREFIX "event/time"}, + {CONTEXT_TRIGGER_EVENT_BATTERY, URI(BATTERY)}, + {CONTEXT_TRIGGER_EVENT_CHARGER, URI(CHARGER)}, + {CONTEXT_TRIGGER_EVENT_GPS, URI(GPS)}, + {CONTEXT_TRIGGER_EVENT_HEADPHONE, URI(EARJACK)}, + {CONTEXT_TRIGGER_EVENT_POWER_SAVING_MODE, URI(POWERSAVE)}, + {CONTEXT_TRIGGER_EVENT_USB, URI(USB)}, + {CONTEXT_TRIGGER_EVENT_WIFI, URI(WIFI)}, + {CONTEXT_TRIGGER_EVENT_CALL, CTX_SCHED_URI_PREFIX "state/call"}, + {CONTEXT_TRIGGER_EVENT_EMAIL, CTX_SCHED_URI_PREFIX "event/email"}, + {CONTEXT_TRIGGER_EVENT_MESSAGE, CTX_SCHED_URI_PREFIX "event/message"}, + {CONTEXT_TRIGGER_EVENT_CONTACTS, URI(CONTACTS_DB)}, + {CONTEXT_TRIGGER_EVENT_ACTIVITY_STATIONARY, URI(STATIONARY)}, + {CONTEXT_TRIGGER_EVENT_ACTIVITY_WALKING, URI(WALKING)}, + {CONTEXT_TRIGGER_EVENT_ACTIVITY_RUNNING, URI(RUNNING)}, + {CONTEXT_TRIGGER_EVENT_ACTIVITY_IN_VEHICLE, URI(IN_VEHICLE)}, + {CONTEXT_TRIGGER_EVENT_PLACE, URI(GEOFENCE)} + }; + + auto it = uriMap.find(__context); + + if (it == uriMap.end()) + return NULL; + + return it->second; +} + +const char* EventItem::__getPrivilege() +{ + if (CONTEXT_TRIGGER_EVENT_TIME == __context) + return "http://tizen.org/privilege/alarm.set"; + + if (CONTEXT_TRIGGER_EVENT_WIFI == __context) + return "http://tizen.org/privilege/network.get"; + + if (CONTEXT_TRIGGER_EVENT_CALL == __context) + return "http://tizen.org/privilege/telephony"; + + if (CONTEXT_TRIGGER_EVENT_MESSAGE == __context) + return "http://tizen.org/privilege/message.read"; + + if (CONTEXT_TRIGGER_EVENT_CONTACTS == __context) + return "http://tizen.org/privilege/contact.read"; + + if (CONTEXT_TRIGGER_EVENT_PLACE == __context) + return "http://tizen.org/privilege/location"; + + return NULL; +} + +ConditionItem::ConditionItem(int cond) : + ContextItem(cond) +{ +} + +bool ConditionItem::deprecated() +{ + switch (__context) { + case CONTEXT_TRIGGER_CONDITION_POWER_SAVING_MODE: + case CONTEXT_TRIGGER_CONDITION_CALL: + case CONTEXT_TRIGGER_CONDITION_APP_USE_FREQUENCY: + case CONTEXT_TRIGGER_CONDITION_COMMUNICATION_FREQUENCY: + case CONTEXT_TRIGGER_CONDITION_MUSIC_PLAYBACK_FREQUENCY: + case CONTEXT_TRIGGER_CONDITION_VIDEO_PLAYBACK_FREQUENCY: + return true; + default: + return false; + } +} + +const char* ConditionItem::getUri() +{ + static const std::map uriMap = { + {CONTEXT_TRIGGER_CONDITION_TIME, URI(TIME)}, + {CONTEXT_TRIGGER_CONDITION_BATTERY, URI(BATTERY)}, + {CONTEXT_TRIGGER_CONDITION_CHARGER, URI(CHARGER)}, + {CONTEXT_TRIGGER_CONDITION_GPS, URI(GPS)}, + {CONTEXT_TRIGGER_CONDITION_HEADPHONE, URI(EARJACK)}, + {CONTEXT_TRIGGER_CONDITION_POWER_SAVING_MODE, URI(POWERSAVE)}, + {CONTEXT_TRIGGER_CONDITION_USB, URI(USB)}, + {CONTEXT_TRIGGER_CONDITION_WIFI, URI(WIFI)}, + {CONTEXT_TRIGGER_CONDITION_CALL, CTX_SCHED_URI_PREFIX "state/call"}, + {CONTEXT_TRIGGER_CONDITION_APP_USE_FREQUENCY, CTX_SCHED_URI_PREFIX "stats/app"}, + {CONTEXT_TRIGGER_CONDITION_COMMUNICATION_FREQUENCY, CTX_SCHED_URI_PREFIX "stats/comm"}, + {CONTEXT_TRIGGER_CONDITION_MUSIC_PLAYBACK_FREQUENCY, CTX_SCHED_URI_PREFIX "stats/music"}, + {CONTEXT_TRIGGER_CONDITION_VIDEO_PLAYBACK_FREQUENCY, CTX_SCHED_URI_PREFIX "stats/video"} + }; + + auto it = uriMap.find(__context); + + if (it == uriMap.end()) + return NULL; + + return it->second; +} + +const char* ConditionItem::__getPrivilege() +{ + if (CONTEXT_TRIGGER_CONDITION_WIFI == __context) + return "http://tizen.org/privilege/network.get"; + + if (CONTEXT_TRIGGER_CONDITION_CALL == __context) + return "http://tizen.org/privilege/telephony"; + + if (CONTEXT_TRIGGER_CONDITION_APP_USE_FREQUENCY == __context) + return "http://tizen.org/privilege/apphistory.read"; + + if (CONTEXT_TRIGGER_CONDITION_COMMUNICATION_FREQUENCY == __context) + return "http://tizen.org/privilege/callhistory.read"; + + if (CONTEXT_TRIGGER_CONDITION_MUSIC_PLAYBACK_FREQUENCY == __context) + return "http://tizen.org/privilege/mediahistory.read"; + + if (CONTEXT_TRIGGER_CONDITION_VIDEO_PLAYBACK_FREQUENCY == __context) + return "http://tizen.org/privilege/mediahistory.read"; + + return NULL; +} diff --git a/src/trigger/ContextItem.h b/src/trigger/ContextItem.h new file mode 100644 index 0000000..088d6de --- /dev/null +++ b/src/trigger/ContextItem.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2017 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 __CONTEXT_TRIGGER_CONTEXT_ITEM_H__ +#define __CONTEXT_TRIGGER_CONTEXT_ITEM_H__ + +#include +#include + + +class ContextItem { +public: + virtual ~ContextItem() {} + + virtual bool deprecated() = 0; + virtual const char* getUri() = 0; + + bool allowed(); + bool isValid(ctx_sched_job_context_h jobContext); + bool isValid(const std::string& attribute); + bool isValid(const std::string& attribute, int value); + bool isValid(const std::string& attribute, const std::string& value); + +protected: + ContextItem(int cx); + + int __context; + +private: + virtual const char* __getPrivilege() = 0; +}; + + +class EventItem : public ContextItem { +public: + EventItem(int event); + + bool deprecated(); + const char* getUri(); + +private: + const char* __getPrivilege(); +}; + + +class ConditionItem : public ContextItem { +public: + ConditionItem(int cond); + + bool deprecated(); + const char* getUri(); + +private: + const char* __getPrivilege(); +}; + + +#endif /* __CONTEXT_TRIGGER_CONTEXT_ITEM_H__ */